Name: series-workflow8b9gj Phase: Failed StartedAt: 2026-09-10 18:02:04 +0000 UTC FinishedAt: 2026-09-10 18:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b9gj[0] Phase: Succeeded StartedAt: 2026-09-10 18:02:04 +0000 UTC FinishedAt: 2026-09-10 18:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b9gj[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 18:02:04 +0000 UTC FinishedAt: 2026-09-10 18:04:09 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBzdG1tYWMgKFN5bm9wc3lzIERlc2lnbldhcmUgLyBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgTUFDKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLykuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIHBoeXNpY2FsIFNvQyBhbmQgUENJZSBFdGhlcm5ldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgZm9yIGFtZDY0LiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMTQ2ZjNhZGQyNjRiNWI3MzE1YjgzZTVlNzk1NDkyMDI5YjI5OWEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTg6MDM6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuaW5kZXggNzU4MmZjYTYzNzQxOS4uMGEwMDQ5MDgzMmYzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuQEAgLTQxOSw2ICYjNDM7NDE5LDE3IEBAIGludCBzdG1tYWNfc2V0X2Nsa190eF9yYXRlKHZvaWQgKmJzcF9wcml2LCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcbiBcbiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCBcdTAwMjZcdTAwMjYgIXByaXYtXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX3hkcF9pc19lbmFibGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4gXHRyZXR1cm4gISFwcml2LVx1MDAzZXhkcF9wcm9nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCA1ZmU3ZTk1ZmRkMzQ1Li43ZjVhZGExMTMyYzQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuQEAgLTYwMSw3ICYjNDM7NjAxLDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX2dldF9yeF9od3RzdGFtcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBkbWFfZGVzYyAqcCxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiYjNDM7c3RhdGljIGludCBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdGJvb2wgeG1hYyA9IGR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSk7XG4gXHR1MzIgc2VjX2luYyA9IDA7XG5AQCAtNjI1LDcgJiM0Mzs2MjUsNyBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0ICovXG4gXHR0ZW1wID0gKHU2NCkodGVtcCBcdTAwM2NcdTAwM2MgMzIpO1xuIFx0cHJpdi1cdTAwM2VkZWZhdWx0X2FkZGVuZCA9IGRpdl91NjQodGVtcCwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmF0ZSk7XG4tXHRzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQpO1xuJiM0MztcdHJldHVybiBzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQpO1xuIH1cbiBcbiAvKipcbkBAIC02NTMsNyAmIzQzOzY1Myw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0dTMyIHRzX21hc3Rlcl9lbiA9IDA7XG4gXHR1MzIgdHNfZXZlbnRfZW4gPSAwO1xuIFxuLVx0aWYgKCEocHJpdi1cdTAwM2VkbWFfY2FwLnRpbWVfc3RhbXAgfHwgcHJpdi1cdTAwM2VhZHZfdHMpKSB7XG4mIzQzO1x0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtObyBzdXBwb3J0IGZvciBIVyB0aW1lIHN0YW1waW5nXCYjMzQ7KTtcbiBcdFx0cHJpdi1cdTAwM2Vod3RzX3R4X2VuID0gMDtcbiBcdFx0cHJpdi1cdTAwM2Vod3RzX3J4X2VuID0gMDtcbkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRpZiAoIShwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LVx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKVxuJiM0MztcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdCpjb25maWcgPSBwcml2LVx1MDAzZXRzdGFtcF9jb25maWc7XG5AQCAtODY1LDMyICYjNDM7ODY1LDMyIEBAIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfdHN0YW1wX2NvdW50ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0ICAgICAgdTMyIHN5c3RpbWVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgbm93O1xuLVxuLVx0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yYXRlKSB7XG4tXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O0ludmFsaWQgUFRQIGNsb2NrIHJhdGVcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0c3RtbWFjX2NvbmZpZ19od190c3RhbXBpbmcocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCBzeXN0aW1lX2ZsYWdzKTtcbiBcdHByaXYtXHUwMDNlc3lzdGltZV9mbGFncyA9IHN5c3RpbWVfZmxhZ3M7XG4gXG4tXHRzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XG4mIzQzO1x0cmV0ID0gc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogaW5pdGlhbGl6ZSBzeXN0ZW0gdGltZSAqL1xuIFx0a3RpbWVfZ2V0X3JlYWxfdHM2NChcdTAwMjZub3cpO1xuIFxuIFx0LyogbG93ZXIgMzIgYml0cyBvZiB0dl9zZWMgYXJlIHNhZmUgdW50aWwgeTIxMDYgKi9cbi1cdHN0bW1hY19pbml0X3N5c3RpbWUocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCAodTMyKW5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtXHUwMDNlcHRwYWRkciwgKHUzMilub3cudHZfc2VjLFxuJiM0MztcdFx0XHRcdCAgIG5vdy50dl9uc2VjKTtcbiB9XG4gXG4gLyoqXG4gICogc3RtbWFjX2luaXRfdGltZXN0YW1waW5nIC0gaW5pdGlhbGlzZSB0aW1lc3RhbXBpbmdcbiAgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tICogRGVzY3JpcHRpb246IHRoaXMgaXMgdG8gdmVyaWZ5IGlmIHRoZSBIVyBzdXBwb3J0cyB0aGUgUFRQdjEgb3IgUFRQdjIuXG4tICogVGhpcyBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXG4tICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgcHRwIGRyaXZlci5cbiYjNDM7ICogRGVzY3JpcHRpb246IGNvbmZpZ3VyZSB0aGUgUFRQIHJlZmVyZW5jZSBjbG9jayBhbmQgaW5pdGlhbGlzZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogdGltZXN0YW1wIGNvdW50ZXIsIHRoZW4gZGV0ZWN0IHdoaWNoIHRpbWVzdGFtcGluZyBtb2RlcyB0aGUgSFcgc3VwcG9ydHMuXG4mIzQzOyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBmb3JcbiYjNDM7ICogcmVnaXN0ZXJpbmcgdGhlIFBUUCBjbG9jayBkcml2ZXIuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIHRpbWVzdGFtcCBjb3VudGVyXG4mIzQzOyAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZC5cbiAgKi9cbiBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuQEAgLTkwMCwxMSAmIzQzOzkwMCw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcHRwX2Nsa19mcmVxX2NvbmZpZylcbiBcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXB0cF9jbGtfZnJlcV9jb25maWcocHJpdik7XG4gXG4tXHRpZiAoIShwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LVx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKSB7XG4tXHRcdG5ldGRldl9pbmZvKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtQVFAgbm90IHN1cHBvcnRlZCBieSBIV1xcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdHJldCA9IHN0bW1hY19pbml0X3RzdGFtcF9jb3VudGVyKHByaXYsIFNUTU1BQ19IV1RTX0FDVElWRSB8XG4gXHRcdFx0XHRcdCAgICAgICBQVFBfVENSX1RTQ0ZVUERUKTtcbiBcdGlmIChyZXQpIHtcbkBAIC05MzcsMjIgJiM0Mzs5MzIsMzkgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHN0bW1hY19zZXR1cF9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXR1cF9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuJiM0MztcdFx0bmV0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXYsIFwmIzM0O1BUUCBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldixcbiBcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQVFAgcmVmZXJlbmNlIGNsb2NrOiAlcGVcXG5cJiMzNDssXG4gXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdGlmIChzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdikgPT0gMClcbi1cdFx0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XHRyZXQgPSBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN0bW1hY19yZWxlYXNlX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuJiM0MztcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0c3RtbWFjX3B0cF91bnJlZ2lzdGVyKHByaXYpO1xuIFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4gfVxuQEAgLTQxNjEsMTAgJiM0Mzs0MTczLDEyIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBIdyBzZXR1cCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdFx0Z290byBpbml0X2Vycm9yO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHN0bW1hY19zZXR1cF9wdHAocHJpdik7XG4mIzQzO1x0cmV0ID0gc3RtbWFjX3NldHVwX3B0cChwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBwdHBfZXJyb3I7XG4gXG4gXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcbiBcbkBAIC00MTg5LDcgJiM0Mzs0MjAzLDEwIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRocnRpbWVyX2NhbmNlbChcdTAwMjZwcml2LVx1MDAzZWRtYV9jb25mLnR4X3F1ZXVlW2NoYW5dLnR4dGltZXIpO1xuIFxuIFx0c3RtbWFjX3JlbGVhc2VfcHRwKHByaXYpO1xuLWluaXRfZXJyb3I6XG4mIzQzO3B0cF9lcnJvcjpcbiYjNDM7XHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuJiM0MztcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBmYWxzZSk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNzY4NSw5ICYjNDM7NzcwMiw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG4gXHQvKiBJbiBDb2Fyc2UgbW9kZSwgd2UgY2FuIHVzZSBhIHNtYWxsZXIgc3Vic2Vjb25kIGluY3JlbWVudCwgbGV0JiMzOTtzXG4gXHQgKiByZWNvbmZpZ3VyZSB0aGUgc3lzdGltZSwgc3Vic2Vjb25kIGluY3JlbWVudCBhbmQgYWRkZW5kLlxuIFx0ICovXG4tXHRzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHN0bW1hY19kbF90c19jb2Fyc2VfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLFxuQEAgLTgzMjcsMTMgJiM0Mzs4MzQyLDE0IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldCA9IHN0bW1hY19od19zZXR1cChuZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IEh3IHNldHVwIGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuLVx0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdFx0cnRubF91bmxvY2soKTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuIFx0fVxuIFxuLVx0c3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xuJiM0MztcdGlmIChzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuJiM0MztcdFx0cmV0ID0gc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBlcnJvcl9zdG9wX2RtYTtcbiYjNDM7XHR9XG4gXG4gXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcbiBcdHBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi1cdTAwM2VwaHlsaW5rKTtcbkBAIC04MzU3LDYgJiM0Mzs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycm9yX3N0b3BfZG1hOlxuJiM0MztcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4mIzQzO1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbiYjNDM7ZXJyb3JfdW5sb2NrOlxuJiM0MztcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX3Jlc3VtZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xuaW5kZXggNjEyOGVkMWJkNTIxYS4uZGNmY2U1MWIyODg2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xuQEAgLTk1OSw3ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzdG1tYWNfcGx0ZnJfbm9pcnFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXG4gXHRpZiAoIXByaXYtXHUwMDNld29sb3B0cykge1xuIFx0XHQvKiBEaXNhYmxlIGNsb2NrIGluIGNhc2Ugb2YgUFdNIGlzIG9mZiAqL1xuLVx0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbiYjNDM7XHRcdGlmIChzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbiYjNDM7XHRcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4gXG4gXHRcdHJldCA9IHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTk4NCw2ICYjNDM7OTg1LDkgQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzdG1tYWNfcGx0ZnJfbm9pcnFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0XHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgc3RtbWFjIChTeW5vcHN5cyBEZXNpZ25XYXJlIC8gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQykgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8pLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBwaHlzaWNhbCBTb0MgYW5kIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGZvciBhbWQ2NC4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjE0NmYzYWRkMjY0YjViNzMxNWI4M2U1ZTc5NTQ5MjAyOWIyOTlhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE4OjAzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaAppbmRleCA3NTgyZmNhNjM3NDE5Li4wYTAwNDkwODMyZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaApAQCAtNDE5LDYgJiM0Mzs0MTksMTcgQEAgaW50IHN0bW1hY19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXYsIHN0cnVjdCBjbGsgKmNsa190eF9pLAogCiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7ZG1hX2NhcC50aW1lX3N0YW1wICZhbXA7JmFtcDsgIXByaXYtJmd0O2RtYV9jYXAuYXRpbWVfc3RhbXApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yYXRlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX3hkcF9pc19lbmFibGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKIAlyZXR1cm4gISFwcml2LSZndDt4ZHBfcHJvZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDVmZTdlOTVmZGQzNDUuLjdmNWFkYTExMzJjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtNjAxLDcgJiM0Mzs2MDEsNyBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3J4X2h3dHN0YW1wKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IGRtYV9kZXNjICpwLAogCX0KIH0KIAotc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0MztzdGF0aWMgaW50IHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJYm9vbCB4bWFjID0gZHdtYWNfaXNfeG1hYyhwcml2LSZndDtwbGF0LSZndDtjb3JlX3R5cGUpOwogCXUzMiBzZWNfaW5jID0gMDsKQEAgLTYyNSw3ICYjNDM7NjI1LDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkgKi8KIAl0ZW1wID0gKHU2NCkodGVtcCAmbHQ7Jmx0OyAzMik7CiAJcHJpdi0mZ3Q7ZGVmYXVsdF9hZGRlbmQgPSBkaXZfdTY0KHRlbXAsIHByaXYtJmd0O3BsYXQtJmd0O2Nsa19wdHBfcmF0ZSk7Ci0Jc3RtbWFjX2NvbmZpZ19hZGRlbmQocHJpdiwgcHJpdi0mZ3Q7cHRwYWRkciwgcHJpdi0mZ3Q7ZGVmYXVsdF9hZGRlbmQpOwomIzQzOwlyZXR1cm4gc3RtbWFjX2NvbmZpZ19hZGRlbmQocHJpdiwgcHJpdi0mZ3Q7cHRwYWRkciwgcHJpdi0mZ3Q7ZGVmYXVsdF9hZGRlbmQpOwogfQogCiAvKioKQEAgLTY1Myw3ICYjNDM7NjUzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJdTMyIHRzX21hc3Rlcl9lbiA9IDA7CiAJdTMyIHRzX2V2ZW50X2VuID0gMDsKIAotCWlmICghKHByaXYtJmd0O2RtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LSZndDthZHZfdHMpKSB7CiYjNDM7CWlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtObyBzdXBwb3J0IGZvciBIVyB0aW1lIHN0YW1waW5nJiMzNDspOwogCQlwcml2LSZndDtod3RzX3R4X2VuID0gMDsKIAkJcHJpdi0mZ3Q7aHd0c19yeF9lbiA9IDA7CkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoIShwcml2LSZndDtkbWFfY2FwLnRpbWVfc3RhbXAgfHwgcHJpdi0mZ3Q7ZG1hX2NhcC5hdGltZV9zdGFtcCkpCiYjNDM7CWlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCSpjb25maWcgPSBwcml2LSZndDt0c3RhbXBfY29uZmlnOwpAQCAtODY1LDMyICYjNDM7ODY1LDMyIEBAIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfdHN0YW1wX2NvdW50ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCQkJCSAgICAgIHUzMiBzeXN0aW1lX2ZsYWdzKQogewogCXN0cnVjdCB0aW1lc3BlYzY0IG5vdzsKLQotCWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yYXRlKSB7Ci0JCW5ldGRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgUFRQIGNsb2NrIHJhdGUmIzM0Oyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KJiM0MzsJaW50IHJldDsKIAogCXN0bW1hY19jb25maWdfaHdfdHN0YW1waW5nKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsIHN5c3RpbWVfZmxhZ3MpOwogCXByaXYtJmd0O3N5c3RpbWVfZmxhZ3MgPSBzeXN0aW1lX2ZsYWdzOwogCi0Jc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpOwomIzQzOwlyZXQgPSBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogaW5pdGlhbGl6ZSBzeXN0ZW0gdGltZSAqLwogCWt0aW1lX2dldF9yZWFsX3RzNjQoJmFtcDtub3cpOwogCiAJLyogbG93ZXIgMzIgYml0cyBvZiB0dl9zZWMgYXJlIHNhZmUgdW50aWwgeTIxMDYgKi8KLQlzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsICh1MzIpbm93LnR2X3NlYywgbm93LnR2X25zZWMpOwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsICh1MzIpbm93LnR2X3NlYywKJiM0MzsJCQkJICAgbm93LnR2X25zZWMpOwogfQogCiAvKioKICAqIHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyAtIGluaXRpYWxpc2UgdGltZXN0YW1waW5nCiAgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlCi0gKiBEZXNjcmlwdGlvbjogdGhpcyBpcyB0byB2ZXJpZnkgaWYgdGhlIEhXIHN1cHBvcnRzIHRoZSBQVFB2MSBvciBQVFB2Mi4KLSAqIFRoaXMgaXMgZG9uZSBieSBsb29raW5nIGF0IHRoZSBIVyBjYXAuIHJlZ2lzdGVyLgotICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgcHRwIGRyaXZlci4KJiM0MzsgKiBEZXNjcmlwdGlvbjogY29uZmlndXJlIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBpbml0aWFsaXNlIHRoZSBoYXJkd2FyZQomIzQzOyAqIHRpbWVzdGFtcCBjb3VudGVyLCB0aGVuIGRldGVjdCB3aGljaCB0aW1lc3RhbXBpbmcgbW9kZXMgdGhlIEhXIHN1cHBvcnRzLgomIzQzOyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBmb3IKJiM0MzsgKiByZWdpc3RlcmluZyB0aGUgUFRQIGNsb2NrIGRyaXZlci4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSB0aW1lc3RhbXAgY291bnRlcgomIzQzOyAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZC4KICAqLwogc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewpAQCAtOTAwLDExICYjNDM7OTAwLDYgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCWlmIChwcml2LSZndDtwbGF0LSZndDtwdHBfY2xrX2ZyZXFfY29uZmlnKQogCQlwcml2LSZndDtwbGF0LSZndDtwdHBfY2xrX2ZyZXFfY29uZmlnKHByaXYpOwogCi0JaWYgKCEocHJpdi0mZ3Q7ZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtJmd0O2RtYV9jYXAuYXRpbWVfc3RhbXApKSB7Ci0JCW5ldGRldl9pbmZvKHByaXYtJmd0O2RldiwgJiMzNDtQVFAgbm90IHN1cHBvcnRlZCBieSBIV1xuJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCiAJcmV0ID0gc3RtbWFjX2luaXRfdHN0YW1wX2NvdW50ZXIocHJpdiwgU1RNTUFDX0hXVFNfQUNUSVZFIHwKIAkJCQkJICAgICAgIFBUUF9UQ1JfVFNDRlVQRFQpOwogCWlmIChyZXQpIHsKQEAgLTkzNywyMiAmIzQzOzkzMiwzOSBAQCBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHN0bW1hY19zZXR1cF9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAomIzQzOwlpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhwcml2LSZndDtkZXYsICYjMzQ7UFRQIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O3BsYXQtJmd0O2Nsa19wdHBfcmVmKTsKLQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKIAkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LAogCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQVFAgcmVmZXJlbmNlIGNsb2NrOiAlcGVcbiYjMzQ7LAogCQkJICAgIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlpZiAoc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpID09IDApCi0JCXN0bW1hY19wdHBfcmVnaXN0ZXIocHJpdik7CiYjNDM7CXJldCA9IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhwcml2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtJmd0O3BsYXQtJmd0O2Nsa19wdHBfcmVmKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHN0bW1hY19yZWxlYXNlX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiYjNDM7CWlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3RtbWFjX3B0cF91bnJlZ2lzdGVyKHByaXYpOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtwbGF0LSZndDtjbGtfcHRwX3JlZik7CiB9CkBAIC00MTYxLDEwICYjNDM7NDE3MywxMiBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlyZXQgPSBzdG1tYWNfaHdfc2V0dXAoZGV2KTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDslczogSHcgc2V0dXAgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwotCQlnb3RvIGluaXRfZXJyb3I7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KIAotCXN0bW1hY19zZXR1cF9wdHAocHJpdik7CiYjNDM7CXJldCA9IHN0bW1hY19zZXR1cF9wdHAocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHB0cF9lcnJvcjsKIAogCXN0bW1hY19pbml0X2NvYWxlc2NlKHByaXYpOwogCkBAIC00MTg5LDcgJiM0Mzs0MjAzLDEwIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlocnRpbWVyX2NhbmNlbCgmYW1wO3ByaXYtJmd0O2RtYV9jb25mLnR4X3F1ZXVlW2NoYW5dLnR4dGltZXIpOwogCiAJc3RtbWFjX3JlbGVhc2VfcHRwKHByaXYpOwotaW5pdF9lcnJvcjoKJiM0MztwdHBfZXJyb3I6CiYjNDM7CXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7CiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc2ODUsOSAmIzQzOzc3MDIsNyBAQCBzdGF0aWMgaW50IHN0bW1hY19kbF90c19jb2Fyc2Vfc2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLAogCS8qIEluIENvYXJzZSBtb2RlLCB3ZSBjYW4gdXNlIGEgc21hbGxlciBzdWJzZWNvbmQgaW5jcmVtZW50LCBsZXQmIzM5O3MKIAkgKiByZWNvbmZpZ3VyZSB0aGUgc3lzdGltZSwgc3Vic2Vjb25kIGluY3JlbWVudCBhbmQgYWRkZW5kLgogCSAqLwotCXN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTsKLQotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpOwogfQogCiBzdGF0aWMgaW50IHN0bW1hY19kbF90c19jb2Fyc2VfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLApAQCAtODMyNywxMyAmIzQzOzgzNDIsMTQgQEAgaW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldCA9IHN0bW1hY19od19zZXR1cChuZGV2KTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDslczogSHcgc2V0dXAgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwotCQlzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpOwotCQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyb3JfdW5sb2NrOwogCX0KIAotCXN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhwcml2KTsKJiM0MzsJaWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKSB7CiYjNDM7CQlyZXQgPSBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZXJyb3Jfc3RvcF9kbWE7CiYjNDM7CX0KIAogCXN0bW1hY19pbml0X2NvYWxlc2NlKHByaXYpOwogCXBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi0mZ3Q7cGh5bGluayk7CkBAIC04MzU3LDYgJiM0Mzs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3Jfc3RvcF9kbWE6CiYjNDM7CXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7CiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJc3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcmVzdW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwppbmRleCA2MTI4ZWQxYmQ1MjFhLi5kY2ZjZTUxYjI4ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwpAQCAtOTU5LDcgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHN0bW1hY19wbHRmcl9ub2lycV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCWlmICghcHJpdi0mZ3Q7d29sb3B0cykgewogCQkvKiBEaXNhYmxlIGNsb2NrIGluIGNhc2Ugb2YgUFdNIGlzIG9mZiAqLwotCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yZWYpOwomIzQzOwkJaWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKQomIzQzOwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtwbGF0LSZndDtjbGtfcHRwX3JlZik7CiAKIAkJcmV0ID0gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7CiAJCWlmIChyZXQpCkBAIC05ODQsNiAmIzQzOzk4NSw5IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc3RtbWFjX3BsdGZyX25vaXJxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCiYjNDM7CQlpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwogCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yZWYpOwogCQlpZiAocmV0ICZsdDsgMCkgewogCQkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTgyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIFBhdGNoJiMzOTtzIFN1aXRhYmlsaXR5IGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyBhbmFseXppbmcgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc3Vic3lzdGVtIGl0IHRvdWNoZXMuIFRoaXMgb25lJiMzOTtzIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9gLCB3aGljaCBpcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyDigJMgYGR3bWFjYCDigJMgYW5kIGBzdG1tYWNgLiBOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgYXJlIHRoZSBjcml0ZXJpYT8gUmVhY2hhYmlsaXR5IGlzIHRoZSBtb3N0IGltcG9ydGFudC4KCkNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UmIzM5O3JlIHRhbGtpbmcgR0NFIG9yIFFFTVUsIHByb2JhYmx5IHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIHN0dWZmOiBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwLCB2aXJ0aW8sIHRoYXQga2luZCBvZiB0aGluZy4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgZG9lcyBzdGFuZGFyZCBRRU1VIGVtdWxhdGUgYHN0bW1hY2Agb3IgYGR3bWFjYCBkaXJlY3RseT8gT3IgaXMgdGhpcyBkcml2ZXIgZGVzaWduZWQgbW9yZSBmb3IgcGh5c2ljYWwgRXRoZXJuZXQgY29udHJvbGxlcnMgb24gU29DcyBvciBQQ0k/IExldCBtZSByZW1pbmQgbXlzZWxm4oCmIHJpZ2h0LCBgc3RtbWFjYCBpcyBhIHBsYXRmb3JtL1BDSSBkcml2ZXIgZm9yIHRoZSBTVE0vU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgKGBEV01BQ2ApLgoKU28sIGRvZXMgUUVNVSBlbXVsYXRlIGl0PyBJIGRvbiYjMzk7dCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYW5kIG15IG1lbW9yeSBpcyBzb21ldGltZXMgd3JvbmcuIFRpbWUgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgdGhlIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHN1cHBvcnQuIEkmIzM5O2xsIHJ1biBzb21lIGdyZXBzIG5vdyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGBzdG1tYWNgIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQgYW5kIHJlYWNoZWQuIFVuZGVyc3RhbmRpbmcgaXRzIHJlYWNoYWJpbGl0eSBpcyB0aGUgY3JpdGljYWwgZmFjdG9yIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19FVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQyBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VlIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIHRoZSBmZWF0dXJlIHNlbGVjdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGxpbWl0YXRpb25zLCBhbmQgYXNzZXNzaW5nIHRoZSBsZXZlbCBvZiBncmFudWxhcml0eSBpbiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZXkgaGFuZGxlIHRoZSB2YXJpb3VzIFNUTWljcm9lbGVjdHJvbmljcyBTb0NzIHRoYXQgdXRpbGl6ZSB0aGlzIE1BQy4gQXJlIHRoZXkgdXNpbmcgYSBmaW5lLWdyYWluZWQsIGRldmljZS1zcGVjaWZpYyBhcHByb2FjaCwgb3IgYSBtb3JlIGdlbmVyYWxpemVkLCBmZWF0dXJlLWJhc2VkIHN5c3RlbT8KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBDT05GSUdfU1RNTUFDXypgIG9wdGlvbnMsIG9mIGNvdXJzZS4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIHRoZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzIGFuZCBmdW5jdGlvbmFsaXRpZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIOKAkyBQSFkgaW50ZXJmYWNlcywgaW50ZXJydXB0IGhhbmRsaW5nLCBETUEgc2V0dGluZ3MsIGFuZCBhbnkgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHZhcmlvdXMgZmVhdHVyZXMgc3VjaCBhcyBKdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWRpbmcsIFZMQU4gc3VwcG9ydCwgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLgoKSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgd2VsbC1jb21tZW50ZWQgZmlsZSwgdGhhdCBmb2xsb3dzIHN0YW5kYXJkIGtlcm5lbCBjb252ZW50aW9ucyBhbmQgY2xlYXJseSBkZWxpbmVhdGVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMmIzM5OyBpbXBsaWNhdGlvbnMuIEEgd2VsbC1vcmdhbml6ZWQgYEtjb25maWdgIGlzIGEgc2lnbiBvZiBhIHdlbGwtZGVzaWduZWQgZHJpdmVyLCBzbyBJJiMzOTttIGhvcGluZyBmb3IgZ29vZCBkZXNpZ24gcHJpbmNpcGxlcyB0byBiZSBldmlkZW50LiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSBxdWljayByZXZpZXcgaWYgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQ7IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBzbyBJIGNhbiBrZWVwIG1ha2luZyBwcm9ncmVzcyBvbiBteSBwcm9qZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTVE1NQUNfRVRIXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gICA1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gICA2Olx0XHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xuICAgNzpcdFx0c2VsZWN0IE1JSVxuICAgODpcdFx0c2VsZWN0IFBDU19YUENTXG4gICA5Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDEwOlx0XHRzZWxlY3QgUEhZTElOS1xuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxuICAxMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxuICAxNjpcdFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxuICAxNzpcdFxuICAxODpcdGlmIFNUTU1BQ19FVEhcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xuICAyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIElORVRcbiAgMjM6XHRcdGRlZmF1bHQgblxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0cyB1c2luZyBldGh0b29sLiBFbmFibGUgdGhpc1xuICAyNjpcdFx0ICBmZWF0dXJlIGlmIHlvdSBhcmUgZmFjaW5nIHByb2JsZW1zIHdpdGggeW91ciBIVyBhbmQgc3VibWl0IHRoZSB0ZXN0XG4gIDI3Olx0XHQgIHJlc3VsdHMgdG8gdGhlIG5ldGRldiBNYWlsaW5nIExpc3QuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFNUTU1BQ19QTEFURk9STVxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuICAzMjpcdFx0ZGVmYXVsdCB5XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuICAzNTpcdFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgdXNlZCBvbiBzZXZlcmFsIFNvQ3M6XG4gIDM2Olx0XHQgIFNUaSwgQWxsd2lubmVyLCBBbWxvZ2ljIE1lc29uLCBBbHRlcmEgU09DRlBHQS5cbiAgMzc6XHRcbiAgMzg6XHRcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDE6XHRcbiAgNDI6XHRpZiBTVE1NQUNfUExBVEZPUk1cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgRFdNQUNfRFdDX1FPU19FVEhcbiAgNDU6XHRcdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIHNucHMsZHdjLXFvcy1ldGhlcm5ldC50eHQgRFQgYmluZGluZy5cJiMzNDtcbiAgNDY6XHRcdHNlbGVjdCBDUkMzMlxuICA0NzpcdFx0c2VsZWN0IE1JSVxuICA0ODpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBTdXBwb3J0IGZvciBjaGlwcyB1c2luZyB0aGUgc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBEV01BQ19HRU5FUklDXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGRyaXZlciBmb3IgRFdNQUNcJiMzNDtcbiAgNTQ6XHRcdGRlZmF1bHQgU1RNTUFDX1BMQVRGT1JNXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIEdlbmVyaWMgRFdNQUMgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24mIzM5O3QgcmVxdWlyZSBhbnlcbiAgNTc6XHRcdCAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybVxuICA1ODpcdFx0ICBkYXRhIGZvciBzZXR1cC5cbiAgNTk6XHRcbiAgNjA6XHRjb25maWcgRFdNQUNfQU5BUklPTlxuICA2MTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWRhcHRydW0gQW5hcmlvbiBHTUFDIHN1cHBvcnRcJiMzNDtcbiAgNjI6XHRcdGRlZmF1bHQgQVJDXG4gIDYzOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDIHx8IENPTVBJTEVfVEVTVClcbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgU3VwcG9ydCBmb3IgQWRhcHRydW0gQW5hcmlvbiBHTUFDIEV0aGVybmV0IGNvbnRyb2xsZXIuXG4gIDY2Olx0XG4gIDY3Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgQW5hcmlvbiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgRFdNQUNfRUlDNzcwMFxuICA3MDpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgRXN3aW4gZWljNzcwMCBldGhlcm5ldCBkcml2ZXJcJiMzNDtcbiAgNzE6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEhBU19ETUEgXHUwMDI2XHUwMDI2IEFSQ0hfRVNXSU4gfHwgQ09NUElMRV9URVNUXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBFc3dpbiBFSUM3NzAwIEV0aGVybmV0IGNvbnRyb2xsZXIsXG4gIDc0Olx0XHQgIHdoaWNoIGludGVncmF0ZXMgU3lub3BzeXMgRGVzaWduV2FyZSBRb1MgZmVhdHVyZXMuIEl0IGVuYWJsZXNcbiAgNzU6XHRcdCAgaGlnaC1zcGVlZCBuZXR3b3JraW5nIHdpdGggRE1BIGFjY2VsZXJhdGlvbiBhbmQgaXMgb3B0aW1pemVkXG4gIDc2Olx0XHQgIGZvciBlbWJlZGRlZCBzeXN0ZW1zLlxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBEV01BQ19JTkdFTklDXG4gIDc5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbmdlbmljIE1BQyBzdXBwb3J0XCYjMzQ7XG4gIDgwOlx0XHRkZWZhdWx0IE1BQ0hfSU5HRU5JQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBzdG1tYWMgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLiBJJiMzOTt2ZSBhbHJlYWR5IGdvdCBhIGdlbmVyYWwgdW5kZXJzdGFuZGluZywgYnV0IEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGUgd2l0aGluIHRoZSBzdG1tYWMgZGlyZWN0b3J5IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgd2hhdCBrbm9icyBhcmUgZXhwb3NlZCwgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgc2V0dGluZ3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZpbmVyIGRldGFpbHMg4oCTIG1heWJlIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBvcHRpbWl6YXRpb25zIG9yIHJhcmVseSB1c2VkIGZlYXR1cmVzIEkmIzM5O3ZlIG92ZXJsb29rZWQuIFVsdGltYXRlbHksIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIG9mIHRoZSBzdG1tYWMgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYWJsZSBhc3BlY3RzLCBzbyBJIGNhbiBsZXZlcmFnZSB0aGVtIGVmZmVjdGl2ZWx5IGluIG15IG93biB3b3JrLiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgYmUgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IChNQUNIX0lOR0VOSUMgfHwgQ09NUElMRV9URVNUKVxuICA4MjpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBJbmdlbmljIFNvQ3MuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIFRoaXMgc2VsZWN0cyBJbmdlbmljIFNvQ3MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gIDg3Olx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgb24gZm9yIHRoZSBJbmdlbmljIFNvQ3NcbiAgODg6XHRcdCAgTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXG4gIDg5Olx0XG4gIDkwOlx0Y29uZmlnIERXTUFDX0lQUTgwNlhcbiAgOTE6XHRcdHRyaXN0YXRlIFwmIzM0O1FDQSBJUFE4MDZ4IERXTUFDIHN1cHBvcnRcJiMzNDtcbiAgOTI6XHRcdGRlZmF1bHQgQVJDSF9RQ09NXG4gIDkzOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVClcbiAgOTQ6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFN1cHBvcnQgZm9yIFFDQSBJUFE4MDZYIERXTUFDIEV0aGVybmV0LlxuICA5NzpcdFxuICA5ODpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIElQUTgwNnggU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xuICA5OTpcdFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBkb2VzIG5vdCB1c2UgYW55IG9mIHRoZSBoYXJkd2FyZVxuIDEwMDpcdFx0ICBhY2NlbGVyYXRpb24gZmVhdHVyZXMgYXZhaWxhYmxlIG9uIHRoaXMgU29DLiBOZXR3b3JrIGRldmljZXNcbiAxMDE6XHRcdCAgd2lsbCBiZWhhdmUgbGlrZSBzdGFuZGFyZCBub24tYWNjZWxlcmF0ZWQgZXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAxMDI6XHRcbiAxMDM6XHRcdCAgU2VsZWN0IHRoZSBRQ09NX1NPQ0lORk8gY29uZmlnIGZsYWcgdG8gZW5hYmxlIHNwZWNpZmljIGR3bWFjXG4gMTA0Olx0XHQgIGZpeHVwIGJhc2VkIG9uIHRoZSBpcHE4MDZ4IFNvQyByZXZpc2lvbi5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgRFdNQUNfTFBDMThYWFxuIDEwNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlhQIExQQzE4eHgvNDN4eCBEV01BQyBzdXBwb3J0XCYjMzQ7XG4gMTA4Olx0XHRkZWZhdWx0IEFSQ0hfTFBDMThYWFxuIDEwOTpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfTFBDMThYWCB8fCBDT01QSUxFX1RFU1QpXG4gMTEwOlx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDExMTpcdFx0aGVscFxuIDExMjpcdFx0ICBTdXBwb3J0IGZvciBOWFAgTFBDMTh4eC80M3h4IERXTUFDIEV0aGVybmV0LlxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBEV01BQ19NRURJQVRFS1xuIDExNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQyN3h4IEdNQUMgc3VwcG9ydFwmIzM0O1xuIDExNjpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUKVxuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBTdXBwb3J0IGZvciBNZWRpYVRlayBHTUFDIEV0aGVybmV0IGNvbnRyb2xsZXIuXG4gMTE5Olx0XG4gMTIwOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgTVQyNzEyIFNvQyBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgRFdNQUNfTUVTT05cbiAxMjM6XHRcdHRyaXN0YXRlIFwmIzM0O0FtbG9naWMgTWVzb24gZHdtYWMgc3VwcG9ydFwmIzM0O1xuIDEyNDpcdFx0ZGVmYXVsdCBBUkNIX01FU09OXG4gMTI1Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiAoQVJDSF9NRVNPTiB8fCBDT01QSUxFX1RFU1QpXG4gMTI2Olx0XHRoZWxwXG4gMTI3Olx0XHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gQW1sb2dpYyBNZXNvbiBTb0NzLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIEFtbG9naWMgTWVzb24gU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcbiAxMzA6XHRcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciBNZXNvbjYsXG4gMTMxOlx0XHQgIE1lc29uOCwgTWVzb244YiBhbmQgR1hCQiBTb0NzLlxuIDEzMjpcdFxuIDEzMzpcdGNvbmZpZyBEV01BQ19OVVZPVE9OXG4gMTM0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOdXZvdG9uIE1BMzUgZHdtYWMgc3VwcG9ydFwmIzM0O1xuIDEzNTpcdFx0ZGVmYXVsdCBBUkNIX01BMzVcbiAxMzY6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX01BMzUgfHwgQ09NUElMRV9URVNUKVxuIDEzNzpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiAxMzg6XHRcdGhlbHBcbiAxMzk6XHRcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBOdXZvdG9uIE1BMzUgc2VyaWVzIFNvQy5cbiAxNDA6XHRcbiAxNDE6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBOdXZvdG9uIE1BMzUgc2VyaWVzIFNvQyBnbHVlIGxheWVyIHN1cHBvcnRcbiAxNDI6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhlIG51dm90b24tZHdtYWMgZHJpdmVyIGlzXG4gMTQzOlx0XHQgIHVzZWQgZm9yIE1BMzUgc2VyaWVzIFNvQ3MuXG4gMTQ0Olx0XG4gMTQ1Olx0Y29uZmlnIERXTUFDX1FDT01fRVRIUU9TXG4gMTQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBFVEhRT1Mgc3VwcG9ydFwmIzM0O1xuIDE0NzpcdFx0ZGVmYXVsdCBBUkNIX1FDT01cbiAxNDg6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUKVxuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBTdXBwb3J0IGZvciB0aGUgUXVhbGNvbW0gRVRIUU9TIGNvcmUuXG4gMTUxOlx0XG4gMTUyOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgUXVhbGNvbW0gRVRIUU9TIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXG4gMTUzOlx0XHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxuIDE1NDpcdFxuIDE1NTpcdGNvbmZpZyBEV01BQ19SRU5FU0FTX0dCRVRIXG4gMTU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIFJaL1YySChQKSBHQkVUSCBhbmQgUlovVDJILCBSWi9OMkggR01BQyBzdXBwb3J0XCYjMzQ7XG4gMTU3Olx0XHRkZWZhdWx0IEFSQ0hfUkVORVNBU1xuIDE1ODpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1QpXG4gMTU5Olx0XHRzZWxlY3QgUENTX1JaTjFfTUlJQ1xuIDE2MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGFuZCBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGludG8gUENJIHN1cHBvcnQsIGFzIHRoYXQmIzM5O3MgYSBjb21tb24gYXJlYSB3aGVyZSBJIG5lZWQgdG8gbWFrZSB0YXJnZXRlZCBjaGFuZ2VzLiBVbmRlcnN0YW5kaW5nIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgcHJvcGVyIGRyaXZlciBpbnRlZ3JhdGlvbiBhbmQgc3lzdGVtIHN0YWJpbGl0eS4gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3IgaXRzIGVudHJ5IHBvaW50LCB0aGVuIGZvbGxvdyB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSBob3cgaXQgbGlua3Mgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGFsc28gbWlnaHQgcmV2ZWFsIG5ldyBvcHRpb25zIEkgaGF2ZW4mIzM5O3QgZXZlbiBlbmNvdW50ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjE6XHRcdCAgU3VwcG9ydCBmb3IgR2lnYWJpdCBFdGhlcm5ldCBJbnRlcmZhY2UgKEdCRVRIKS8gRXRoZXJuZXQgTUFDIChHTUFDKVxuIDE2MjpcdFx0ICBvbiBSZW5lc2FzIFNvQ3MuXG4gMTYzOlx0XG4gMTY0Olx0XHQgIFRoaXMgc2VsZWN0cyBSZW5lc2FzIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZGV2aWNlXG4gMTY1Olx0XHQgIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIFJaL1YySChQKSBmYW1pbHksIFJaL1QySCBhbmRcbiAxNjY6XHRcdCAgUlovTjJIIFNvQ3MuXG4gMTY3Olx0XG4gMTY4Olx0Y29uZmlnIERXTUFDX1JPQ0tDSElQXG4gMTY5Olx0XHR0cmlzdGF0ZSBcJiMzNDtSb2NrY2hpcCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMTcwOlx0XHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbiAxNzE6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbiAxNzI6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gMTczOlx0XHRoZWxwXG4gMTc0Olx0XHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszMjg4IFNvQy5cbiAxNzU6XHRcbiAxNzY6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBSb2NrY2hpcCBSSzMyODggU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcbiAxNzc6XHRcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxuIDE3ODpcdFxuIDE3OTpcdGNvbmZpZyBEV01BQ19SWk4xXG4gMTgwOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIFJaL04xIGR3bWFjIHN1cHBvcnRcJiMzNDtcbiAxODE6XHRcdGRlZmF1bHQgQVJDSF9SWk4xXG4gMTgyOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9SWk4xIHx8IENPTVBJTEVfVEVTVClcbiAxODM6XHRcdHNlbGVjdCBQQ1NfUlpOMV9NSUlDXG4gMTg0Olx0XHRoZWxwXG4gMTg1Olx0XHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUmVuZXNhcyBSWi9OMSBTb0MgZmFtaWx5LlxuIDE4NjpcdFxuIDE4NzpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIFJlbmVzYXMgUlovTjEgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcbiAxODg6XHRcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIHN1cHBvcnQgY2FuIG1ha2UgdXNlIG9mIGEgY3VzdG9tIE1JSVxuIDE4OTpcdFx0ICBjb252ZXJ0ZXIgUENTIGRldmljZS5cbiAxOTA6XHRcbiAxOTE6XHRjb25maWcgRFdNQUNfUzMyXG4gMTkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOWFAgUzMyRy9TMzJSIEdNQUMgc3VwcG9ydFwmIzM0O1xuIDE5MzpcdFx0ZGVmYXVsdCBBUkNIX1MzMlxuIDE5NDpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUzMyIHx8IENPTVBJTEVfVEVTVClcbiAxOTU6XHRcdGhlbHBcbiAxOTY6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBOWFAgUzMyQ0MgU09Dcy5cbiAxOTc6XHRcbiAxOTg6XHRcdCAgVGhpcyBzZWxlY3RzIE5YUCBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gMTk5Olx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZSBTMzJDQyBzZXJpZXNcbiAyMDA6XHRcdCAgU09DcyBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIsIGllLiBTMzJHMnh4LCBTMzJHM3h4IGFuZFxuIDIwMTpcdFx0ICBTMzJSNDUuXG4gMjAyOlx0XG4gMjAzOlx0Y29uZmlnIERXTUFDX1NPQ0ZQR0FcbiAyMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NPQ0ZQR0EgZHdtYWMgc3VwcG9ydFwmIzM0O1xuIDIwNTpcdFx0ZGVmYXVsdCBBUkNIX0lOVEVMX1NPQ0ZQR0FcbiAyMDY6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX0lOVEVMX1NPQ0ZQR0EgfHwgQ09NUElMRV9URVNUKVxuIDIwNzpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiAyMDg6XHRcdHNlbGVjdCBNRElPX1JFR01BUFxuIDIwOTpcdFx0c2VsZWN0IFJFR01BUF9NTUlPXG4gMjEwOlx0XHRzZWxlY3QgUENTX0xZTlhcbiAyMTE6XHRcdGhlbHBcbiAyMTI6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBBbHRlcmEgU09DRlBHQVxuIDIxMzpcdFxuIDIxNDpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIEFsdGVyYSBTT0NGUEdBIFNvQyBnbHVlIGxheWVyIHN1cHBvcnRcbiAyMTU6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3JcbiAyMTY6XHRcdCAgYXJyaWE1IGFuZCBjeWNsb25lNSBGUEdBIFNvQ3MuXG4gMjE3Olx0XG4gMjE4Olx0Y29uZmlnIERXTUFDX1NPUEhHT1xuIDIxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7U29waGdvIGR3bWFjIHN1cHBvcnRcJiMzNDtcbiAyMjA6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NPUEhHTyB8fCBDT01QSUxFX1RFU1QpXG4gMjIxOlx0XHRkZWZhdWx0IG0gaWYgQVJDSF9TT1BIR09cbiAyMjI6XHRcdGhlbHBcbiAyMjM6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gU29waGdvIFJJU0MtViBTb0NzXG4gMjI0Olx0XG4gMjI1Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgU29waGdvIFNvQyBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnRcbiAyMjY6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlXG4gMjI3Olx0XHQgIGV0aGVybmV0IGNvbnRyb2xsZXJzIG9uIHZhcmlvdXMgU29waGdvIFNvQ3MuXG4gMjI4Olx0XG4gMjI5Olx0Y29uZmlnIERXTUFDX1NQQUNFTUlUXG4gMjMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTcGFjZW1pdCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMjMxOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9TUEFDRU1JVCB8fCBDT01QSUxFX1RFU1QpXG4gMjMyOlx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDIzMzpcdFx0ZGVmYXVsdCBtIGlmIEFSQ0hfU1BBQ0VNSVRcbiAyMzQ6XHRcdGhlbHBcbiAyMzU6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gU3BhY2VtaXQgUklTQy1WIFNvQ3NcbiAyMzY6XHRcbiAyMzc6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBTcGFjZW1pdCBwbGF0Zm9ybSBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnRcbiAyMzg6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlXG4gMjM5Olx0XHQgIFNwYWNlbWl0IEszIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxuIDI0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQyNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUsIHBpY2tpbmcgdXAgZnJvbSBsaW5lIDI0MS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyB0aGluZ3MgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgZnVydGhlciBkb3duIGluIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBtYXliZSBhbnkgZGVmYXVsdCB2YWx1ZXMgYmVpbmcgc2V0IHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIGFyZWEgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBteSBhcmVhIG9mIGV4cGVydGlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDE6XHRjb25maWcgRFdNQUNfU1RBUkZJVkVcbiAyNDI6XHRcdHRyaXN0YXRlIFwmIzM0O1N0YXJGaXZlIGR3bWFjIHN1cHBvcnRcJiMzNDtcbiAyNDM6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NUQVJGSVZFIHx8IENPTVBJTEVfVEVTVClcbiAyNDQ6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gMjQ1Olx0XHRkZWZhdWx0IG0gaWYgQVJDSF9TVEFSRklWRVxuIDI0NjpcdFx0aGVscFxuIDI0NzpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVycyBvbiBTdGFyRml2ZSBSSVNDLVYgU29Dc1xuIDI0ODpcdFxuIDI0OTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIFN0YXJGaXZlIHBsYXRmb3JtIHNwZWNpZmljIGdsdWUgbGF5ZXIgc3VwcG9ydFxuIDI1MDpcdFx0ICBmb3IgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciB0aGVcbiAyNTE6XHRcdCAgU3RhckZpdmUgSkg3MTAwIGFuZCBKSDcxMTAgZXRoZXJuZXQgY29udHJvbGxlcnMuXG4gMjUyOlx0XG4gMjUzOlx0Y29uZmlnIERXTUFDX1NUSVxuIDI1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RpIEdNQUMgc3VwcG9ydFwmIzM0O1xuIDI1NTpcdFx0ZGVmYXVsdCBBUkNIX1NUSVxuIDI1NjpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfU1RJIHx8IENPTVBJTEVfVEVTVClcbiAyNTc6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gMjU4Olx0XHRoZWxwXG4gMjU5Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gU1RpIFNPQ3MuXG4gMjYwOlx0XG4gMjYxOlx0XHQgIFRoaXMgc2VsZWN0cyBTVGkgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xuIDI2MjpcdFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIG9uIGZvciB0aGUgU1RpIHNlcmllc1xuIDI2MzpcdFx0ICBTT0NzIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlci5cbiAyNjQ6XHRcbiAyNjU6XHRjb25maWcgRFdNQUNfU1RNMzJcbiAyNjY6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTTMyIERXTUFDIHN1cHBvcnRcJiMzNDtcbiAyNjc6XHRcdGRlZmF1bHQgQVJDSF9TVE0zMlxuIDI2ODpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiAoQVJDSF9TVE0zMiB8fCBDT01QSUxFX1RFU1QpXG4gMjY5Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDI3MDpcdFx0aGVscFxuIDI3MTpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIFNUTTMyIFNPQ3MuXG4gMjcyOlx0XG4gMjczOlx0XHQgIFRoaXMgc2VsZWN0cyBTVE0zMiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gMjc0Olx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgb24gZm9yIHRoZSBTVE0zMiBzZXJpZXNcbiAyNzU6XHRcdCAgU09DcyBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXG4gMjc2Olx0XG4gMjc3Olx0Y29uZmlnIERXTUFDX1NVTlhJXG4gMjc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtBbGx3aW5uZXIgR01BQyBzdXBwb3J0XCYjMzQ7XG4gMjc5Olx0XHRkZWZhdWx0IEFSQ0hfU1VOWElcbiAyODA6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVClcbiAyODE6XHRcdGhlbHBcbiAyODI6XHRcdCAgU3VwcG9ydCBmb3IgQWxsd2lubmVyIEEyMC9BMzEgR01BQyBldGhlcm5ldCBjb250cm9sbGVycy5cbiAyODM6XHRcbiAyODQ6XHRcdCAgVGhpcyBzZWxlY3RzIEFsbHdpbm5lciBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGVcbiAyODU6XHRcdCAgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIEEyMC9BMzFcbiAyODY6XHRcdCAgR01BQyBldGhlcm5ldCBjb250cm9sbGVyLlxuIDI4NzpcdFxuIDI4ODpcdGNvbmZpZyBEV01BQ19TVU44SVxuIDI4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIHN1bjhpIEdNQUMgc3VwcG9ydFwmIzM0O1xuIDI5MDpcdFx0ZGVmYXVsdCBBUkNIX1NVTlhJXG4gMjkxOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QpXG4gMjkyOlx0XHRzZWxlY3QgTURJT19CVVNfTVVYXG4gMjkzOlx0XHRoZWxwXG4gMjk0Olx0XHQgIFN1cHBvcnQgZm9yIEFsbHdpbm5lciBIMyBBODNUIEE2NCBFTUFDIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxuIDI5NTpcdFxuIDI5NjpcdFx0ICBUaGlzIHNlbGVjdHMgQWxsd2lubmVyIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZVxuIDI5NzpcdFx0ICBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgSDMvQTgzVC9BNjRcbiAyOTg6XHRcdCAgRU1BQyBldGhlcm5ldCBjb250cm9sbGVyLlxuIDI5OTpcdFxuIDMwMDpcdGNvbmZpZyBEV01BQ19TVU41NUlcbiAzMDE6XHRcdHRyaXN0YXRlIFwmIzM0O0FsbHdpbm5lciBzdW41NWkgR01BQzIwMCBzdXBwb3J0XCYjMzQ7XG4gMzAyOlx0XHRkZWZhdWx0IEFSQ0hfU1VOWElcbiAzMDM6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVClcbiAzMDQ6XHRcdHNlbGVjdCBNRElPX0JVU19NVVhcbiAzMDU6XHRcdGhlbHBcbiAzMDY6XHRcdCAgU3VwcG9ydCBmb3IgQWxsd2lubmVyIEE1MjMvVDUyNyBHTUFDMjAwIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxuIDMwNzpcdFxuIDMwODpcdFx0ICBUaGlzIHNlbGVjdHMgQWxsd2lubmVyIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZVxuIDMwOTpcdFx0ICBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgQTUyMy9UNTI3XG4gMzEwOlx0XHQgIEdNQUMyMDAgZXRoZXJuZXQgY29udHJvbGxlci5cbiAzMTE6XHRcbiAzMTI6XHRjb25maWcgRFdNQUNfVEhFQURcbiAzMTM6XHRcdHRyaXN0YXRlIFwmIzM0O1QtSEVBRCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMzE0Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9USEVBRCB8fCBDT01QSUxFX1RFU1QpXG4gMzE1Olx0XHRoZWxwXG4gMzE2Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXJzIG9uIFQtSEVBRCBSSVNDLVYgU29Dc1xuIDMxNzpcdFxuIDMxODpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIFQtSEVBRCBwbGF0Zm9ybSBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXG4gMzE5Olx0XHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgVC1IRUFEIFRIMTUyMFxuIDMyMDpcdFx0ICBldGhlcm5ldCBjb250cm9sbGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSByZW1haW5kZXIgb2YgdGhpcyBLY29uZmlnIGZpbGUsIHBpY2tpbmcgdXAgZnJvbSBsaW5lIDMyMSBhbmQgZ29pbmcgdG8gdGhlIGVuZC4gSSYjMzk7bSBrZWVuIHRvIHNlZSB3aGF0IGhpZGRlbiBnZW1zIG9yIHN1YnRsZSBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBsdXJraW5nIHRoZXJlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgb2Z0ZW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgYW5kIGltcGFjdGZ1bCBzZXR0aW5ncyBhcmUgZm91bmQgdHVja2VkIGF3YXksIG1heWJlIGluIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggb2JzY3VyZSBoYXJkd2FyZSBvciBhIHNwZWNpZmljLCByYXJlbHkgdXNlZCBmZWF0dXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBvciBldmVuIHNlY3VyaXR5LCBidXQgdGhhdCBjb3VsZCBlYXNpbHkgYmUgb3Zlcmxvb2tlZCBkdXJpbmcgYSBjdXJzb3J5IHJldmlldy4gUGVyaGFwcyB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbuKAmXQgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBpbml0aWFsIGNvbnRleHQsIG9yIG1heWJlIHRoZXJlIGFyZSBkZXByZWNhdGVkIG9wdGlvbnMgc3RpbGwgcHJlc2VudCB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBsb2dpYyBvciBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnRzLCBhcyB0aG9zZSBhcmUgb2Z0ZW4gd2hlcmUgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIHJlc2lkZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBvcHBvcnR1bml0aWVzIHRvIHJlZmFjdG9yIG9yIHNpbXBsaWZ5IHRoZSBjb25maWd1cmF0aW9uLCBlaXRoZXIgZm9yIGNsYXJpdHkgb3IgZWZmaWNpZW5jeS4gVWx0aW1hdGVseSwgSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIxOlx0XG4gMzIyOlx0Y29uZmlnIERXTUFDX0lNWDhcbiAzMjM6XHRcdHRyaXN0YXRlIFwmIzM0O05YUCBJTVg4IERXTUFDIHN1cHBvcnRcJiMzNDtcbiAzMjQ6XHRcdGRlZmF1bHQgQVJDSF9NWENcbiAzMjU6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX01YQyB8fCBDT01QSUxFX1RFU1QpXG4gMzI2Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDMyNzpcdFx0aGVscFxuIDMyODpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIE5YUCBpLk1YOCBTT0NzLlxuIDMyOTpcdFxuIDMzMDpcdFx0ICBUaGlzIHNlbGVjdHMgTlhQIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcbiAzMzE6XHRcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgaS5NWDggc2VyaWVzIGxpa2VcbiAzMzI6XHRcdCAgaU1YOE1QL2lNWDhEWEwgR01BQyBldGhlcm5ldCBjb250cm9sbGVyLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXG4gMzM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLXG4gMzM3Olx0XHRoZWxwXG4gMzM4Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXJzIG9uIEludGVsIFNvQ3NcbiAzMzk6XHRcbiAzNDA6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBJbnRlbCBwbGF0Zm9ybSBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXG4gMzQxOlx0XHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIEludGVsIEtlZW0gQmF5XG4gMzQyOlx0XHQgIFNvQy5cbiAzNDM6XHRcbiAzNDQ6XHRjb25maWcgRFdNQUNfTE9PTkdTT04xXG4gMzQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMb29uZ3NvbjEgR01BQyBzdXBwb3J0XCYjMzQ7XG4gMzQ2Olx0XHRkZWZhdWx0IE1BQ0hfTE9PTkdTT04zMlxuIDM0NzpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKE1BQ0hfTE9PTkdTT04zMiB8fCBDT01QSUxFX1RFU1QpXG4gMzQ4Olx0XHRoZWxwXG4gMzQ5Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24xIFNvQy5cbiAzNTA6XHRcbiAzNTE6XHRcdCAgVGhpcyBzZWxlY3RzIExvb25nc29uMSBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gMzUyOlx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIExvb25nc29uMS1iYXNlZCBib2FyZHNcbiAzNTM6XHRcdCAgbGlrZSBMb29uZ3NvbiBMUzFCL0xTMUMuXG4gMzU0Olx0XG4gMzU1Olx0Y29uZmlnIERXTUFDX1RFR1JBXG4gMzU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOVklESUEgVGVncmEgTUdCRSBzdXBwb3J0XCYjMzQ7XG4gMzU3Olx0XHRkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgfHwgQ09NUElMRV9URVNUXG4gMzU4Olx0XHRoZWxwXG4gMzU5Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgTXVsdGktR2lnYUJpdCBFdGhlcm5ldCAoTUdCRSkgQ29udHJvbGxlciB0aGF0IGlzXG4gMzYwOlx0XHQgIGZvdW5kIG9uIHRoZSBOVklESUEgVGVncmEgU29DIGRldmljZXMuIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBnbHVlXG4gMzYxOlx0XHQgIGxheWVyIG9uIHRvcCBvZiB0aGUgc3RtbWFjIGRyaXZlciByZXF1aXJlZCBmb3IgdGhlc2UgTlZJRElBIFRlZ3JhIFNvQ1xuIDM2MjpcdFx0ICBkZXZpY2VzLlxuIDM2MzpcdFxuIDM2NDpcdGNvbmZpZyBEV01BQ19WSVNDT05USVxuIDM2NTpcdFx0dHJpc3RhdGUgXCYjMzQ7VG9zaGliYSBWaXNjb250aSBEV01BQyBzdXBwb3J0XCYjMzQ7XG4gMzY2Olx0XHRkZWZhdWx0IEFSQ0hfVklTQ09OVElcbiAzNjc6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IChBUkNIX1ZJU0NPTlRJIHx8IENPTVBJTEVfVEVTVClcbiAzNjg6XHRcdGhlbHBcbiAzNjk6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBWaXNjb250aSBTb0NzLlxuIDM3MDpcdFxuIDM3MTpcdGVuZGlmICMgU1RNTUFDX1BMQVRGT1JNXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIFNUTU1BQ19MSUJQQ0lcbiAzNzQ6XHRcdHRyaXN0YXRlXG4gMzc1Olx0XHRoZWxwXG4gMzc2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSSBidXMgaGVscGVycyBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXG4gMzc3Olx0XG4gMzc4Olx0Y29uZmlnIERXTUFDX0lOVEVMXG4gMzc5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBHTUFDIHN1cHBvcnRcJiMzNDtcbiAzODA6XHRcdGRlZmF1bHQgWDg2XG4gMzgxOlx0XHRkZXBlbmRzIG9uIFg4NiBcdTAwMjZcdTAwMjYgUENJXG4gMzgyOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAzODM6XHRcdGRlcGVuZHMgb24gQUNQSVxuIDM4NDpcdFx0aGVscFxuIDM4NTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIEludGVsIHBsYXRmb3JtIHNwZWNpZmljIGJ1cyBzdXBwb3J0IGZvciB0aGVcbiAzODY6XHRcdCAgc3RtbWFjIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgSW50ZWwgUXVhcmsvRUhML1RHTC5cbiAzODc6XHRcbiAzODg6XHRjb25maWcgRFdNQUNfTE9PTkdTT05cbiAzODk6XHRcdHRyaXN0YXRlIFwmIzM0O0xvb25nc29uIFBDSSBEV01BQyBzdXBwb3J0XCYjMzQ7XG4gMzkwOlx0XHRkZWZhdWx0IE1BQ0hfTE9PTkdTT042NFxuIDM5MTpcdFx0ZGVwZW5kcyBvbiAoTUFDSF9MT09OR1NPTjY0IHx8IENPTVBJTEVfVEVTVCkgXHUwMDI2XHUwMDI2IFBDSVxuIDM5MjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gMzkzOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDM5NDpcdFx0aGVscFxuIDM5NTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXG4gMzk2Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxuIDM5NzpcdFxuIDM5ODpcdGNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbiAzOTk6XHRcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQQ0kgRFdNQUMgc3VwcG9ydFwmIzM0O1xuIDQwMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBCYWNrIGludG8gdGhlIEtjb25maWcgRGVwdGhzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGlzIEtjb25maWcgZmlsZS4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgc2VjdGlvbiwgYW5kIEkgdGhpbmsgSSByZW1lbWJlciB3aGVyZSBJIGxlZnQgb2ZmLi4uIGxpbmUgNDAxLiBMZXQmIzM5O3MgZ2V0IHRoZSB3aG9sZSB0aGluZyBpbiB2aWV3IHNvIEkgY2FuIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCB0aGUgcmVsYXRpb25zaGlwcywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSG9wZWZ1bGx5IGl0JiMzOTtzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIFRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZsYWcgSSBuZWVkIHRvIHRyYWNrIGRvd24sIGFuZCBJJiMzOTttIGJldHRpbmcgaXRzIGRlcGVuZGVuY2llcyBhcmUgbHVya2luZyBpbiB0aGlzIHNlY3Rpb24uIEdvdHRhIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNhbmUgd2l0aCByZXNwZWN0IHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDE6XHRcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXG4gNDAyOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQwMzpcdFx0aGVscFxuIDQwNDpcdFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcbiA0MDU6XHRcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuIDQxNzpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuIDQxODpcdFxuIDQxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDQyMDpcdGVuZGlmICMgU1RNTUFDX0VUSFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU1RNTUFDIFJlYWNoYWJpbGl0eSBpbiBRRU1VL1N5emthbGxlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gdHJpZ2dlciBgc3RtbWFjYCBpbiB0aGUgY29udGV4dCBvZiBRRU1VL3N5emthbGxlci4gSSBpbW1lZGlhdGVseSB0aGluayBvZiBTZWN0aW9uIDIgZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGljaCBoaWdobGlnaHRzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMuIFRoZSBxdWVzdGlvbiBpcywgaXMgYHN0bW1hY2AsIG9yIGl0cyBlcXVpdmFsZW50IGBEV01BQ2AsIGVtdWxhdGVkIHdpdGhpbiBzdGFuZGFyZCBRRU1VPyBPciBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbnRyb2xsZXIsIGxpa2Ugc29tZXRoaW5nIGJha2VkIGludG8gYW4gU29DPwoKTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiB0aGVyZSAqaXMqIGEgRFdNQUMgb3Igc3RtbWFjIGRldmljZSB3aXRoaW4gUUVNVS4gVGhlbiBJIHN0YXJ0IHRoaW5raW5nLCAmIzM0O3dhaXQsIHdoYXQgYWJvdXQgYGFsbHdpbm5lci1lbWFjYCBvciBgc3RtMzJgPyYjMzQ7IEJ1dCB0aGVuIEkgcmVhbGl6ZSB0aGUgU1RNMzIgaW4gUUVNVSBpcyB1c3VhbGx5IGEgQ29ydGV4LU0sIGFuZCB3ZSYjMzk7cmUgdGFyZ2V0aW5nIGFtZDY0LiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQhIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LgoKT2theSwgb24gYW1kNjQsIGBzdG1tYWNgIGlzIHR5cGljYWxseSBhIGRyaXZlciBmb3IgRXRoZXJuZXQgTUFDcyBmcm9tIFNUTWljcm9lbGVjdHJvbmljcyBvciBTeW5vcHN5cy4gVGhlc2UgTUFDcyBhcmUgdXN1YWxseSBmb3VuZCBvbiBzcGVjaWZpYyBTb0NzIChBUk0sIFJJU0MtViwgZXRjLikgb3IgaW50ZWdyYXRlZCB2aWEgUENJIG9uIEludGVsIFF1YXJrL0VITC9UR0wsIE1vdG9yY29tbSwgb3IgRlBHQSBkZXZpY2VzLiBDYW4gSSBldmVuIGluc3RhbnRpYXRlIGBzdG1tYWNgIG9uIGFtZDY0IGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpPyBObywgdGhpcyBkb2VzbiYjMzk7dCBzZWVtIHBvc3NpYmxlLiBTdGFuZGFyZCBRRU1VIHg4Nl82NCB1c2VzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIGFuZCB2aXJ0aW8tbmV0LCBub3QgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUNzLiBObyBlbXVsYXRpb24gb2YgYHN0bW1hY2AgZm9yIHg4Nl82NCwgb3IgZm9yIGEgUEMvUTM1IG1hY2hpbmUsIGV4aXN0cy4KCkV2ZW4gaWYgSSB3YXMgb24gYW4gQVJNIHBsYXRmb3JtIHdpdGhpbiBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIHNldHVwIHdvdWxkIHVzZSB2aXJ0aW8tbmV0LiBDZXJ0YWluIGJvYXJkIGVtdWxhdGlvbnMsIGxpa2Ugb3JhbmdlcGktcGMsIG1pZ2h0IGhhdmUgYSBzdW54aSBvciBhbGx3aW5uZXIgZW1hYywgYnV0IHN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24gc3RhbmRhcmQgUUVNVSB4ODZfNjQgb3IgYXJtNjQgdmlydCBtYWNoaW5lcy4gQnV0IHJlbWVtYmVyLCB3ZSYjMzk7cmUgb24gYW1kNjQuCgpUaGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRldmljZXMsIFVTQiBnYWRnZXRzLCB0dW4vdGFwIGludGVyZmFjZXMsIG9yIG5ldGxpbmsgaW50ZXJmYWNlcyB0aGF0IGNvdWxkICpzb21laG93KiB0cmlnZ2VyIGBzdG1tYWNfbWFpbi5jYD8gTm8uIFRoZSB3YXkgaXQgd29ya3MsIGBzdG1tYWNgIGlzIGEgbmV0X2RldmljZSBkcml2ZXIgbWVhbnQgZm9yICpwaHlzaWNhbCogaGFyZHdhcmUgTUFDcywgU29Dcywgb3IgUENJIGRldmljZXMuIFRvIGdldCBhIG5ldGRldiBjcmVhdGVkIGJ5IGBzdG1tYWNgLCB0aGUgZHJpdmVyIG5lZWRzIHRvIHByb2JlIGFuIGFjdHVhbCBkZXZpY2UsIHdoaWNoIGhhcHBlbnMgdGhyb3VnaCBhIHBsYXRmb3JtIGRldmljZSBvciBhIFBDSSBkZXZpY2Ugd2l0aCBzcGVjaWZpYyBWSUQvUElELiBObyBoYXJkd2FyZSwgbm8gcHJvYmUuIElmIG5vIGhhcmR3YXJlLCBubyBgc3RtbWFjYCBuZXRfZGV2aWNlIGV4aXN0cywgc28gZnVuY3Rpb25zIGxpa2UgYF9fc3RtbWFjX29wZW5gLCBgc3RtbWFjX2h3dHN0YW1wX3NldGAsIGV0Yy4sIGFyZSBuZXZlciBjYWxsZWQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgc291cmNlLCBsb29rIGZvciBtb2NrIG9yIHZpcnR1YWwgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIHVzaW5nIGBzdG1tYWNgLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB1c2VzIG9mIGBzdG1tYWNfcHJvYmVfY29uZmlnX2R0YCBvciBgc3RtbWFjX2R2cl9wcm9iZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19kdnJfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYz0yODM9c3RhdGljIGludCBkd2NfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jOjMzMDpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjYzPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNDE6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzQyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYz0zNzQ9c3RhdGljIGludCBpcHE4MDZ4X2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jOjQ4MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM9NDI9c3RhdGljIGludCBscGMxOHh4X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jOjY4Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYz00Nz1zdGF0aWMgaW50IG1lc29uNl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jOjczOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2NS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYz00OD1zdGF0aWMgaW50IHJ6bjFfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM6Njg6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTY5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYz0zNT1zdGF0aWMgaW50IHNvcGhnb19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM6NjU6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDMtXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDgtXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5Olx0ICogc28gYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2Olx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc3LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzOC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDExPXZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTMtXHRcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MTA9RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX3BsYXRfZGF0X2FsbG9jKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzgxMjpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4MTMtXHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMTY6ICogc3RtbWFjX2R2cl9wcm9iZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE3LSAqIEBkZXY6IGRldmljZSBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTI0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI1OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cdFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEzNjpcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTM3LVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGxhdF9kYXQtXHUwMDNlZXhpdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNDEtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTQyOkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MjIKCQkJCQkJCW91dHB1dDogMTA5CgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgYHN0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIGFsbCB0aGUgY2FsbGVycyBhcmUgZGV2aWNlIHByb2JlIHJvdXRpbmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIGhhcmR3YXJlIHBsYXRmb3JtcyBvciBQQ0kgZGV2aWNlcy4gSSBzZWUgYSB3aWRlIHJhbmdlIG9mIGRldmljZXMgdGhlcmU6IGBkd21hYy1kd2MtcW9zLWV0aGAsIGBkd21hYy1pbnRlbC1wbGF0YCwgYGR3bWFjLWludGVsYCwgYGR3bWFjLWlwcTgwNnhgLCBgZHdtYWMtbG9vbmdzb25gLCBgZHdtYWMtbHBjMTh4eGAsIGBkd21hYy1tZWRpYXRla2AsIGBkd21hYy1tZXNvbmAsIGBkd21hYy1tb3RvcmNvbW1gLCBgZHdtYWMtcnpuMWAsIGBkd21hYy1zb3BoZ29gLCBgZHdtYWMtc3BhY2VtaXRgLCBgZHdtYWMtc3RhcmZpdmVgLCBgZHdtYWMtc3RtMzJgLCBgZHdtYWMtc3VuOGlgLCBgZHdtYWMtdGVncmFgLCBgZHdtYWMtdmlzY29udGlgLCBgc3RtbWFjX3BjaWAsIGFuZCBgc3RtbWFjX3BsYXRmb3JtYC4KClRoZSBrZXkgdGhpbmcgSSYjMzk7bSBub3RpY2luZyBpcyB0aGF0ICpub25lKiBvZiB0aGVzZSBhcmUgZW11bGF0ZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNcyB0aGF0IHN5emthbGxlciBjb21tb25seSB1c2VzIG9uIGFtZDY0LiBUaGVzZSBhcmUgcGh5c2ljYWwgU29DcyBhbmQgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IGhhcmR3YXJlIGNvbnRyb2xsZXJzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjcml0ZXJpYSBvdXRsaW5lZCBpbiBTZWN0aW9uIDIgcmVnYXJkaW5nIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gSW4gcGFydGljdWxhciwgdGhlIHNlY3Rpb24gbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgYW5kIEdQVSBkcml2ZXJzLgoKVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjYCBkaXJlY3RvcnksIHdoaWNoIGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgc3RtbWFjYCBkcml2ZXIgZm9yIFNUTWljcm9lbGVjdHJvbmljcy9TeW5vcHN5cyBEV01BQyBFdGhlcm5ldCBoYXJkd2FyZSBjb250cm9sbGVycy4gVGhpcyBpcyB0aGUgZHJpdmVyIHdlJiMzOTtyZSBmb2N1c2luZyBvbi4KCk15IGNvbmNsdXNpb24gaXMgdGhlIGBzdG1tYWNgIGRyaXZlciBpcyAqc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlKiBnaXZlbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gSSYjMzk7bSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byByZWFjaCB0aGlzIGRyaXZlciBlYXNpbHkgaW4gYW4gYXV0b21hdGVkIGZ1enppbmcgc2V0dXAgb24gdGhlIHR5cGljYWwgYW1kNjQgUUVNVS9HQ0Ugc3lzdGVtcy4KClRvIG1ha2UgaXQgY2xlYXIsIEkgYW0gY29uZmlybWluZyB0aGUgZm9sbG93aW5nOgoqICAgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGBmYWxzZWAuCiogICBgRW5hYmxlQ29uZmlnc2AgYXJlIGVtcHR5IChvciBudWxsKS4KKiAgIGBGb2N1c1N5bWJvbHNgIGFyZSBlbXB0eSAob3IgbnVsbCkuCiogICBUaGUgcmVhc29uaW5nIGZvciB0aGlzIGRldGVybWluYXRpb24gaXMgY29uY2lzZWx5IGV4cGxhaW5lZCBhcyB0aGUgaGFyZHdhcmUgdGhpcyBkcml2ZXIgc3VwcG9ydHMgaXMgcGh5c2ljYWxseSByZXF1aXJlZCBhbmQgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKSSYjMzk7bSBub3cgcmVhZHkgdG8gcHJlcGFyZSB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBzdG1tYWMgKFN5bm9wc3lzIERlc2lnbldhcmUgLyBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgTUFDKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLykuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIHBoeXNpY2FsIFNvQyBhbmQgUENJZSBFdGhlcm5ldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgZm9yIGFtZDY0LiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgc3RtbWFjIChTeW5vcHN5cyBEZXNpZ25XYXJlIC8gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQykgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8pLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBwaHlzaWNhbCBTb0MgYW5kIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGZvciBhbWQ2NC4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MTYuMDEzMzY5OTkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MTgwNzgwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIHN0bW1hYyAoU3lub3BzeXMgRGVzaWduV2FyZSAvIFNUTWljcm9lbGVjdHJvbmljcyBFdGhlcm5ldCBNQUMpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvKS4gVGhpcyBkcml2ZXIgb3BlcmF0ZXMgcGh5c2ljYWwgU29DIGFuZCBQQ0llIEV0aGVybmV0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBmb3IgYW1kNjQuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MTYuMDEzMzc2MzMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk1NjI3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMTQ2ZjNhZGQyNjRiNWI3MzE1YjgzZTVlNzk1NDkyMDI5YjI5OWEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjAzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcXG5pbmRleCA3NTgyZmNhNjM3NDE5Li4wYTAwNDkwODMyZjNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcXG5AQCAtNDE5LDYgKzQxOSwxNyBAQCBpbnQgc3RtbWFjX3NldF9jbGtfdHhfcmF0ZSh2b2lkICpic3BfcHJpdiwgc3RydWN0IGNsayAqY2xrX3R4X2ksXFxuIFxcbiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCBcXHUwMDI2XFx1MDAyNiAhcHJpdi1cXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JhdGUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX3hkcF9pc19lbmFibGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRyZXR1cm4gISFwcml2LVxcdTAwM2V4ZHBfcHJvZztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5pbmRleCA1ZmU3ZTk1ZmRkMzQ1Li43ZjVhZGExMTMyYzQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXFxuQEAgLTYwMSw3ICs2MDEsNyBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3J4X2h3dHN0YW1wKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IGRtYV9kZXNjICpwLFxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRib29sIHhtYWMgPSBkd21hY19pc194bWFjKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSk7XFxuIFxcdHUzMiBzZWNfaW5jID0gMDtcXG5AQCAtNjI1LDcgKzYyNSw3IEBAIHN0YXRpYyB2b2lkIHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdCAqL1xcbiBcXHR0ZW1wID0gKHU2NCkodGVtcCBcXHUwMDNjXFx1MDAzYyAzMik7XFxuIFxcdHByaXYtXFx1MDAzZWRlZmF1bHRfYWRkZW5kID0gZGl2X3U2NCh0ZW1wLCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JhdGUpO1xcbi1cXHRzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVxcdTAwM2VwdHBhZGRyLCBwcml2LVxcdTAwM2VkZWZhdWx0X2FkZGVuZCk7XFxuK1xcdHJldHVybiBzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVxcdTAwM2VwdHBhZGRyLCBwcml2LVxcdTAwM2VkZWZhdWx0X2FkZGVuZCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC02NTMsNyArNjUzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHUzMiB0c19tYXN0ZXJfZW4gPSAwO1xcbiBcXHR1MzIgdHNfZXZlbnRfZW4gPSAwO1xcbiBcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXFx1MDAzZWFkdl90cykpIHtcXG4rXFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiTm8gc3VwcG9ydCBmb3IgSFcgdGltZSBzdGFtcGluZ1xcXCIpO1xcbiBcXHRcXHRwcml2LVxcdTAwM2Vod3RzX3R4X2VuID0gMDtcXG4gXFx0XFx0cHJpdi1cXHUwMDNlaHd0c19yeF9lbiA9IDA7XFxuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY19od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXFx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKVxcbitcXHRpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHQqY29uZmlnID0gcHJpdi1cXHUwMDNldHN0YW1wX2NvbmZpZztcXG5AQCAtODY1LDMyICs4NjUsMzIgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90c3RhbXBfY291bnRlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiBzeXN0aW1lX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcXG4tXFxuLVxcdGlmICghcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY2xrX3B0cF9yYXRlKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBQVFAgY2xvY2sgcmF0ZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c3RtbWFjX2NvbmZpZ19od190c3RhbXBpbmcocHJpdiwgcHJpdi1cXHUwMDNlcHRwYWRkciwgc3lzdGltZV9mbGFncyk7XFxuIFxcdHByaXYtXFx1MDAzZXN5c3RpbWVfZmxhZ3MgPSBzeXN0aW1lX2ZsYWdzO1xcbiBcXG4tXFx0c3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xcbitcXHRyZXQgPSBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBpbml0aWFsaXplIHN5c3RlbSB0aW1lICovXFxuIFxcdGt0aW1lX2dldF9yZWFsX3RzNjQoXFx1MDAyNm5vdyk7XFxuIFxcbiBcXHQvKiBsb3dlciAzMiBiaXRzIG9mIHR2X3NlYyBhcmUgc2FmZSB1bnRpbCB5MjEwNiAqL1xcbi1cXHRzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtXFx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYywgbm93LnR2X25zZWMpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtXFx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYyxcXG4rXFx0XFx0XFx0XFx0ICAgbm93LnR2X25zZWMpO1xcbiB9XFxuIFxcbiAvKipcXG4gICogc3RtbWFjX2luaXRfdGltZXN0YW1waW5nIC0gaW5pdGlhbGlzZSB0aW1lc3RhbXBpbmdcXG4gICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0gKiBEZXNjcmlwdGlvbjogdGhpcyBpcyB0byB2ZXJpZnkgaWYgdGhlIEhXIHN1cHBvcnRzIHRoZSBQVFB2MSBvciBQVFB2Mi5cXG4tICogVGhpcyBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXFxuLSAqIFRoaXMgZnVuY3Rpb24gYWxzbyByZWdpc3RlcnMgdGhlIHB0cCBkcml2ZXIuXFxuKyAqIERlc2NyaXB0aW9uOiBjb25maWd1cmUgdGhlIFBUUCByZWZlcmVuY2UgY2xvY2sgYW5kIGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlXFxuKyAqIHRpbWVzdGFtcCBjb3VudGVyLCB0aGVuIGRldGVjdCB3aGljaCB0aW1lc3RhbXBpbmcgbW9kZXMgdGhlIEhXIHN1cHBvcnRzLlxcbisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgUFRQIHJlZmVyZW5jZSBjbG9jayBhbmQgZm9yXFxuKyAqIHJlZ2lzdGVyaW5nIHRoZSBQVFAgY2xvY2sgZHJpdmVyLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSB0aW1lc3RhbXAgY291bnRlclxcbisgKiBjYW5ub3QgYmUgaW5pdGlhbGlzZWQuXFxuICAqL1xcbiBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG5AQCAtOTAwLDExICs5MDAsNiBAQCBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwdHBfY2xrX2ZyZXFfY29uZmlnKVxcbiBcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwdHBfY2xrX2ZyZXFfY29uZmlnKHByaXYpO1xcbiBcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXFx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKSB7XFxuLVxcdFxcdG5ldGRldl9pbmZvKHByaXYtXFx1MDAzZWRldiwgXFxcIlBUUCBub3Qgc3VwcG9ydGVkIGJ5IEhXXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHR9XFxuLVxcbiBcXHRyZXQgPSBzdG1tYWNfaW5pdF90c3RhbXBfY291bnRlcihwcml2LCBTVE1NQUNfSFdUU19BQ1RJVkUgfFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgUFRQX1RDUl9UU0NGVVBEVCk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtOTM3LDIyICs5MzIsMzkgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2LCBcXFwiUFRQIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNsa19wdHBfcmVmKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBUUCByZWZlcmVuY2UgY2xvY2s6ICVwZVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdikgPT0gMClcXG4tXFx0XFx0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcXG4rXFx0cmV0ID0gc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JlZik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHN0bW1hY19wdHBfcmVnaXN0ZXIocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3RtbWFjX3JlbGVhc2VfcHRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbitcXHRpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRzdG1tYWNfcHRwX3VucmVnaXN0ZXIocHJpdik7XFxuIFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JlZik7XFxuIH1cXG5AQCAtNDE2MSwxMCArNDE3MywxMiBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0cmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiJXM6IEh3IHNldHVwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRcXHRnb3RvIGluaXRfZXJyb3I7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHN0bW1hY19zZXR1cF9wdHAocHJpdik7XFxuK1xcdHJldCA9IHN0bW1hY19zZXR1cF9wdHAocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcHRwX2Vycm9yO1xcbiBcXG4gXFx0c3RtbWFjX2luaXRfY29hbGVzY2UocHJpdik7XFxuIFxcbkBAIC00MTg5LDcgKzQyMDMsMTAgQEAgc3RhdGljIGludCBfX3N0bW1hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZi50eF9xdWV1ZVtjaGFuXS50eHRpbWVyKTtcXG4gXFxuIFxcdHN0bW1hY19yZWxlYXNlX3B0cChwcml2KTtcXG4taW5pdF9lcnJvcjpcXG4rcHRwX2Vycm9yOlxcbitcXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xcbitcXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGZhbHNlKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTc2ODUsOSArNzcwMiw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXFxuIFxcdC8qIEluIENvYXJzZSBtb2RlLCB3ZSBjYW4gdXNlIGEgc21hbGxlciBzdWJzZWNvbmQgaW5jcmVtZW50LCBsZXQnc1xcbiBcXHQgKiByZWNvbmZpZ3VyZSB0aGUgc3lzdGltZSwgc3Vic2Vjb25kIGluY3JlbWVudCBhbmQgYWRkZW5kLlxcbiBcXHQgKi9cXG4tXFx0c3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9nZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXFxuQEAgLTgzMjcsMTMgKzgzNDIsMTQgQEAgaW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRyZXQgPSBzdG1tYWNfaHdfc2V0dXAobmRldik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiJXM6IEh3IHNldHVwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRcXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRydG5sX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0c3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xcbitcXHRpZiAoc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHtcXG4rXFx0XFx0cmV0ID0gc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX3N0b3BfZG1hO1xcbitcXHR9XFxuIFxcbiBcXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcXG4gXFx0cGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LVxcdTAwM2VwaHlsaW5rKTtcXG5AQCAtODM1Nyw2ICs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyb3Jfc3RvcF9kbWE6XFxuK1xcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XFxuK1xcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgZmFsc2UpO1xcbitlcnJvcl91bmxvY2s6XFxuK1xcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19yZXN1bWUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xcbmluZGV4IDYxMjhlZDFiZDUyMWEuLmRjZmNlNTFiMjg4NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xcbkBAIC05NTksNyArOTU5LDggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzdG1tYWNfcGx0ZnJfbm9pcnFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRpZiAoIXByaXYtXFx1MDAzZXdvbG9wdHMpIHtcXG4gXFx0XFx0LyogRGlzYWJsZSBjbG9jayBpbiBjYXNlIG9mIFBXTSBpcyBvZmYgKi9cXG4tXFx0XFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNsa19wdHBfcmVmKTtcXG4rXFx0XFx0aWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKVxcbitcXHRcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY2xrX3B0cF9yZWYpO1xcbiBcXG4gXFx0XFx0cmV0ID0gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XFxuIFxcdFxcdGlmIChyZXQpXFxuQEAgLTk4NCw2ICs5ODUsOSBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHN0bW1hY19wbHRmcl9ub2lycV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0XFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRcXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY2xrX3B0cF9yZWYpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRuZXRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjE2LjU0MzUzMzM4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDIyODc4OTgyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgc3RtbWFjIChTeW5vcHN5cyBEZXNpZ25XYXJlIC8gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQykgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8pLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBwaHlzaWNhbCBTb0MgYW5kIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGZvciBhbWQ2NC4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxNDZmM2FkZDI2NGI1YjczMTViODNlNWU3OTU0OTIwMjliMjk5YTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODowMzoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbmluZGV4IDc1ODJmY2E2Mzc0MTkuLjBhMDA0OTA4MzJmM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbkBAIC00MTksNiArNDE5LDE3IEBAIGludCBzdG1tYWNfc2V0X2Nsa190eF9yYXRlKHZvaWQgKmJzcF9wcml2LCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcbiBcbiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCBcdTAwMjZcdTAwMjYgIXByaXYtXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yYXRlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN0bW1hY194ZHBfaXNfZW5hYmxlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuIFx0cmV0dXJuICEhcHJpdi1cdTAwM2V4ZHBfcHJvZztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuaW5kZXggNWZlN2U5NWZkZDM0NS4uN2Y1YWRhMTEzMmM0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbkBAIC02MDEsNyArNjAxLDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX2dldF9yeF9od3RzdGFtcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBkbWFfZGVzYyAqcCxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbitzdGF0aWMgaW50IHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuIFx0Ym9vbCB4bWFjID0gZHdtYWNfaXNfeG1hYyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlKTtcbiBcdHUzMiBzZWNfaW5jID0gMDtcbkBAIC02MjUsNyArNjI1LDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdCAqL1xuIFx0dGVtcCA9ICh1NjQpKHRlbXAgXHUwMDNjXHUwMDNjIDMyKTtcbiBcdHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQgPSBkaXZfdTY0KHRlbXAsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JhdGUpO1xuLVx0c3RtbWFjX2NvbmZpZ19hZGRlbmQocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCBwcml2LVx1MDAzZWRlZmF1bHRfYWRkZW5kKTtcbitcdHJldHVybiBzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQpO1xuIH1cbiBcbiAvKipcbkBAIC02NTMsNyArNjUzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR1MzIgdHNfbWFzdGVyX2VuID0gMDtcbiBcdHUzMiB0c19ldmVudF9lbiA9IDA7XG4gXG4tXHRpZiAoIShwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LVx1MDAzZWFkdl90cykpIHtcbitcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJObyBzdXBwb3J0IGZvciBIVyB0aW1lIHN0YW1waW5nXCIpO1xuIFx0XHRwcml2LVx1MDAzZWh3dHNfdHhfZW4gPSAwO1xuIFx0XHRwcml2LVx1MDAzZWh3dHNfcnhfZW4gPSAwO1xuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY19od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKCEocHJpdi1cdTAwM2VkbWFfY2FwLnRpbWVfc3RhbXAgfHwgcHJpdi1cdTAwM2VkbWFfY2FwLmF0aW1lX3N0YW1wKSlcbitcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdCpjb25maWcgPSBwcml2LVx1MDAzZXRzdGFtcF9jb25maWc7XG5AQCAtODY1LDMyICs4NjUsMzIgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90c3RhbXBfY291bnRlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgICAgICB1MzIgc3lzdGltZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JhdGUpIHtcbi1cdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCJJbnZhbGlkIFBUUCBjbG9jayByYXRlXCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbitcdGludCByZXQ7XG4gXG4gXHRzdG1tYWNfY29uZmlnX2h3X3RzdGFtcGluZyhwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHN5c3RpbWVfZmxhZ3MpO1xuIFx0cHJpdi1cdTAwM2VzeXN0aW1lX2ZsYWdzID0gc3lzdGltZV9mbGFncztcbiBcbi1cdHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbitcdHJldCA9IHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBpbml0aWFsaXplIHN5c3RlbSB0aW1lICovXG4gXHRrdGltZV9nZXRfcmVhbF90czY0KFx1MDAyNm5vdyk7XG4gXG4gXHQvKiBsb3dlciAzMiBiaXRzIG9mIHR2X3NlYyBhcmUgc2FmZSB1bnRpbCB5MjEwNiAqL1xuLVx0c3RtbWFjX2luaXRfc3lzdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYywgbm93LnR2X25zZWMpO1xuLVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gc3RtbWFjX2luaXRfc3lzdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYyxcbitcdFx0XHRcdCAgIG5vdy50dl9uc2VjKTtcbiB9XG4gXG4gLyoqXG4gICogc3RtbWFjX2luaXRfdGltZXN0YW1waW5nIC0gaW5pdGlhbGlzZSB0aW1lc3RhbXBpbmdcbiAgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tICogRGVzY3JpcHRpb246IHRoaXMgaXMgdG8gdmVyaWZ5IGlmIHRoZSBIVyBzdXBwb3J0cyB0aGUgUFRQdjEgb3IgUFRQdjIuXG4tICogVGhpcyBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXG4tICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgcHRwIGRyaXZlci5cbisgKiBEZXNjcmlwdGlvbjogY29uZmlndXJlIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBpbml0aWFsaXNlIHRoZSBoYXJkd2FyZVxuKyAqIHRpbWVzdGFtcCBjb3VudGVyLCB0aGVuIGRldGVjdCB3aGljaCB0aW1lc3RhbXBpbmcgbW9kZXMgdGhlIEhXIHN1cHBvcnRzLlxuKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBmb3JcbisgKiByZWdpc3RlcmluZyB0aGUgUFRQIGNsb2NrIGRyaXZlci5cbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSB0aW1lc3RhbXAgY291bnRlclxuKyAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZC5cbiAgKi9cbiBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuQEAgLTkwMCwxMSArOTAwLDYgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwdHBfY2xrX2ZyZXFfY29uZmlnKVxuIFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcHRwX2Nsa19mcmVxX2NvbmZpZyhwcml2KTtcbiBcbi1cdGlmICghKHByaXYtXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcCkpIHtcbi1cdFx0bmV0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXYsIFwiUFRQIG5vdCBzdXBwb3J0ZWQgYnkgSFdcXG5cIik7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdHJldCA9IHN0bW1hY19pbml0X3RzdGFtcF9jb3VudGVyKHByaXYsIFNUTU1BQ19IV1RTX0FDVElWRSB8XG4gXHRcdFx0XHRcdCAgICAgICBQVFBfVENSX1RTQ0ZVUERUKTtcbiBcdGlmIChyZXQpIHtcbkBAIC05MzcsMjIgKzkzMiwzOSBAQCBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBzdG1tYWNfc2V0dXBfcHRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuK1x0XHRuZXRkZXZfaW5mbyhwcml2LVx1MDAzZWRldiwgXCJQVFAgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LFxuIFx0XHRcdCAgICBcImZhaWxlZCB0byBlbmFibGUgUFRQIHJlZmVyZW5jZSBjbG9jazogJXBlXFxuXCIsXG4gXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHRpZiAoc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpID09IDApXG4tXHRcdHN0bW1hY19wdHBfcmVnaXN0ZXIocHJpdik7XG4rXHRyZXQgPSBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yZWYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdG1tYWNfcmVsZWFzZV9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbitcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4rXHRcdHJldHVybjtcbitcbiBcdHN0bW1hY19wdHBfdW5yZWdpc3Rlcihwcml2KTtcbiBcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yZWYpO1xuIH1cbkBAIC00MTYxLDEwICs0MTczLDEyIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwiJXM6IEh3IHNldHVwIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4tXHRcdGdvdG8gaW5pdF9lcnJvcjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHN0bW1hY19zZXR1cF9wdHAocHJpdik7XG4rXHRyZXQgPSBzdG1tYWNfc2V0dXBfcHRwKHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBwdHBfZXJyb3I7XG4gXG4gXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcbiBcbkBAIC00MTg5LDcgKzQyMDMsMTAgQEAgc3RhdGljIGludCBfX3N0bW1hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGhydGltZXJfY2FuY2VsKFx1MDAyNnByaXYtXHUwMDNlZG1hX2NvbmYudHhfcXVldWVbY2hhbl0udHh0aW1lcik7XG4gXG4gXHRzdG1tYWNfcmVsZWFzZV9wdHAocHJpdik7XG4taW5pdF9lcnJvcjpcbitwdHBfZXJyb3I6XG4rXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuK1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTc2ODUsOSArNzcwMiw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG4gXHQvKiBJbiBDb2Fyc2UgbW9kZSwgd2UgY2FuIHVzZSBhIHNtYWxsZXIgc3Vic2Vjb25kIGluY3JlbWVudCwgbGV0J3NcbiBcdCAqIHJlY29uZmlndXJlIHRoZSBzeXN0aW1lLCBzdWJzZWNvbmQgaW5jcmVtZW50IGFuZCBhZGRlbmQuXG4gXHQgKi9cbi1cdHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbiB9XG4gXG4gc3RhdGljIGludCBzdG1tYWNfZGxfdHNfY29hcnNlX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcbkBAIC04MzI3LDEzICs4MzQyLDE0IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldCA9IHN0bW1hY19od19zZXR1cChuZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCIlczogSHcgc2V0dXAgZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbi1cdFx0c3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuIFx0fVxuIFxuLVx0c3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xuK1x0aWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKSB7XG4rXHRcdHJldCA9IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGVycm9yX3N0b3BfZG1hO1xuK1x0fVxuIFxuIFx0c3RtbWFjX2luaXRfY29hbGVzY2UocHJpdik7XG4gXHRwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKHByaXYtXHUwMDNlcGh5bGluayk7XG5AQCAtODM1Nyw2ICs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJvcl9zdG9wX2RtYTpcbitcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuK2Vycm9yX3VubG9jazpcbitcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcmVzdW1lKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jXG5pbmRleCA2MTI4ZWQxYmQ1MjFhLi5kY2ZjZTUxYjI4ODZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jXG5AQCAtOTU5LDcgKzk1OSw4IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc3RtbWFjX3BsdGZyX25vaXJxX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0aWYgKCFwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiBcdFx0LyogRGlzYWJsZSBjbG9jayBpbiBjYXNlIG9mIFBXTSBpcyBvZmYgKi9cbi1cdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4rXHRcdGlmIChzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbitcdFx0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbiBcbiBcdFx0cmV0ID0gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XG4gXHRcdGlmIChyZXQpXG5AQCAtOTg0LDYgKzk4NSw5IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc3RtbWFjX3BsdGZyX25vaXJxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbitcdFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbiBcdFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjE2LjU0MzUzNDU5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMTcxMzkxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2gncyBTdWl0YWJpbGl0eSBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyBhbmFseXppbmcgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc3Vic3lzdGVtIGl0IHRvdWNoZXMuIFRoaXMgb25lJ3MgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2AsIHdoaWNoIGlzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIOKAkyBgZHdtYWNgIOKAkyBhbmQgYHN0bW1hY2AuIE5vdywgbGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUgY3JpdGVyaWE/IFJlYWNoYWJpbGl0eSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuXG5cbkNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UncmUgdGFsa2luZyBHQ0Ugb3IgUUVNVSwgcHJvYmFibHkgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgc3R1ZmY6IFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXAsIHZpcnRpbywgdGhhdCBraW5kIG9mIHRoaW5nLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBkb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSBgc3RtbWFjYCBvciBgZHdtYWNgIGRpcmVjdGx5PyBPciBpcyB0aGlzIGRyaXZlciBkZXNpZ25lZCBtb3JlIGZvciBwaHlzaWNhbCBFdGhlcm5ldCBjb250cm9sbGVycyBvbiBTb0NzIG9yIFBDST8gTGV0IG1lIHJlbWluZCBteXNlbGbigKYgcmlnaHQsIGBzdG1tYWNgIGlzIGEgcGxhdGZvcm0vUENJIGRyaXZlciBmb3IgdGhlIFNUTS9TeW5vcHN5cyBEZXNpZ25XYXJlIE1BQyAoYERXTUFDYCkuXG5cblNvLCBkb2VzIFFFTVUgZW11bGF0ZSBpdD8gSSBkb24ndCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYW5kIG15IG1lbW9yeSBpcyBzb21ldGltZXMgd3JvbmcuIFRpbWUgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgdGhlIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHN1cHBvcnQuIEknbGwgcnVuIHNvbWUgZ3JlcHMgbm93IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYHN0bW1hY2AgYW5kIGhvdyBpdOKAmXMgY29uZmlndXJlZCBhbmQgcmVhY2hlZC4gVW5kZXJzdGFuZGluZyBpdHMgcmVhY2hhYmlsaXR5IGlzIHRoZSBjcml0aWNhbCBmYWN0b3IgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjIyLjg2MDY3NjU4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUxMjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjIyLjkwOTE5NTE0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMTQ2OTU4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgU1RNTUFDIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSdsbCBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCB0aGUgZmVhdHVyZSBzZWxlY3Rpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGxpbWl0YXRpb25zLCBhbmQgYXNzZXNzaW5nIHRoZSBsZXZlbCBvZiBncmFudWxhcml0eSBpbiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBob3cgdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgU1RNaWNyb2VsZWN0cm9uaWNzIFNvQ3MgdGhhdCB1dGlsaXplIHRoaXMgTUFDLiBBcmUgdGhleSB1c2luZyBhIGZpbmUtZ3JhaW5lZCwgZGV2aWNlLXNwZWNpZmljIGFwcHJvYWNoLCBvciBhIG1vcmUgZ2VuZXJhbGl6ZWQsIGZlYXR1cmUtYmFzZWQgc3lzdGVtP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBDT05GSUdfU1RNTUFDXypgIG9wdGlvbnMsIG9mIGNvdXJzZS4gSSdsbCBtZW50YWxseSBtYXAgdGhlbSB0byB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlcnMgYW5kIGZ1bmN0aW9uYWxpdGllcyBJJ20gZmFtaWxpYXIgd2l0aCDigJMgUEhZIGludGVyZmFjZXMsIGludGVycnVwdCBoYW5kbGluZywgRE1BIHNldHRpbmdzLCBhbmQgYW55IG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdmFyaW91cyBmZWF0dXJlcyBzdWNoIGFzIEp1bWJvIGZyYW1lcywgY2hlY2tzdW0gb2ZmbG9hZGluZywgVkxBTiBzdXBwb3J0LCBhbmQgYW55IHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMuXG5cbkknbSBob3BpbmcgdG8gc2VlIGEgd2VsbC1jb21tZW50ZWQgZmlsZSwgdGhhdCBmb2xsb3dzIHN0YW5kYXJkIGtlcm5lbCBjb252ZW50aW9ucyBhbmQgY2xlYXJseSBkZWxpbmVhdGVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMnIGltcGxpY2F0aW9ucy4gQSB3ZWxsLW9yZ2FuaXplZCBgS2NvbmZpZ2AgaXMgYSBzaWduIG9mIGEgd2VsbC1kZXNpZ25lZCBkcml2ZXIsIHNvIEknbSBob3BpbmcgZm9yIGdvb2QgZGVzaWduIHByaW5jaXBsZXMgdG8gYmUgZXZpZGVudC4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgcXVpY2sgcmV2aWV3IGlmIGl0J3Mgd2VsbC1vcmdhbml6ZWQ7IEknbSBob3BpbmcgaXQncyBzdHJhaWdodGZvcndhcmQgc28gSSBjYW4ga2VlcCBtYWtpbmcgcHJvZ3Jlc3Mgb24gbXkgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjI1LjkyMzg5MzA0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTVE1NQUNfRVRIXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBFVEhUT09MX05FVExJTktcXG4gICA3OlxcdFxcdHNlbGVjdCBNSUlcXG4gICA4OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMTA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDExOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTI6XFx0XFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYnVpbHQgYXJvdW5kIGFcXG4gIDE2OlxcdFxcdCAgU3lub3BzeXMgSVAgQ29yZS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgU1RNTUFDX0VUSFxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbiAgMjE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMjM6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzIHVzaW5nIGV0aHRvb2wuIEVuYWJsZSB0aGlzXFxuICAyNjpcXHRcXHQgIGZlYXR1cmUgaWYgeW91IGFyZSBmYWNpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIEhXIGFuZCBzdWJtaXQgdGhlIHRlc3RcXG4gIDI3OlxcdFxcdCAgcmVzdWx0cyB0byB0aGUgbmV0ZGV2IE1haWxpbmcgTGlzdC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFNUTU1BQ19QTEFURk9STVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciB1c2VkIG9uIHNldmVyYWwgU29DczpcXG4gIDM2OlxcdFxcdCAgU1RpLCBBbGx3aW5uZXIsIEFtbG9naWMgTWVzb24sIEFsdGVyYSBTT0NGUEdBLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0aWYgU1RNTUFDX1BMQVRGT1JNXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBEV01BQ19EV0NfUU9TX0VUSFxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIHNucHMsZHdjLXFvcy1ldGhlcm5ldC50eHQgRFQgYmluZGluZy5cXFwiXFxuICA0NjpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDQ3OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjaGlwcyB1c2luZyB0aGUgc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgRFdNQUNfR0VORVJJQ1xcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgZHJpdmVyIGZvciBEV01BQ1xcXCJcXG4gIDU0OlxcdFxcdGRlZmF1bHQgU1RNTUFDX1BMQVRGT1JNXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIEdlbmVyaWMgRFdNQUMgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxcbiAgNTc6XFx0XFx0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXFxuICA1ODpcXHRcXHQgIGRhdGEgZm9yIHNldHVwLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRjb25maWcgRFdNQUNfQU5BUklPTlxcbiAgNjE6XFx0XFx0dHJpc3RhdGUgXFxcIkFkYXB0cnVtIEFuYXJpb24gR01BQyBzdXBwb3J0XFxcIlxcbiAgNjI6XFx0XFx0ZGVmYXVsdCBBUkNcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQyB8fCBDT01QSUxFX1RFU1QpXFxuICA2NDpcXHRcXHRoZWxwXFxuICA2NTpcXHRcXHQgIFN1cHBvcnQgZm9yIEFkYXB0cnVtIEFuYXJpb24gR01BQyBFdGhlcm5ldCBjb250cm9sbGVyLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgQW5hcmlvbiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIERXTUFDX0VJQzc3MDBcXG4gIDcwOlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBFc3dpbiBlaWM3NzAwIGV0aGVybmV0IGRyaXZlclxcXCJcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBBUkNIX0VTV0lOIHx8IENPTVBJTEVfVEVTVFxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgRXN3aW4gRUlDNzcwMCBFdGhlcm5ldCBjb250cm9sbGVyLFxcbiAgNzQ6XFx0XFx0ICB3aGljaCBpbnRlZ3JhdGVzIFN5bm9wc3lzIERlc2lnbldhcmUgUW9TIGZlYXR1cmVzLiBJdCBlbmFibGVzXFxuICA3NTpcXHRcXHQgIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB3aXRoIERNQSBhY2NlbGVyYXRpb24gYW5kIGlzIG9wdGltaXplZFxcbiAgNzY6XFx0XFx0ICBmb3IgZW1iZWRkZWQgc3lzdGVtcy5cXG4gIDc3OlxcdFxcbiAgNzg6XFx0Y29uZmlnIERXTUFDX0lOR0VOSUNcXG4gIDc5OlxcdFxcdHRyaXN0YXRlIFxcXCJJbmdlbmljIE1BQyBzdXBwb3J0XFxcIlxcbiAgODA6XFx0XFx0ZGVmYXVsdCBNQUNIX0lOR0VOSUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MjUuOTIzOTcxNDc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MDEyMzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgc3RtbWFjIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuIEkndmUgYWxyZWFkeSBnb3QgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcsIGJ1dCBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGUgd2l0aGluIHRoZSBzdG1tYWMgZGlyZWN0b3J5IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgd2hhdCBrbm9icyBhcmUgZXhwb3NlZCwgaG93IHRoZXkncmUgcmVsYXRlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBzZXR0aW5ncy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmaW5lciBkZXRhaWxzIOKAkyBtYXliZSB0aGVyZSBhcmUgc29tZSBzdWJ0bGUgb3B0aW1pemF0aW9ucyBvciByYXJlbHkgdXNlZCBmZWF0dXJlcyBJJ3ZlIG92ZXJsb29rZWQuIFVsdGltYXRlbHksIEknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgb2YgdGhlIHN0bW1hYyBkcml2ZXIncyBjb25maWd1cmFibGUgYXNwZWN0cywgc28gSSBjYW4gbGV2ZXJhZ2UgdGhlbSBlZmZlY3RpdmVseSBpbiBteSBvd24gd29yay4gVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIHRob3NlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjI4LjIwNDA5NzY2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgKE1BQ0hfSU5HRU5JQyB8fCBDT01QSUxFX1RFU1QpXFxuICA4MjpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIEluZ2VuaWMgU29Dcy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBUaGlzIHNlbGVjdHMgSW5nZW5pYyBTb0NzIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xcbiAgODc6XFx0XFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIG9uIGZvciB0aGUgSW5nZW5pYyBTb0NzXFxuICA4ODpcXHRcXHQgIE1BQyBldGhlcm5ldCBjb250cm9sbGVyLlxcbiAgODk6XFx0XFxuICA5MDpcXHRjb25maWcgRFdNQUNfSVBRODA2WFxcbiAgOTE6XFx0XFx0dHJpc3RhdGUgXFxcIlFDQSBJUFE4MDZ4IERXTUFDIHN1cHBvcnRcXFwiXFxuICA5MjpcXHRcXHRkZWZhdWx0IEFSQ0hfUUNPTVxcbiAgOTM6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVClcXG4gIDk0OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuICA5NTpcXHRcXHRoZWxwXFxuICA5NjpcXHRcXHQgIFN1cHBvcnQgZm9yIFFDQSBJUFE4MDZYIERXTUFDIEV0aGVybmV0LlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgSVBRODA2eCBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXFxuICA5OTpcXHRcXHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZSBhbnkgb2YgdGhlIGhhcmR3YXJlXFxuIDEwMDpcXHRcXHQgIGFjY2VsZXJhdGlvbiBmZWF0dXJlcyBhdmFpbGFibGUgb24gdGhpcyBTb0MuIE5ldHdvcmsgZGV2aWNlc1xcbiAxMDE6XFx0XFx0ICB3aWxsIGJlaGF2ZSBsaWtlIHN0YW5kYXJkIG5vbi1hY2NlbGVyYXRlZCBldGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHQgIFNlbGVjdCB0aGUgUUNPTV9TT0NJTkZPIGNvbmZpZyBmbGFnIHRvIGVuYWJsZSBzcGVjaWZpYyBkd21hY1xcbiAxMDQ6XFx0XFx0ICBmaXh1cCBiYXNlZCBvbiB0aGUgaXBxODA2eCBTb0MgcmV2aXNpb24uXFxuIDEwNTpcXHRcXG4gMTA2OlxcdGNvbmZpZyBEV01BQ19MUEMxOFhYXFxuIDEwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlhQIExQQzE4eHgvNDN4eCBEV01BQyBzdXBwb3J0XFxcIlxcbiAxMDg6XFx0XFx0ZGVmYXVsdCBBUkNIX0xQQzE4WFhcXG4gMTA5OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfTFBDMThYWCB8fCBDT01QSUxFX1RFU1QpXFxuIDExMDpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAxMTE6XFx0XFx0aGVscFxcbiAxMTI6XFx0XFx0ICBTdXBwb3J0IGZvciBOWFAgTFBDMTh4eC80M3h4IERXTUFDIEV0aGVybmV0LlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgRFdNQUNfTUVESUFURUtcXG4gMTE1OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDI3eHggR01BQyBzdXBwb3J0XFxcIlxcbiAxMTY6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QpXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFN1cHBvcnQgZm9yIE1lZGlhVGVrIEdNQUMgRXRoZXJuZXQgY29udHJvbGxlci5cXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIE1UMjcxMiBTb0Mgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBEV01BQ19NRVNPTlxcbiAxMjM6XFx0XFx0dHJpc3RhdGUgXFxcIkFtbG9naWMgTWVzb24gZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTI0OlxcdFxcdGRlZmF1bHQgQVJDSF9NRVNPTlxcbiAxMjU6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBDT01NT05fQ0xLIFxcdTAwMjZcXHUwMDI2IChBUkNIX01FU09OIHx8IENPTVBJTEVfVEVTVClcXG4gMTI2OlxcdFxcdGhlbHBcXG4gMTI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBBbWxvZ2ljIE1lc29uIFNvQ3MuXFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBBbWxvZ2ljIE1lc29uIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXFxuIDEzMDpcXHRcXHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgTWVzb242LFxcbiAxMzE6XFx0XFx0ICBNZXNvbjgsIE1lc29uOGIgYW5kIEdYQkIgU29Dcy5cXG4gMTMyOlxcdFxcbiAxMzM6XFx0Y29uZmlnIERXTUFDX05VVk9UT05cXG4gMTM0OlxcdFxcdHRyaXN0YXRlIFxcXCJOdXZvdG9uIE1BMzUgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTM1OlxcdFxcdGRlZmF1bHQgQVJDSF9NQTM1XFxuIDEzNjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX01BMzUgfHwgQ09NUElMRV9URVNUKVxcbiAxMzc6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMTM4OlxcdFxcdGhlbHBcXG4gMTM5OlxcdFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBOdXZvdG9uIE1BMzUgc2VyaWVzIFNvQy5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIE51dm90b24gTUEzNSBzZXJpZXMgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydFxcbiAxNDI6XFx0XFx0ICBmb3IgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGUgbnV2b3Rvbi1kd21hYyBkcml2ZXIgaXNcXG4gMTQzOlxcdFxcdCAgdXNlZCBmb3IgTUEzNSBzZXJpZXMgU29Dcy5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIERXTUFDX1FDT01fRVRIUU9TXFxuIDE0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gRVRIUU9TIHN1cHBvcnRcXFwiXFxuIDE0NzpcXHRcXHRkZWZhdWx0IEFSQ0hfUUNPTVxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVClcXG4gMTQ5OlxcdFxcdGhlbHBcXG4gMTUwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIFF1YWxjb21tIEVUSFFPUyBjb3JlLlxcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgUXVhbGNvbW0gRVRIUU9TIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXFxuIDE1MzpcXHRcXHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRjb25maWcgRFdNQUNfUkVORVNBU19HQkVUSFxcbiAxNTY6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgUlovVjJIKFApIEdCRVRIIGFuZCBSWi9UMkgsIFJaL04ySCBHTUFDIHN1cHBvcnRcXFwiXFxuIDE1NzpcXHRcXHRkZWZhdWx0IEFSQ0hfUkVORVNBU1xcbiAxNTg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9SRU5FU0FTIHx8IENPTVBJTEVfVEVTVClcXG4gMTU5OlxcdFxcdHNlbGVjdCBQQ1NfUlpOMV9NSUlDXFxuIDE2MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjI4LjIwNDE4MTY4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjM1MDAzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGFuZCBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGludG8gUENJIHN1cHBvcnQsIGFzIHRoYXQncyBhIGNvbW1vbiBhcmVhIHdoZXJlIEkgbmVlZCB0byBtYWtlIHRhcmdldGVkIGNoYW5nZXMuIFVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBwcm9wZXIgZHJpdmVyIGludGVncmF0aW9uIGFuZCBzeXN0ZW0gc3RhYmlsaXR5LiBJJ2xsIHByb2JhYmx5IGxvb2sgZm9yIGl0cyBlbnRyeSBwb2ludCwgdGhlbiBmb2xsb3cgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IGl0IGxpbmtzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBhbHNvIG1pZ2h0IHJldmVhbCBuZXcgb3B0aW9ucyBJIGhhdmVuJ3QgZXZlbiBlbmNvdW50ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzAuNTI3NjgzOTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYxOlxcdFxcdCAgU3VwcG9ydCBmb3IgR2lnYWJpdCBFdGhlcm5ldCBJbnRlcmZhY2UgKEdCRVRIKS8gRXRoZXJuZXQgTUFDIChHTUFDKVxcbiAxNjI6XFx0XFx0ICBvbiBSZW5lc2FzIFNvQ3MuXFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdCAgVGhpcyBzZWxlY3RzIFJlbmVzYXMgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkZXZpY2VcXG4gMTY1OlxcdFxcdCAgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciB0aGUgUlovVjJIKFApIGZhbWlseSwgUlovVDJIIGFuZFxcbiAxNjY6XFx0XFx0ICBSWi9OMkggU29Dcy5cXG4gMTY3OlxcdFxcbiAxNjg6XFx0Y29uZmlnIERXTUFDX1JPQ0tDSElQXFxuIDE2OTpcXHRcXHR0cmlzdGF0ZSBcXFwiUm9ja2NoaXAgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTcwOlxcdFxcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxcbiAxNzE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpXFxuIDE3MjpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAxNzM6XFx0XFx0aGVscFxcbiAxNzQ6XFx0XFx0ICBTdXBwb3J0IGZvciBFdGhlcm5ldCBjb250cm9sbGVyIG9uIFJvY2tjaGlwIFJLMzI4OCBTb0MuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBSb2NrY2hpcCBSSzMyODggU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcXG4gMTc3OlxcdFxcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRjb25maWcgRFdNQUNfUlpOMVxcbiAxODA6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgUlovTjEgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTgxOlxcdFxcdGRlZmF1bHQgQVJDSF9SWk4xXFxuIDE4MjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1JaTjEgfHwgQ09NUElMRV9URVNUKVxcbiAxODM6XFx0XFx0c2VsZWN0IFBDU19SWk4xX01JSUNcXG4gMTg0OlxcdFxcdGhlbHBcXG4gMTg1OlxcdFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSZW5lc2FzIFJaL04xIFNvQyBmYW1pbHkuXFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBSZW5lc2FzIFJaL04xIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXFxuIDE4ODpcXHRcXHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBzdXBwb3J0IGNhbiBtYWtlIHVzZSBvZiBhIGN1c3RvbSBNSUlcXG4gMTg5OlxcdFxcdCAgY29udmVydGVyIFBDUyBkZXZpY2UuXFxuIDE5MDpcXHRcXG4gMTkxOlxcdGNvbmZpZyBEV01BQ19TMzJcXG4gMTkyOlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgUzMyRy9TMzJSIEdNQUMgc3VwcG9ydFxcXCJcXG4gMTkzOlxcdFxcdGRlZmF1bHQgQVJDSF9TMzJcXG4gMTk0OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfUzMyIHx8IENPTVBJTEVfVEVTVClcXG4gMTk1OlxcdFxcdGhlbHBcXG4gMTk2OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBOWFAgUzMyQ0MgU09Dcy5cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0ICBUaGlzIHNlbGVjdHMgTlhQIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcXG4gMTk5OlxcdFxcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIFMzMkNDIHNlcmllc1xcbiAyMDA6XFx0XFx0ICBTT0NzIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlciwgaWUuIFMzMkcyeHgsIFMzMkczeHggYW5kXFxuIDIwMTpcXHRcXHQgIFMzMlI0NS5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0Y29uZmlnIERXTUFDX1NPQ0ZQR0FcXG4gMjA0OlxcdFxcdHRyaXN0YXRlIFxcXCJTT0NGUEdBIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDIwNTpcXHRcXHRkZWZhdWx0IEFSQ0hfSU5URUxfU09DRlBHQVxcbiAyMDY6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9JTlRFTF9TT0NGUEdBIHx8IENPTVBJTEVfVEVTVClcXG4gMjA3OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuIDIwODpcXHRcXHRzZWxlY3QgTURJT19SRUdNQVBcXG4gMjA5OlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAyMTA6XFx0XFx0c2VsZWN0IFBDU19MWU5YXFxuIDIxMTpcXHRcXHRoZWxwXFxuIDIxMjpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gQWx0ZXJhIFNPQ0ZQR0FcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIEFsdGVyYSBTT0NGUEdBIFNvQyBnbHVlIGxheWVyIHN1cHBvcnRcXG4gMjE1OlxcdFxcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3JcXG4gMjE2OlxcdFxcdCAgYXJyaWE1IGFuZCBjeWNsb25lNSBGUEdBIFNvQ3MuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBEV01BQ19TT1BIR09cXG4gMjE5OlxcdFxcdHRyaXN0YXRlIFxcXCJTb3BoZ28gZHdtYWMgc3VwcG9ydFxcXCJcXG4gMjIwOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfU09QSEdPIHx8IENPTVBJTEVfVEVTVClcXG4gMjIxOlxcdFxcdGRlZmF1bHQgbSBpZiBBUkNIX1NPUEhHT1xcbiAyMjI6XFx0XFx0aGVscFxcbiAyMjM6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVycyBvbiBTb3BoZ28gUklTQy1WIFNvQ3NcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIFNvcGhnbyBTb0Mgc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0XFxuIDIyNjpcXHRcXHQgIGZvciB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZVxcbiAyMjc6XFx0XFx0ICBldGhlcm5ldCBjb250cm9sbGVycyBvbiB2YXJpb3VzIFNvcGhnbyBTb0NzLlxcbiAyMjg6XFx0XFxuIDIyOTpcXHRjb25maWcgRFdNQUNfU1BBQ0VNSVRcXG4gMjMwOlxcdFxcdHRyaXN0YXRlIFxcXCJTcGFjZW1pdCBkd21hYyBzdXBwb3J0XFxcIlxcbiAyMzE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9TUEFDRU1JVCB8fCBDT01QSUxFX1RFU1QpXFxuIDIzMjpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAyMzM6XFx0XFx0ZGVmYXVsdCBtIGlmIEFSQ0hfU1BBQ0VNSVRcXG4gMjM0OlxcdFxcdGhlbHBcXG4gMjM1OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gU3BhY2VtaXQgUklTQy1WIFNvQ3NcXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIFNwYWNlbWl0IHBsYXRmb3JtIHNwZWNpZmljIGdsdWUgbGF5ZXIgc3VwcG9ydFxcbiAyMzg6XFx0XFx0ICBmb3IgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciB0aGVcXG4gMjM5OlxcdFxcdCAgU3BhY2VtaXQgSzMgZXRoZXJuZXQgY29udHJvbGxlcnMuXFxuIDI0MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzAuNTI3Nzk3MzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjA3NTk3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlLCBwaWNraW5nIHVwIGZyb20gbGluZSAyNDEuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGRlZmluZWQgYW5kIGhvdyB0aGluZ3MgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgZnVydGhlciBkb3duIGluIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBtYXliZSBhbnkgZGVmYXVsdCB2YWx1ZXMgYmVpbmcgc2V0IHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIGFyZWEgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBJJ20gbG9va2luZyBmb3IgdGhlIHN0cnVjdHVyZSBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgYXJlYSBvZiBleHBlcnRpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODowMzozMy4xODg1NjAwOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQxOlxcdGNvbmZpZyBEV01BQ19TVEFSRklWRVxcbiAyNDI6XFx0XFx0dHJpc3RhdGUgXFxcIlN0YXJGaXZlIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDI0MzpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1NUQVJGSVZFIHx8IENPTVBJTEVfVEVTVClcXG4gMjQ0OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuIDI0NTpcXHRcXHRkZWZhdWx0IG0gaWYgQVJDSF9TVEFSRklWRVxcbiAyNDY6XFx0XFx0aGVscFxcbiAyNDc6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVycyBvbiBTdGFyRml2ZSBSSVNDLVYgU29Dc1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgU3RhckZpdmUgcGxhdGZvcm0gc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0XFxuIDI1MDpcXHRcXHQgIGZvciB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZVxcbiAyNTE6XFx0XFx0ICBTdGFyRml2ZSBKSDcxMDAgYW5kIEpINzExMCBldGhlcm5ldCBjb250cm9sbGVycy5cXG4gMjUyOlxcdFxcbiAyNTM6XFx0Y29uZmlnIERXTUFDX1NUSVxcbiAyNTQ6XFx0XFx0dHJpc3RhdGUgXFxcIlNUaSBHTUFDIHN1cHBvcnRcXFwiXFxuIDI1NTpcXHRcXHRkZWZhdWx0IEFSQ0hfU1RJXFxuIDI1NjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1NUSSB8fCBDT01QSUxFX1RFU1QpXFxuIDI1NzpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAyNTg6XFx0XFx0aGVscFxcbiAyNTk6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIFNUaSBTT0NzLlxcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHQgIFRoaXMgc2VsZWN0cyBTVGkgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xcbiAyNjI6XFx0XFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIG9uIGZvciB0aGUgU1RpIHNlcmllc1xcbiAyNjM6XFx0XFx0ICBTT0NzIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlci5cXG4gMjY0OlxcdFxcbiAyNjU6XFx0Y29uZmlnIERXTUFDX1NUTTMyXFxuIDI2NjpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNMzIgRFdNQUMgc3VwcG9ydFxcXCJcXG4gMjY3OlxcdFxcdGRlZmF1bHQgQVJDSF9TVE0zMlxcbiAyNjg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgKEFSQ0hfU1RNMzIgfHwgQ09NUElMRV9URVNUKVxcbiAyNjk6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMjcwOlxcdFxcdGhlbHBcXG4gMjcxOlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBTVE0zMiBTT0NzLlxcbiAyNzI6XFx0XFxuIDI3MzpcXHRcXHQgIFRoaXMgc2VsZWN0cyBTVE0zMiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXFxuIDI3NDpcXHRcXHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgb24gZm9yIHRoZSBTVE0zMiBzZXJpZXNcXG4gMjc1OlxcdFxcdCAgU09DcyBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBEV01BQ19TVU5YSVxcbiAyNzg6XFx0XFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBHTUFDIHN1cHBvcnRcXFwiXFxuIDI3OTpcXHRcXHRkZWZhdWx0IEFSQ0hfU1VOWElcXG4gMjgwOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUKVxcbiAyODE6XFx0XFx0aGVscFxcbiAyODI6XFx0XFx0ICBTdXBwb3J0IGZvciBBbGx3aW5uZXIgQTIwL0EzMSBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHQgIFRoaXMgc2VsZWN0cyBBbGx3aW5uZXIgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXFxuIDI4NTpcXHRcXHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciBBMjAvQTMxXFxuIDI4NjpcXHRcXHQgIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlci5cXG4gMjg3OlxcdFxcbiAyODg6XFx0Y29uZmlnIERXTUFDX1NVTjhJXFxuIDI4OTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWxsd2lubmVyIHN1bjhpIEdNQUMgc3VwcG9ydFxcXCJcXG4gMjkwOlxcdFxcdGRlZmF1bHQgQVJDSF9TVU5YSVxcbiAyOTE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QpXFxuIDI5MjpcXHRcXHRzZWxlY3QgTURJT19CVVNfTVVYXFxuIDI5MzpcXHRcXHRoZWxwXFxuIDI5NDpcXHRcXHQgIFN1cHBvcnQgZm9yIEFsbHdpbm5lciBIMyBBODNUIEE2NCBFTUFDIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHQgIFRoaXMgc2VsZWN0cyBBbGx3aW5uZXIgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXFxuIDI5NzpcXHRcXHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciBIMy9BODNUL0E2NFxcbiAyOTg6XFx0XFx0ICBFTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBEV01BQ19TVU41NUlcXG4gMzAxOlxcdFxcdHRyaXN0YXRlIFxcXCJBbGx3aW5uZXIgc3VuNTVpIEdNQUMyMDAgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlZmF1bHQgQVJDSF9TVU5YSVxcbiAzMDM6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QpXFxuIDMwNDpcXHRcXHRzZWxlY3QgTURJT19CVVNfTVVYXFxuIDMwNTpcXHRcXHRoZWxwXFxuIDMwNjpcXHRcXHQgIFN1cHBvcnQgZm9yIEFsbHdpbm5lciBBNTIzL1Q1MjcgR01BQzIwMCBldGhlcm5ldCBjb250cm9sbGVycy5cXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0ICBUaGlzIHNlbGVjdHMgQWxsd2lubmVyIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZVxcbiAzMDk6XFx0XFx0ICBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgQTUyMy9UNTI3XFxuIDMxMDpcXHRcXHQgIEdNQUMyMDAgZXRoZXJuZXQgY29udHJvbGxlci5cXG4gMzExOlxcdFxcbiAzMTI6XFx0Y29uZmlnIERXTUFDX1RIRUFEXFxuIDMxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVC1IRUFEIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1RIRUFEIHx8IENPTVBJTEVfVEVTVClcXG4gMzE1OlxcdFxcdGhlbHBcXG4gMzE2OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gVC1IRUFEIFJJU0MtViBTb0NzXFxuIDMxNzpcXHRcXG4gMzE4OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBULUhFQUQgcGxhdGZvcm0gc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0IGZvclxcbiAzMTk6XFx0XFx0ICB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIFQtSEVBRCBUSDE1MjBcXG4gMzIwOlxcdFxcdCAgZXRoZXJuZXQgY29udHJvbGxlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzMuMTg4NzI3MTI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MDUyMjkyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgcmVtYWluZGVyIG9mIHRoaXMgS2NvbmZpZyBmaWxlLCBwaWNraW5nIHVwIGZyb20gbGluZSAzMjEgYW5kIGdvaW5nIHRvIHRoZSBlbmQuIEknbSBrZWVuIHRvIHNlZSB3aGF0IGhpZGRlbiBnZW1zIG9yIHN1YnRsZSBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBsdXJraW5nIHRoZXJlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgb2Z0ZW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgYW5kIGltcGFjdGZ1bCBzZXR0aW5ncyBhcmUgZm91bmQgdHVja2VkIGF3YXksIG1heWJlIGluIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggb2JzY3VyZSBoYXJkd2FyZSBvciBhIHNwZWNpZmljLCByYXJlbHkgdXNlZCBmZWF0dXJlLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlLCBzdGFiaWxpdHksIG9yIGV2ZW4gc2VjdXJpdHksIGJ1dCB0aGF0IGNvdWxkIGVhc2lseSBiZSBvdmVybG9va2VkIGR1cmluZyBhIGN1cnNvcnkgcmV2aWV3LiBQZXJoYXBzIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmVu4oCZdCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGluaXRpYWwgY29udGV4dCwgb3IgbWF5YmUgdGhlcmUgYXJlIGRlcHJlY2F0ZWQgb3B0aW9ucyBzdGlsbCBwcmVzZW50IHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgbmVzdGVkIGBpZmAgc3RhdGVtZW50cywgYXMgdGhvc2UgYXJlIG9mdGVuIHdoZXJlIGNvbXBsZXhpdHkgYW5kIHBvdGVudGlhbCBwaXRmYWxscyByZXNpZGUuIEFuZCBvZiBjb3Vyc2UsIEknbSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBvcHBvcnR1bml0aWVzIHRvIHJlZmFjdG9yIG9yIHNpbXBsaWZ5IHRoZSBjb25maWd1cmF0aW9uLCBlaXRoZXIgZm9yIGNsYXJpdHkgb3IgZWZmaWNpZW5jeS4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzYuMDkzOTU5MDMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIxOlxcdFxcbiAzMjI6XFx0Y29uZmlnIERXTUFDX0lNWDhcXG4gMzIzOlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgSU1YOCBEV01BQyBzdXBwb3J0XFxcIlxcbiAzMjQ6XFx0XFx0ZGVmYXVsdCBBUkNIX01YQ1xcbiAzMjU6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9NWEMgfHwgQ09NUElMRV9URVNUKVxcbiAzMjY6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMzI3OlxcdFxcdGhlbHBcXG4gMzI4OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBOWFAgaS5NWDggU09Dcy5cXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0ICBUaGlzIHNlbGVjdHMgTlhQIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcXG4gMzMxOlxcdFxcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgaS5NWDggc2VyaWVzIGxpa2VcXG4gMzMyOlxcdFxcdCAgaU1YOE1QL2lNWDhEWEwgR01BQyBldGhlcm5ldCBjb250cm9sbGVyLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgRFdNQUNfSU5URUxfUExBVFxcbiAzMzU6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDMzNjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gMzM3OlxcdFxcdGhlbHBcXG4gMzM4OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gSW50ZWwgU29Dc1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgSW50ZWwgcGxhdGZvcm0gc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0IGZvclxcbiAzNDE6XFx0XFx0ICB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZSBJbnRlbCBLZWVtIEJheVxcbiAzNDI6XFx0XFx0ICBTb0MuXFxuIDM0MzpcXHRcXG4gMzQ0OlxcdGNvbmZpZyBEV01BQ19MT09OR1NPTjFcXG4gMzQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJMb29uZ3NvbjEgR01BQyBzdXBwb3J0XFxcIlxcbiAzNDY6XFx0XFx0ZGVmYXVsdCBNQUNIX0xPT05HU09OMzJcXG4gMzQ3OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKE1BQ0hfTE9PTkdTT04zMiB8fCBDT01QSUxFX1RFU1QpXFxuIDM0ODpcXHRcXHRoZWxwXFxuIDM0OTpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24xIFNvQy5cXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0ICBUaGlzIHNlbGVjdHMgTG9vbmdzb24xIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcXG4gMzUyOlxcdFxcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgTG9vbmdzb24xLWJhc2VkIGJvYXJkc1xcbiAzNTM6XFx0XFx0ICBsaWtlIExvb25nc29uIExTMUIvTFMxQy5cXG4gMzU0OlxcdFxcbiAzNTU6XFx0Y29uZmlnIERXTUFDX1RFR1JBXFxuIDM1NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTlZJRElBIFRlZ3JhIE1HQkUgc3VwcG9ydFxcXCJcXG4gMzU3OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcXG4gMzU4OlxcdFxcdGhlbHBcXG4gMzU5OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBNdWx0aS1HaWdhQml0IEV0aGVybmV0IChNR0JFKSBDb250cm9sbGVyIHRoYXQgaXNcXG4gMzYwOlxcdFxcdCAgZm91bmQgb24gdGhlIE5WSURJQSBUZWdyYSBTb0MgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgdGhlIGdsdWVcXG4gMzYxOlxcdFxcdCAgbGF5ZXIgb24gdG9wIG9mIHRoZSBzdG1tYWMgZHJpdmVyIHJlcXVpcmVkIGZvciB0aGVzZSBOVklESUEgVGVncmEgU29DXFxuIDM2MjpcXHRcXHQgIGRldmljZXMuXFxuIDM2MzpcXHRcXG4gMzY0OlxcdGNvbmZpZyBEV01BQ19WSVNDT05USVxcbiAzNjU6XFx0XFx0dHJpc3RhdGUgXFxcIlRvc2hpYmEgVmlzY29udGkgRFdNQUMgc3VwcG9ydFxcXCJcXG4gMzY2OlxcdFxcdGRlZmF1bHQgQVJDSF9WSVNDT05USVxcbiAzNjc6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBDT01NT05fQ0xLIFxcdTAwMjZcXHUwMDI2IChBUkNIX1ZJU0NPTlRJIHx8IENPTVBJTEVfVEVTVClcXG4gMzY4OlxcdFxcdGhlbHBcXG4gMzY5OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBWaXNjb250aSBTb0NzLlxcbiAzNzA6XFx0XFxuIDM3MTpcXHRlbmRpZiAjIFNUTU1BQ19QTEFURk9STVxcbiAzNzI6XFx0XFxuIDM3MzpcXHRjb25maWcgU1RNTUFDX0xJQlBDSVxcbiAzNzQ6XFx0XFx0dHJpc3RhdGVcXG4gMzc1OlxcdFxcdGhlbHBcXG4gMzc2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJIGJ1cyBoZWxwZXJzIGZvciB0aGUgc3RtbWFjIGRyaXZlci5cXG4gMzc3OlxcdFxcbiAzNzg6XFx0Y29uZmlnIERXTUFDX0lOVEVMXFxuIDM3OTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgR01BQyBzdXBwb3J0XFxcIlxcbiAzODA6XFx0XFx0ZGVmYXVsdCBYODZcXG4gMzgxOlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAzODI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDM4MzpcXHRcXHRkZXBlbmRzIG9uIEFDUElcXG4gMzg0OlxcdFxcdGhlbHBcXG4gMzg1OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBJbnRlbCBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlXFxuIDM4NjpcXHRcXHQgIHN0bW1hYyBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIEludGVsIFF1YXJrL0VITC9UR0wuXFxuIDM4NzpcXHRcXG4gMzg4OlxcdGNvbmZpZyBEV01BQ19MT09OR1NPTlxcbiAzODk6XFx0XFx0dHJpc3RhdGUgXFxcIkxvb25nc29uIFBDSSBEV01BQyBzdXBwb3J0XFxcIlxcbiAzOTA6XFx0XFx0ZGVmYXVsdCBNQUNIX0xPT05HU09ONjRcXG4gMzkxOlxcdFxcdGRlcGVuZHMgb24gKE1BQ0hfTE9PTkdTT042NCB8fCBDT01QSUxFX1RFU1QpIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAzOTI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDM5MzpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiAzOTQ6XFx0XFx0aGVscFxcbiAzOTU6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXFxuIDM5NjpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxcbiAzOTc6XFx0XFxuIDM5ODpcXHRjb25maWcgRFdNQUNfTU9UT1JDT01NXFxuIDM5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBDSSBEV01BQyBzdXBwb3J0XFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzYuMDk0MDU5NTcyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjkzMzA5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIEJhY2sgaW50byB0aGUgS2NvbmZpZyBEZXB0aHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBiYWNrIGludG8gdGhpcyBLY29uZmlnIGZpbGUuIEkndmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgc2VjdGlvbiwgYW5kIEkgdGhpbmsgSSByZW1lbWJlciB3aGVyZSBJIGxlZnQgb2ZmLi4uIGxpbmUgNDAxLiBMZXQncyBnZXQgdGhlIHdob2xlIHRoaW5nIGluIHZpZXcgc28gSSBjYW4gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGNvbnRleHQuIEkgbmVlZCB0byByZWZyZXNoIHRoZSByZWxhdGlvbnNoaXBzLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBIb3BlZnVsbHkgaXQncyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBUaGVyZSdzIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZsYWcgSSBuZWVkIHRvIHRyYWNrIGRvd24sIGFuZCBJJ20gYmV0dGluZyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBsdXJraW5nIGluIHRoaXMgc2VjdGlvbi4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2FuZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjM4LjIyMzM5MjU0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMTpcXHRcXHRzZWxlY3QgTU9UT1JDT01NX1BIWVxcbiA0MDI6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDAzOlxcdFxcdGhlbHBcXG4gNDA0OlxcdFxcdCAgVGhpcyBlbmFibGVzIGdsdWUgZHJpdmVyIGZvciBNb3RvcmNvbW0gRFdNQUMtYmFzZWQgUENJIEV0aGVybmV0XFxuIDQwNTpcXHRcXHQgIGNvbnRyb2xsZXJzLiBDdXJyZW50bHkgb25seSBZVDY4MDEgaXMgc3VwcG9ydGVkLlxcbiA0MDY6XFx0XFxuIDQwNzpcXHRjb25maWcgU1RNTUFDX1BDSVxcbiA0MDg6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuIDQwOTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiA0MTA6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDQxMTpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiA0MTI6XFx0XFx0aGVscFxcbiA0MTM6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGJ1cyBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cXG4gNDE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgd2FzIHRlc3RlZCBvbiBYTElOWCBYQzJWMzAwMCBGRjExNTJBTVQwMjIxXFxuIDQxNTpcXHRcXHQgIEQxMjE1OTk0QSBWSVJURVggRlBHQSBib2FyZCBhbmQgU05QUyBRb1MgSVBLIFByb3RvdHlwaW5nIEtpdC5cXG4gNDE2OlxcdFxcbiA0MTc6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxcbiA0MTg6XFx0XFxuIDQxOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDQyMDpcXHRlbmRpZiAjIFNUTU1BQ19FVEhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzguMjIzNDcyMTg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNjA1NDI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNUTU1BQyBSZWFjaGFiaWxpdHkgaW4gUUVNVS9TeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZmlndXJlIG91dCBpZiBJIGNhbiB0cmlnZ2VyIGBzdG1tYWNgIGluIHRoZSBjb250ZXh0IG9mIFFFTVUvc3l6a2FsbGVyLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIFNlY3Rpb24gMiBmcm9tIHRoZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGhpZ2hsaWdodHMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBgc3RtbWFjYCwgb3IgaXRzIGVxdWl2YWxlbnQgYERXTUFDYCwgZW11bGF0ZWQgd2l0aGluIHN0YW5kYXJkIFFFTVU/IE9yIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgcGh5c2ljYWwgaGFyZHdhcmUgY29udHJvbGxlciwgbGlrZSBzb21ldGhpbmcgYmFrZWQgaW50byBhbiBTb0M/XG5cbk15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlcmUgKmlzKiBhIERXTUFDIG9yIHN0bW1hYyBkZXZpY2Ugd2l0aGluIFFFTVUuIFRoZW4gSSBzdGFydCB0aGlua2luZywgXCJ3YWl0LCB3aGF0IGFib3V0IGBhbGx3aW5uZXItZW1hY2Agb3IgYHN0bTMyYD9cIiBCdXQgdGhlbiBJIHJlYWxpemUgdGhlIFNUTTMyIGluIFFFTVUgaXMgdXN1YWxseSBhIENvcnRleC1NLCBhbmQgd2UncmUgdGFyZ2V0aW5nIGFtZDY0LiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCEgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuXG5cbk9rYXksIG9uIGFtZDY0LCBgc3RtbWFjYCBpcyB0eXBpY2FsbHkgYSBkcml2ZXIgZm9yIEV0aGVybmV0IE1BQ3MgZnJvbSBTVE1pY3JvZWxlY3Ryb25pY3Mgb3IgU3lub3BzeXMuIFRoZXNlIE1BQ3MgYXJlIHVzdWFsbHkgZm91bmQgb24gc3BlY2lmaWMgU29DcyAoQVJNLCBSSVNDLVYsIGV0Yy4pIG9yIGludGVncmF0ZWQgdmlhIFBDSSBvbiBJbnRlbCBRdWFyay9FSEwvVEdMLCBNb3RvcmNvbW0sIG9yIEZQR0EgZGV2aWNlcy4gQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBgc3RtbWFjYCBvbiBhbWQ2NCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKT8gTm8sIHRoaXMgZG9lc24ndCBzZWVtIHBvc3NpYmxlLiBTdGFuZGFyZCBRRU1VIHg4Nl82NCB1c2VzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIGFuZCB2aXJ0aW8tbmV0LCBub3QgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUNzLiBObyBlbXVsYXRpb24gb2YgYHN0bW1hY2AgZm9yIHg4Nl82NCwgb3IgZm9yIGEgUEMvUTM1IG1hY2hpbmUsIGV4aXN0cy5cblxuRXZlbiBpZiBJIHdhcyBvbiBhbiBBUk0gcGxhdGZvcm0gd2l0aGluIFFFTVUsIHRoZSB2aXJ0dWFsIG1hY2hpbmUgc2V0dXAgd291bGQgdXNlIHZpcnRpby1uZXQuIENlcnRhaW4gYm9hcmQgZW11bGF0aW9ucywgbGlrZSBvcmFuZ2VwaS1wYywgbWlnaHQgaGF2ZSBhIHN1bnhpIG9yIGFsbHdpbm5lciBlbWFjLCBidXQgc3l6a2FsbGVyIHVzdWFsbHkgcnVucyBvbiBzdGFuZGFyZCBRRU1VIHg4Nl82NCBvciBhcm02NCB2aXJ0IG1hY2hpbmVzLiBCdXQgcmVtZW1iZXIsIHdlJ3JlIG9uIGFtZDY0LlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRldmljZXMsIFVTQiBnYWRnZXRzLCB0dW4vdGFwIGludGVyZmFjZXMsIG9yIG5ldGxpbmsgaW50ZXJmYWNlcyB0aGF0IGNvdWxkICpzb21laG93KiB0cmlnZ2VyIGBzdG1tYWNfbWFpbi5jYD8gTm8uIFRoZSB3YXkgaXQgd29ya3MsIGBzdG1tYWNgIGlzIGEgbmV0X2RldmljZSBkcml2ZXIgbWVhbnQgZm9yICpwaHlzaWNhbCogaGFyZHdhcmUgTUFDcywgU29Dcywgb3IgUENJIGRldmljZXMuIFRvIGdldCBhIG5ldGRldiBjcmVhdGVkIGJ5IGBzdG1tYWNgLCB0aGUgZHJpdmVyIG5lZWRzIHRvIHByb2JlIGFuIGFjdHVhbCBkZXZpY2UsIHdoaWNoIGhhcHBlbnMgdGhyb3VnaCBhIHBsYXRmb3JtIGRldmljZSBvciBhIFBDSSBkZXZpY2Ugd2l0aCBzcGVjaWZpYyBWSUQvUElELiBObyBoYXJkd2FyZSwgbm8gcHJvYmUuIElmIG5vIGhhcmR3YXJlLCBubyBgc3RtbWFjYCBuZXRfZGV2aWNlIGV4aXN0cywgc28gZnVuY3Rpb25zIGxpa2UgYF9fc3RtbWFjX29wZW5gLCBgc3RtbWFjX2h3dHN0YW1wX3NldGAsIGV0Yy4sIGFyZSBuZXZlciBjYWxsZWQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UsIGxvb2sgZm9yIG1vY2sgb3IgdmlydHVhbCBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgdXNpbmcgYHN0bW1hY2AuIEkgbmVlZCB0byBzZWFyY2ggZm9yIHVzZXMgb2YgYHN0bW1hY19wcm9iZV9jb25maWdfZHRgIG9yIGBzdG1tYWNfZHZyX3Byb2JlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODowMzo0Ny41ODQwMTc5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjQ1NDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZHZyX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM9MjgzPXN0YXRpYyBpbnQgZHdjX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYzozMzA6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyNjM9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM0MTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM0Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM9Mzc0PXN0YXRpYyBpbnQgaXBxODA2eF9nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYzo0ODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jPTQyPXN0YXRpYyBpbnQgbHBjMTh4eF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYzo2ODpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM9NDc9c3RhdGljIGludCBtZXNvbjZfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYzo3MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9NDg9c3RhdGljIGludCByem4xX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jOjY4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM9MzU9c3RhdGljIGludCBzb3BoZ29fZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jOjY1OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XFx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAzLVxcdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjA4LVxcdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5OlxcdCAqIHNvIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XFx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3Ny1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQxMT12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDEyOmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTMtXFx0XFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03ODEwPUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wbGF0X2RhdF9hbGxvYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODExLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzgxMjpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTE2OiAqIHN0bW1hY19kdnJfcHJvYmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTctICogQGRldjogZGV2aWNlIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjU6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cXHRcXHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTM2OlxcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzNy1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBsYXRfZGF0LVxcdTAwM2VleGl0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQxLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxNDI6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjQ5LjQ1MDQ4MDUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzODA5MjAyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHN0bW1hY2AgRHJpdmVyJ3MgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBgc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24gYW5kIGhvdyBpdCdzIHVzZWQuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBhbGwgdGhlIGNhbGxlcnMgYXJlIGRldmljZSBwcm9iZSByb3V0aW5lcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBoYXJkd2FyZSBwbGF0Zm9ybXMgb3IgUENJIGRldmljZXMuIEkgc2VlIGEgd2lkZSByYW5nZSBvZiBkZXZpY2VzIHRoZXJlOiBgZHdtYWMtZHdjLXFvcy1ldGhgLCBgZHdtYWMtaW50ZWwtcGxhdGAsIGBkd21hYy1pbnRlbGAsIGBkd21hYy1pcHE4MDZ4YCwgYGR3bWFjLWxvb25nc29uYCwgYGR3bWFjLWxwYzE4eHhgLCBgZHdtYWMtbWVkaWF0ZWtgLCBgZHdtYWMtbWVzb25gLCBgZHdtYWMtbW90b3Jjb21tYCwgYGR3bWFjLXJ6bjFgLCBgZHdtYWMtc29waGdvYCwgYGR3bWFjLXNwYWNlbWl0YCwgYGR3bWFjLXN0YXJmaXZlYCwgYGR3bWFjLXN0bTMyYCwgYGR3bWFjLXN1bjhpYCwgYGR3bWFjLXRlZ3JhYCwgYGR3bWFjLXZpc2NvbnRpYCwgYHN0bW1hY19wY2lgLCBhbmQgYHN0bW1hY19wbGF0Zm9ybWAuXG5cblRoZSBrZXkgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoYXQgKm5vbmUqIG9mIHRoZXNlIGFyZSBlbXVsYXRlZCBieSB0aGUgc3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zIHRoYXQgc3l6a2FsbGVyIGNvbW1vbmx5IHVzZXMgb24gYW1kNjQuIFRoZXNlIGFyZSBwaHlzaWNhbCBTb0NzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgY29udHJvbGxlcnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY3JpdGVyaWEgb3V0bGluZWQgaW4gU2VjdGlvbiAyIHJlZ2FyZGluZyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEluIHBhcnRpY3VsYXIsIHRoZSBzZWN0aW9uIG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFUgZHJpdmVycy5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjYCBkaXJlY3RvcnksIHdoaWNoIGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBzdG1tYWNgIGRyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERXTUFDIEV0aGVybmV0IGhhcmR3YXJlIGNvbnRyb2xsZXJzLiBUaGlzIGlzIHRoZSBkcml2ZXIgd2UncmUgZm9jdXNpbmcgb24uXG5cbk15IGNvbmNsdXNpb24gaXMgdGhlIGBzdG1tYWNgIGRyaXZlciBpcyAqc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlKiBnaXZlbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gSSdtIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgZHJpdmVyIGVhc2lseSBpbiBhbiBhdXRvbWF0ZWQgZnV6emluZyBzZXR1cCBvbiB0aGUgdHlwaWNhbCBhbWQ2NCBRRU1VL0dDRSBzeXN0ZW1zLlxuXG5UbyBtYWtlIGl0IGNsZWFyLCBJIGFtIGNvbmZpcm1pbmcgdGhlIGZvbGxvd2luZzpcbiogICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiogICBgRW5hYmxlQ29uZmlnc2AgYXJlIGVtcHR5IChvciBudWxsKS5cbiogICBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHkgKG9yIG51bGwpLlxuKiAgIFRoZSByZWFzb25pbmcgZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBjb25jaXNlbHkgZXhwbGFpbmVkIGFzIHRoZSBoYXJkd2FyZSB0aGlzIGRyaXZlciBzdXBwb3J0cyBpcyBwaHlzaWNhbGx5IHJlcXVpcmVkIGFuZCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbkknbSBub3cgcmVhZHkgdG8gcHJlcGFyZSB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDIyLCJPdXRwdXRUb2tlbnMiOjEwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODowMzo1OC44MzE0MDQwOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIHN0bW1hYyAoU3lub3BzeXMgRGVzaWduV2FyZSAvIFNUTWljcm9lbGVjdHJvbmljcyBFdGhlcm5ldCBNQUMpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvKS4gVGhpcyBkcml2ZXIgb3BlcmF0ZXMgcGh5c2ljYWwgU29DIGFuZCBQQ0llIEV0aGVybmV0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBmb3IgYW1kNjQuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBzdG1tYWMgKFN5bm9wc3lzIERlc2lnbldhcmUgLyBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgTUFDKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLykuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIHBoeXNpY2FsIFNvQyBhbmQgUENJZSBFdGhlcm5ldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgZm9yIGFtZDY0LiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjU4LjgzMTQzNDE0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8b9gj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 18:02:04 +0000 UTC FinishedAt: 2026-09-10 18:04:00 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBzdG1tYWMgKFN5bm9wc3lzIERlc2lnbldhcmUgLyBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgTUFDKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLykuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIHBoeXNpY2FsIFNvQyBhbmQgUENJZSBFdGhlcm5ldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgZm9yIGFtZDY0LiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMTQ2ZjNhZGQyNjRiNWI3MzE1YjgzZTVlNzk1NDkyMDI5YjI5OWEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTg6MDM6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuaW5kZXggNzU4MmZjYTYzNzQxOS4uMGEwMDQ5MDgzMmYzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuQEAgLTQxOSw2ICYjNDM7NDE5LDE3IEBAIGludCBzdG1tYWNfc2V0X2Nsa190eF9yYXRlKHZvaWQgKmJzcF9wcml2LCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcbiBcbiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCBcdTAwMjZcdTAwMjYgIXByaXYtXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX3hkcF9pc19lbmFibGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4gXHRyZXR1cm4gISFwcml2LVx1MDAzZXhkcF9wcm9nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCA1ZmU3ZTk1ZmRkMzQ1Li43ZjVhZGExMTMyYzQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuQEAgLTYwMSw3ICYjNDM7NjAxLDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX2dldF9yeF9od3RzdGFtcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBkbWFfZGVzYyAqcCxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiYjNDM7c3RhdGljIGludCBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdGJvb2wgeG1hYyA9IGR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSk7XG4gXHR1MzIgc2VjX2luYyA9IDA7XG5AQCAtNjI1LDcgJiM0Mzs2MjUsNyBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0ICovXG4gXHR0ZW1wID0gKHU2NCkodGVtcCBcdTAwM2NcdTAwM2MgMzIpO1xuIFx0cHJpdi1cdTAwM2VkZWZhdWx0X2FkZGVuZCA9IGRpdl91NjQodGVtcCwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmF0ZSk7XG4tXHRzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQpO1xuJiM0MztcdHJldHVybiBzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQpO1xuIH1cbiBcbiAvKipcbkBAIC02NTMsNyAmIzQzOzY1Myw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0dTMyIHRzX21hc3Rlcl9lbiA9IDA7XG4gXHR1MzIgdHNfZXZlbnRfZW4gPSAwO1xuIFxuLVx0aWYgKCEocHJpdi1cdTAwM2VkbWFfY2FwLnRpbWVfc3RhbXAgfHwgcHJpdi1cdTAwM2VhZHZfdHMpKSB7XG4mIzQzO1x0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtObyBzdXBwb3J0IGZvciBIVyB0aW1lIHN0YW1waW5nXCYjMzQ7KTtcbiBcdFx0cHJpdi1cdTAwM2Vod3RzX3R4X2VuID0gMDtcbiBcdFx0cHJpdi1cdTAwM2Vod3RzX3J4X2VuID0gMDtcbkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRpZiAoIShwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LVx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKVxuJiM0MztcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdCpjb25maWcgPSBwcml2LVx1MDAzZXRzdGFtcF9jb25maWc7XG5AQCAtODY1LDMyICYjNDM7ODY1LDMyIEBAIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfdHN0YW1wX2NvdW50ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0ICAgICAgdTMyIHN5c3RpbWVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgbm93O1xuLVxuLVx0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yYXRlKSB7XG4tXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O0ludmFsaWQgUFRQIGNsb2NrIHJhdGVcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0c3RtbWFjX2NvbmZpZ19od190c3RhbXBpbmcocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCBzeXN0aW1lX2ZsYWdzKTtcbiBcdHByaXYtXHUwMDNlc3lzdGltZV9mbGFncyA9IHN5c3RpbWVfZmxhZ3M7XG4gXG4tXHRzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XG4mIzQzO1x0cmV0ID0gc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogaW5pdGlhbGl6ZSBzeXN0ZW0gdGltZSAqL1xuIFx0a3RpbWVfZ2V0X3JlYWxfdHM2NChcdTAwMjZub3cpO1xuIFxuIFx0LyogbG93ZXIgMzIgYml0cyBvZiB0dl9zZWMgYXJlIHNhZmUgdW50aWwgeTIxMDYgKi9cbi1cdHN0bW1hY19pbml0X3N5c3RpbWUocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCAodTMyKW5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtXHUwMDNlcHRwYWRkciwgKHUzMilub3cudHZfc2VjLFxuJiM0MztcdFx0XHRcdCAgIG5vdy50dl9uc2VjKTtcbiB9XG4gXG4gLyoqXG4gICogc3RtbWFjX2luaXRfdGltZXN0YW1waW5nIC0gaW5pdGlhbGlzZSB0aW1lc3RhbXBpbmdcbiAgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tICogRGVzY3JpcHRpb246IHRoaXMgaXMgdG8gdmVyaWZ5IGlmIHRoZSBIVyBzdXBwb3J0cyB0aGUgUFRQdjEgb3IgUFRQdjIuXG4tICogVGhpcyBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXG4tICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgcHRwIGRyaXZlci5cbiYjNDM7ICogRGVzY3JpcHRpb246IGNvbmZpZ3VyZSB0aGUgUFRQIHJlZmVyZW5jZSBjbG9jayBhbmQgaW5pdGlhbGlzZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogdGltZXN0YW1wIGNvdW50ZXIsIHRoZW4gZGV0ZWN0IHdoaWNoIHRpbWVzdGFtcGluZyBtb2RlcyB0aGUgSFcgc3VwcG9ydHMuXG4mIzQzOyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBmb3JcbiYjNDM7ICogcmVnaXN0ZXJpbmcgdGhlIFBUUCBjbG9jayBkcml2ZXIuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIHRpbWVzdGFtcCBjb3VudGVyXG4mIzQzOyAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZC5cbiAgKi9cbiBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuQEAgLTkwMCwxMSAmIzQzOzkwMCw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcHRwX2Nsa19mcmVxX2NvbmZpZylcbiBcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXB0cF9jbGtfZnJlcV9jb25maWcocHJpdik7XG4gXG4tXHRpZiAoIShwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LVx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKSB7XG4tXHRcdG5ldGRldl9pbmZvKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtQVFAgbm90IHN1cHBvcnRlZCBieSBIV1xcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdHJldCA9IHN0bW1hY19pbml0X3RzdGFtcF9jb3VudGVyKHByaXYsIFNUTU1BQ19IV1RTX0FDVElWRSB8XG4gXHRcdFx0XHRcdCAgICAgICBQVFBfVENSX1RTQ0ZVUERUKTtcbiBcdGlmIChyZXQpIHtcbkBAIC05MzcsMjIgJiM0Mzs5MzIsMzkgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHN0bW1hY19zZXR1cF9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXR1cF9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuJiM0MztcdFx0bmV0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXYsIFwmIzM0O1BUUCBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldixcbiBcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQVFAgcmVmZXJlbmNlIGNsb2NrOiAlcGVcXG5cJiMzNDssXG4gXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdGlmIChzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdikgPT0gMClcbi1cdFx0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XHRyZXQgPSBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN0bW1hY19yZWxlYXNlX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuJiM0MztcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0c3RtbWFjX3B0cF91bnJlZ2lzdGVyKHByaXYpO1xuIFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4gfVxuQEAgLTQxNjEsMTAgJiM0Mzs0MTczLDEyIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBIdyBzZXR1cCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdFx0Z290byBpbml0X2Vycm9yO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHN0bW1hY19zZXR1cF9wdHAocHJpdik7XG4mIzQzO1x0cmV0ID0gc3RtbWFjX3NldHVwX3B0cChwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBwdHBfZXJyb3I7XG4gXG4gXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcbiBcbkBAIC00MTg5LDcgJiM0Mzs0MjAzLDEwIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRocnRpbWVyX2NhbmNlbChcdTAwMjZwcml2LVx1MDAzZWRtYV9jb25mLnR4X3F1ZXVlW2NoYW5dLnR4dGltZXIpO1xuIFxuIFx0c3RtbWFjX3JlbGVhc2VfcHRwKHByaXYpO1xuLWluaXRfZXJyb3I6XG4mIzQzO3B0cF9lcnJvcjpcbiYjNDM7XHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuJiM0MztcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBmYWxzZSk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNzY4NSw5ICYjNDM7NzcwMiw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG4gXHQvKiBJbiBDb2Fyc2UgbW9kZSwgd2UgY2FuIHVzZSBhIHNtYWxsZXIgc3Vic2Vjb25kIGluY3JlbWVudCwgbGV0JiMzOTtzXG4gXHQgKiByZWNvbmZpZ3VyZSB0aGUgc3lzdGltZSwgc3Vic2Vjb25kIGluY3JlbWVudCBhbmQgYWRkZW5kLlxuIFx0ICovXG4tXHRzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHN0bW1hY19kbF90c19jb2Fyc2VfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLFxuQEAgLTgzMjcsMTMgJiM0Mzs4MzQyLDE0IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldCA9IHN0bW1hY19od19zZXR1cChuZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IEh3IHNldHVwIGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuLVx0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdFx0cnRubF91bmxvY2soKTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuIFx0fVxuIFxuLVx0c3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xuJiM0MztcdGlmIChzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuJiM0MztcdFx0cmV0ID0gc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBlcnJvcl9zdG9wX2RtYTtcbiYjNDM7XHR9XG4gXG4gXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcbiBcdHBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi1cdTAwM2VwaHlsaW5rKTtcbkBAIC04MzU3LDYgJiM0Mzs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycm9yX3N0b3BfZG1hOlxuJiM0MztcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4mIzQzO1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbiYjNDM7ZXJyb3JfdW5sb2NrOlxuJiM0MztcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX3Jlc3VtZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xuaW5kZXggNjEyOGVkMWJkNTIxYS4uZGNmY2U1MWIyODg2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xuQEAgLTk1OSw3ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzdG1tYWNfcGx0ZnJfbm9pcnFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXG4gXHRpZiAoIXByaXYtXHUwMDNld29sb3B0cykge1xuIFx0XHQvKiBEaXNhYmxlIGNsb2NrIGluIGNhc2Ugb2YgUFdNIGlzIG9mZiAqL1xuLVx0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbiYjNDM7XHRcdGlmIChzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbiYjNDM7XHRcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4gXG4gXHRcdHJldCA9IHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTk4NCw2ICYjNDM7OTg1LDkgQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzdG1tYWNfcGx0ZnJfbm9pcnFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0XHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgc3RtbWFjIChTeW5vcHN5cyBEZXNpZ25XYXJlIC8gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQykgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8pLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBwaHlzaWNhbCBTb0MgYW5kIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGZvciBhbWQ2NC4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjE0NmYzYWRkMjY0YjViNzMxNWI4M2U1ZTc5NTQ5MjAyOWIyOTlhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE4OjAzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaAppbmRleCA3NTgyZmNhNjM3NDE5Li4wYTAwNDkwODMyZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaApAQCAtNDE5LDYgJiM0Mzs0MTksMTcgQEAgaW50IHN0bW1hY19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXYsIHN0cnVjdCBjbGsgKmNsa190eF9pLAogCiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7ZG1hX2NhcC50aW1lX3N0YW1wICZhbXA7JmFtcDsgIXByaXYtJmd0O2RtYV9jYXAuYXRpbWVfc3RhbXApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yYXRlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX3hkcF9pc19lbmFibGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKIAlyZXR1cm4gISFwcml2LSZndDt4ZHBfcHJvZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDVmZTdlOTVmZGQzNDUuLjdmNWFkYTExMzJjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtNjAxLDcgJiM0Mzs2MDEsNyBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3J4X2h3dHN0YW1wKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IGRtYV9kZXNjICpwLAogCX0KIH0KIAotc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0MztzdGF0aWMgaW50IHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJYm9vbCB4bWFjID0gZHdtYWNfaXNfeG1hYyhwcml2LSZndDtwbGF0LSZndDtjb3JlX3R5cGUpOwogCXUzMiBzZWNfaW5jID0gMDsKQEAgLTYyNSw3ICYjNDM7NjI1LDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkgKi8KIAl0ZW1wID0gKHU2NCkodGVtcCAmbHQ7Jmx0OyAzMik7CiAJcHJpdi0mZ3Q7ZGVmYXVsdF9hZGRlbmQgPSBkaXZfdTY0KHRlbXAsIHByaXYtJmd0O3BsYXQtJmd0O2Nsa19wdHBfcmF0ZSk7Ci0Jc3RtbWFjX2NvbmZpZ19hZGRlbmQocHJpdiwgcHJpdi0mZ3Q7cHRwYWRkciwgcHJpdi0mZ3Q7ZGVmYXVsdF9hZGRlbmQpOwomIzQzOwlyZXR1cm4gc3RtbWFjX2NvbmZpZ19hZGRlbmQocHJpdiwgcHJpdi0mZ3Q7cHRwYWRkciwgcHJpdi0mZ3Q7ZGVmYXVsdF9hZGRlbmQpOwogfQogCiAvKioKQEAgLTY1Myw3ICYjNDM7NjUzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJdTMyIHRzX21hc3Rlcl9lbiA9IDA7CiAJdTMyIHRzX2V2ZW50X2VuID0gMDsKIAotCWlmICghKHByaXYtJmd0O2RtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LSZndDthZHZfdHMpKSB7CiYjNDM7CWlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtObyBzdXBwb3J0IGZvciBIVyB0aW1lIHN0YW1waW5nJiMzNDspOwogCQlwcml2LSZndDtod3RzX3R4X2VuID0gMDsKIAkJcHJpdi0mZ3Q7aHd0c19yeF9lbiA9IDA7CkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoIShwcml2LSZndDtkbWFfY2FwLnRpbWVfc3RhbXAgfHwgcHJpdi0mZ3Q7ZG1hX2NhcC5hdGltZV9zdGFtcCkpCiYjNDM7CWlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCSpjb25maWcgPSBwcml2LSZndDt0c3RhbXBfY29uZmlnOwpAQCAtODY1LDMyICYjNDM7ODY1LDMyIEBAIHN0YXRpYyBpbnQgc3RtbWFjX2luaXRfdHN0YW1wX2NvdW50ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCQkJCSAgICAgIHUzMiBzeXN0aW1lX2ZsYWdzKQogewogCXN0cnVjdCB0aW1lc3BlYzY0IG5vdzsKLQotCWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yYXRlKSB7Ci0JCW5ldGRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgUFRQIGNsb2NrIHJhdGUmIzM0Oyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KJiM0MzsJaW50IHJldDsKIAogCXN0bW1hY19jb25maWdfaHdfdHN0YW1waW5nKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsIHN5c3RpbWVfZmxhZ3MpOwogCXByaXYtJmd0O3N5c3RpbWVfZmxhZ3MgPSBzeXN0aW1lX2ZsYWdzOwogCi0Jc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpOwomIzQzOwlyZXQgPSBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogaW5pdGlhbGl6ZSBzeXN0ZW0gdGltZSAqLwogCWt0aW1lX2dldF9yZWFsX3RzNjQoJmFtcDtub3cpOwogCiAJLyogbG93ZXIgMzIgYml0cyBvZiB0dl9zZWMgYXJlIHNhZmUgdW50aWwgeTIxMDYgKi8KLQlzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsICh1MzIpbm93LnR2X3NlYywgbm93LnR2X25zZWMpOwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtJmd0O3B0cGFkZHIsICh1MzIpbm93LnR2X3NlYywKJiM0MzsJCQkJICAgbm93LnR2X25zZWMpOwogfQogCiAvKioKICAqIHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyAtIGluaXRpYWxpc2UgdGltZXN0YW1waW5nCiAgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlCi0gKiBEZXNjcmlwdGlvbjogdGhpcyBpcyB0byB2ZXJpZnkgaWYgdGhlIEhXIHN1cHBvcnRzIHRoZSBQVFB2MSBvciBQVFB2Mi4KLSAqIFRoaXMgaXMgZG9uZSBieSBsb29raW5nIGF0IHRoZSBIVyBjYXAuIHJlZ2lzdGVyLgotICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgcHRwIGRyaXZlci4KJiM0MzsgKiBEZXNjcmlwdGlvbjogY29uZmlndXJlIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBpbml0aWFsaXNlIHRoZSBoYXJkd2FyZQomIzQzOyAqIHRpbWVzdGFtcCBjb3VudGVyLCB0aGVuIGRldGVjdCB3aGljaCB0aW1lc3RhbXBpbmcgbW9kZXMgdGhlIEhXIHN1cHBvcnRzLgomIzQzOyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBmb3IKJiM0MzsgKiByZWdpc3RlcmluZyB0aGUgUFRQIGNsb2NrIGRyaXZlci4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSB0aW1lc3RhbXAgY291bnRlcgomIzQzOyAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZC4KICAqLwogc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewpAQCAtOTAwLDExICYjNDM7OTAwLDYgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCWlmIChwcml2LSZndDtwbGF0LSZndDtwdHBfY2xrX2ZyZXFfY29uZmlnKQogCQlwcml2LSZndDtwbGF0LSZndDtwdHBfY2xrX2ZyZXFfY29uZmlnKHByaXYpOwogCi0JaWYgKCEocHJpdi0mZ3Q7ZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtJmd0O2RtYV9jYXAuYXRpbWVfc3RhbXApKSB7Ci0JCW5ldGRldl9pbmZvKHByaXYtJmd0O2RldiwgJiMzNDtQVFAgbm90IHN1cHBvcnRlZCBieSBIV1xuJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCiAJcmV0ID0gc3RtbWFjX2luaXRfdHN0YW1wX2NvdW50ZXIocHJpdiwgU1RNTUFDX0hXVFNfQUNUSVZFIHwKIAkJCQkJICAgICAgIFBUUF9UQ1JfVFNDRlVQRFQpOwogCWlmIChyZXQpIHsKQEAgLTkzNywyMiAmIzQzOzkzMiwzOSBAQCBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHN0bW1hY19zZXR1cF9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAomIzQzOwlpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhwcml2LSZndDtkZXYsICYjMzQ7UFRQIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O3BsYXQtJmd0O2Nsa19wdHBfcmVmKTsKLQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKIAkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LAogCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBQVFAgcmVmZXJlbmNlIGNsb2NrOiAlcGVcbiYjMzQ7LAogCQkJICAgIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlpZiAoc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpID09IDApCi0JCXN0bW1hY19wdHBfcmVnaXN0ZXIocHJpdik7CiYjNDM7CXJldCA9IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhwcml2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtJmd0O3BsYXQtJmd0O2Nsa19wdHBfcmVmKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHN0bW1hY19yZWxlYXNlX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiYjNDM7CWlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3RtbWFjX3B0cF91bnJlZ2lzdGVyKHByaXYpOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtwbGF0LSZndDtjbGtfcHRwX3JlZik7CiB9CkBAIC00MTYxLDEwICYjNDM7NDE3MywxMiBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlyZXQgPSBzdG1tYWNfaHdfc2V0dXAoZGV2KTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDslczogSHcgc2V0dXAgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwotCQlnb3RvIGluaXRfZXJyb3I7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KIAotCXN0bW1hY19zZXR1cF9wdHAocHJpdik7CiYjNDM7CXJldCA9IHN0bW1hY19zZXR1cF9wdHAocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHB0cF9lcnJvcjsKIAogCXN0bW1hY19pbml0X2NvYWxlc2NlKHByaXYpOwogCkBAIC00MTg5LDcgJiM0Mzs0MjAzLDEwIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlocnRpbWVyX2NhbmNlbCgmYW1wO3ByaXYtJmd0O2RtYV9jb25mLnR4X3F1ZXVlW2NoYW5dLnR4dGltZXIpOwogCiAJc3RtbWFjX3JlbGVhc2VfcHRwKHByaXYpOwotaW5pdF9lcnJvcjoKJiM0MztwdHBfZXJyb3I6CiYjNDM7CXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7CiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc2ODUsOSAmIzQzOzc3MDIsNyBAQCBzdGF0aWMgaW50IHN0bW1hY19kbF90c19jb2Fyc2Vfc2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLAogCS8qIEluIENvYXJzZSBtb2RlLCB3ZSBjYW4gdXNlIGEgc21hbGxlciBzdWJzZWNvbmQgaW5jcmVtZW50LCBsZXQmIzM5O3MKIAkgKiByZWNvbmZpZ3VyZSB0aGUgc3lzdGltZSwgc3Vic2Vjb25kIGluY3JlbWVudCBhbmQgYWRkZW5kLgogCSAqLwotCXN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTsKLQotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpOwogfQogCiBzdGF0aWMgaW50IHN0bW1hY19kbF90c19jb2Fyc2VfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLApAQCAtODMyNywxMyAmIzQzOzgzNDIsMTQgQEAgaW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldCA9IHN0bW1hY19od19zZXR1cChuZGV2KTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDslczogSHcgc2V0dXAgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwotCQlzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpOwotCQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyb3JfdW5sb2NrOwogCX0KIAotCXN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhwcml2KTsKJiM0MzsJaWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKSB7CiYjNDM7CQlyZXQgPSBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZXJyb3Jfc3RvcF9kbWE7CiYjNDM7CX0KIAogCXN0bW1hY19pbml0X2NvYWxlc2NlKHByaXYpOwogCXBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi0mZ3Q7cGh5bGluayk7CkBAIC04MzU3LDYgJiM0Mzs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3Jfc3RvcF9kbWE6CiYjNDM7CXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7CiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJc3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcmVzdW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwppbmRleCA2MTI4ZWQxYmQ1MjFhLi5kY2ZjZTUxYjI4ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwpAQCAtOTU5LDcgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHN0bW1hY19wbHRmcl9ub2lycV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCWlmICghcHJpdi0mZ3Q7d29sb3B0cykgewogCQkvKiBEaXNhYmxlIGNsb2NrIGluIGNhc2Ugb2YgUFdNIGlzIG9mZiAqLwotCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yZWYpOwomIzQzOwkJaWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKQomIzQzOwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtwbGF0LSZndDtjbGtfcHRwX3JlZik7CiAKIAkJcmV0ID0gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7CiAJCWlmIChyZXQpCkBAIC05ODQsNiAmIzQzOzk4NSw5IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc3RtbWFjX3BsdGZyX25vaXJxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCiYjNDM7CQlpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwogCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7cGxhdC0mZ3Q7Y2xrX3B0cF9yZWYpOwogCQlpZiAocmV0ICZsdDsgMCkgewogCQkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTgyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIFBhdGNoJiMzOTtzIFN1aXRhYmlsaXR5IGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyBhbmFseXppbmcgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc3Vic3lzdGVtIGl0IHRvdWNoZXMuIFRoaXMgb25lJiMzOTtzIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9gLCB3aGljaCBpcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyDigJMgYGR3bWFjYCDigJMgYW5kIGBzdG1tYWNgLiBOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgYXJlIHRoZSBjcml0ZXJpYT8gUmVhY2hhYmlsaXR5IGlzIHRoZSBtb3N0IGltcG9ydGFudC4KCkNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UmIzM5O3JlIHRhbGtpbmcgR0NFIG9yIFFFTVUsIHByb2JhYmx5IHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIHN0dWZmOiBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwLCB2aXJ0aW8sIHRoYXQga2luZCBvZiB0aGluZy4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgZG9lcyBzdGFuZGFyZCBRRU1VIGVtdWxhdGUgYHN0bW1hY2Agb3IgYGR3bWFjYCBkaXJlY3RseT8gT3IgaXMgdGhpcyBkcml2ZXIgZGVzaWduZWQgbW9yZSBmb3IgcGh5c2ljYWwgRXRoZXJuZXQgY29udHJvbGxlcnMgb24gU29DcyBvciBQQ0k/IExldCBtZSByZW1pbmQgbXlzZWxm4oCmIHJpZ2h0LCBgc3RtbWFjYCBpcyBhIHBsYXRmb3JtL1BDSSBkcml2ZXIgZm9yIHRoZSBTVE0vU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgKGBEV01BQ2ApLgoKU28sIGRvZXMgUUVNVSBlbXVsYXRlIGl0PyBJIGRvbiYjMzk7dCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYW5kIG15IG1lbW9yeSBpcyBzb21ldGltZXMgd3JvbmcuIFRpbWUgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgdGhlIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHN1cHBvcnQuIEkmIzM5O2xsIHJ1biBzb21lIGdyZXBzIG5vdyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGBzdG1tYWNgIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQgYW5kIHJlYWNoZWQuIFVuZGVyc3RhbmRpbmcgaXRzIHJlYWNoYWJpbGl0eSBpcyB0aGUgY3JpdGljYWwgZmFjdG9yIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19FVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQyBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VlIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIHRoZSBmZWF0dXJlIHNlbGVjdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGxpbWl0YXRpb25zLCBhbmQgYXNzZXNzaW5nIHRoZSBsZXZlbCBvZiBncmFudWxhcml0eSBpbiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZXkgaGFuZGxlIHRoZSB2YXJpb3VzIFNUTWljcm9lbGVjdHJvbmljcyBTb0NzIHRoYXQgdXRpbGl6ZSB0aGlzIE1BQy4gQXJlIHRoZXkgdXNpbmcgYSBmaW5lLWdyYWluZWQsIGRldmljZS1zcGVjaWZpYyBhcHByb2FjaCwgb3IgYSBtb3JlIGdlbmVyYWxpemVkLCBmZWF0dXJlLWJhc2VkIHN5c3RlbT8KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBDT05GSUdfU1RNTUFDXypgIG9wdGlvbnMsIG9mIGNvdXJzZS4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIHRoZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzIGFuZCBmdW5jdGlvbmFsaXRpZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIOKAkyBQSFkgaW50ZXJmYWNlcywgaW50ZXJydXB0IGhhbmRsaW5nLCBETUEgc2V0dGluZ3MsIGFuZCBhbnkgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHZhcmlvdXMgZmVhdHVyZXMgc3VjaCBhcyBKdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWRpbmcsIFZMQU4gc3VwcG9ydCwgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLgoKSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgd2VsbC1jb21tZW50ZWQgZmlsZSwgdGhhdCBmb2xsb3dzIHN0YW5kYXJkIGtlcm5lbCBjb252ZW50aW9ucyBhbmQgY2xlYXJseSBkZWxpbmVhdGVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMmIzM5OyBpbXBsaWNhdGlvbnMuIEEgd2VsbC1vcmdhbml6ZWQgYEtjb25maWdgIGlzIGEgc2lnbiBvZiBhIHdlbGwtZGVzaWduZWQgZHJpdmVyLCBzbyBJJiMzOTttIGhvcGluZyBmb3IgZ29vZCBkZXNpZ24gcHJpbmNpcGxlcyB0byBiZSBldmlkZW50LiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSBxdWljayByZXZpZXcgaWYgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQ7IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBzbyBJIGNhbiBrZWVwIG1ha2luZyBwcm9ncmVzcyBvbiBteSBwcm9qZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTVE1NQUNfRVRIXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gICA1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gICA2Olx0XHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xuICAgNzpcdFx0c2VsZWN0IE1JSVxuICAgODpcdFx0c2VsZWN0IFBDU19YUENTXG4gICA5Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDEwOlx0XHRzZWxlY3QgUEhZTElOS1xuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxuICAxMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxuICAxNjpcdFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxuICAxNzpcdFxuICAxODpcdGlmIFNUTU1BQ19FVEhcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xuICAyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIElORVRcbiAgMjM6XHRcdGRlZmF1bHQgblxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0cyB1c2luZyBldGh0b29sLiBFbmFibGUgdGhpc1xuICAyNjpcdFx0ICBmZWF0dXJlIGlmIHlvdSBhcmUgZmFjaW5nIHByb2JsZW1zIHdpdGggeW91ciBIVyBhbmQgc3VibWl0IHRoZSB0ZXN0XG4gIDI3Olx0XHQgIHJlc3VsdHMgdG8gdGhlIG5ldGRldiBNYWlsaW5nIExpc3QuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFNUTU1BQ19QTEFURk9STVxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuICAzMjpcdFx0ZGVmYXVsdCB5XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuICAzNTpcdFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgdXNlZCBvbiBzZXZlcmFsIFNvQ3M6XG4gIDM2Olx0XHQgIFNUaSwgQWxsd2lubmVyLCBBbWxvZ2ljIE1lc29uLCBBbHRlcmEgU09DRlBHQS5cbiAgMzc6XHRcbiAgMzg6XHRcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDE6XHRcbiAgNDI6XHRpZiBTVE1NQUNfUExBVEZPUk1cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgRFdNQUNfRFdDX1FPU19FVEhcbiAgNDU6XHRcdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIHNucHMsZHdjLXFvcy1ldGhlcm5ldC50eHQgRFQgYmluZGluZy5cJiMzNDtcbiAgNDY6XHRcdHNlbGVjdCBDUkMzMlxuICA0NzpcdFx0c2VsZWN0IE1JSVxuICA0ODpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgSEFTX0RNQVxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBTdXBwb3J0IGZvciBjaGlwcyB1c2luZyB0aGUgc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBEV01BQ19HRU5FUklDXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGRyaXZlciBmb3IgRFdNQUNcJiMzNDtcbiAgNTQ6XHRcdGRlZmF1bHQgU1RNTUFDX1BMQVRGT1JNXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIEdlbmVyaWMgRFdNQUMgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24mIzM5O3QgcmVxdWlyZSBhbnlcbiAgNTc6XHRcdCAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybVxuICA1ODpcdFx0ICBkYXRhIGZvciBzZXR1cC5cbiAgNTk6XHRcbiAgNjA6XHRjb25maWcgRFdNQUNfQU5BUklPTlxuICA2MTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWRhcHRydW0gQW5hcmlvbiBHTUFDIHN1cHBvcnRcJiMzNDtcbiAgNjI6XHRcdGRlZmF1bHQgQVJDXG4gIDYzOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDIHx8IENPTVBJTEVfVEVTVClcbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgU3VwcG9ydCBmb3IgQWRhcHRydW0gQW5hcmlvbiBHTUFDIEV0aGVybmV0IGNvbnRyb2xsZXIuXG4gIDY2Olx0XG4gIDY3Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgQW5hcmlvbiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgRFdNQUNfRUlDNzcwMFxuICA3MDpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgRXN3aW4gZWljNzcwMCBldGhlcm5ldCBkcml2ZXJcJiMzNDtcbiAgNzE6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEhBU19ETUEgXHUwMDI2XHUwMDI2IEFSQ0hfRVNXSU4gfHwgQ09NUElMRV9URVNUXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBFc3dpbiBFSUM3NzAwIEV0aGVybmV0IGNvbnRyb2xsZXIsXG4gIDc0Olx0XHQgIHdoaWNoIGludGVncmF0ZXMgU3lub3BzeXMgRGVzaWduV2FyZSBRb1MgZmVhdHVyZXMuIEl0IGVuYWJsZXNcbiAgNzU6XHRcdCAgaGlnaC1zcGVlZCBuZXR3b3JraW5nIHdpdGggRE1BIGFjY2VsZXJhdGlvbiBhbmQgaXMgb3B0aW1pemVkXG4gIDc2Olx0XHQgIGZvciBlbWJlZGRlZCBzeXN0ZW1zLlxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBEV01BQ19JTkdFTklDXG4gIDc5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbmdlbmljIE1BQyBzdXBwb3J0XCYjMzQ7XG4gIDgwOlx0XHRkZWZhdWx0IE1BQ0hfSU5HRU5JQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBzdG1tYWMgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLiBJJiMzOTt2ZSBhbHJlYWR5IGdvdCBhIGdlbmVyYWwgdW5kZXJzdGFuZGluZywgYnV0IEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGUgd2l0aGluIHRoZSBzdG1tYWMgZGlyZWN0b3J5IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgd2hhdCBrbm9icyBhcmUgZXhwb3NlZCwgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgc2V0dGluZ3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZpbmVyIGRldGFpbHMg4oCTIG1heWJlIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBvcHRpbWl6YXRpb25zIG9yIHJhcmVseSB1c2VkIGZlYXR1cmVzIEkmIzM5O3ZlIG92ZXJsb29rZWQuIFVsdGltYXRlbHksIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIG9mIHRoZSBzdG1tYWMgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYWJsZSBhc3BlY3RzLCBzbyBJIGNhbiBsZXZlcmFnZSB0aGVtIGVmZmVjdGl2ZWx5IGluIG15IG93biB3b3JrLiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgYmUgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IChNQUNIX0lOR0VOSUMgfHwgQ09NUElMRV9URVNUKVxuICA4MjpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBJbmdlbmljIFNvQ3MuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIFRoaXMgc2VsZWN0cyBJbmdlbmljIFNvQ3MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gIDg3Olx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgb24gZm9yIHRoZSBJbmdlbmljIFNvQ3NcbiAgODg6XHRcdCAgTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXG4gIDg5Olx0XG4gIDkwOlx0Y29uZmlnIERXTUFDX0lQUTgwNlhcbiAgOTE6XHRcdHRyaXN0YXRlIFwmIzM0O1FDQSBJUFE4MDZ4IERXTUFDIHN1cHBvcnRcJiMzNDtcbiAgOTI6XHRcdGRlZmF1bHQgQVJDSF9RQ09NXG4gIDkzOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVClcbiAgOTQ6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFN1cHBvcnQgZm9yIFFDQSBJUFE4MDZYIERXTUFDIEV0aGVybmV0LlxuICA5NzpcdFxuICA5ODpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIElQUTgwNnggU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xuICA5OTpcdFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBkb2VzIG5vdCB1c2UgYW55IG9mIHRoZSBoYXJkd2FyZVxuIDEwMDpcdFx0ICBhY2NlbGVyYXRpb24gZmVhdHVyZXMgYXZhaWxhYmxlIG9uIHRoaXMgU29DLiBOZXR3b3JrIGRldmljZXNcbiAxMDE6XHRcdCAgd2lsbCBiZWhhdmUgbGlrZSBzdGFuZGFyZCBub24tYWNjZWxlcmF0ZWQgZXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAxMDI6XHRcbiAxMDM6XHRcdCAgU2VsZWN0IHRoZSBRQ09NX1NPQ0lORk8gY29uZmlnIGZsYWcgdG8gZW5hYmxlIHNwZWNpZmljIGR3bWFjXG4gMTA0Olx0XHQgIGZpeHVwIGJhc2VkIG9uIHRoZSBpcHE4MDZ4IFNvQyByZXZpc2lvbi5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgRFdNQUNfTFBDMThYWFxuIDEwNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlhQIExQQzE4eHgvNDN4eCBEV01BQyBzdXBwb3J0XCYjMzQ7XG4gMTA4Olx0XHRkZWZhdWx0IEFSQ0hfTFBDMThYWFxuIDEwOTpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfTFBDMThYWCB8fCBDT01QSUxFX1RFU1QpXG4gMTEwOlx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDExMTpcdFx0aGVscFxuIDExMjpcdFx0ICBTdXBwb3J0IGZvciBOWFAgTFBDMTh4eC80M3h4IERXTUFDIEV0aGVybmV0LlxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBEV01BQ19NRURJQVRFS1xuIDExNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQyN3h4IEdNQUMgc3VwcG9ydFwmIzM0O1xuIDExNjpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUKVxuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBTdXBwb3J0IGZvciBNZWRpYVRlayBHTUFDIEV0aGVybmV0IGNvbnRyb2xsZXIuXG4gMTE5Olx0XG4gMTIwOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgTVQyNzEyIFNvQyBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgRFdNQUNfTUVTT05cbiAxMjM6XHRcdHRyaXN0YXRlIFwmIzM0O0FtbG9naWMgTWVzb24gZHdtYWMgc3VwcG9ydFwmIzM0O1xuIDEyNDpcdFx0ZGVmYXVsdCBBUkNIX01FU09OXG4gMTI1Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiAoQVJDSF9NRVNPTiB8fCBDT01QSUxFX1RFU1QpXG4gMTI2Olx0XHRoZWxwXG4gMTI3Olx0XHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gQW1sb2dpYyBNZXNvbiBTb0NzLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIEFtbG9naWMgTWVzb24gU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcbiAxMzA6XHRcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciBNZXNvbjYsXG4gMTMxOlx0XHQgIE1lc29uOCwgTWVzb244YiBhbmQgR1hCQiBTb0NzLlxuIDEzMjpcdFxuIDEzMzpcdGNvbmZpZyBEV01BQ19OVVZPVE9OXG4gMTM0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOdXZvdG9uIE1BMzUgZHdtYWMgc3VwcG9ydFwmIzM0O1xuIDEzNTpcdFx0ZGVmYXVsdCBBUkNIX01BMzVcbiAxMzY6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX01BMzUgfHwgQ09NUElMRV9URVNUKVxuIDEzNzpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiAxMzg6XHRcdGhlbHBcbiAxMzk6XHRcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBOdXZvdG9uIE1BMzUgc2VyaWVzIFNvQy5cbiAxNDA6XHRcbiAxNDE6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBOdXZvdG9uIE1BMzUgc2VyaWVzIFNvQyBnbHVlIGxheWVyIHN1cHBvcnRcbiAxNDI6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhlIG51dm90b24tZHdtYWMgZHJpdmVyIGlzXG4gMTQzOlx0XHQgIHVzZWQgZm9yIE1BMzUgc2VyaWVzIFNvQ3MuXG4gMTQ0Olx0XG4gMTQ1Olx0Y29uZmlnIERXTUFDX1FDT01fRVRIUU9TXG4gMTQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBFVEhRT1Mgc3VwcG9ydFwmIzM0O1xuIDE0NzpcdFx0ZGVmYXVsdCBBUkNIX1FDT01cbiAxNDg6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUKVxuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBTdXBwb3J0IGZvciB0aGUgUXVhbGNvbW0gRVRIUU9TIGNvcmUuXG4gMTUxOlx0XG4gMTUyOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgUXVhbGNvbW0gRVRIUU9TIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXG4gMTUzOlx0XHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxuIDE1NDpcdFxuIDE1NTpcdGNvbmZpZyBEV01BQ19SRU5FU0FTX0dCRVRIXG4gMTU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIFJaL1YySChQKSBHQkVUSCBhbmQgUlovVDJILCBSWi9OMkggR01BQyBzdXBwb3J0XCYjMzQ7XG4gMTU3Olx0XHRkZWZhdWx0IEFSQ0hfUkVORVNBU1xuIDE1ODpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1QpXG4gMTU5Olx0XHRzZWxlY3QgUENTX1JaTjFfTUlJQ1xuIDE2MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGFuZCBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGludG8gUENJIHN1cHBvcnQsIGFzIHRoYXQmIzM5O3MgYSBjb21tb24gYXJlYSB3aGVyZSBJIG5lZWQgdG8gbWFrZSB0YXJnZXRlZCBjaGFuZ2VzLiBVbmRlcnN0YW5kaW5nIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgcHJvcGVyIGRyaXZlciBpbnRlZ3JhdGlvbiBhbmQgc3lzdGVtIHN0YWJpbGl0eS4gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3IgaXRzIGVudHJ5IHBvaW50LCB0aGVuIGZvbGxvdyB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSBob3cgaXQgbGlua3Mgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGFsc28gbWlnaHQgcmV2ZWFsIG5ldyBvcHRpb25zIEkgaGF2ZW4mIzM5O3QgZXZlbiBlbmNvdW50ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjE6XHRcdCAgU3VwcG9ydCBmb3IgR2lnYWJpdCBFdGhlcm5ldCBJbnRlcmZhY2UgKEdCRVRIKS8gRXRoZXJuZXQgTUFDIChHTUFDKVxuIDE2MjpcdFx0ICBvbiBSZW5lc2FzIFNvQ3MuXG4gMTYzOlx0XG4gMTY0Olx0XHQgIFRoaXMgc2VsZWN0cyBSZW5lc2FzIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZGV2aWNlXG4gMTY1Olx0XHQgIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIFJaL1YySChQKSBmYW1pbHksIFJaL1QySCBhbmRcbiAxNjY6XHRcdCAgUlovTjJIIFNvQ3MuXG4gMTY3Olx0XG4gMTY4Olx0Y29uZmlnIERXTUFDX1JPQ0tDSElQXG4gMTY5Olx0XHR0cmlzdGF0ZSBcJiMzNDtSb2NrY2hpcCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMTcwOlx0XHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbiAxNzE6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbiAxNzI6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gMTczOlx0XHRoZWxwXG4gMTc0Olx0XHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszMjg4IFNvQy5cbiAxNzU6XHRcbiAxNzY6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBSb2NrY2hpcCBSSzMyODggU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcbiAxNzc6XHRcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxuIDE3ODpcdFxuIDE3OTpcdGNvbmZpZyBEV01BQ19SWk4xXG4gMTgwOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIFJaL04xIGR3bWFjIHN1cHBvcnRcJiMzNDtcbiAxODE6XHRcdGRlZmF1bHQgQVJDSF9SWk4xXG4gMTgyOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9SWk4xIHx8IENPTVBJTEVfVEVTVClcbiAxODM6XHRcdHNlbGVjdCBQQ1NfUlpOMV9NSUlDXG4gMTg0Olx0XHRoZWxwXG4gMTg1Olx0XHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUmVuZXNhcyBSWi9OMSBTb0MgZmFtaWx5LlxuIDE4NjpcdFxuIDE4NzpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIFJlbmVzYXMgUlovTjEgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcbiAxODg6XHRcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIHN1cHBvcnQgY2FuIG1ha2UgdXNlIG9mIGEgY3VzdG9tIE1JSVxuIDE4OTpcdFx0ICBjb252ZXJ0ZXIgUENTIGRldmljZS5cbiAxOTA6XHRcbiAxOTE6XHRjb25maWcgRFdNQUNfUzMyXG4gMTkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOWFAgUzMyRy9TMzJSIEdNQUMgc3VwcG9ydFwmIzM0O1xuIDE5MzpcdFx0ZGVmYXVsdCBBUkNIX1MzMlxuIDE5NDpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUzMyIHx8IENPTVBJTEVfVEVTVClcbiAxOTU6XHRcdGhlbHBcbiAxOTY6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBOWFAgUzMyQ0MgU09Dcy5cbiAxOTc6XHRcbiAxOTg6XHRcdCAgVGhpcyBzZWxlY3RzIE5YUCBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gMTk5Olx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZSBTMzJDQyBzZXJpZXNcbiAyMDA6XHRcdCAgU09DcyBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIsIGllLiBTMzJHMnh4LCBTMzJHM3h4IGFuZFxuIDIwMTpcdFx0ICBTMzJSNDUuXG4gMjAyOlx0XG4gMjAzOlx0Y29uZmlnIERXTUFDX1NPQ0ZQR0FcbiAyMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NPQ0ZQR0EgZHdtYWMgc3VwcG9ydFwmIzM0O1xuIDIwNTpcdFx0ZGVmYXVsdCBBUkNIX0lOVEVMX1NPQ0ZQR0FcbiAyMDY6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX0lOVEVMX1NPQ0ZQR0EgfHwgQ09NUElMRV9URVNUKVxuIDIwNzpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiAyMDg6XHRcdHNlbGVjdCBNRElPX1JFR01BUFxuIDIwOTpcdFx0c2VsZWN0IFJFR01BUF9NTUlPXG4gMjEwOlx0XHRzZWxlY3QgUENTX0xZTlhcbiAyMTE6XHRcdGhlbHBcbiAyMTI6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBBbHRlcmEgU09DRlBHQVxuIDIxMzpcdFxuIDIxNDpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIEFsdGVyYSBTT0NGUEdBIFNvQyBnbHVlIGxheWVyIHN1cHBvcnRcbiAyMTU6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3JcbiAyMTY6XHRcdCAgYXJyaWE1IGFuZCBjeWNsb25lNSBGUEdBIFNvQ3MuXG4gMjE3Olx0XG4gMjE4Olx0Y29uZmlnIERXTUFDX1NPUEhHT1xuIDIxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7U29waGdvIGR3bWFjIHN1cHBvcnRcJiMzNDtcbiAyMjA6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NPUEhHTyB8fCBDT01QSUxFX1RFU1QpXG4gMjIxOlx0XHRkZWZhdWx0IG0gaWYgQVJDSF9TT1BIR09cbiAyMjI6XHRcdGhlbHBcbiAyMjM6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gU29waGdvIFJJU0MtViBTb0NzXG4gMjI0Olx0XG4gMjI1Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgU29waGdvIFNvQyBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnRcbiAyMjY6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlXG4gMjI3Olx0XHQgIGV0aGVybmV0IGNvbnRyb2xsZXJzIG9uIHZhcmlvdXMgU29waGdvIFNvQ3MuXG4gMjI4Olx0XG4gMjI5Olx0Y29uZmlnIERXTUFDX1NQQUNFTUlUXG4gMjMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTcGFjZW1pdCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMjMxOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9TUEFDRU1JVCB8fCBDT01QSUxFX1RFU1QpXG4gMjMyOlx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDIzMzpcdFx0ZGVmYXVsdCBtIGlmIEFSQ0hfU1BBQ0VNSVRcbiAyMzQ6XHRcdGhlbHBcbiAyMzU6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gU3BhY2VtaXQgUklTQy1WIFNvQ3NcbiAyMzY6XHRcbiAyMzc6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBTcGFjZW1pdCBwbGF0Zm9ybSBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnRcbiAyMzg6XHRcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlXG4gMjM5Olx0XHQgIFNwYWNlbWl0IEszIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxuIDI0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQyNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUsIHBpY2tpbmcgdXAgZnJvbSBsaW5lIDI0MS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyB0aGluZ3MgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgZnVydGhlciBkb3duIGluIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBtYXliZSBhbnkgZGVmYXVsdCB2YWx1ZXMgYmVpbmcgc2V0IHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIGFyZWEgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBteSBhcmVhIG9mIGV4cGVydGlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDE6XHRjb25maWcgRFdNQUNfU1RBUkZJVkVcbiAyNDI6XHRcdHRyaXN0YXRlIFwmIzM0O1N0YXJGaXZlIGR3bWFjIHN1cHBvcnRcJiMzNDtcbiAyNDM6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NUQVJGSVZFIHx8IENPTVBJTEVfVEVTVClcbiAyNDQ6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gMjQ1Olx0XHRkZWZhdWx0IG0gaWYgQVJDSF9TVEFSRklWRVxuIDI0NjpcdFx0aGVscFxuIDI0NzpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVycyBvbiBTdGFyRml2ZSBSSVNDLVYgU29Dc1xuIDI0ODpcdFxuIDI0OTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIFN0YXJGaXZlIHBsYXRmb3JtIHNwZWNpZmljIGdsdWUgbGF5ZXIgc3VwcG9ydFxuIDI1MDpcdFx0ICBmb3IgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciB0aGVcbiAyNTE6XHRcdCAgU3RhckZpdmUgSkg3MTAwIGFuZCBKSDcxMTAgZXRoZXJuZXQgY29udHJvbGxlcnMuXG4gMjUyOlx0XG4gMjUzOlx0Y29uZmlnIERXTUFDX1NUSVxuIDI1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RpIEdNQUMgc3VwcG9ydFwmIzM0O1xuIDI1NTpcdFx0ZGVmYXVsdCBBUkNIX1NUSVxuIDI1NjpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfU1RJIHx8IENPTVBJTEVfVEVTVClcbiAyNTc6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gMjU4Olx0XHRoZWxwXG4gMjU5Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gU1RpIFNPQ3MuXG4gMjYwOlx0XG4gMjYxOlx0XHQgIFRoaXMgc2VsZWN0cyBTVGkgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xuIDI2MjpcdFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIG9uIGZvciB0aGUgU1RpIHNlcmllc1xuIDI2MzpcdFx0ICBTT0NzIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlci5cbiAyNjQ6XHRcbiAyNjU6XHRjb25maWcgRFdNQUNfU1RNMzJcbiAyNjY6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTTMyIERXTUFDIHN1cHBvcnRcJiMzNDtcbiAyNjc6XHRcdGRlZmF1bHQgQVJDSF9TVE0zMlxuIDI2ODpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiAoQVJDSF9TVE0zMiB8fCBDT01QSUxFX1RFU1QpXG4gMjY5Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDI3MDpcdFx0aGVscFxuIDI3MTpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIFNUTTMyIFNPQ3MuXG4gMjcyOlx0XG4gMjczOlx0XHQgIFRoaXMgc2VsZWN0cyBTVE0zMiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gMjc0Olx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgb24gZm9yIHRoZSBTVE0zMiBzZXJpZXNcbiAyNzU6XHRcdCAgU09DcyBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXG4gMjc2Olx0XG4gMjc3Olx0Y29uZmlnIERXTUFDX1NVTlhJXG4gMjc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtBbGx3aW5uZXIgR01BQyBzdXBwb3J0XCYjMzQ7XG4gMjc5Olx0XHRkZWZhdWx0IEFSQ0hfU1VOWElcbiAyODA6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVClcbiAyODE6XHRcdGhlbHBcbiAyODI6XHRcdCAgU3VwcG9ydCBmb3IgQWxsd2lubmVyIEEyMC9BMzEgR01BQyBldGhlcm5ldCBjb250cm9sbGVycy5cbiAyODM6XHRcbiAyODQ6XHRcdCAgVGhpcyBzZWxlY3RzIEFsbHdpbm5lciBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGVcbiAyODU6XHRcdCAgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIEEyMC9BMzFcbiAyODY6XHRcdCAgR01BQyBldGhlcm5ldCBjb250cm9sbGVyLlxuIDI4NzpcdFxuIDI4ODpcdGNvbmZpZyBEV01BQ19TVU44SVxuIDI4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIHN1bjhpIEdNQUMgc3VwcG9ydFwmIzM0O1xuIDI5MDpcdFx0ZGVmYXVsdCBBUkNIX1NVTlhJXG4gMjkxOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QpXG4gMjkyOlx0XHRzZWxlY3QgTURJT19CVVNfTVVYXG4gMjkzOlx0XHRoZWxwXG4gMjk0Olx0XHQgIFN1cHBvcnQgZm9yIEFsbHdpbm5lciBIMyBBODNUIEE2NCBFTUFDIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxuIDI5NTpcdFxuIDI5NjpcdFx0ICBUaGlzIHNlbGVjdHMgQWxsd2lubmVyIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZVxuIDI5NzpcdFx0ICBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgSDMvQTgzVC9BNjRcbiAyOTg6XHRcdCAgRU1BQyBldGhlcm5ldCBjb250cm9sbGVyLlxuIDI5OTpcdFxuIDMwMDpcdGNvbmZpZyBEV01BQ19TVU41NUlcbiAzMDE6XHRcdHRyaXN0YXRlIFwmIzM0O0FsbHdpbm5lciBzdW41NWkgR01BQzIwMCBzdXBwb3J0XCYjMzQ7XG4gMzAyOlx0XHRkZWZhdWx0IEFSQ0hfU1VOWElcbiAzMDM6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVClcbiAzMDQ6XHRcdHNlbGVjdCBNRElPX0JVU19NVVhcbiAzMDU6XHRcdGhlbHBcbiAzMDY6XHRcdCAgU3VwcG9ydCBmb3IgQWxsd2lubmVyIEE1MjMvVDUyNyBHTUFDMjAwIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxuIDMwNzpcdFxuIDMwODpcdFx0ICBUaGlzIHNlbGVjdHMgQWxsd2lubmVyIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZVxuIDMwOTpcdFx0ICBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgQTUyMy9UNTI3XG4gMzEwOlx0XHQgIEdNQUMyMDAgZXRoZXJuZXQgY29udHJvbGxlci5cbiAzMTE6XHRcbiAzMTI6XHRjb25maWcgRFdNQUNfVEhFQURcbiAzMTM6XHRcdHRyaXN0YXRlIFwmIzM0O1QtSEVBRCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMzE0Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9USEVBRCB8fCBDT01QSUxFX1RFU1QpXG4gMzE1Olx0XHRoZWxwXG4gMzE2Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXJzIG9uIFQtSEVBRCBSSVNDLVYgU29Dc1xuIDMxNzpcdFxuIDMxODpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIFQtSEVBRCBwbGF0Zm9ybSBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXG4gMzE5Olx0XHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgVC1IRUFEIFRIMTUyMFxuIDMyMDpcdFx0ICBldGhlcm5ldCBjb250cm9sbGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSByZW1haW5kZXIgb2YgdGhpcyBLY29uZmlnIGZpbGUsIHBpY2tpbmcgdXAgZnJvbSBsaW5lIDMyMSBhbmQgZ29pbmcgdG8gdGhlIGVuZC4gSSYjMzk7bSBrZWVuIHRvIHNlZSB3aGF0IGhpZGRlbiBnZW1zIG9yIHN1YnRsZSBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBsdXJraW5nIHRoZXJlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgb2Z0ZW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgYW5kIGltcGFjdGZ1bCBzZXR0aW5ncyBhcmUgZm91bmQgdHVja2VkIGF3YXksIG1heWJlIGluIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggb2JzY3VyZSBoYXJkd2FyZSBvciBhIHNwZWNpZmljLCByYXJlbHkgdXNlZCBmZWF0dXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBvciBldmVuIHNlY3VyaXR5LCBidXQgdGhhdCBjb3VsZCBlYXNpbHkgYmUgb3Zlcmxvb2tlZCBkdXJpbmcgYSBjdXJzb3J5IHJldmlldy4gUGVyaGFwcyB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbuKAmXQgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBpbml0aWFsIGNvbnRleHQsIG9yIG1heWJlIHRoZXJlIGFyZSBkZXByZWNhdGVkIG9wdGlvbnMgc3RpbGwgcHJlc2VudCB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBsb2dpYyBvciBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnRzLCBhcyB0aG9zZSBhcmUgb2Z0ZW4gd2hlcmUgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIHJlc2lkZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBvcHBvcnR1bml0aWVzIHRvIHJlZmFjdG9yIG9yIHNpbXBsaWZ5IHRoZSBjb25maWd1cmF0aW9uLCBlaXRoZXIgZm9yIGNsYXJpdHkgb3IgZWZmaWNpZW5jeS4gVWx0aW1hdGVseSwgSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIxOlx0XG4gMzIyOlx0Y29uZmlnIERXTUFDX0lNWDhcbiAzMjM6XHRcdHRyaXN0YXRlIFwmIzM0O05YUCBJTVg4IERXTUFDIHN1cHBvcnRcJiMzNDtcbiAzMjQ6XHRcdGRlZmF1bHQgQVJDSF9NWENcbiAzMjU6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX01YQyB8fCBDT01QSUxFX1RFU1QpXG4gMzI2Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuIDMyNzpcdFx0aGVscFxuIDMyODpcdFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIE5YUCBpLk1YOCBTT0NzLlxuIDMyOTpcdFxuIDMzMDpcdFx0ICBUaGlzIHNlbGVjdHMgTlhQIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcbiAzMzE6XHRcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgaS5NWDggc2VyaWVzIGxpa2VcbiAzMzI6XHRcdCAgaU1YOE1QL2lNWDhEWEwgR01BQyBldGhlcm5ldCBjb250cm9sbGVyLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXG4gMzM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLXG4gMzM3Olx0XHRoZWxwXG4gMzM4Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXJzIG9uIEludGVsIFNvQ3NcbiAzMzk6XHRcbiAzNDA6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBJbnRlbCBwbGF0Zm9ybSBzcGVjaWZpYyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXG4gMzQxOlx0XHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIEludGVsIEtlZW0gQmF5XG4gMzQyOlx0XHQgIFNvQy5cbiAzNDM6XHRcbiAzNDQ6XHRjb25maWcgRFdNQUNfTE9PTkdTT04xXG4gMzQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMb29uZ3NvbjEgR01BQyBzdXBwb3J0XCYjMzQ7XG4gMzQ2Olx0XHRkZWZhdWx0IE1BQ0hfTE9PTkdTT04zMlxuIDM0NzpcdFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKE1BQ0hfTE9PTkdTT04zMiB8fCBDT01QSUxFX1RFU1QpXG4gMzQ4Olx0XHRoZWxwXG4gMzQ5Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24xIFNvQy5cbiAzNTA6XHRcbiAzNTE6XHRcdCAgVGhpcyBzZWxlY3RzIExvb25nc29uMSBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXG4gMzUyOlx0XHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIExvb25nc29uMS1iYXNlZCBib2FyZHNcbiAzNTM6XHRcdCAgbGlrZSBMb29uZ3NvbiBMUzFCL0xTMUMuXG4gMzU0Olx0XG4gMzU1Olx0Y29uZmlnIERXTUFDX1RFR1JBXG4gMzU2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOVklESUEgVGVncmEgTUdCRSBzdXBwb3J0XCYjMzQ7XG4gMzU3Olx0XHRkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgfHwgQ09NUElMRV9URVNUXG4gMzU4Olx0XHRoZWxwXG4gMzU5Olx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgTXVsdGktR2lnYUJpdCBFdGhlcm5ldCAoTUdCRSkgQ29udHJvbGxlciB0aGF0IGlzXG4gMzYwOlx0XHQgIGZvdW5kIG9uIHRoZSBOVklESUEgVGVncmEgU29DIGRldmljZXMuIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBnbHVlXG4gMzYxOlx0XHQgIGxheWVyIG9uIHRvcCBvZiB0aGUgc3RtbWFjIGRyaXZlciByZXF1aXJlZCBmb3IgdGhlc2UgTlZJRElBIFRlZ3JhIFNvQ1xuIDM2MjpcdFx0ICBkZXZpY2VzLlxuIDM2MzpcdFxuIDM2NDpcdGNvbmZpZyBEV01BQ19WSVNDT05USVxuIDM2NTpcdFx0dHJpc3RhdGUgXCYjMzQ7VG9zaGliYSBWaXNjb250aSBEV01BQyBzdXBwb3J0XCYjMzQ7XG4gMzY2Olx0XHRkZWZhdWx0IEFSQ0hfVklTQ09OVElcbiAzNjc6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IChBUkNIX1ZJU0NPTlRJIHx8IENPTVBJTEVfVEVTVClcbiAzNjg6XHRcdGhlbHBcbiAzNjk6XHRcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBWaXNjb250aSBTb0NzLlxuIDM3MDpcdFxuIDM3MTpcdGVuZGlmICMgU1RNTUFDX1BMQVRGT1JNXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIFNUTU1BQ19MSUJQQ0lcbiAzNzQ6XHRcdHRyaXN0YXRlXG4gMzc1Olx0XHRoZWxwXG4gMzc2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSSBidXMgaGVscGVycyBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXG4gMzc3Olx0XG4gMzc4Olx0Y29uZmlnIERXTUFDX0lOVEVMXG4gMzc5Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBHTUFDIHN1cHBvcnRcJiMzNDtcbiAzODA6XHRcdGRlZmF1bHQgWDg2XG4gMzgxOlx0XHRkZXBlbmRzIG9uIFg4NiBcdTAwMjZcdTAwMjYgUENJXG4gMzgyOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAzODM6XHRcdGRlcGVuZHMgb24gQUNQSVxuIDM4NDpcdFx0aGVscFxuIDM4NTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIEludGVsIHBsYXRmb3JtIHNwZWNpZmljIGJ1cyBzdXBwb3J0IGZvciB0aGVcbiAzODY6XHRcdCAgc3RtbWFjIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgSW50ZWwgUXVhcmsvRUhML1RHTC5cbiAzODc6XHRcbiAzODg6XHRjb25maWcgRFdNQUNfTE9PTkdTT05cbiAzODk6XHRcdHRyaXN0YXRlIFwmIzM0O0xvb25nc29uIFBDSSBEV01BQyBzdXBwb3J0XCYjMzQ7XG4gMzkwOlx0XHRkZWZhdWx0IE1BQ0hfTE9PTkdTT042NFxuIDM5MTpcdFx0ZGVwZW5kcyBvbiAoTUFDSF9MT09OR1NPTjY0IHx8IENPTVBJTEVfVEVTVCkgXHUwMDI2XHUwMDI2IFBDSVxuIDM5MjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gMzkzOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDM5NDpcdFx0aGVscFxuIDM5NTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXG4gMzk2Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxuIDM5NzpcdFxuIDM5ODpcdGNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbiAzOTk6XHRcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQQ0kgRFdNQUMgc3VwcG9ydFwmIzM0O1xuIDQwMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBCYWNrIGludG8gdGhlIEtjb25maWcgRGVwdGhzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGlzIEtjb25maWcgZmlsZS4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgc2VjdGlvbiwgYW5kIEkgdGhpbmsgSSByZW1lbWJlciB3aGVyZSBJIGxlZnQgb2ZmLi4uIGxpbmUgNDAxLiBMZXQmIzM5O3MgZ2V0IHRoZSB3aG9sZSB0aGluZyBpbiB2aWV3IHNvIEkgY2FuIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCB0aGUgcmVsYXRpb25zaGlwcywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSG9wZWZ1bGx5IGl0JiMzOTtzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIFRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZsYWcgSSBuZWVkIHRvIHRyYWNrIGRvd24sIGFuZCBJJiMzOTttIGJldHRpbmcgaXRzIGRlcGVuZGVuY2llcyBhcmUgbHVya2luZyBpbiB0aGlzIHNlY3Rpb24uIEdvdHRhIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNhbmUgd2l0aCByZXNwZWN0IHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDE6XHRcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXG4gNDAyOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQwMzpcdFx0aGVscFxuIDQwNDpcdFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcbiA0MDU6XHRcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuIDQxNzpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuIDQxODpcdFxuIDQxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDQyMDpcdGVuZGlmICMgU1RNTUFDX0VUSFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU1RNTUFDIFJlYWNoYWJpbGl0eSBpbiBRRU1VL1N5emthbGxlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gdHJpZ2dlciBgc3RtbWFjYCBpbiB0aGUgY29udGV4dCBvZiBRRU1VL3N5emthbGxlci4gSSBpbW1lZGlhdGVseSB0aGluayBvZiBTZWN0aW9uIDIgZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGljaCBoaWdobGlnaHRzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMuIFRoZSBxdWVzdGlvbiBpcywgaXMgYHN0bW1hY2AsIG9yIGl0cyBlcXVpdmFsZW50IGBEV01BQ2AsIGVtdWxhdGVkIHdpdGhpbiBzdGFuZGFyZCBRRU1VPyBPciBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbnRyb2xsZXIsIGxpa2Ugc29tZXRoaW5nIGJha2VkIGludG8gYW4gU29DPwoKTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiB0aGVyZSAqaXMqIGEgRFdNQUMgb3Igc3RtbWFjIGRldmljZSB3aXRoaW4gUUVNVS4gVGhlbiBJIHN0YXJ0IHRoaW5raW5nLCAmIzM0O3dhaXQsIHdoYXQgYWJvdXQgYGFsbHdpbm5lci1lbWFjYCBvciBgc3RtMzJgPyYjMzQ7IEJ1dCB0aGVuIEkgcmVhbGl6ZSB0aGUgU1RNMzIgaW4gUUVNVSBpcyB1c3VhbGx5IGEgQ29ydGV4LU0sIGFuZCB3ZSYjMzk7cmUgdGFyZ2V0aW5nIGFtZDY0LiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQhIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LgoKT2theSwgb24gYW1kNjQsIGBzdG1tYWNgIGlzIHR5cGljYWxseSBhIGRyaXZlciBmb3IgRXRoZXJuZXQgTUFDcyBmcm9tIFNUTWljcm9lbGVjdHJvbmljcyBvciBTeW5vcHN5cy4gVGhlc2UgTUFDcyBhcmUgdXN1YWxseSBmb3VuZCBvbiBzcGVjaWZpYyBTb0NzIChBUk0sIFJJU0MtViwgZXRjLikgb3IgaW50ZWdyYXRlZCB2aWEgUENJIG9uIEludGVsIFF1YXJrL0VITC9UR0wsIE1vdG9yY29tbSwgb3IgRlBHQSBkZXZpY2VzLiBDYW4gSSBldmVuIGluc3RhbnRpYXRlIGBzdG1tYWNgIG9uIGFtZDY0IGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpPyBObywgdGhpcyBkb2VzbiYjMzk7dCBzZWVtIHBvc3NpYmxlLiBTdGFuZGFyZCBRRU1VIHg4Nl82NCB1c2VzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIGFuZCB2aXJ0aW8tbmV0LCBub3QgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUNzLiBObyBlbXVsYXRpb24gb2YgYHN0bW1hY2AgZm9yIHg4Nl82NCwgb3IgZm9yIGEgUEMvUTM1IG1hY2hpbmUsIGV4aXN0cy4KCkV2ZW4gaWYgSSB3YXMgb24gYW4gQVJNIHBsYXRmb3JtIHdpdGhpbiBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIHNldHVwIHdvdWxkIHVzZSB2aXJ0aW8tbmV0LiBDZXJ0YWluIGJvYXJkIGVtdWxhdGlvbnMsIGxpa2Ugb3JhbmdlcGktcGMsIG1pZ2h0IGhhdmUgYSBzdW54aSBvciBhbGx3aW5uZXIgZW1hYywgYnV0IHN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24gc3RhbmRhcmQgUUVNVSB4ODZfNjQgb3IgYXJtNjQgdmlydCBtYWNoaW5lcy4gQnV0IHJlbWVtYmVyLCB3ZSYjMzk7cmUgb24gYW1kNjQuCgpUaGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRldmljZXMsIFVTQiBnYWRnZXRzLCB0dW4vdGFwIGludGVyZmFjZXMsIG9yIG5ldGxpbmsgaW50ZXJmYWNlcyB0aGF0IGNvdWxkICpzb21laG93KiB0cmlnZ2VyIGBzdG1tYWNfbWFpbi5jYD8gTm8uIFRoZSB3YXkgaXQgd29ya3MsIGBzdG1tYWNgIGlzIGEgbmV0X2RldmljZSBkcml2ZXIgbWVhbnQgZm9yICpwaHlzaWNhbCogaGFyZHdhcmUgTUFDcywgU29Dcywgb3IgUENJIGRldmljZXMuIFRvIGdldCBhIG5ldGRldiBjcmVhdGVkIGJ5IGBzdG1tYWNgLCB0aGUgZHJpdmVyIG5lZWRzIHRvIHByb2JlIGFuIGFjdHVhbCBkZXZpY2UsIHdoaWNoIGhhcHBlbnMgdGhyb3VnaCBhIHBsYXRmb3JtIGRldmljZSBvciBhIFBDSSBkZXZpY2Ugd2l0aCBzcGVjaWZpYyBWSUQvUElELiBObyBoYXJkd2FyZSwgbm8gcHJvYmUuIElmIG5vIGhhcmR3YXJlLCBubyBgc3RtbWFjYCBuZXRfZGV2aWNlIGV4aXN0cywgc28gZnVuY3Rpb25zIGxpa2UgYF9fc3RtbWFjX29wZW5gLCBgc3RtbWFjX2h3dHN0YW1wX3NldGAsIGV0Yy4sIGFyZSBuZXZlciBjYWxsZWQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgc291cmNlLCBsb29rIGZvciBtb2NrIG9yIHZpcnR1YWwgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIHVzaW5nIGBzdG1tYWNgLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB1c2VzIG9mIGBzdG1tYWNfcHJvYmVfY29uZmlnX2R0YCBvciBgc3RtbWFjX2R2cl9wcm9iZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19kdnJfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYz0yODM9c3RhdGljIGludCBkd2NfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jOjMzMDpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjYzPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzNDE6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzQyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYz0zNzQ9c3RhdGljIGludCBpcHE4MDZ4X2dtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jOjQ4MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM9NDI9c3RhdGljIGludCBscGMxOHh4X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jOjY4Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYz00Nz1zdGF0aWMgaW50IG1lc29uNl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jOjczOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jLTQ2NS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYz00OD1zdGF0aWMgaW50IHJ6bjFfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM6Njg6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTY5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYz0zNT1zdGF0aWMgaW50IHNvcGhnb19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM6NjU6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5Olx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDMtXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDgtXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5Olx0ICogc28gYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2Olx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc3LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzOC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDExPXZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTMtXHRcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MTA9RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX3BsYXRfZGF0X2FsbG9jKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzgxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzgxMjpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4MTMtXHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMTY6ICogc3RtbWFjX2R2cl9wcm9iZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE3LSAqIEBkZXY6IGRldmljZSBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTI0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI1OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cdFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEzNjpcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTM3LVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGxhdF9kYXQtXHUwMDNlZXhpdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNDEtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTQyOkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MjIKCQkJCQkJCW91dHB1dDogMTA5CgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgYHN0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIGFsbCB0aGUgY2FsbGVycyBhcmUgZGV2aWNlIHByb2JlIHJvdXRpbmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIGhhcmR3YXJlIHBsYXRmb3JtcyBvciBQQ0kgZGV2aWNlcy4gSSBzZWUgYSB3aWRlIHJhbmdlIG9mIGRldmljZXMgdGhlcmU6IGBkd21hYy1kd2MtcW9zLWV0aGAsIGBkd21hYy1pbnRlbC1wbGF0YCwgYGR3bWFjLWludGVsYCwgYGR3bWFjLWlwcTgwNnhgLCBgZHdtYWMtbG9vbmdzb25gLCBgZHdtYWMtbHBjMTh4eGAsIGBkd21hYy1tZWRpYXRla2AsIGBkd21hYy1tZXNvbmAsIGBkd21hYy1tb3RvcmNvbW1gLCBgZHdtYWMtcnpuMWAsIGBkd21hYy1zb3BoZ29gLCBgZHdtYWMtc3BhY2VtaXRgLCBgZHdtYWMtc3RhcmZpdmVgLCBgZHdtYWMtc3RtMzJgLCBgZHdtYWMtc3VuOGlgLCBgZHdtYWMtdGVncmFgLCBgZHdtYWMtdmlzY29udGlgLCBgc3RtbWFjX3BjaWAsIGFuZCBgc3RtbWFjX3BsYXRmb3JtYC4KClRoZSBrZXkgdGhpbmcgSSYjMzk7bSBub3RpY2luZyBpcyB0aGF0ICpub25lKiBvZiB0aGVzZSBhcmUgZW11bGF0ZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNcyB0aGF0IHN5emthbGxlciBjb21tb25seSB1c2VzIG9uIGFtZDY0LiBUaGVzZSBhcmUgcGh5c2ljYWwgU29DcyBhbmQgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IGhhcmR3YXJlIGNvbnRyb2xsZXJzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjcml0ZXJpYSBvdXRsaW5lZCBpbiBTZWN0aW9uIDIgcmVnYXJkaW5nIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gSW4gcGFydGljdWxhciwgdGhlIHNlY3Rpb24gbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgYW5kIEdQVSBkcml2ZXJzLgoKVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjYCBkaXJlY3RvcnksIHdoaWNoIGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgc3RtbWFjYCBkcml2ZXIgZm9yIFNUTWljcm9lbGVjdHJvbmljcy9TeW5vcHN5cyBEV01BQyBFdGhlcm5ldCBoYXJkd2FyZSBjb250cm9sbGVycy4gVGhpcyBpcyB0aGUgZHJpdmVyIHdlJiMzOTtyZSBmb2N1c2luZyBvbi4KCk15IGNvbmNsdXNpb24gaXMgdGhlIGBzdG1tYWNgIGRyaXZlciBpcyAqc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlKiBnaXZlbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gSSYjMzk7bSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byByZWFjaCB0aGlzIGRyaXZlciBlYXNpbHkgaW4gYW4gYXV0b21hdGVkIGZ1enppbmcgc2V0dXAgb24gdGhlIHR5cGljYWwgYW1kNjQgUUVNVS9HQ0Ugc3lzdGVtcy4KClRvIG1ha2UgaXQgY2xlYXIsIEkgYW0gY29uZmlybWluZyB0aGUgZm9sbG93aW5nOgoqICAgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGBmYWxzZWAuCiogICBgRW5hYmxlQ29uZmlnc2AgYXJlIGVtcHR5IChvciBudWxsKS4KKiAgIGBGb2N1c1N5bWJvbHNgIGFyZSBlbXB0eSAob3IgbnVsbCkuCiogICBUaGUgcmVhc29uaW5nIGZvciB0aGlzIGRldGVybWluYXRpb24gaXMgY29uY2lzZWx5IGV4cGxhaW5lZCBhcyB0aGUgaGFyZHdhcmUgdGhpcyBkcml2ZXIgc3VwcG9ydHMgaXMgcGh5c2ljYWxseSByZXF1aXJlZCBhbmQgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKSSYjMzk7bSBub3cgcmVhZHkgdG8gcHJlcGFyZSB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBzdG1tYWMgKFN5bm9wc3lzIERlc2lnbldhcmUgLyBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgTUFDKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLykuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIHBoeXNpY2FsIFNvQyBhbmQgUENJZSBFdGhlcm5ldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgZm9yIGFtZDY0LiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgc3RtbWFjIChTeW5vcHN5cyBEZXNpZ25XYXJlIC8gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQykgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8pLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBwaHlzaWNhbCBTb0MgYW5kIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGZvciBhbWQ2NC4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxODowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MTYuMDEzMzY5OTkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MTgwNzgwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIHN0bW1hYyAoU3lub3BzeXMgRGVzaWduV2FyZSAvIFNUTWljcm9lbGVjdHJvbmljcyBFdGhlcm5ldCBNQUMpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvKS4gVGhpcyBkcml2ZXIgb3BlcmF0ZXMgcGh5c2ljYWwgU29DIGFuZCBQQ0llIEV0aGVybmV0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBmb3IgYW1kNjQuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MTYuMDEzMzc2MzMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk1NjI3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMTQ2ZjNhZGQyNjRiNWI3MzE1YjgzZTVlNzk1NDkyMDI5YjI5OWEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDE4OjAzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcXG5pbmRleCA3NTgyZmNhNjM3NDE5Li4wYTAwNDkwODMyZjNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcXG5AQCAtNDE5LDYgKzQxOSwxNyBAQCBpbnQgc3RtbWFjX3NldF9jbGtfdHhfcmF0ZSh2b2lkICpic3BfcHJpdiwgc3RydWN0IGNsayAqY2xrX3R4X2ksXFxuIFxcbiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCBcXHUwMDI2XFx1MDAyNiAhcHJpdi1cXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JhdGUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3RtbWFjX3hkcF9pc19lbmFibGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRyZXR1cm4gISFwcml2LVxcdTAwM2V4ZHBfcHJvZztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5pbmRleCA1ZmU3ZTk1ZmRkMzQ1Li43ZjVhZGExMTMyYzQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXFxuQEAgLTYwMSw3ICs2MDEsNyBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3J4X2h3dHN0YW1wKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IGRtYV9kZXNjICpwLFxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRib29sIHhtYWMgPSBkd21hY19pc194bWFjKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSk7XFxuIFxcdHUzMiBzZWNfaW5jID0gMDtcXG5AQCAtNjI1LDcgKzYyNSw3IEBAIHN0YXRpYyB2b2lkIHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdCAqL1xcbiBcXHR0ZW1wID0gKHU2NCkodGVtcCBcXHUwMDNjXFx1MDAzYyAzMik7XFxuIFxcdHByaXYtXFx1MDAzZWRlZmF1bHRfYWRkZW5kID0gZGl2X3U2NCh0ZW1wLCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JhdGUpO1xcbi1cXHRzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVxcdTAwM2VwdHBhZGRyLCBwcml2LVxcdTAwM2VkZWZhdWx0X2FkZGVuZCk7XFxuK1xcdHJldHVybiBzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVxcdTAwM2VwdHBhZGRyLCBwcml2LVxcdTAwM2VkZWZhdWx0X2FkZGVuZCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC02NTMsNyArNjUzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHUzMiB0c19tYXN0ZXJfZW4gPSAwO1xcbiBcXHR1MzIgdHNfZXZlbnRfZW4gPSAwO1xcbiBcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXFx1MDAzZWFkdl90cykpIHtcXG4rXFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiTm8gc3VwcG9ydCBmb3IgSFcgdGltZSBzdGFtcGluZ1xcXCIpO1xcbiBcXHRcXHRwcml2LVxcdTAwM2Vod3RzX3R4X2VuID0gMDtcXG4gXFx0XFx0cHJpdi1cXHUwMDNlaHd0c19yeF9lbiA9IDA7XFxuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY19od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXFx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKVxcbitcXHRpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHQqY29uZmlnID0gcHJpdi1cXHUwMDNldHN0YW1wX2NvbmZpZztcXG5AQCAtODY1LDMyICs4NjUsMzIgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90c3RhbXBfY291bnRlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiBzeXN0aW1lX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcXG4tXFxuLVxcdGlmICghcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY2xrX3B0cF9yYXRlKSB7XFxuLVxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBQVFAgY2xvY2sgcmF0ZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c3RtbWFjX2NvbmZpZ19od190c3RhbXBpbmcocHJpdiwgcHJpdi1cXHUwMDNlcHRwYWRkciwgc3lzdGltZV9mbGFncyk7XFxuIFxcdHByaXYtXFx1MDAzZXN5c3RpbWVfZmxhZ3MgPSBzeXN0aW1lX2ZsYWdzO1xcbiBcXG4tXFx0c3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xcbitcXHRyZXQgPSBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBpbml0aWFsaXplIHN5c3RlbSB0aW1lICovXFxuIFxcdGt0aW1lX2dldF9yZWFsX3RzNjQoXFx1MDAyNm5vdyk7XFxuIFxcbiBcXHQvKiBsb3dlciAzMiBiaXRzIG9mIHR2X3NlYyBhcmUgc2FmZSB1bnRpbCB5MjEwNiAqL1xcbi1cXHRzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtXFx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYywgbm93LnR2X25zZWMpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBzdG1tYWNfaW5pdF9zeXN0aW1lKHByaXYsIHByaXYtXFx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYyxcXG4rXFx0XFx0XFx0XFx0ICAgbm93LnR2X25zZWMpO1xcbiB9XFxuIFxcbiAvKipcXG4gICogc3RtbWFjX2luaXRfdGltZXN0YW1waW5nIC0gaW5pdGlhbGlzZSB0aW1lc3RhbXBpbmdcXG4gICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0gKiBEZXNjcmlwdGlvbjogdGhpcyBpcyB0byB2ZXJpZnkgaWYgdGhlIEhXIHN1cHBvcnRzIHRoZSBQVFB2MSBvciBQVFB2Mi5cXG4tICogVGhpcyBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXFxuLSAqIFRoaXMgZnVuY3Rpb24gYWxzbyByZWdpc3RlcnMgdGhlIHB0cCBkcml2ZXIuXFxuKyAqIERlc2NyaXB0aW9uOiBjb25maWd1cmUgdGhlIFBUUCByZWZlcmVuY2UgY2xvY2sgYW5kIGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlXFxuKyAqIHRpbWVzdGFtcCBjb3VudGVyLCB0aGVuIGRldGVjdCB3aGljaCB0aW1lc3RhbXBpbmcgbW9kZXMgdGhlIEhXIHN1cHBvcnRzLlxcbisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgUFRQIHJlZmVyZW5jZSBjbG9jayBhbmQgZm9yXFxuKyAqIHJlZ2lzdGVyaW5nIHRoZSBQVFAgY2xvY2sgZHJpdmVyLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSB0aW1lc3RhbXAgY291bnRlclxcbisgKiBjYW5ub3QgYmUgaW5pdGlhbGlzZWQuXFxuICAqL1xcbiBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG5AQCAtOTAwLDExICs5MDAsNiBAQCBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwdHBfY2xrX2ZyZXFfY29uZmlnKVxcbiBcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwdHBfY2xrX2ZyZXFfY29uZmlnKHByaXYpO1xcbiBcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXFx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApKSB7XFxuLVxcdFxcdG5ldGRldl9pbmZvKHByaXYtXFx1MDAzZWRldiwgXFxcIlBUUCBub3Qgc3VwcG9ydGVkIGJ5IEhXXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHR9XFxuLVxcbiBcXHRyZXQgPSBzdG1tYWNfaW5pdF90c3RhbXBfY291bnRlcihwcml2LCBTVE1NQUNfSFdUU19BQ1RJVkUgfFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgUFRQX1RDUl9UU0NGVVBEVCk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtOTM3LDIyICs5MzIsMzkgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2LCBcXFwiUFRQIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNsa19wdHBfcmVmKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIFBUUCByZWZlcmVuY2UgY2xvY2s6ICVwZVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdikgPT0gMClcXG4tXFx0XFx0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcXG4rXFx0cmV0ID0gc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JlZik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHN0bW1hY19wdHBfcmVnaXN0ZXIocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3RtbWFjX3JlbGVhc2VfcHRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbitcXHRpZiAoIXN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRzdG1tYWNfcHRwX3VucmVnaXN0ZXIocHJpdik7XFxuIFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VjbGtfcHRwX3JlZik7XFxuIH1cXG5AQCAtNDE2MSwxMCArNDE3MywxMiBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0cmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiJXM6IEh3IHNldHVwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRcXHRnb3RvIGluaXRfZXJyb3I7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHN0bW1hY19zZXR1cF9wdHAocHJpdik7XFxuK1xcdHJldCA9IHN0bW1hY19zZXR1cF9wdHAocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcHRwX2Vycm9yO1xcbiBcXG4gXFx0c3RtbWFjX2luaXRfY29hbGVzY2UocHJpdik7XFxuIFxcbkBAIC00MTg5LDcgKzQyMDMsMTAgQEAgc3RhdGljIGludCBfX3N0bW1hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZi50eF9xdWV1ZVtjaGFuXS50eHRpbWVyKTtcXG4gXFxuIFxcdHN0bW1hY19yZWxlYXNlX3B0cChwcml2KTtcXG4taW5pdF9lcnJvcjpcXG4rcHRwX2Vycm9yOlxcbitcXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xcbitcXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGZhbHNlKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTc2ODUsOSArNzcwMiw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXFxuIFxcdC8qIEluIENvYXJzZSBtb2RlLCB3ZSBjYW4gdXNlIGEgc21hbGxlciBzdWJzZWNvbmQgaW5jcmVtZW50LCBsZXQnc1xcbiBcXHQgKiByZWNvbmZpZ3VyZSB0aGUgc3lzdGltZSwgc3Vic2Vjb25kIGluY3JlbWVudCBhbmQgYWRkZW5kLlxcbiBcXHQgKi9cXG4tXFx0c3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHByaXYpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBzdG1tYWNfdXBkYXRlX3N1YnNlY29uZF9pbmNyZW1lbnQocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9nZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXFxuQEAgLTgzMjcsMTMgKzgzNDIsMTQgQEAgaW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRyZXQgPSBzdG1tYWNfaHdfc2V0dXAobmRldik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiJXM6IEh3IHNldHVwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRcXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRydG5sX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0c3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xcbitcXHRpZiAoc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHtcXG4rXFx0XFx0cmV0ID0gc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX3N0b3BfZG1hO1xcbitcXHR9XFxuIFxcbiBcXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcXG4gXFx0cGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LVxcdTAwM2VwaHlsaW5rKTtcXG5AQCAtODM1Nyw2ICs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyb3Jfc3RvcF9kbWE6XFxuK1xcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XFxuK1xcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgZmFsc2UpO1xcbitlcnJvcl91bmxvY2s6XFxuK1xcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19yZXN1bWUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xcbmluZGV4IDYxMjhlZDFiZDUyMWEuLmRjZmNlNTFiMjg4NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uY1xcbkBAIC05NTksNyArOTU5LDggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzdG1tYWNfcGx0ZnJfbm9pcnFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRpZiAoIXByaXYtXFx1MDAzZXdvbG9wdHMpIHtcXG4gXFx0XFx0LyogRGlzYWJsZSBjbG9jayBpbiBjYXNlIG9mIFBXTSBpcyBvZmYgKi9cXG4tXFx0XFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNsa19wdHBfcmVmKTtcXG4rXFx0XFx0aWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKVxcbitcXHRcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY2xrX3B0cF9yZWYpO1xcbiBcXG4gXFx0XFx0cmV0ID0gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XFxuIFxcdFxcdGlmIChyZXQpXFxuQEAgLTk4NCw2ICs5ODUsOSBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHN0bW1hY19wbHRmcl9ub2lycV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0XFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRcXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY2xrX3B0cF9yZWYpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRuZXRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjE2LjU0MzUzMzM4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDIyODc4OTgyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgc3RtbWFjIChTeW5vcHN5cyBEZXNpZ25XYXJlIC8gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQykgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8pLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBwaHlzaWNhbCBTb0MgYW5kIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGZvciBhbWQ2NC4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxNDZmM2FkZDI2NGI1YjczMTViODNlNWU3OTU0OTIwMjliMjk5YTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxODowMzoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbmluZGV4IDc1ODJmY2E2Mzc0MTkuLjBhMDA0OTA4MzJmM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbkBAIC00MTksNiArNDE5LDE3IEBAIGludCBzdG1tYWNfc2V0X2Nsa190eF9yYXRlKHZvaWQgKmJzcF9wcml2LCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcbiBcbiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnN0bW1hY19wbGF0X2RhdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0aWYgKCFwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCBcdTAwMjZcdTAwMjYgIXByaXYtXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yYXRlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN0bW1hY194ZHBfaXNfZW5hYmxlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuIFx0cmV0dXJuICEhcHJpdi1cdTAwM2V4ZHBfcHJvZztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuaW5kZXggNWZlN2U5NWZkZDM0NS4uN2Y1YWRhMTEzMmM0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbkBAIC02MDEsNyArNjAxLDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX2dldF9yeF9od3RzdGFtcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBkbWFfZGVzYyAqcCxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbitzdGF0aWMgaW50IHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuIFx0Ym9vbCB4bWFjID0gZHdtYWNfaXNfeG1hYyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlKTtcbiBcdHUzMiBzZWNfaW5jID0gMDtcbkBAIC02MjUsNyArNjI1LDcgQEAgc3RhdGljIHZvaWQgc3RtbWFjX3VwZGF0ZV9zdWJzZWNvbmRfaW5jcmVtZW50KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdCAqL1xuIFx0dGVtcCA9ICh1NjQpKHRlbXAgXHUwMDNjXHUwMDNjIDMyKTtcbiBcdHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQgPSBkaXZfdTY0KHRlbXAsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JhdGUpO1xuLVx0c3RtbWFjX2NvbmZpZ19hZGRlbmQocHJpdiwgcHJpdi1cdTAwM2VwdHBhZGRyLCBwcml2LVx1MDAzZWRlZmF1bHRfYWRkZW5kKTtcbitcdHJldHVybiBzdG1tYWNfY29uZmlnX2FkZGVuZChwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHByaXYtXHUwMDNlZGVmYXVsdF9hZGRlbmQpO1xuIH1cbiBcbiAvKipcbkBAIC02NTMsNyArNjUzLDcgQEAgc3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR1MzIgdHNfbWFzdGVyX2VuID0gMDtcbiBcdHUzMiB0c19ldmVudF9lbiA9IDA7XG4gXG4tXHRpZiAoIShwcml2LVx1MDAzZWRtYV9jYXAudGltZV9zdGFtcCB8fCBwcml2LVx1MDAzZWFkdl90cykpIHtcbitcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJObyBzdXBwb3J0IGZvciBIVyB0aW1lIHN0YW1waW5nXCIpO1xuIFx0XHRwcml2LVx1MDAzZWh3dHNfdHhfZW4gPSAwO1xuIFx0XHRwcml2LVx1MDAzZWh3dHNfcnhfZW4gPSAwO1xuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW50IHN0bW1hY19od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKCEocHJpdi1cdTAwM2VkbWFfY2FwLnRpbWVfc3RhbXAgfHwgcHJpdi1cdTAwM2VkbWFfY2FwLmF0aW1lX3N0YW1wKSlcbitcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdCpjb25maWcgPSBwcml2LVx1MDAzZXRzdGFtcF9jb25maWc7XG5AQCAtODY1LDMyICs4NjUsMzIgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90c3RhbXBfY291bnRlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgICAgICB1MzIgc3lzdGltZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JhdGUpIHtcbi1cdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCJJbnZhbGlkIFBUUCBjbG9jayByYXRlXCIpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbitcdGludCByZXQ7XG4gXG4gXHRzdG1tYWNfY29uZmlnX2h3X3RzdGFtcGluZyhwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsIHN5c3RpbWVfZmxhZ3MpO1xuIFx0cHJpdi1cdTAwM2VzeXN0aW1lX2ZsYWdzID0gc3lzdGltZV9mbGFncztcbiBcbi1cdHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbitcdHJldCA9IHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBpbml0aWFsaXplIHN5c3RlbSB0aW1lICovXG4gXHRrdGltZV9nZXRfcmVhbF90czY0KFx1MDAyNm5vdyk7XG4gXG4gXHQvKiBsb3dlciAzMiBiaXRzIG9mIHR2X3NlYyBhcmUgc2FmZSB1bnRpbCB5MjEwNiAqL1xuLVx0c3RtbWFjX2luaXRfc3lzdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYywgbm93LnR2X25zZWMpO1xuLVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gc3RtbWFjX2luaXRfc3lzdGltZShwcml2LCBwcml2LVx1MDAzZXB0cGFkZHIsICh1MzIpbm93LnR2X3NlYyxcbitcdFx0XHRcdCAgIG5vdy50dl9uc2VjKTtcbiB9XG4gXG4gLyoqXG4gICogc3RtbWFjX2luaXRfdGltZXN0YW1waW5nIC0gaW5pdGlhbGlzZSB0aW1lc3RhbXBpbmdcbiAgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tICogRGVzY3JpcHRpb246IHRoaXMgaXMgdG8gdmVyaWZ5IGlmIHRoZSBIVyBzdXBwb3J0cyB0aGUgUFRQdjEgb3IgUFRQdjIuXG4tICogVGhpcyBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXG4tICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgcHRwIGRyaXZlci5cbisgKiBEZXNjcmlwdGlvbjogY29uZmlndXJlIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBpbml0aWFsaXNlIHRoZSBoYXJkd2FyZVxuKyAqIHRpbWVzdGFtcCBjb3VudGVyLCB0aGVuIGRldGVjdCB3aGljaCB0aW1lc3RhbXBpbmcgbW9kZXMgdGhlIEhXIHN1cHBvcnRzLlxuKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBQVFAgcmVmZXJlbmNlIGNsb2NrIGFuZCBmb3JcbisgKiByZWdpc3RlcmluZyB0aGUgUFRQIGNsb2NrIGRyaXZlci5cbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSB0aW1lc3RhbXAgY291bnRlclxuKyAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZC5cbiAgKi9cbiBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuQEAgLTkwMCwxMSArOTAwLDYgQEAgc3RhdGljIGludCBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwdHBfY2xrX2ZyZXFfY29uZmlnKVxuIFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcHRwX2Nsa19mcmVxX2NvbmZpZyhwcml2KTtcbiBcbi1cdGlmICghKHByaXYtXHUwMDNlZG1hX2NhcC50aW1lX3N0YW1wIHx8IHByaXYtXHUwMDNlZG1hX2NhcC5hdGltZV9zdGFtcCkpIHtcbi1cdFx0bmV0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXYsIFwiUFRQIG5vdCBzdXBwb3J0ZWQgYnkgSFdcXG5cIik7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdHJldCA9IHN0bW1hY19pbml0X3RzdGFtcF9jb3VudGVyKHByaXYsIFNUTU1BQ19IV1RTX0FDVElWRSB8XG4gXHRcdFx0XHRcdCAgICAgICBQVFBfVENSX1RTQ0ZVUERUKTtcbiBcdGlmIChyZXQpIHtcbkBAIC05MzcsMjIgKzkzMiwzOSBAQCBzdGF0aWMgaW50IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldHVwX3B0cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBzdG1tYWNfc2V0dXBfcHRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSkge1xuK1x0XHRuZXRkZXZfaW5mbyhwcml2LVx1MDAzZWRldiwgXCJQVFAgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LFxuIFx0XHRcdCAgICBcImZhaWxlZCB0byBlbmFibGUgUFRQIHJlZmVyZW5jZSBjbG9jazogJXBlXFxuXCIsXG4gXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHRpZiAoc3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpID09IDApXG4tXHRcdHN0bW1hY19wdHBfcmVnaXN0ZXIocHJpdik7XG4rXHRyZXQgPSBzdG1tYWNfaW5pdF90aW1lc3RhbXBpbmcocHJpdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yZWYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c3RtbWFjX3B0cF9yZWdpc3Rlcihwcml2KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdG1tYWNfcmVsZWFzZV9wdHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbitcdGlmICghc3RtbWFjX2NoZWNrX3RpbWVzdGFtcF9jYXAocHJpdikpXG4rXHRcdHJldHVybjtcbitcbiBcdHN0bW1hY19wdHBfdW5yZWdpc3Rlcihwcml2KTtcbiBcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZXBsYXQtXHUwMDNlY2xrX3B0cF9yZWYpO1xuIH1cbkBAIC00MTYxLDEwICs0MTczLDEyIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0ID0gc3RtbWFjX2h3X3NldHVwKGRldik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwiJXM6IEh3IHNldHVwIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4tXHRcdGdvdG8gaW5pdF9lcnJvcjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHN0bW1hY19zZXR1cF9wdHAocHJpdik7XG4rXHRyZXQgPSBzdG1tYWNfc2V0dXBfcHRwKHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBwdHBfZXJyb3I7XG4gXG4gXHRzdG1tYWNfaW5pdF9jb2FsZXNjZShwcml2KTtcbiBcbkBAIC00MTg5LDcgKzQyMDMsMTAgQEAgc3RhdGljIGludCBfX3N0bW1hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGhydGltZXJfY2FuY2VsKFx1MDAyNnByaXYtXHUwMDNlZG1hX2NvbmYudHhfcXVldWVbY2hhbl0udHh0aW1lcik7XG4gXG4gXHRzdG1tYWNfcmVsZWFzZV9wdHAocHJpdik7XG4taW5pdF9lcnJvcjpcbitwdHBfZXJyb3I6XG4rXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuK1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTc2ODUsOSArNzcwMiw3IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2RsX3RzX2NvYXJzZV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG4gXHQvKiBJbiBDb2Fyc2UgbW9kZSwgd2UgY2FuIHVzZSBhIHNtYWxsZXIgc3Vic2Vjb25kIGluY3JlbWVudCwgbGV0J3NcbiBcdCAqIHJlY29uZmlndXJlIHRoZSBzeXN0aW1lLCBzdWJzZWNvbmQgaW5jcmVtZW50IGFuZCBhZGRlbmQuXG4gXHQgKi9cbi1cdHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHN0bW1hY191cGRhdGVfc3Vic2Vjb25kX2luY3JlbWVudChwcml2KTtcbiB9XG4gXG4gc3RhdGljIGludCBzdG1tYWNfZGxfdHNfY29hcnNlX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcbkBAIC04MzI3LDEzICs4MzQyLDE0IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldCA9IHN0bW1hY19od19zZXR1cChuZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCIlczogSHcgc2V0dXAgZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbi1cdFx0c3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuIFx0fVxuIFxuLVx0c3RtbWFjX2luaXRfdGltZXN0YW1waW5nKHByaXYpO1xuK1x0aWYgKHN0bW1hY19jaGVja190aW1lc3RhbXBfY2FwKHByaXYpKSB7XG4rXHRcdHJldCA9IHN0bW1hY19pbml0X3RpbWVzdGFtcGluZyhwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGVycm9yX3N0b3BfZG1hO1xuK1x0fVxuIFxuIFx0c3RtbWFjX2luaXRfY29hbGVzY2UocHJpdik7XG4gXHRwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKHByaXYtXHUwMDNlcGh5bGluayk7XG5AQCAtODM1Nyw2ICs4MzczLDE2IEBAIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJvcl9zdG9wX2RtYTpcbitcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuK2Vycm9yX3VubG9jazpcbitcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcmVzdW1lKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jXG5pbmRleCA2MTI4ZWQxYmQ1MjFhLi5kY2ZjZTUxYjI4ODZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jXG5AQCAtOTU5LDcgKzk1OSw4IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc3RtbWFjX3BsdGZyX25vaXJxX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0aWYgKCFwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiBcdFx0LyogRGlzYWJsZSBjbG9jayBpbiBjYXNlIG9mIFBXTSBpcyBvZmYgKi9cbi1cdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4rXHRcdGlmIChzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbitcdFx0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNsa19wdHBfcmVmKTtcbiBcbiBcdFx0cmV0ID0gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XG4gXHRcdGlmIChyZXQpXG5AQCAtOTg0LDYgKzk4NSw5IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc3RtbWFjX3BsdGZyX25vaXJxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbitcdFx0aWYgKCFzdG1tYWNfY2hlY2tfdGltZXN0YW1wX2NhcChwcml2KSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbiBcdFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VjbGtfcHRwX3JlZik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjE2LjU0MzUzNDU5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMTcxMzkxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2gncyBTdWl0YWJpbGl0eSBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyBhbmFseXppbmcgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc3Vic3lzdGVtIGl0IHRvdWNoZXMuIFRoaXMgb25lJ3MgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2AsIHdoaWNoIGlzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIOKAkyBgZHdtYWNgIOKAkyBhbmQgYHN0bW1hY2AuIE5vdywgbGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUgY3JpdGVyaWE/IFJlYWNoYWJpbGl0eSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuXG5cbkNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UncmUgdGFsa2luZyBHQ0Ugb3IgUUVNVSwgcHJvYmFibHkgdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgc3R1ZmY6IFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXAsIHZpcnRpbywgdGhhdCBraW5kIG9mIHRoaW5nLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBkb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSBgc3RtbWFjYCBvciBgZHdtYWNgIGRpcmVjdGx5PyBPciBpcyB0aGlzIGRyaXZlciBkZXNpZ25lZCBtb3JlIGZvciBwaHlzaWNhbCBFdGhlcm5ldCBjb250cm9sbGVycyBvbiBTb0NzIG9yIFBDST8gTGV0IG1lIHJlbWluZCBteXNlbGbigKYgcmlnaHQsIGBzdG1tYWNgIGlzIGEgcGxhdGZvcm0vUENJIGRyaXZlciBmb3IgdGhlIFNUTS9TeW5vcHN5cyBEZXNpZ25XYXJlIE1BQyAoYERXTUFDYCkuXG5cblNvLCBkb2VzIFFFTVUgZW11bGF0ZSBpdD8gSSBkb24ndCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgYW5kIG15IG1lbW9yeSBpcyBzb21ldGltZXMgd3JvbmcuIFRpbWUgdG8gZ3JlcCB0aGUga2VybmVsIHNvdXJjZSBhbmQgY2hlY2sgdGhlIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHN1cHBvcnQuIEknbGwgcnVuIHNvbWUgZ3JlcHMgbm93IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYHN0bW1hY2AgYW5kIGhvdyBpdOKAmXMgY29uZmlndXJlZCBhbmQgcmVhY2hlZC4gVW5kZXJzdGFuZGluZyBpdHMgcmVhY2hhYmlsaXR5IGlzIHRoZSBjcml0aWNhbCBmYWN0b3IgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjIyLjg2MDY3NjU4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUxMjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjIyLjkwOTE5NTE0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMTQ2OTU4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgU1RNTUFDIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSdsbCBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCB0aGUgZmVhdHVyZSBzZWxlY3Rpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIGxpbWl0YXRpb25zLCBhbmQgYXNzZXNzaW5nIHRoZSBsZXZlbCBvZiBncmFudWxhcml0eSBpbiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBob3cgdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgU1RNaWNyb2VsZWN0cm9uaWNzIFNvQ3MgdGhhdCB1dGlsaXplIHRoaXMgTUFDLiBBcmUgdGhleSB1c2luZyBhIGZpbmUtZ3JhaW5lZCwgZGV2aWNlLXNwZWNpZmljIGFwcHJvYWNoLCBvciBhIG1vcmUgZ2VuZXJhbGl6ZWQsIGZlYXR1cmUtYmFzZWQgc3lzdGVtP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBDT05GSUdfU1RNTUFDXypgIG9wdGlvbnMsIG9mIGNvdXJzZS4gSSdsbCBtZW50YWxseSBtYXAgdGhlbSB0byB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlcnMgYW5kIGZ1bmN0aW9uYWxpdGllcyBJJ20gZmFtaWxpYXIgd2l0aCDigJMgUEhZIGludGVyZmFjZXMsIGludGVycnVwdCBoYW5kbGluZywgRE1BIHNldHRpbmdzLCBhbmQgYW55IG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdmFyaW91cyBmZWF0dXJlcyBzdWNoIGFzIEp1bWJvIGZyYW1lcywgY2hlY2tzdW0gb2ZmbG9hZGluZywgVkxBTiBzdXBwb3J0LCBhbmQgYW55IHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMuXG5cbkknbSBob3BpbmcgdG8gc2VlIGEgd2VsbC1jb21tZW50ZWQgZmlsZSwgdGhhdCBmb2xsb3dzIHN0YW5kYXJkIGtlcm5lbCBjb252ZW50aW9ucyBhbmQgY2xlYXJseSBkZWxpbmVhdGVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMnIGltcGxpY2F0aW9ucy4gQSB3ZWxsLW9yZ2FuaXplZCBgS2NvbmZpZ2AgaXMgYSBzaWduIG9mIGEgd2VsbC1kZXNpZ25lZCBkcml2ZXIsIHNvIEknbSBob3BpbmcgZm9yIGdvb2QgZGVzaWduIHByaW5jaXBsZXMgdG8gYmUgZXZpZGVudC4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgcXVpY2sgcmV2aWV3IGlmIGl0J3Mgd2VsbC1vcmdhbml6ZWQ7IEknbSBob3BpbmcgaXQncyBzdHJhaWdodGZvcndhcmQgc28gSSBjYW4ga2VlcCBtYWtpbmcgcHJvZ3Jlc3Mgb24gbXkgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjI1LjkyMzg5MzA0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTVE1NQUNfRVRIXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBFVEhUT09MX05FVExJTktcXG4gICA3OlxcdFxcdHNlbGVjdCBNSUlcXG4gICA4OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMTA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDExOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTI6XFx0XFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYnVpbHQgYXJvdW5kIGFcXG4gIDE2OlxcdFxcdCAgU3lub3BzeXMgSVAgQ29yZS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgU1RNTUFDX0VUSFxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbiAgMjE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMjM6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzIHVzaW5nIGV0aHRvb2wuIEVuYWJsZSB0aGlzXFxuICAyNjpcXHRcXHQgIGZlYXR1cmUgaWYgeW91IGFyZSBmYWNpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIEhXIGFuZCBzdWJtaXQgdGhlIHRlc3RcXG4gIDI3OlxcdFxcdCAgcmVzdWx0cyB0byB0aGUgbmV0ZGV2IE1haWxpbmcgTGlzdC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFNUTU1BQ19QTEFURk9STVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciB1c2VkIG9uIHNldmVyYWwgU29DczpcXG4gIDM2OlxcdFxcdCAgU1RpLCBBbGx3aW5uZXIsIEFtbG9naWMgTWVzb24sIEFsdGVyYSBTT0NGUEdBLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0aWYgU1RNTUFDX1BMQVRGT1JNXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBEV01BQ19EV0NfUU9TX0VUSFxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIHNucHMsZHdjLXFvcy1ldGhlcm5ldC50eHQgRFQgYmluZGluZy5cXFwiXFxuICA0NjpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDQ3OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjaGlwcyB1c2luZyB0aGUgc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgRFdNQUNfR0VORVJJQ1xcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgZHJpdmVyIGZvciBEV01BQ1xcXCJcXG4gIDU0OlxcdFxcdGRlZmF1bHQgU1RNTUFDX1BMQVRGT1JNXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIEdlbmVyaWMgRFdNQUMgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxcbiAgNTc6XFx0XFx0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXFxuICA1ODpcXHRcXHQgIGRhdGEgZm9yIHNldHVwLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRjb25maWcgRFdNQUNfQU5BUklPTlxcbiAgNjE6XFx0XFx0dHJpc3RhdGUgXFxcIkFkYXB0cnVtIEFuYXJpb24gR01BQyBzdXBwb3J0XFxcIlxcbiAgNjI6XFx0XFx0ZGVmYXVsdCBBUkNcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQyB8fCBDT01QSUxFX1RFU1QpXFxuICA2NDpcXHRcXHRoZWxwXFxuICA2NTpcXHRcXHQgIFN1cHBvcnQgZm9yIEFkYXB0cnVtIEFuYXJpb24gR01BQyBFdGhlcm5ldCBjb250cm9sbGVyLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgQW5hcmlvbiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIERXTUFDX0VJQzc3MDBcXG4gIDcwOlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBFc3dpbiBlaWM3NzAwIGV0aGVybmV0IGRyaXZlclxcXCJcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBBUkNIX0VTV0lOIHx8IENPTVBJTEVfVEVTVFxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgRXN3aW4gRUlDNzcwMCBFdGhlcm5ldCBjb250cm9sbGVyLFxcbiAgNzQ6XFx0XFx0ICB3aGljaCBpbnRlZ3JhdGVzIFN5bm9wc3lzIERlc2lnbldhcmUgUW9TIGZlYXR1cmVzLiBJdCBlbmFibGVzXFxuICA3NTpcXHRcXHQgIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB3aXRoIERNQSBhY2NlbGVyYXRpb24gYW5kIGlzIG9wdGltaXplZFxcbiAgNzY6XFx0XFx0ICBmb3IgZW1iZWRkZWQgc3lzdGVtcy5cXG4gIDc3OlxcdFxcbiAgNzg6XFx0Y29uZmlnIERXTUFDX0lOR0VOSUNcXG4gIDc5OlxcdFxcdHRyaXN0YXRlIFxcXCJJbmdlbmljIE1BQyBzdXBwb3J0XFxcIlxcbiAgODA6XFx0XFx0ZGVmYXVsdCBNQUNIX0lOR0VOSUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MjUuOTIzOTcxNDc0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MDEyMzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgc3RtbWFjIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuIEkndmUgYWxyZWFkeSBnb3QgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcsIGJ1dCBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGUgd2l0aGluIHRoZSBzdG1tYWMgZGlyZWN0b3J5IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgd2hhdCBrbm9icyBhcmUgZXhwb3NlZCwgaG93IHRoZXkncmUgcmVsYXRlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBzZXR0aW5ncy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmaW5lciBkZXRhaWxzIOKAkyBtYXliZSB0aGVyZSBhcmUgc29tZSBzdWJ0bGUgb3B0aW1pemF0aW9ucyBvciByYXJlbHkgdXNlZCBmZWF0dXJlcyBJJ3ZlIG92ZXJsb29rZWQuIFVsdGltYXRlbHksIEknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgb2YgdGhlIHN0bW1hYyBkcml2ZXIncyBjb25maWd1cmFibGUgYXNwZWN0cywgc28gSSBjYW4gbGV2ZXJhZ2UgdGhlbSBlZmZlY3RpdmVseSBpbiBteSBvd24gd29yay4gVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIHRob3NlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjI4LjIwNDA5NzY2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgKE1BQ0hfSU5HRU5JQyB8fCBDT01QSUxFX1RFU1QpXFxuICA4MjpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIEluZ2VuaWMgU29Dcy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBUaGlzIHNlbGVjdHMgSW5nZW5pYyBTb0NzIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xcbiAgODc6XFx0XFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIG9uIGZvciB0aGUgSW5nZW5pYyBTb0NzXFxuICA4ODpcXHRcXHQgIE1BQyBldGhlcm5ldCBjb250cm9sbGVyLlxcbiAgODk6XFx0XFxuICA5MDpcXHRjb25maWcgRFdNQUNfSVBRODA2WFxcbiAgOTE6XFx0XFx0dHJpc3RhdGUgXFxcIlFDQSBJUFE4MDZ4IERXTUFDIHN1cHBvcnRcXFwiXFxuICA5MjpcXHRcXHRkZWZhdWx0IEFSQ0hfUUNPTVxcbiAgOTM6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVClcXG4gIDk0OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuICA5NTpcXHRcXHRoZWxwXFxuICA5NjpcXHRcXHQgIFN1cHBvcnQgZm9yIFFDQSBJUFE4MDZYIERXTUFDIEV0aGVybmV0LlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgSVBRODA2eCBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXFxuICA5OTpcXHRcXHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZSBhbnkgb2YgdGhlIGhhcmR3YXJlXFxuIDEwMDpcXHRcXHQgIGFjY2VsZXJhdGlvbiBmZWF0dXJlcyBhdmFpbGFibGUgb24gdGhpcyBTb0MuIE5ldHdvcmsgZGV2aWNlc1xcbiAxMDE6XFx0XFx0ICB3aWxsIGJlaGF2ZSBsaWtlIHN0YW5kYXJkIG5vbi1hY2NlbGVyYXRlZCBldGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHQgIFNlbGVjdCB0aGUgUUNPTV9TT0NJTkZPIGNvbmZpZyBmbGFnIHRvIGVuYWJsZSBzcGVjaWZpYyBkd21hY1xcbiAxMDQ6XFx0XFx0ICBmaXh1cCBiYXNlZCBvbiB0aGUgaXBxODA2eCBTb0MgcmV2aXNpb24uXFxuIDEwNTpcXHRcXG4gMTA2OlxcdGNvbmZpZyBEV01BQ19MUEMxOFhYXFxuIDEwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlhQIExQQzE4eHgvNDN4eCBEV01BQyBzdXBwb3J0XFxcIlxcbiAxMDg6XFx0XFx0ZGVmYXVsdCBBUkNIX0xQQzE4WFhcXG4gMTA5OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfTFBDMThYWCB8fCBDT01QSUxFX1RFU1QpXFxuIDExMDpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAxMTE6XFx0XFx0aGVscFxcbiAxMTI6XFx0XFx0ICBTdXBwb3J0IGZvciBOWFAgTFBDMTh4eC80M3h4IERXTUFDIEV0aGVybmV0LlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgRFdNQUNfTUVESUFURUtcXG4gMTE1OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDI3eHggR01BQyBzdXBwb3J0XFxcIlxcbiAxMTY6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QpXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFN1cHBvcnQgZm9yIE1lZGlhVGVrIEdNQUMgRXRoZXJuZXQgY29udHJvbGxlci5cXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIE1UMjcxMiBTb0Mgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBEV01BQ19NRVNPTlxcbiAxMjM6XFx0XFx0dHJpc3RhdGUgXFxcIkFtbG9naWMgTWVzb24gZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTI0OlxcdFxcdGRlZmF1bHQgQVJDSF9NRVNPTlxcbiAxMjU6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBDT01NT05fQ0xLIFxcdTAwMjZcXHUwMDI2IChBUkNIX01FU09OIHx8IENPTVBJTEVfVEVTVClcXG4gMTI2OlxcdFxcdGhlbHBcXG4gMTI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBBbWxvZ2ljIE1lc29uIFNvQ3MuXFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBBbWxvZ2ljIE1lc29uIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXFxuIDEzMDpcXHRcXHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgTWVzb242LFxcbiAxMzE6XFx0XFx0ICBNZXNvbjgsIE1lc29uOGIgYW5kIEdYQkIgU29Dcy5cXG4gMTMyOlxcdFxcbiAxMzM6XFx0Y29uZmlnIERXTUFDX05VVk9UT05cXG4gMTM0OlxcdFxcdHRyaXN0YXRlIFxcXCJOdXZvdG9uIE1BMzUgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTM1OlxcdFxcdGRlZmF1bHQgQVJDSF9NQTM1XFxuIDEzNjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX01BMzUgfHwgQ09NUElMRV9URVNUKVxcbiAxMzc6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMTM4OlxcdFxcdGhlbHBcXG4gMTM5OlxcdFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBOdXZvdG9uIE1BMzUgc2VyaWVzIFNvQy5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIE51dm90b24gTUEzNSBzZXJpZXMgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydFxcbiAxNDI6XFx0XFx0ICBmb3IgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGUgbnV2b3Rvbi1kd21hYyBkcml2ZXIgaXNcXG4gMTQzOlxcdFxcdCAgdXNlZCBmb3IgTUEzNSBzZXJpZXMgU29Dcy5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIERXTUFDX1FDT01fRVRIUU9TXFxuIDE0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gRVRIUU9TIHN1cHBvcnRcXFwiXFxuIDE0NzpcXHRcXHRkZWZhdWx0IEFSQ0hfUUNPTVxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVClcXG4gMTQ5OlxcdFxcdGhlbHBcXG4gMTUwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIFF1YWxjb21tIEVUSFFPUyBjb3JlLlxcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgUXVhbGNvbW0gRVRIUU9TIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXFxuIDE1MzpcXHRcXHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRjb25maWcgRFdNQUNfUkVORVNBU19HQkVUSFxcbiAxNTY6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgUlovVjJIKFApIEdCRVRIIGFuZCBSWi9UMkgsIFJaL04ySCBHTUFDIHN1cHBvcnRcXFwiXFxuIDE1NzpcXHRcXHRkZWZhdWx0IEFSQ0hfUkVORVNBU1xcbiAxNTg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9SRU5FU0FTIHx8IENPTVBJTEVfVEVTVClcXG4gMTU5OlxcdFxcdHNlbGVjdCBQQ1NfUlpOMV9NSUlDXFxuIDE2MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjI4LjIwNDE4MTY4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjM1MDAzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGFuZCBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGludG8gUENJIHN1cHBvcnQsIGFzIHRoYXQncyBhIGNvbW1vbiBhcmVhIHdoZXJlIEkgbmVlZCB0byBtYWtlIHRhcmdldGVkIGNoYW5nZXMuIFVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBwcm9wZXIgZHJpdmVyIGludGVncmF0aW9uIGFuZCBzeXN0ZW0gc3RhYmlsaXR5LiBJJ2xsIHByb2JhYmx5IGxvb2sgZm9yIGl0cyBlbnRyeSBwb2ludCwgdGhlbiBmb2xsb3cgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IGl0IGxpbmtzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBhbHNvIG1pZ2h0IHJldmVhbCBuZXcgb3B0aW9ucyBJIGhhdmVuJ3QgZXZlbiBlbmNvdW50ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzAuNTI3NjgzOTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYxOlxcdFxcdCAgU3VwcG9ydCBmb3IgR2lnYWJpdCBFdGhlcm5ldCBJbnRlcmZhY2UgKEdCRVRIKS8gRXRoZXJuZXQgTUFDIChHTUFDKVxcbiAxNjI6XFx0XFx0ICBvbiBSZW5lc2FzIFNvQ3MuXFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdCAgVGhpcyBzZWxlY3RzIFJlbmVzYXMgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkZXZpY2VcXG4gMTY1OlxcdFxcdCAgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciB0aGUgUlovVjJIKFApIGZhbWlseSwgUlovVDJIIGFuZFxcbiAxNjY6XFx0XFx0ICBSWi9OMkggU29Dcy5cXG4gMTY3OlxcdFxcbiAxNjg6XFx0Y29uZmlnIERXTUFDX1JPQ0tDSElQXFxuIDE2OTpcXHRcXHR0cmlzdGF0ZSBcXFwiUm9ja2NoaXAgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTcwOlxcdFxcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxcbiAxNzE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpXFxuIDE3MjpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAxNzM6XFx0XFx0aGVscFxcbiAxNzQ6XFx0XFx0ICBTdXBwb3J0IGZvciBFdGhlcm5ldCBjb250cm9sbGVyIG9uIFJvY2tjaGlwIFJLMzI4OCBTb0MuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBSb2NrY2hpcCBSSzMyODggU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3JcXG4gMTc3OlxcdFxcdCAgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRjb25maWcgRFdNQUNfUlpOMVxcbiAxODA6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgUlovTjEgZHdtYWMgc3VwcG9ydFxcXCJcXG4gMTgxOlxcdFxcdGRlZmF1bHQgQVJDSF9SWk4xXFxuIDE4MjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1JaTjEgfHwgQ09NUElMRV9URVNUKVxcbiAxODM6XFx0XFx0c2VsZWN0IFBDU19SWk4xX01JSUNcXG4gMTg0OlxcdFxcdGhlbHBcXG4gMTg1OlxcdFxcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSZW5lc2FzIFJaL04xIFNvQyBmYW1pbHkuXFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBSZW5lc2FzIFJaL04xIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yXFxuIDE4ODpcXHRcXHQgIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBzdXBwb3J0IGNhbiBtYWtlIHVzZSBvZiBhIGN1c3RvbSBNSUlcXG4gMTg5OlxcdFxcdCAgY29udmVydGVyIFBDUyBkZXZpY2UuXFxuIDE5MDpcXHRcXG4gMTkxOlxcdGNvbmZpZyBEV01BQ19TMzJcXG4gMTkyOlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgUzMyRy9TMzJSIEdNQUMgc3VwcG9ydFxcXCJcXG4gMTkzOlxcdFxcdGRlZmF1bHQgQVJDSF9TMzJcXG4gMTk0OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfUzMyIHx8IENPTVBJTEVfVEVTVClcXG4gMTk1OlxcdFxcdGhlbHBcXG4gMTk2OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBOWFAgUzMyQ0MgU09Dcy5cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0ICBUaGlzIHNlbGVjdHMgTlhQIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcXG4gMTk5OlxcdFxcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIFMzMkNDIHNlcmllc1xcbiAyMDA6XFx0XFx0ICBTT0NzIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlciwgaWUuIFMzMkcyeHgsIFMzMkczeHggYW5kXFxuIDIwMTpcXHRcXHQgIFMzMlI0NS5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0Y29uZmlnIERXTUFDX1NPQ0ZQR0FcXG4gMjA0OlxcdFxcdHRyaXN0YXRlIFxcXCJTT0NGUEdBIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDIwNTpcXHRcXHRkZWZhdWx0IEFSQ0hfSU5URUxfU09DRlBHQVxcbiAyMDY6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9JTlRFTF9TT0NGUEdBIHx8IENPTVBJTEVfVEVTVClcXG4gMjA3OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuIDIwODpcXHRcXHRzZWxlY3QgTURJT19SRUdNQVBcXG4gMjA5OlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAyMTA6XFx0XFx0c2VsZWN0IFBDU19MWU5YXFxuIDIxMTpcXHRcXHRoZWxwXFxuIDIxMjpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gQWx0ZXJhIFNPQ0ZQR0FcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIEFsdGVyYSBTT0NGUEdBIFNvQyBnbHVlIGxheWVyIHN1cHBvcnRcXG4gMjE1OlxcdFxcdCAgZm9yIHRoZSBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3JcXG4gMjE2OlxcdFxcdCAgYXJyaWE1IGFuZCBjeWNsb25lNSBGUEdBIFNvQ3MuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBEV01BQ19TT1BIR09cXG4gMjE5OlxcdFxcdHRyaXN0YXRlIFxcXCJTb3BoZ28gZHdtYWMgc3VwcG9ydFxcXCJcXG4gMjIwOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfU09QSEdPIHx8IENPTVBJTEVfVEVTVClcXG4gMjIxOlxcdFxcdGRlZmF1bHQgbSBpZiBBUkNIX1NPUEhHT1xcbiAyMjI6XFx0XFx0aGVscFxcbiAyMjM6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVycyBvbiBTb3BoZ28gUklTQy1WIFNvQ3NcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIFNvcGhnbyBTb0Mgc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0XFxuIDIyNjpcXHRcXHQgIGZvciB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZVxcbiAyMjc6XFx0XFx0ICBldGhlcm5ldCBjb250cm9sbGVycyBvbiB2YXJpb3VzIFNvcGhnbyBTb0NzLlxcbiAyMjg6XFx0XFxuIDIyOTpcXHRjb25maWcgRFdNQUNfU1BBQ0VNSVRcXG4gMjMwOlxcdFxcdHRyaXN0YXRlIFxcXCJTcGFjZW1pdCBkd21hYyBzdXBwb3J0XFxcIlxcbiAyMzE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9TUEFDRU1JVCB8fCBDT01QSUxFX1RFU1QpXFxuIDIzMjpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAyMzM6XFx0XFx0ZGVmYXVsdCBtIGlmIEFSQ0hfU1BBQ0VNSVRcXG4gMjM0OlxcdFxcdGhlbHBcXG4gMjM1OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gU3BhY2VtaXQgUklTQy1WIFNvQ3NcXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIFNwYWNlbWl0IHBsYXRmb3JtIHNwZWNpZmljIGdsdWUgbGF5ZXIgc3VwcG9ydFxcbiAyMzg6XFx0XFx0ICBmb3IgdGhlIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciB0aGVcXG4gMjM5OlxcdFxcdCAgU3BhY2VtaXQgSzMgZXRoZXJuZXQgY29udHJvbGxlcnMuXFxuIDI0MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzAuNTI3Nzk3MzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjA3NTk3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlLCBwaWNraW5nIHVwIGZyb20gbGluZSAyNDEuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGRlZmluZWQgYW5kIGhvdyB0aGluZ3MgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgZnVydGhlciBkb3duIGluIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBtYXliZSBhbnkgZGVmYXVsdCB2YWx1ZXMgYmVpbmcgc2V0IHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIGFyZWEgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBJJ20gbG9va2luZyBmb3IgdGhlIHN0cnVjdHVyZSBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgYXJlYSBvZiBleHBlcnRpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODowMzozMy4xODg1NjAwOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQxOlxcdGNvbmZpZyBEV01BQ19TVEFSRklWRVxcbiAyNDI6XFx0XFx0dHJpc3RhdGUgXFxcIlN0YXJGaXZlIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDI0MzpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1NUQVJGSVZFIHx8IENPTVBJTEVfVEVTVClcXG4gMjQ0OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuIDI0NTpcXHRcXHRkZWZhdWx0IG0gaWYgQVJDSF9TVEFSRklWRVxcbiAyNDY6XFx0XFx0aGVscFxcbiAyNDc6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVycyBvbiBTdGFyRml2ZSBSSVNDLVYgU29Dc1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgU3RhckZpdmUgcGxhdGZvcm0gc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0XFxuIDI1MDpcXHRcXHQgIGZvciB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZVxcbiAyNTE6XFx0XFx0ICBTdGFyRml2ZSBKSDcxMDAgYW5kIEpINzExMCBldGhlcm5ldCBjb250cm9sbGVycy5cXG4gMjUyOlxcdFxcbiAyNTM6XFx0Y29uZmlnIERXTUFDX1NUSVxcbiAyNTQ6XFx0XFx0dHJpc3RhdGUgXFxcIlNUaSBHTUFDIHN1cHBvcnRcXFwiXFxuIDI1NTpcXHRcXHRkZWZhdWx0IEFSQ0hfU1RJXFxuIDI1NjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1NUSSB8fCBDT01QSUxFX1RFU1QpXFxuIDI1NzpcXHRcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbiAyNTg6XFx0XFx0aGVscFxcbiAyNTk6XFx0XFx0ICBTdXBwb3J0IGZvciBldGhlcm5ldCBjb250cm9sbGVyIG9uIFNUaSBTT0NzLlxcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHQgIFRoaXMgc2VsZWN0cyBTVGkgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIHN0bW1hY1xcbiAyNjI6XFx0XFx0ICBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIG9uIGZvciB0aGUgU1RpIHNlcmllc1xcbiAyNjM6XFx0XFx0ICBTT0NzIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlci5cXG4gMjY0OlxcdFxcbiAyNjU6XFx0Y29uZmlnIERXTUFDX1NUTTMyXFxuIDI2NjpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNMzIgRFdNQUMgc3VwcG9ydFxcXCJcXG4gMjY3OlxcdFxcdGRlZmF1bHQgQVJDSF9TVE0zMlxcbiAyNjg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgKEFSQ0hfU1RNMzIgfHwgQ09NUElMRV9URVNUKVxcbiAyNjk6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMjcwOlxcdFxcdGhlbHBcXG4gMjcxOlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBTVE0zMiBTT0NzLlxcbiAyNzI6XFx0XFxuIDI3MzpcXHRcXHQgIFRoaXMgc2VsZWN0cyBTVE0zMiBTb0MgZ2x1ZSBsYXllciBzdXBwb3J0IGZvciB0aGUgc3RtbWFjXFxuIDI3NDpcXHRcXHQgIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgb24gZm9yIHRoZSBTVE0zMiBzZXJpZXNcXG4gMjc1OlxcdFxcdCAgU09DcyBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBEV01BQ19TVU5YSVxcbiAyNzg6XFx0XFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBHTUFDIHN1cHBvcnRcXFwiXFxuIDI3OTpcXHRcXHRkZWZhdWx0IEFSQ0hfU1VOWElcXG4gMjgwOlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUKVxcbiAyODE6XFx0XFx0aGVscFxcbiAyODI6XFx0XFx0ICBTdXBwb3J0IGZvciBBbGx3aW5uZXIgQTIwL0EzMSBHTUFDIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHQgIFRoaXMgc2VsZWN0cyBBbGx3aW5uZXIgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXFxuIDI4NTpcXHRcXHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciBBMjAvQTMxXFxuIDI4NjpcXHRcXHQgIEdNQUMgZXRoZXJuZXQgY29udHJvbGxlci5cXG4gMjg3OlxcdFxcbiAyODg6XFx0Y29uZmlnIERXTUFDX1NVTjhJXFxuIDI4OTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWxsd2lubmVyIHN1bjhpIEdNQUMgc3VwcG9ydFxcXCJcXG4gMjkwOlxcdFxcdGRlZmF1bHQgQVJDSF9TVU5YSVxcbiAyOTE6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QpXFxuIDI5MjpcXHRcXHRzZWxlY3QgTURJT19CVVNfTVVYXFxuIDI5MzpcXHRcXHRoZWxwXFxuIDI5NDpcXHRcXHQgIFN1cHBvcnQgZm9yIEFsbHdpbm5lciBIMyBBODNUIEE2NCBFTUFDIGV0aGVybmV0IGNvbnRyb2xsZXJzLlxcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHQgIFRoaXMgc2VsZWN0cyBBbGx3aW5uZXIgU29DIGdsdWUgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlXFxuIDI5NzpcXHRcXHQgIHN0bW1hYyBkZXZpY2UgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyB1c2VkIGZvciBIMy9BODNUL0E2NFxcbiAyOTg6XFx0XFx0ICBFTUFDIGV0aGVybmV0IGNvbnRyb2xsZXIuXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBEV01BQ19TVU41NUlcXG4gMzAxOlxcdFxcdHRyaXN0YXRlIFxcXCJBbGx3aW5uZXIgc3VuNTVpIEdNQUMyMDAgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlZmF1bHQgQVJDSF9TVU5YSVxcbiAzMDM6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QpXFxuIDMwNDpcXHRcXHRzZWxlY3QgTURJT19CVVNfTVVYXFxuIDMwNTpcXHRcXHRoZWxwXFxuIDMwNjpcXHRcXHQgIFN1cHBvcnQgZm9yIEFsbHdpbm5lciBBNTIzL1Q1MjcgR01BQzIwMCBldGhlcm5ldCBjb250cm9sbGVycy5cXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0ICBUaGlzIHNlbGVjdHMgQWxsd2lubmVyIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZVxcbiAzMDk6XFx0XFx0ICBzdG1tYWMgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgQTUyMy9UNTI3XFxuIDMxMDpcXHRcXHQgIEdNQUMyMDAgZXRoZXJuZXQgY29udHJvbGxlci5cXG4gMzExOlxcdFxcbiAzMTI6XFx0Y29uZmlnIERXTUFDX1RIRUFEXFxuIDMxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVC1IRUFEIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1RIRUFEIHx8IENPTVBJTEVfVEVTVClcXG4gMzE1OlxcdFxcdGhlbHBcXG4gMzE2OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gVC1IRUFEIFJJU0MtViBTb0NzXFxuIDMxNzpcXHRcXG4gMzE4OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBULUhFQUQgcGxhdGZvcm0gc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0IGZvclxcbiAzMTk6XFx0XFx0ICB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIFQtSEVBRCBUSDE1MjBcXG4gMzIwOlxcdFxcdCAgZXRoZXJuZXQgY29udHJvbGxlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzMuMTg4NzI3MTI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MDUyMjkyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgcmVtYWluZGVyIG9mIHRoaXMgS2NvbmZpZyBmaWxlLCBwaWNraW5nIHVwIGZyb20gbGluZSAzMjEgYW5kIGdvaW5nIHRvIHRoZSBlbmQuIEknbSBrZWVuIHRvIHNlZSB3aGF0IGhpZGRlbiBnZW1zIG9yIHN1YnRsZSBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBsdXJraW5nIHRoZXJlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgb2Z0ZW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgYW5kIGltcGFjdGZ1bCBzZXR0aW5ncyBhcmUgZm91bmQgdHVja2VkIGF3YXksIG1heWJlIGluIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggb2JzY3VyZSBoYXJkd2FyZSBvciBhIHNwZWNpZmljLCByYXJlbHkgdXNlZCBmZWF0dXJlLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlLCBzdGFiaWxpdHksIG9yIGV2ZW4gc2VjdXJpdHksIGJ1dCB0aGF0IGNvdWxkIGVhc2lseSBiZSBvdmVybG9va2VkIGR1cmluZyBhIGN1cnNvcnkgcmV2aWV3LiBQZXJoYXBzIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmVu4oCZdCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGluaXRpYWwgY29udGV4dCwgb3IgbWF5YmUgdGhlcmUgYXJlIGRlcHJlY2F0ZWQgb3B0aW9ucyBzdGlsbCBwcmVzZW50IHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgbmVzdGVkIGBpZmAgc3RhdGVtZW50cywgYXMgdGhvc2UgYXJlIG9mdGVuIHdoZXJlIGNvbXBsZXhpdHkgYW5kIHBvdGVudGlhbCBwaXRmYWxscyByZXNpZGUuIEFuZCBvZiBjb3Vyc2UsIEknbSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBvcHBvcnR1bml0aWVzIHRvIHJlZmFjdG9yIG9yIHNpbXBsaWZ5IHRoZSBjb25maWd1cmF0aW9uLCBlaXRoZXIgZm9yIGNsYXJpdHkgb3IgZWZmaWNpZW5jeS4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzYuMDkzOTU5MDMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIxOlxcdFxcbiAzMjI6XFx0Y29uZmlnIERXTUFDX0lNWDhcXG4gMzIzOlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgSU1YOCBEV01BQyBzdXBwb3J0XFxcIlxcbiAzMjQ6XFx0XFx0ZGVmYXVsdCBBUkNIX01YQ1xcbiAzMjU6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9NWEMgfHwgQ09NUElMRV9URVNUKVxcbiAzMjY6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gMzI3OlxcdFxcdGhlbHBcXG4gMzI4OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBOWFAgaS5NWDggU09Dcy5cXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0ICBUaGlzIHNlbGVjdHMgTlhQIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcXG4gMzMxOlxcdFxcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgaS5NWDggc2VyaWVzIGxpa2VcXG4gMzMyOlxcdFxcdCAgaU1YOE1QL2lNWDhEWEwgR01BQyBldGhlcm5ldCBjb250cm9sbGVyLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgRFdNQUNfSU5URUxfUExBVFxcbiAzMzU6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIGR3bWFjIHN1cHBvcnRcXFwiXFxuIDMzNjpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gMzM3OlxcdFxcdGhlbHBcXG4gMzM4OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlcnMgb24gSW50ZWwgU29Dc1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgSW50ZWwgcGxhdGZvcm0gc3BlY2lmaWMgZ2x1ZSBsYXllciBzdXBwb3J0IGZvclxcbiAzNDE6XFx0XFx0ICB0aGUgc3RtbWFjIGRldmljZSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIHRoZSBJbnRlbCBLZWVtIEJheVxcbiAzNDI6XFx0XFx0ICBTb0MuXFxuIDM0MzpcXHRcXG4gMzQ0OlxcdGNvbmZpZyBEV01BQ19MT09OR1NPTjFcXG4gMzQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJMb29uZ3NvbjEgR01BQyBzdXBwb3J0XFxcIlxcbiAzNDY6XFx0XFx0ZGVmYXVsdCBNQUNIX0xPT05HU09OMzJcXG4gMzQ3OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKE1BQ0hfTE9PTkdTT04zMiB8fCBDT01QSUxFX1RFU1QpXFxuIDM0ODpcXHRcXHRoZWxwXFxuIDM0OTpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24xIFNvQy5cXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0ICBUaGlzIHNlbGVjdHMgTG9vbmdzb24xIFNvQyBnbHVlIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWNcXG4gMzUyOlxcdFxcdCAgZGV2aWNlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgdXNlZCBmb3IgTG9vbmdzb24xLWJhc2VkIGJvYXJkc1xcbiAzNTM6XFx0XFx0ICBsaWtlIExvb25nc29uIExTMUIvTFMxQy5cXG4gMzU0OlxcdFxcbiAzNTU6XFx0Y29uZmlnIERXTUFDX1RFR1JBXFxuIDM1NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTlZJRElBIFRlZ3JhIE1HQkUgc3VwcG9ydFxcXCJcXG4gMzU3OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcXG4gMzU4OlxcdFxcdGhlbHBcXG4gMzU5OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBNdWx0aS1HaWdhQml0IEV0aGVybmV0IChNR0JFKSBDb250cm9sbGVyIHRoYXQgaXNcXG4gMzYwOlxcdFxcdCAgZm91bmQgb24gdGhlIE5WSURJQSBUZWdyYSBTb0MgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgdGhlIGdsdWVcXG4gMzYxOlxcdFxcdCAgbGF5ZXIgb24gdG9wIG9mIHRoZSBzdG1tYWMgZHJpdmVyIHJlcXVpcmVkIGZvciB0aGVzZSBOVklESUEgVGVncmEgU29DXFxuIDM2MjpcXHRcXHQgIGRldmljZXMuXFxuIDM2MzpcXHRcXG4gMzY0OlxcdGNvbmZpZyBEV01BQ19WSVNDT05USVxcbiAzNjU6XFx0XFx0dHJpc3RhdGUgXFxcIlRvc2hpYmEgVmlzY29udGkgRFdNQUMgc3VwcG9ydFxcXCJcXG4gMzY2OlxcdFxcdGRlZmF1bHQgQVJDSF9WSVNDT05USVxcbiAzNjc6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBDT01NT05fQ0xLIFxcdTAwMjZcXHUwMDI2IChBUkNIX1ZJU0NPTlRJIHx8IENPTVBJTEVfVEVTVClcXG4gMzY4OlxcdFxcdGhlbHBcXG4gMzY5OlxcdFxcdCAgU3VwcG9ydCBmb3IgZXRoZXJuZXQgY29udHJvbGxlciBvbiBWaXNjb250aSBTb0NzLlxcbiAzNzA6XFx0XFxuIDM3MTpcXHRlbmRpZiAjIFNUTU1BQ19QTEFURk9STVxcbiAzNzI6XFx0XFxuIDM3MzpcXHRjb25maWcgU1RNTUFDX0xJQlBDSVxcbiAzNzQ6XFx0XFx0dHJpc3RhdGVcXG4gMzc1OlxcdFxcdGhlbHBcXG4gMzc2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJIGJ1cyBoZWxwZXJzIGZvciB0aGUgc3RtbWFjIGRyaXZlci5cXG4gMzc3OlxcdFxcbiAzNzg6XFx0Y29uZmlnIERXTUFDX0lOVEVMXFxuIDM3OTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgR01BQyBzdXBwb3J0XFxcIlxcbiAzODA6XFx0XFx0ZGVmYXVsdCBYODZcXG4gMzgxOlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAzODI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDM4MzpcXHRcXHRkZXBlbmRzIG9uIEFDUElcXG4gMzg0OlxcdFxcdGhlbHBcXG4gMzg1OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBJbnRlbCBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlXFxuIDM4NjpcXHRcXHQgIHN0bW1hYyBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIEludGVsIFF1YXJrL0VITC9UR0wuXFxuIDM4NzpcXHRcXG4gMzg4OlxcdGNvbmZpZyBEV01BQ19MT09OR1NPTlxcbiAzODk6XFx0XFx0dHJpc3RhdGUgXFxcIkxvb25nc29uIFBDSSBEV01BQyBzdXBwb3J0XFxcIlxcbiAzOTA6XFx0XFx0ZGVmYXVsdCBNQUNIX0xPT05HU09ONjRcXG4gMzkxOlxcdFxcdGRlcGVuZHMgb24gKE1BQ0hfTE9PTkdTT042NCB8fCBDT01QSUxFX1RFU1QpIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAzOTI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDM5MzpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiAzOTQ6XFx0XFx0aGVscFxcbiAzOTU6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXFxuIDM5NjpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxcbiAzOTc6XFx0XFxuIDM5ODpcXHRjb25maWcgRFdNQUNfTU9UT1JDT01NXFxuIDM5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBDSSBEV01BQyBzdXBwb3J0XFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzYuMDk0MDU5NTcyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjkzMzA5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIEJhY2sgaW50byB0aGUgS2NvbmZpZyBEZXB0aHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBiYWNrIGludG8gdGhpcyBLY29uZmlnIGZpbGUuIEkndmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgc2VjdGlvbiwgYW5kIEkgdGhpbmsgSSByZW1lbWJlciB3aGVyZSBJIGxlZnQgb2ZmLi4uIGxpbmUgNDAxLiBMZXQncyBnZXQgdGhlIHdob2xlIHRoaW5nIGluIHZpZXcgc28gSSBjYW4gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGNvbnRleHQuIEkgbmVlZCB0byByZWZyZXNoIHRoZSByZWxhdGlvbnNoaXBzLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBIb3BlZnVsbHkgaXQncyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBUaGVyZSdzIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZsYWcgSSBuZWVkIHRvIHRyYWNrIGRvd24sIGFuZCBJJ20gYmV0dGluZyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBsdXJraW5nIGluIHRoaXMgc2VjdGlvbi4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2FuZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjM4LjIyMzM5MjU0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMTpcXHRcXHRzZWxlY3QgTU9UT1JDT01NX1BIWVxcbiA0MDI6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDAzOlxcdFxcdGhlbHBcXG4gNDA0OlxcdFxcdCAgVGhpcyBlbmFibGVzIGdsdWUgZHJpdmVyIGZvciBNb3RvcmNvbW0gRFdNQUMtYmFzZWQgUENJIEV0aGVybmV0XFxuIDQwNTpcXHRcXHQgIGNvbnRyb2xsZXJzLiBDdXJyZW50bHkgb25seSBZVDY4MDEgaXMgc3VwcG9ydGVkLlxcbiA0MDY6XFx0XFxuIDQwNzpcXHRjb25maWcgU1RNTUFDX1BDSVxcbiA0MDg6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuIDQwOTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiA0MTA6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDQxMTpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiA0MTI6XFx0XFx0aGVscFxcbiA0MTM6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGJ1cyBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cXG4gNDE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgd2FzIHRlc3RlZCBvbiBYTElOWCBYQzJWMzAwMCBGRjExNTJBTVQwMjIxXFxuIDQxNTpcXHRcXHQgIEQxMjE1OTk0QSBWSVJURVggRlBHQSBib2FyZCBhbmQgU05QUyBRb1MgSVBLIFByb3RvdHlwaW5nIEtpdC5cXG4gNDE2OlxcdFxcbiA0MTc6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxcbiA0MTg6XFx0XFxuIDQxOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDQyMDpcXHRlbmRpZiAjIFNUTU1BQ19FVEhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTg6MDM6MzguMjIzNDcyMTg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNjA1NDI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNUTU1BQyBSZWFjaGFiaWxpdHkgaW4gUUVNVS9TeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZmlndXJlIG91dCBpZiBJIGNhbiB0cmlnZ2VyIGBzdG1tYWNgIGluIHRoZSBjb250ZXh0IG9mIFFFTVUvc3l6a2FsbGVyLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIFNlY3Rpb24gMiBmcm9tIHRoZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGhpZ2hsaWdodHMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBgc3RtbWFjYCwgb3IgaXRzIGVxdWl2YWxlbnQgYERXTUFDYCwgZW11bGF0ZWQgd2l0aGluIHN0YW5kYXJkIFFFTVU/IE9yIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgcGh5c2ljYWwgaGFyZHdhcmUgY29udHJvbGxlciwgbGlrZSBzb21ldGhpbmcgYmFrZWQgaW50byBhbiBTb0M/XG5cbk15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlcmUgKmlzKiBhIERXTUFDIG9yIHN0bW1hYyBkZXZpY2Ugd2l0aGluIFFFTVUuIFRoZW4gSSBzdGFydCB0aGlua2luZywgXCJ3YWl0LCB3aGF0IGFib3V0IGBhbGx3aW5uZXItZW1hY2Agb3IgYHN0bTMyYD9cIiBCdXQgdGhlbiBJIHJlYWxpemUgdGhlIFNUTTMyIGluIFFFTVUgaXMgdXN1YWxseSBhIENvcnRleC1NLCBhbmQgd2UncmUgdGFyZ2V0aW5nIGFtZDY0LiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCEgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuXG5cbk9rYXksIG9uIGFtZDY0LCBgc3RtbWFjYCBpcyB0eXBpY2FsbHkgYSBkcml2ZXIgZm9yIEV0aGVybmV0IE1BQ3MgZnJvbSBTVE1pY3JvZWxlY3Ryb25pY3Mgb3IgU3lub3BzeXMuIFRoZXNlIE1BQ3MgYXJlIHVzdWFsbHkgZm91bmQgb24gc3BlY2lmaWMgU29DcyAoQVJNLCBSSVNDLVYsIGV0Yy4pIG9yIGludGVncmF0ZWQgdmlhIFBDSSBvbiBJbnRlbCBRdWFyay9FSEwvVEdMLCBNb3RvcmNvbW0sIG9yIEZQR0EgZGV2aWNlcy4gQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBgc3RtbWFjYCBvbiBhbWQ2NCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKT8gTm8sIHRoaXMgZG9lc24ndCBzZWVtIHBvc3NpYmxlLiBTdGFuZGFyZCBRRU1VIHg4Nl82NCB1c2VzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIGFuZCB2aXJ0aW8tbmV0LCBub3QgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUNzLiBObyBlbXVsYXRpb24gb2YgYHN0bW1hY2AgZm9yIHg4Nl82NCwgb3IgZm9yIGEgUEMvUTM1IG1hY2hpbmUsIGV4aXN0cy5cblxuRXZlbiBpZiBJIHdhcyBvbiBhbiBBUk0gcGxhdGZvcm0gd2l0aGluIFFFTVUsIHRoZSB2aXJ0dWFsIG1hY2hpbmUgc2V0dXAgd291bGQgdXNlIHZpcnRpby1uZXQuIENlcnRhaW4gYm9hcmQgZW11bGF0aW9ucywgbGlrZSBvcmFuZ2VwaS1wYywgbWlnaHQgaGF2ZSBhIHN1bnhpIG9yIGFsbHdpbm5lciBlbWFjLCBidXQgc3l6a2FsbGVyIHVzdWFsbHkgcnVucyBvbiBzdGFuZGFyZCBRRU1VIHg4Nl82NCBvciBhcm02NCB2aXJ0IG1hY2hpbmVzLiBCdXQgcmVtZW1iZXIsIHdlJ3JlIG9uIGFtZDY0LlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRldmljZXMsIFVTQiBnYWRnZXRzLCB0dW4vdGFwIGludGVyZmFjZXMsIG9yIG5ldGxpbmsgaW50ZXJmYWNlcyB0aGF0IGNvdWxkICpzb21laG93KiB0cmlnZ2VyIGBzdG1tYWNfbWFpbi5jYD8gTm8uIFRoZSB3YXkgaXQgd29ya3MsIGBzdG1tYWNgIGlzIGEgbmV0X2RldmljZSBkcml2ZXIgbWVhbnQgZm9yICpwaHlzaWNhbCogaGFyZHdhcmUgTUFDcywgU29Dcywgb3IgUENJIGRldmljZXMuIFRvIGdldCBhIG5ldGRldiBjcmVhdGVkIGJ5IGBzdG1tYWNgLCB0aGUgZHJpdmVyIG5lZWRzIHRvIHByb2JlIGFuIGFjdHVhbCBkZXZpY2UsIHdoaWNoIGhhcHBlbnMgdGhyb3VnaCBhIHBsYXRmb3JtIGRldmljZSBvciBhIFBDSSBkZXZpY2Ugd2l0aCBzcGVjaWZpYyBWSUQvUElELiBObyBoYXJkd2FyZSwgbm8gcHJvYmUuIElmIG5vIGhhcmR3YXJlLCBubyBgc3RtbWFjYCBuZXRfZGV2aWNlIGV4aXN0cywgc28gZnVuY3Rpb25zIGxpa2UgYF9fc3RtbWFjX29wZW5gLCBgc3RtbWFjX2h3dHN0YW1wX3NldGAsIGV0Yy4sIGFyZSBuZXZlciBjYWxsZWQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UsIGxvb2sgZm9yIG1vY2sgb3IgdmlydHVhbCBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgdXNpbmcgYHN0bW1hY2AuIEkgbmVlZCB0byBzZWFyY2ggZm9yIHVzZXMgb2YgYHN0bW1hY19wcm9iZV9jb25maWdfZHRgIG9yIGBzdG1tYWNfZHZyX3Byb2JlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODowMzo0Ny41ODQwMTc5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjQ1NDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZHZyX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM9MjgzPXN0YXRpYyBpbnQgZHdjX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYzozMzA6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyNjM9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM0MTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM0Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM9Mzc0PXN0YXRpYyBpbnQgaXBxODA2eF9nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYzo0ODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jPTQyPXN0YXRpYyBpbnQgbHBjMTh4eF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYzo2ODpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM9NDc9c3RhdGljIGludCBtZXNvbjZfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYzo3MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9NDg9c3RhdGljIGludCByem4xX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jOjY4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM9MzU9c3RhdGljIGludCBzb3BoZ29fZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jOjY1OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XFx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAzLVxcdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjA4LVxcdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5OlxcdCAqIHNvIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XFx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3Ny1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQxMT12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDEyOmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTMtXFx0XFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03ODEwPUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wbGF0X2RhdF9hbGxvYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODExLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzgxMjpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTE2OiAqIHN0bW1hY19kdnJfcHJvYmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTctICogQGRldjogZGV2aWNlIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjU6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cXHRcXHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTM2OlxcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzNy1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBsYXRfZGF0LVxcdTAwM2VleGl0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQxLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxNDI6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjQ5LjQ1MDQ4MDUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzODA5MjAyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHN0bW1hY2AgRHJpdmVyJ3MgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBgc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24gYW5kIGhvdyBpdCdzIHVzZWQuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBhbGwgdGhlIGNhbGxlcnMgYXJlIGRldmljZSBwcm9iZSByb3V0aW5lcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBoYXJkd2FyZSBwbGF0Zm9ybXMgb3IgUENJIGRldmljZXMuIEkgc2VlIGEgd2lkZSByYW5nZSBvZiBkZXZpY2VzIHRoZXJlOiBgZHdtYWMtZHdjLXFvcy1ldGhgLCBgZHdtYWMtaW50ZWwtcGxhdGAsIGBkd21hYy1pbnRlbGAsIGBkd21hYy1pcHE4MDZ4YCwgYGR3bWFjLWxvb25nc29uYCwgYGR3bWFjLWxwYzE4eHhgLCBgZHdtYWMtbWVkaWF0ZWtgLCBgZHdtYWMtbWVzb25gLCBgZHdtYWMtbW90b3Jjb21tYCwgYGR3bWFjLXJ6bjFgLCBgZHdtYWMtc29waGdvYCwgYGR3bWFjLXNwYWNlbWl0YCwgYGR3bWFjLXN0YXJmaXZlYCwgYGR3bWFjLXN0bTMyYCwgYGR3bWFjLXN1bjhpYCwgYGR3bWFjLXRlZ3JhYCwgYGR3bWFjLXZpc2NvbnRpYCwgYHN0bW1hY19wY2lgLCBhbmQgYHN0bW1hY19wbGF0Zm9ybWAuXG5cblRoZSBrZXkgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoYXQgKm5vbmUqIG9mIHRoZXNlIGFyZSBlbXVsYXRlZCBieSB0aGUgc3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zIHRoYXQgc3l6a2FsbGVyIGNvbW1vbmx5IHVzZXMgb24gYW1kNjQuIFRoZXNlIGFyZSBwaHlzaWNhbCBTb0NzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgY29udHJvbGxlcnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY3JpdGVyaWEgb3V0bGluZWQgaW4gU2VjdGlvbiAyIHJlZ2FyZGluZyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEluIHBhcnRpY3VsYXIsIHRoZSBzZWN0aW9uIG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFUgZHJpdmVycy5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjYCBkaXJlY3RvcnksIHdoaWNoIGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBzdG1tYWNgIGRyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERXTUFDIEV0aGVybmV0IGhhcmR3YXJlIGNvbnRyb2xsZXJzLiBUaGlzIGlzIHRoZSBkcml2ZXIgd2UncmUgZm9jdXNpbmcgb24uXG5cbk15IGNvbmNsdXNpb24gaXMgdGhlIGBzdG1tYWNgIGRyaXZlciBpcyAqc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlKiBnaXZlbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gSSdtIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgZHJpdmVyIGVhc2lseSBpbiBhbiBhdXRvbWF0ZWQgZnV6emluZyBzZXR1cCBvbiB0aGUgdHlwaWNhbCBhbWQ2NCBRRU1VL0dDRSBzeXN0ZW1zLlxuXG5UbyBtYWtlIGl0IGNsZWFyLCBJIGFtIGNvbmZpcm1pbmcgdGhlIGZvbGxvd2luZzpcbiogICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiogICBgRW5hYmxlQ29uZmlnc2AgYXJlIGVtcHR5IChvciBudWxsKS5cbiogICBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHkgKG9yIG51bGwpLlxuKiAgIFRoZSByZWFzb25pbmcgZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBjb25jaXNlbHkgZXhwbGFpbmVkIGFzIHRoZSBoYXJkd2FyZSB0aGlzIGRyaXZlciBzdXBwb3J0cyBpcyBwaHlzaWNhbGx5IHJlcXVpcmVkIGFuZCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbkknbSBub3cgcmVhZHkgdG8gcHJlcGFyZSB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDIyLCJPdXRwdXRUb2tlbnMiOjEwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxODowMzo1OC44MzE0MDQwOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIHN0bW1hYyAoU3lub3BzeXMgRGVzaWduV2FyZSAvIFNUTWljcm9lbGVjdHJvbmljcyBFdGhlcm5ldCBNQUMpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvKS4gVGhpcyBkcml2ZXIgb3BlcmF0ZXMgcGh5c2ljYWwgU29DIGFuZCBQQ0llIEV0aGVybmV0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBmb3IgYW1kNjQuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBzdG1tYWMgKFN5bm9wc3lzIERlc2lnbldhcmUgLyBTVE1pY3JvZWxlY3Ryb25pY3MgRXRoZXJuZXQgTUFDKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLykuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIHBoeXNpY2FsIFNvQyBhbmQgUENJZSBFdGhlcm5ldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgZm9yIGFtZDY0LiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE4OjAzOjU4LjgzMTQzNDE0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8b9gj[1] Phase: Running StartedAt: 2026-09-10 18:04:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b9gj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 18:04:09 +0000 UTC FinishedAt: 2026-09-10 18:04:14 +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,}