Name: series-workflowsxg5c Phase: Failed StartedAt: 2026-06-29 16:58:50 +0000 UTC FinishedAt: 2026-06-29 17:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsxg5c[0] Phase: Succeeded StartedAt: 2026-06-29 16:58:50 +0000 UTC FinishedAt: 2026-06-29 17:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsxg5c[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 16:58:50 +0000 UTC FinishedAt: 2026-06-29 17:09:07 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OWMxYjhlM2Q2NDFmM2M0ZDhiMzY1NmZhNzEyMGJlZjY1NmZhOGNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTc6MDc6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDkzMmIzYTNkZjJlNTc3Li4yMzFjOGYyZjIwZGQ0NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTE4MzcsMTMgJiM0MzsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4gXHR1MzIgY3VyX2xlbiwgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MDMsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5MTEsNyAmIzQzOzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXHUwMDNlZXRoLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbiBcdHJldHVybiAwO1xuQEAgLTE5OTgsNiAmIzQzOzE5OTgsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgaSwgc3JjX3BvcnQ7XG4mIzQzO1x0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRzcmNfcG9ydCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXHUwMDNlcG9ydCwgZGV2LVx1MDAzZW5icSk7XG4mIzQzO1x0aWYgKHNyY19wb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHNyY19wb3J0O1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLFxuJiM0MztcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbiYjNDM7XHRcdFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRMUEJLX0NIQU5fTUFTSyB8IExQQktfTU9ERV9NQVNLIHwgTFBCS19FTl9NQVNLKTtcbiYjNDM7XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSyxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoLVx1MDAzZXNvYy1cdTAwM2VudW1fcHBlOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBWSVAgYW5kIElGQyBmb3IgR0RNMiAqL1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuJiM0MztcdFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cdTAwM2VuYnEpO1xuJiM0MztcbiYjNDM7XHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbiYjNDM7XHRcdFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXHUwMDI2IG1hc2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDI0LDE1ICYjNDM7MjA3MSwyNSBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqY3VyX3FkbWEsICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHRpbnQgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuJiM0MztcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdXJfcWRtYSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5AQCAtMjA0OCw3ICYjNDM7MjEwNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XG4gXHRcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXG4tXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcbiYjNDM7XHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSAmIzQzOzIyNDQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMTk4LDYgJiM0MzsyMjU1LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNDcsNiAmIzQzOzIzMDYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzA5LDYgJiM0MzsyMzcwLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzMjQsNiAmIzQzOzIzODYsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQwMywxNyAmIzQzOzI0NjYsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0MjEsMTIgJiM0MzsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjQ5MCwxMyAmIzQzOzI1NTUsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHU2NCBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHMsIHR4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuJiM0MztcdFx0ICAgICAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4gXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbkBAIC0yNzU2LDE2ICYjNDM7MjgyMywxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCB1MzIgYnVja2V0X3NpemUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpLCBlcnI7XG4gXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuJiM0MztcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxuIFx0XHRcdFx0XHRcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbiYjNDM7XHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCxcbiBcdFx0XHRcdFx0XHRcdCBSRUdfRUdSRVNTX1RSVENNX0NGRyxcbiBcdFx0XHRcdFx0XHRcdCBpLCByYXRlLCBidWNrZXRfc2l6ZSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMjgwMSwxMSAmIzQzOzI4NzAsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG4gXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICYjNDM7IGNoYW5uZWwgJiM0MzsgMTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxuIFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXG4gXHQgKi9cbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdCAgIFwmIzM0O3FkbWEgcW9zIGNoYW5uZWwgYWxyZWFkeSBpbiB1c2VcJiMzNDspO1xuQEAgLTI4NDEsNyAmIzQzOzI5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxuIFx0XHRcdFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXHUwMDNlcV9yeCk7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMzAxNiwxMCAmIzQzOzMwODYsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XG4gXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwKTtcbiBcbkBAIC0zMDQ1LDYgJiM0MzszMTE2LDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuJiM0MztcdGludCBlcnIgPSAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbiYjNDM7XHRcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuJiM0MztcdGlmICh3YW5fZGV2KSB7XG4mIzQzO1x0XHRpZiAoKHdhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9RT1MpIHx8XG4mIzQzO1x0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjtcbiYjNDM7XHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4mIzQzO1x0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXG4mIzQzO1x0XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuJiM0MztcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46XG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztlcnJvcl91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA1Myw2ICYjNDM7MzIxMyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9RT1M7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMwNzIsMjQgJiM0MzszMjM0LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuJiM0MztcdGNhc2UgVENfSFRCX0NSRUFURToge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7XG4gXHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGNhc2UgVENfSFRCX0RFU1RST1k6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuaW5kZXggZDdmZjhjNTIwMGUyMGMuLmI5NzIyNGE1NDk1YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTUzNSwxMyAmIzQzOzUzNSwxNCBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xuIFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4gfTtcbiBcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcbi1cdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxuJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuJiM0MztcdEFJUk9IQV9ERVZfRl9XQU4gPSBCSVQoMCksXG4mIzQzO1x0QUlST0hBX0RFVl9GX1FPUyA9IEJJVCgxKSxcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuQEAgLTY1OSw3ICYjNDM7NjYwLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbiYjNDM7XHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9XQU4pO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbkBAIC02NzYsNiAmIzQzOzY3NywxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gXG4mIzQzO2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxuJiM0MzthaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cdTAwM2VxZG1hLFxuJiM0MztcdFx0XHRcdFx0IGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHxcbiYjNDM7XHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KSk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCA0MmY0YjBmMjFkMTc5OC4uMGYyNjBjNTBhYzNjOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTUsNyAmIzQzOzE1LDEwIEBAXG4gI2luY2x1ZGUgXCYjMzQ7YWlyb2hhX3JlZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9ldGguaFwmIzM0O1xuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7LyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxuJiM0MzsgKiBjb25maWd1cmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7REVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XG5AQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHR1OCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuIFx0dTMyIGZlX2NwdV9wb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTM3Niw2ICYjNDM7Mzc2LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCAmIzQzOyAoKF9uKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAzY1x1MDAzYyAzKSlcbiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVx0XHQweDFiMWExOTE4XG4gXG4gI2RlZmluZSBSRUdfQ0RNNV9SWF9PUTFfRFJPUF9DTlRcdDB4MjlkNFxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ5YzFiOGUzZDY0MWYzYzRkOGIzNjU2ZmE3MTIwYmVmNjU2ZmE4Y2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxNzowNzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCmluZGV4IDkzMmIzYTNkZjJlNTc3Li4yMzFjOGYyZjIwZGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSkKIAkJCWlmICghZGV2KQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoZGV2LSZndDtxZG1hICE9IHFkbWEpCiYjNDM7CQkJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtJmd0O3FkbWEpICE9IHFkbWEpCiAJCQkJY29udGludWU7CiAKIAkJCW5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKQEAgLTE4MzcsMTMgJiM0MzsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiAJdTMyIGN1cl9sZW4sIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAllcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSkKIAkJYWlyb2hhX2ZlX3NldChxZG1hLSZndDtldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC0mZ3Q7aWQpLAogCQkJICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7CkBAIC0xOTAzLDcgJiM0MzsxOTA0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiAKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAJYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpOwpAQCAtMTkxMSw3ICYjNDM7MTkxMSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJaWYgKC0tcG9ydC0mZ3Q7dXNlcnMpCiAJCWFpcm9oYV9zZXRfcG9ydF9tdHUoZGV2LSZndDtldGgsIHBvcnQpOwogCWVsc2UKLQkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtJmd0O2V0aCwKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKIAkJCQkJICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKIAlyZXR1cm4gMDsKQEAgLTE5OTgsNiAmIzQzOzE5OTgsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiYjNDM7CWludCBpLCBzcmNfcG9ydDsKJiM0MzsJdTMyIHBzZV9wb3J0OwomIzQzOwomIzQzOwlzcmNfcG9ydCA9IGV0aC0mZ3Q7c29jLSZndDtvcHMuZ2V0X3Nwb3J0KGRldi0mZ3Q7cG9ydCwgZGV2LSZndDtuYnEpOwomIzQzOwlpZiAoc3JjX3BvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHNyY19wb3J0OwomIzQzOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLAomIzQzOwkJCVJFR19TUF9ERlRfQ1BPUlQoc3JjX3BvcnQgJmd0OyZndDsgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksCiYjNDM7CQkJU1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCAmYW1wOyBTUF9DUE9SVF9ERlRfTUFTSykpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spOwomIzQzOwlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSwKJiM0MzsJCQkJICAgIEZFX1BTRV9QT1JUX0RST1ApOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJTFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7CiYjNDM7CXBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyCiYjNDM7CQkJCQkJIDogRkVfUFNFX1BPUlRfUFBFMTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSywKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGV0aC0mZ3Q7c29jLSZndDtudW1fcHBlOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCURGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi8KJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNNF9JRFggJmFtcDsmYW1wOyBhaXJvaGFfaXNfNzU4MShldGgpKSB7CiYjNDM7CQl1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LSZndDtuYnEpOwomIzQzOwomIzQzOwkJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19TUkNfUE9SVF9GQ19NQVA2LCBtYXNrLAomIzQzOwkJCSAgICAgIEZDX01BUDZfREVGX1ZBTFVFICZhbXA7IG1hc2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKgogYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogewpAQCAtMjAyNCwxNSAmIzQzOzIwNzEsMjUgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiAJaW50IHBwZV9pZDsKIAogCS8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi8KLQlkZXYtJmd0O3FkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildOwotCW5ldGRldi0mZ3Q7aXJxID0gZGV2LSZndDtxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwomIzQzOwlxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKJiM0MzsJY3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKJiM0MzsJbmV0ZGV2LSZndDtpcnEgPSBxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwogCiAJcHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpICZhbXA7JmFtcDsgYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSk7CiAJYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTsKJiM0MzsKJiM0MzsJaWYgKCFjdXJfcWRtYSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwogfQogCiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjA0OCw3ICYjNDM7MjEwNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgQUlST0hBX0dETTJfSURYOgogCQkvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqLwotCQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOOwomIzQzOwkJZGV2LSZndDtmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTIxODcsOSAmIzQzOzIyNDQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCXUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47CiAJc3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxOwogCUxJU1RfSEVBRCh0eF9saXN0KTsKQEAgLTIxOTgsNiAmIzQzOzIyNTUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJdTE2IGluZGV4OwogCXU4IGZwb3J0OwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3FkbWEpOwogCXFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCXRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7CiAKQEAgLTIyNDcsNiAmIzQzOzIzMDYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJcS0mZ3Q7dHhxX3N0b3BwZWQgPSB0cnVlOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTIzMDksNiAmIzQzOzIzNzAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJRklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cS0mZ3Q7bG9jayk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIApAQCAtMjMyNCw2ICYjNDM7MjM4Niw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGVycm9yOgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJbmV0ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMjQwMywxNyAmIzQzOzI0NjYsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJaW50IGk7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSYjNDM7JiM0MzspCi0JCWFpcm9oYV9xZG1hX2NsZWFyKGRldi0mZ3Q7cWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSwKJiM0MzsJCWFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiAJCQkJICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5fd2VpZ2h0czsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHN0YXR1czsKIAkJaW50IGVycjsKIAotCQlhaXJvaGFfcWRtYV93cihkZXYtJmd0O3FkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAomIzQzOwkJYWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsCiAJCQkgICAgICAgVFdSUl9SV19DTURfTUFTSyB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHwKIAkJCSAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHwKQEAgLTI0MjEsMTIgJiM0MzsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cywKIAkJCQkJc3RhdHVzICZhbXA7IFRXUlJfUldfQ01EX0RPTkUsCiAJCQkJCVVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQywKLQkJCQkJdHJ1ZSwgZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiYjNDM7CQkJCQl0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWFpcm9oYV9xZG1hX3JtdyhkZXYtJmd0O3FkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgJmd0OyZndDsgMyksCiYjNDM7CWFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAogCQkJQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLAogCQkJX19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpOwogCkBAIC0yNDkwLDEzICYjNDM7MjU1NSwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsCiAJCQkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJdTY0IGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cywgdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCi0JdTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgJmx0OyZsdDsgMSkpOwotCXU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsCi0JCQkJCSAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgJmx0OyZsdDsgMSkgJiM0MzsgMSkpOwotCXU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LSZndDtjcHVfdHhfcGFja2V0cykgJiM0MzsKLQkJCSAoZndkX3R4X3BhY2tldHMgLSBkZXYtJmd0O2Z3ZF90eF9wYWNrZXRzKTsKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CWNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgJmx0OyZsdDsgMSkpOwomIzQzOwlmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsCiYjNDM7CQkJCQlSRUdfQ05UUl9WQUwoKGNoYW5uZWwgJmx0OyZsdDsgMSkgJiM0MzsgMSkpOwomIzQzOwl0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LSZndDtjcHVfdHhfcGFja2V0cykgJiM0MzsKJiM0MzsJCSAgICAgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LSZndDtmd2RfdHhfcGFja2V0cyk7CiAKIAlfYnN0YXRzX3VwZGF0ZShvcHQtJmd0O3N0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7CiAJZGV2LSZndDtjcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzOwpAQCAtMjc1NiwxNiAmIzQzOzI4MjMsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgdTMyIGJ1Y2tldF9zaXplKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpLCBlcnI7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7PSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LSZndDtxZG1hLCBjaGFubmVsLAomIzQzOwkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLAogCQkJCQkJICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksCiAJCQkJCQkgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi0mZ3Q7cWRtYSwgY2hhbm5lbCwKJiM0MzsJCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCwKIAkJCQkJCQkgUkVHX0VHUkVTU19UUlRDTV9DRkcsCiAJCQkJCQkJIGksIHJhdGUsIGJ1Y2tldF9zaXplKTsKIAkJaWYgKGVycikKQEAgLTI4MDEsMTEgJiM0MzsyODcwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJdTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtJmd0O2NsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7CiAJaW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyAmIzQzOyBjaGFubmVsICYjNDM7IDE7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCiAJLyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5CiAJICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suCiAJICovCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtJmd0O3Fvc19jaGFubmVsX21hcCkpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKG9wdC0mZ3Q7ZXh0YWNrLAogCQkJCSAgICYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZSYjMzQ7KTsKQEAgLTI4NDEsNyAmIzQzOzI5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwKIAkJCQkgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSwKIAkJCQkgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKQogewotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHFkbWEtJmd0O3FfcngpOyBpJiM0MzsmIzQzOykgewpAQCAtMzAxNiwxMCAmIzQzOzMwODYsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORzsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCWFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWNsZWFyX2JpdChxdWV1ZSwgcWRtYS0mZ3Q7cW9zX2NoYW5uZWxfbWFwKTsKIAljbGVhcl9iaXQocXVldWUsIGRldi0mZ3Q7cW9zX3NxX2JtYXApOwogCkBAIC0zMDQ1LDYgJiM0MzszMTE2LDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbmV0ZGV2X3dhcm4obmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwomIzQzOwlhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAoKHdhbl9kZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9ERVZfRl9RT1MpIHx8CiYjNDM7CQkgICAgd2FuX2Rldi0mZ3Q7cG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTJfSURYKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJZ290byBlcnJvcl91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldi0mZ3Q7ZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwllcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfZGlzYWJsZV93YW47CiYjNDM7CiYjNDM7CWVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazoKJiM0MzsJYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzO2Vycm9yX2Rpc2FibGVfd2FuOgomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTMwNTMsNiAmIzQzOzMyMTMsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZvcl9lYWNoX3NldF9iaXQocSwgZGV2LSZndDtxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpCiAJCWFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7CiAKJiM0MzsJZGV2LSZndDtmbGFncyAmYW1wOz0gfkFJUk9IQV9ERVZfRl9RT1M7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNzIsMjQgJiM0MzszMjM0LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN3aXRjaCAob3B0LSZndDtjb21tYW5kKSB7Ci0JY2FzZSBUQ19IVEJfQ1JFQVRFOgomIzQzOwljYXNlIFRDX0hUQl9DUkVBVEU6IHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtJmd0O2V4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBUQ19IVEJfREVTVFJPWToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpOwogCWNhc2UgVENfSFRCX05PREVfTU9ESUZZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTsKIAljYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfREVMOgogCWNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAppbmRleCBkN2ZmOGM1MjAwZTIwYy4uYjk3MjI0YTU0OTVjMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaApAQCAtNTM1LDEzICYjNDM7NTM1LDE0IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJREVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7CiB9OwogCi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHsKLQlBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSwKJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3MgewomIzQzOwlBSVJPSEFfREVWX0ZfV0FOID0gQklUKDApLAomIzQzOwlBSVJPSEFfREVWX0ZfUU9TID0gQklUKDEpLAogfTsKIAogc3RydWN0IGFpcm9oYV9nZG1fZGV2IHsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZXRoICpldGg7CiAKIAlERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpOwpAQCAtNjU5LDcgJiM0Mzs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZCkKIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKLQlyZXR1cm4gIShkZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9QUklWX0ZfV0FOKTsKJiM0MzsJcmV0dXJuICEoZGV2LSZndDtmbGFncyAmYW1wOyBBSVJPSEFfREVWX0ZfV0FOKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCkBAIC02NzYsNiAmIzQzOzY3NywxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJCSAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogCiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKgomIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LSZndDtxZG1hLAomIzQzOwkJCQkJIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTsKIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7CiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTE1LDcgJiM0MzsxNSwxMCBAQAogI2luY2x1ZGUgJiMzNDthaXJvaGFfcmVncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWlyb2hhX2V0aC5oJiMzNDsKIAotc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnQKJiM0MzsgKiBjb25maWd1cmF0aW9uLgomIzQzOyAqLwomIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0gewpAQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSkKIAogdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCkKIHsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7Ci0Jc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwogCXU4IHFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiAJdTMyIGZlX2NwdV9wb3J0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDcgQEAKIAogI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNgkJMHgyMjk4CiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pCUdFTk1BU0soNCAmIzQzOyAoKF9uKSAmbHQ7Jmx0OyAzKSwgKChfbikgJmx0OyZsdDsgMykpCiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRQkJMHgxYjFhMTkxOAogCiAjZGVmaW5lIFJFR19DRE01X1JYX09RMV9EUk9QX0NOVAkweDI5ZDQKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGZvciB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBhaXJvaGFfZXRoLmNgIGFuZCByZWxhdGVkIGZpbGVzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiB0byBgZGV2LSZndDtxZG1hYCDigJMgYSBnb29kIHByYWN0aWNlLCBnZW5lcmFsbHksIGFzIGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgIGFuZCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIHdoaWNoIGNsZWFybHkgcG9pbnQgdG8gc29tZSBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgZnVuY3Rpb25hbGl0eS4gRnVuY3Rpb25hbGx5LCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgaW1wcm92ZW1lbnQgdG8gdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIsIGZvY3VzZWQgb24gY29uY3VycmVudCBhY2Nlc3MgYW5kIFFvUy4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZSBpbiB0aGUgdXN1YWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBBaXJvaGEgU29DcyBhcmUgdHlwaWNhbGx5IG5vdCBzb21ldGhpbmcgeW91IGNhbiBqdXN0IHNwaW4gdXAgaW4gUUVNVSB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBlbXVsYXRpb24gbGF5ZXIgZm9yIHRoYXQgaGFyZHdhcmUuIEkgaGlnaGx5IGRvdWJ0IHRoZXJlJiMzOTtzIGEgZnVsbCBBaXJvaGEgZXRoZXJuZXQgZW11bGF0b3IgcmVhZGlseSBhdmFpbGFibGUgaW4gUUVNVS4gSXQmIzM5O3Mgbm90IHRoZSB0eXBpY2FsIGNhc2UuCgpTbywgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIHRoaXMgZHJpdmVyIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQmIzM5O2xsIGJlIGEgZ29vZCBpbmRpY2F0b3IgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIgb3IgaWYgaXQgY2FuIGJlIHRlc3RlZCB3aXRob3V0IGEgc3BlY2lmaWMgQWlyb2hhIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcm9oYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIGltcGxlbWVudGF0aW9uLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGZpbGVzIHRoZXJlOiB0aGUgZHJpdmVyJiMzOTtzIGVudHJ5IHBvaW50cywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGxpa2VseSB0aGUgUEhZIG1hbmFnZW1lbnQgY29kZSBpZiB0aGV5JiMzOTtyZSBub3QgdXNpbmcgYSBkZWRpY2F0ZWQgUEhZIGRyaXZlci4gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gZ2F1Z2UgdGhlIGFwcHJvYWNoIHRoZXkmIzM5O3ZlIHRha2VuIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGEgc3RhbmRhcmQgTkFQSSBpbXBsZW1lbnRhdGlvbiwgYSBsZWdhY3kgaW50ZXJydXB0LWRyaXZlbiBhcHByb2FjaCwgb3Igc29tZXRoaW5nIG5vdmVsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBwYWNrZXQgZGVzY3JpcHRvcnMsIERNQSBjb25maWd1cmF0aW9uLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBhcmUgZ29pbmcgdG8gYmUgc29tZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBudWFuY2VzIGFuZCBpdCBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWlyb2hhX2V0aC5jJiMzNDssCiAgICAmIzM0O2Fpcm9oYV9ldGguaCYjMzQ7LAogICAgJiMzNDthaXJvaGFfbnB1LmMmIzM0OywKICAgICYjMzQ7YWlyb2hhX3BwZS5jJiMzNDssCiAgICAmIzM0O2Fpcm9oYV9wcGVfZGVidWdmcy5jJiMzNDssCiAgICAmIzM0O2Fpcm9oYV9yZWdzLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqRmluZGluZyB0aGUgS2NvbmZpZyBmb3IgQWlyb2hhIEV0aGVybmV0KioKCkhtbSwgd2hlcmUgZGlkIEkgcHV0IHRoYXQgS2NvbmZpZz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZm9yIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGFpcm9oYV9ldGhgIHdpdGhpbiB0aGUgc3RhbmRhcmQgbG9jYXRpb25zLCB0aGUgb2J2aW91cyBzcG90cyAtIGZpcnN0LCBsZXQmIzM5O3MgbG9vayBpbiB0aGUgbWFpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ2AgZmlsZS4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBleHBhbmQgdGhlIHNlYXJjaCwgYW5kIHRyeSB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLCB3aGljaCB3b3VsZCBiZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIFRoYXQgc2hvdWxkIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIHBvc3NpYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjIzOnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0yNC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxhY3JpdGVjaC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBhIEtjb25maWcgU2VhcmNoKioKCk9rYXksIHNvIHRoZSBncmVwIGRpZG4mIzM5O3QgdHVybiB1cCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgaXQgKnNob3VsZCogZXhpc3QuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgaXQgbWFudWFsbHkuIEkgbmVlZCB0byBnZXQgbXkgZXllcyBvbiB0aGF0IEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZSBpZiBzb21ldGhpbmcgaXMgb2ZmIHdpdGggdGhlIHNlYXJjaCBwYXRoIG9yIGlmIEkgc2ltcGx5IG1pc3JlbWVtYmVyZWQgdGhlIG1vZHVsZSBwYXRoLiBObyB0aW1lIHRvIGRpdGhlciwgbGV0IG1lIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgcmVhZCBpdC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIFNvbWV0aGluZyBpcyBub3QgcXVpdGUgcmlnaHQgaGVyZSwgYW5kIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRpZiBORVRfVkVORE9SX0FJUk9IQVxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORVRfQUlST0hBX05QVVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgMTM6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXG4gIDE2Olx0XHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX0FJUk9IQVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuICAyMTpcdFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXG4gIDI1Olx0XHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcbiAgMjg6XHRcdGRlZmF1bHQgeVxuICAyOTpcdFx0Ym9vbCBcJiMzNDtBaXJvaGEgZmxvdyBzdGF0c1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFx1MDAyNlx1MDAyNiBORVRfQUlST0hBX05QVVxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXG4gIDMzOlx0XG4gIDM0Olx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQWlyb2hhIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyLiBUaGUgZGVzY3JpcHRpb24gY2xlYXJseSBzdGF0ZXMgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGJ1aWx0IGZvciB0aGUgQWlyb2hhIFNvQywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgaGFyZHdhcmUtZGVwZW5kZW50LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlc2UgdHlwZXMgb2YgZHJpdmVycyBhcmUgZ29pbmcgdG8gYmUgdHJpY2t5IHRvIHdvcmsgd2l0aCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBaXJvaGEgU29DIG9yIHNvbWUga2luZCBvZiBzb2Z0d2FyZSBidXMgdGhhdCBjYW4gc2ltdWxhdGUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLCBJJiMzOTttIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBnZXQgdGhpcyB0byBwcm9iZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgbWFjaGluZS4gVGhlIGZhY3QgdGhhdCBpdCB1c2VzIE1NSU8gZnVydGhlciBjb25maXJtcyBpdHMgY2xvc2UgdGllcyB0byB0aGUgdW5kZXJseWluZyBTb0MgaGFyZHdhcmUuIFRoZSBjb2RlJiMzOTtzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFsc28gc3VnZ2VzdHMgdGhhdCBpdCBjYW4gYmUgZW5hYmxlZCB3aGVuIGEgcmVsZXZhbnQgcGxhdGZvcm0gaXMgYWN0aXZlIG9yIHRlc3QgbW9kZSBpcyBlbmFibGVkOiBgQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUYC4KCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gaWYgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCB3b3VsZCBwcm92aWRlIHNvbWUgY29udGV4dCBmb3IgaG93IHRoZSBrZXJuZWwgaXMgZGV0ZWN0aW5nIGFuZCBpbml0aWFsaXppbmcgaXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gaW50ZWdyYXRlIHdpdGggdGhlIHN5c3RlbSBhbmQgaWYgaXQgcmVsaWVzIG9uIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBmZWF0dXJlcyBvciBwcm9iaW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0aGUgc2FtZTogKndoYXQqIGFtIEkgZGVhbGluZyB3aXRoPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJcyBpdCBhIHNwZWNpZmljIGRldmljZSwgYSBnZW5lcmljIGNsYXNzLCBvciBhIHZpcnR1YWwgZHJpdmVyPyBUaGUgZGV0YWlscyB3aWxsIGluZmx1ZW5jZSB0aGUgZGlhZ25vc3RpYyBwYXRoLiBLbm93aW5nIHRoZSBkcml2ZXImIzM5O3MgdHlwZSBxdWlja2x5IG5hcnJvd3MgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFuZCBhdmFpbGFibGUgdHJvdWJsZXNob290aW5nIHRvb2xzLiBUaGlzIGJhc2ljIGNsYXNzaWZpY2F0aW9uIGlzIGFic29sdXRlbHkgY3JpdGljYWwgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIGxvZ3Mgb3IgcnVubmluZyB0ZXN0cy4gVGhlIHR5cGUgb2YgZHJpdmVyIGRpY3RhdGVzIHRoZSBhcHByb2FjaCwgc28gSSBuZWVkIHRvIGVzdGFibGlzaCBhIGJhc2UgY2FzZSBmb3IgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mzg5OT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTA3Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MDgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIxOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTAyCgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlci4gUGxhdGZvcm0gZHJpdmVycywgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBrZXJuZWwgY29kZSwgcmVseSBvbiBkZXZpY2UgaW5mb3JtYXRpb24gZWl0aGVyIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlIG9yIHRocm91Z2ggQUNQSS4gTm93LCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgd2hpY2ggYXJlIGdlbmVyaWMgVk1zLCB3ZSBkb24mIzM5O3QgaGF2ZSB0aG9zZSBBaXJvaGEgU29DIGRldmljZSB0cmVlIG5vZGVzIGRlZmluZWQuIEJlY2F1c2Ugb2YgdGhpcywgdGhpcyBzcGVjaWZpYyBkcml2ZXIgd2lsbCBuZXZlciBhY3R1YWxseSBwcm9iZSwgbWVhbmluZyB0aGUgY29yZSBsb2dpYyB3aWxsIGp1c3Qgc2l0IHRoZXJlLCB1bnRvdWNoZWQuCgpUaGlzIG1lYW5zIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSBuZWVkZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRob3VnaCwgc28gSSB3ZW50IHRocm91Z2ggaXQgYWxsIGFnYWluLgoKSSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoZXJlIHdhc24mIzM5O3Qgc29tZSBraW5kIG9mIGJhY2tkb29yIGVudHJ5IHBvaW50LCBsaWtlIG5ldGxpbmsgZm9yIGV4YW1wbGUsIHRvIHJlYWNoIHRoYXQgYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgIGZ1bmN0aW9uLiBUdXJucyBvdXQsIHRoZSBwYXRjaCBtb2RpZmllcyBgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YmAsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIGBuZG9fc2V0dXBfdGNgLiBCdXQgdG8gZXZlbiBjYWxsIGBuZG9fc2V0dXBfdGNgLCB3ZSYjMzk7ZCBuZWVkIGEgYG5ldF9kZXZpY2VgIHJlZ2lzdGVyZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEFuZCB0byByZWdpc3RlciB0aGF0IGBuZXRfZGV2aWNlYCwgdGhlIGRyaXZlciBoYXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBQcm9iaW5nLCBob3dldmVyLCByZXF1aXJlcyB0aGF0IHRoZSBkcml2ZXIgZmluZCBhIHBsYXRmb3JtIGRldmljZSBtYXRjaGluZyBpdHMgYG9mX21hdGNoX3RhYmxlYC4gU2luY2Ugd2UgZG9uJiMzOTt0IGhhdmUgdGhlIGFjdHVhbCBBaXJvaGEgaGFyZHdhcmUsIG9yIGEgcHJlY2lzZSBlbXVsYXRvciBvZiB0aGF0IGhhcmR3YXJlLCB0aGUgcGxhdGZvcm0gZGV2aWNlIHdpbGwgbmV2ZXIgZXhpc3QsIHNvIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIGRlZmluaXRpdmVseSB1bnJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZyBzZXR1cC4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZyA9IGZhbHNlYCBhbmQganVzdGlmeSBpdCB3aXRoIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzoxMi45MDA3OTUwNjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc4NTY0ODA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgU29DIGhhcmR3YXJlIChvciBkZXZpY2UgdHJlZSBub2RlcykgdG8gcHJvYmUuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlLCBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKGluY2x1ZGluZyB0aGUgbmV0X2RldmljZSBvcGVyYXRpb25zIGFuZCBUQyBvZmZsb2FkIGNhbGxiYWNrcykgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDc6MTIuOTAwODA0NDg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIwMjI0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OWMxYjhlM2Q2NDFmM2M0ZDhiMzY1NmZhNzEyMGJlZjY1NmZhOGNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDE3OjA3OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuaW5kZXggOTMyYjNhM2RmMmU1NzcuLjIzMWM4ZjJmMjBkZDQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXFxuIFxcdFxcdFxcdGlmICghZGV2KVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZXFkbWEgIT0gcWRtYSlcXG4rXFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEpICE9IHFkbWEpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xcbkBAIC0xODM3LDEzICsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4gXFx0dTMyIGN1cl9sZW4sIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdGVyciA9IGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIHRydWUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcXG4gXFx0XFx0YWlyb2hhX2ZlX3NldChxZG1hLVxcdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cXHUwMDNlaWQpLFxcbiBcXHRcXHRcXHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcXG5AQCAtMTkwMyw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4gXFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xcbkBAIC0xOTExLDcgKzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRpZiAoLS1wb3J0LVxcdTAwM2V1c2VycylcXG4gXFx0XFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXFx1MDAzZWV0aCwgcG9ydCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXFx1MDAzZWV0aCxcXG4rXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cXHUwMDNlZXRoLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTk5OCw2ICsxOTk4LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4rXFx0aW50IGksIHNyY19wb3J0O1xcbitcXHR1MzIgcHNlX3BvcnQ7XFxuK1xcbitcXHRzcmNfcG9ydCA9IGV0aC1cXHUwMDNlc29jLVxcdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cXHUwMDNlcG9ydCwgZGV2LVxcdTAwM2VuYnEpO1xcbitcXHRpZiAoc3JjX3BvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gc3JjX3BvcnQ7XFxuK1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLFxcbitcXHRcXHRcXHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFxcdTAwM2VcXHUwMDNlIGZscyhTUF9DUE9SVF9ERlRfTUFTSykpLFxcbitcXHRcXHRcXHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFxcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcXG4rXFxuK1xcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcXG4rXFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRMUEJLX0NIQU5fTUFTSyB8IExQQktfTU9ERV9NQVNLIHwgTFBCS19FTl9NQVNLKTtcXG4rXFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcXG4rXFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdFxcdFxcdCAgICBwc2VfcG9ydCk7XFxuK1xcbitcXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXFxuK1xcdFxcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGgtXFx1MDAzZXNvYy1cXHUwMDNlbnVtX3BwZTsgaSsrKVxcbitcXHRcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHRERlRfQ1BPUlRfTUFTSyhBSVJPSEFfR0RNMl9JRFgpKTtcXG4rXFxuK1xcdC8qIEVuYWJsZSBWSVAgYW5kIElGQyBmb3IgR0RNMiAqL1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcXG4rXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXFx1MDAyNlxcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xcbitcXHRcXHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVxcdTAwM2VuYnEpO1xcbitcXG4rXFx0XFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19TUkNfUE9SVF9GQ19NQVA2LCBtYXNrLFxcbitcXHRcXHRcXHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcXHUwMDI2IG1hc2spO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXFxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4ge1xcbkBAIC0yMDI0LDE1ICsyMDcxLDI1IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbiBcXHRpbnQgcHBlX2lkO1xcbiBcXG4gXFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xcbi1cXHRkZXYtXFx1MDAzZXFkbWEgPSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XFxuLVxcdG5ldGRldi1cXHUwMDNlaXJxID0gZGV2LVxcdTAwM2VxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbitcXHRxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbitcXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hLCBxZG1hKTtcXG4rXFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbiBcXG4gXFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xcbiBcXHRhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpO1xcbitcXG4rXFx0aWYgKCFjdXJfcWRtYSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbkBAIC0yMDQ4LDcgKzIxMDUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XFxuIFxcdFxcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXFxuLVxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gQUlST0hBX1BSSVZfRl9XQU47XFxuK1xcdFxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yMTg3LDkgKzIyNDQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47XFxuIFxcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxO1xcbiBcXHRMSVNUX0hFQUQodHhfbGlzdCk7XFxuQEAgLTIxOTgsNiArMjI1NSw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0dTE2IGluZGV4O1xcbiBcXHR1OCBmcG9ydDtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZXFkbWEpO1xcbiBcXHRxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTtcXG4gXFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcXG4gXFxuQEAgLTIyNDcsNiArMjMwNiw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpO1xcbiBcXHRcXHRxLVxcdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuIFxcdH1cXG4gXFxuQEAgLTIzMDksNiArMjM3MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXG5AQCAtMjMyNCw2ICsyMzg2LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBlcnJvcjpcXG4gXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbkBAIC0yNDAzLDE3ICsyNDY2LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpKyspXFxuLVxcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKGRldi1cXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0XFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcdFxcdGludCBlcnI7XFxuIFxcbi1cXHRcXHRhaXJvaGFfcWRtYV93cihkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLFxcbitcXHRcXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4gXFx0XFx0XFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxcbiBcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxcbkBAIC0yNDIxLDEyICsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG4gXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcXG4gXFx0XFx0XFx0XFx0XFx0VVNFQ19QRVJfTVNFQywgMTAgKiBVU0VDX1BFUl9NU0VDLFxcbi1cXHRcXHRcXHRcXHRcXHR0cnVlLCBkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4rXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRhaXJvaGFfcWRtYV9ybXcoZGV2LVxcdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFxcdTAwM2VcXHUwMDNlIDMpLFxcbitcXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4gXFx0XFx0XFx0Q0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLFxcbiBcXHRcXHRcXHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XFxuIFxcbkBAIC0yNDkwLDEzICsyNTU1LDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0dTY0IGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cywgdHhfcGFja2V0cztcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4tXFx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkpO1xcbi1cXHR1NjQgZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgUkVHX0NOVFJfVkFMKChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpICsgMSkpO1xcbi1cXHR1NjQgdHhfcGFja2V0cyA9IChjcHVfdHhfcGFja2V0cyAtIGRldi1cXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcXG4tXFx0XFx0XFx0IChmd2RfdHhfcGFja2V0cyAtIGRldi1cXHUwMDNlZndkX3R4X3BhY2tldHMpO1xcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0Y3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSk7XFxuK1xcdGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcXG4rXFx0XFx0XFx0XFx0XFx0UkVHX0NOVFJfVkFMKChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpICsgMSkpO1xcbitcXHR0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cykgK1xcbitcXHRcXHQgICAgIChmd2RfdHhfcGFja2V0cyAtIGRldi1cXHUwMDNlZndkX3R4X3BhY2tldHMpO1xcbiBcXG4gXFx0X2JzdGF0c191cGRhdGUob3B0LVxcdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xcbiBcXHRkZXYtXFx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XFxuQEAgLTI3NTYsMTYgKzI4MjMsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgdTMyIGJ1Y2tldF9zaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRpbnQgaSwgZXJyO1xcbiBcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXFx1MDAzZXFkbWEsIGNoYW5uZWwsXFxuK1xcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcocWRtYSwgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cXHUwMDNlcWRtYSwgY2hhbm5lbCxcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBpLCByYXRlLCBidWNrZXRfc2l6ZSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTI4MDEsMTEgKzI4NzAsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0dTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtXFx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuIFxcdGludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgKyBjaGFubmVsICsgMTtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFxuIFxcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxcbiBcXHQgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay5cXG4gXFx0ICovXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFubmVsLCBxZG1hLVxcdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXFx1MDAzZWV4dGFjayxcXG4gXFx0XFx0XFx0XFx0ICAgXFxcInFkbWEgcW9zIGNoYW5uZWwgYWxyZWFkeSBpbiB1c2VcXFwiKTtcXG5AQCAtMjg0MSw3ICsyOTExLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcnhfbWV0ZXIoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxcbiB7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShxZG1hLVxcdTAwM2VxX3J4KTsgaSsrKSB7XFxuQEAgLTMwMTYsMTAgKzMwODYsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Y2xlYXJfYml0KHF1ZXVlLCBxZG1hLVxcdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xcbiBcXHRjbGVhcl9iaXQocXVldWUsIGRldi1cXHUwMDNlcW9zX3NxX2JtYXApO1xcbiBcXG5AQCAtMzA0NSw2ICszMTE2LDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFxuK1xcdGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rXFxuK1xcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVxcdTAwM2VldGgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbitcXHRpbnQgZXJyID0gLUVCVVNZO1xcbitcXG4rXFx0aWYgKHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XFxuK1xcdFxcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xcbitcXHRpZiAod2FuX2Rldikge1xcbitcXHRcXHRpZiAoKHdhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUlST0hBX0RFVl9GX1FPUykgfHxcXG4rXFx0XFx0ICAgIHdhbl9kZXYtXFx1MDAzZXBvcnQtXFx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiUW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0XFx0Z290byBlcnJvcl91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK1xcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4rXFx0XFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0XFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcXG4rXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHBzZV9wb3J0KTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxcbitcXHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK2Vycm9yX2Rpc2FibGVfd2FuOlxcbitcXHRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK2Vycm9yX3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuQEAgLTMwNTMsNiArMzIxMyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXFxuIFxcdFxcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XFxuIFxcbitcXHRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5BSVJPSEFfREVWX0ZfUU9TO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMwNzIsMjQgKzMyMzQsMzMgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3dpdGNoIChvcHQtXFx1MDAzZWNvbW1hbmQpIHtcXG4tXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbitcXHRjYXNlIFRDX0hUQl9DUkVBVEU6IHtcXG4rXFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldiwgb3B0LVxcdTAwM2VleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfUU9TO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0fVxcbiBcXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTk9ERV9NT0RJRlk6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1RfRk9SQ0U6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5pbmRleCBkN2ZmOGM1MjAwZTIwYy4uYjk3MjI0YTU0OTVjMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5AQCAtNTM1LDEzICs1MzUsMTQgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcXG4gXFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuIH07XFxuIFxcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcXG4tXFx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXFxuK2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XFxuK1xcdEFJUk9IQV9ERVZfRl9XQU4gPSBCSVQoMCksXFxuK1xcdEFJUk9IQV9ERVZfRl9RT1MgPSBCSVQoMSksXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcXG4gXFxuIFxcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuQEAgLTY1OSw3ICs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4tXFx0cmV0dXJuICEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcXG4rXFx0cmV0dXJuICEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEFJUk9IQV9ERVZfRl9XQU4pO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG5AQCAtNjc2LDYgKzY3NywxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXFx1MDAzZXFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xcbit9XFxuK1xcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTtcXG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcXG4gdm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5pbmRleCA0MmY0YjBmMjFkMTc5OC4uMGYyNjBjNTBhYzNjOTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5AQCAtMTUsNyArMTUsMTAgQEBcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9yZWdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhaXJvaGFfZXRoLmhcXFwiXFxuIFxcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuKy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcXG4rICogY29uZmlndXJhdGlvbi5cXG4rICovXFxuK0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBwZV9sb2NrKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xcbkBAIC04Niw4ICs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXFxuIFxcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxcbiB7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4tXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbiBcXHR1OCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuIFxcdHUzMiBmZV9jcHVfcG9ydDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG5pbmRleCA0MzZmM2M4Nzc5YzEwMi4uNGUxN2RmYmNmMmI4OGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbkBAIC0zNzYsNiArMzc2LDcgQEBcXG4gXFxuICNkZWZpbmUgUkVHX1NSQ19QT1JUX0ZDX01BUDZcXHRcXHQweDIyOThcXG4gI2RlZmluZSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKF9uKVxcdEdFTk1BU0soNCArICgoX24pIFxcdTAwM2NcXHUwMDNjIDMpLCAoKF9uKSBcXHUwMDNjXFx1MDAzYyAzKSlcXG4rI2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVxcdFxcdDB4MWIxYTE5MThcXG4gXFxuICNkZWZpbmUgUkVHX0NETTVfUlhfT1ExX0RST1BfQ05UXFx0MHgyOWQ0XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzoxMy40MDM2MjE2OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MjgyODEyMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBTb0MgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0byBwcm9iZS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUsIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoaW5jbHVkaW5nIHRoZSBuZXRfZGV2aWNlIG9wZXJhdGlvbnMgYW5kIFRDIG9mZmxvYWQgY2FsbGJhY2tzKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5YzFiOGUzZDY0MWYzYzRkOGIzNjU2ZmE3MTIwYmVmNjU2ZmE4Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzowNzoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5pbmRleCA5MzJiM2EzZGYyZTU3Ny4uMjMxYzhmMmYyMGRkNDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtOTI5LDcgKzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuK1x0XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEpICE9IHFkbWEpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG5AQCAtMTgzNywxMyArMTgzNywxNCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0dTMyIGN1cl9sZW4sIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXG4gXHRcdGFpcm9oYV9mZV9zZXQocWRtYS1cdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XG5AQCAtMTkwMyw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiBcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcbkBAIC0xOTExLDcgKzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXHUwMDNlZXRoLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiBcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTk5OCw2ICsxOTk4LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBpLCBzcmNfcG9ydDtcbitcdHUzMiBwc2VfcG9ydDtcbitcbitcdHNyY19wb3J0ID0gZXRoLVx1MDAzZXNvYy1cdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cdTAwM2Vwb3J0LCBkZXYtXHUwMDNlbmJxKTtcbitcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHNyY19wb3J0O1xuK1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbitcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbitcdFx0XHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFx1MDAyNiBTUF9DUE9SVF9ERlRfTUFTSykpO1xuK1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHQgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4rXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSsrKVxuK1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuK1x0XHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVx1MDAzZW5icSk7XG4rXG4rXHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbitcdFx0XHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcdTAwMjYgbWFzayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDI0LDE1ICsyMDcxLDI1IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0aW50IHBwZV9pZDtcbiBcbiBcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cbi1cdGRldi1cdTAwM2VxZG1hID0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcbi1cdG5ldGRldi1cdTAwM2VpcnEgPSBkZXYtXHUwMDNlcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4rXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuK1x0bmV0ZGV2LVx1MDAzZWlycSA9IHFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbiBcbiBcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcdTAwMjZcdTAwMjYgYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSk7XG4gXHRhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpO1xuK1xuK1x0aWYgKCFjdXJfcWRtYSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDQ4LDcgKzIxMDUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgQUlST0hBX0dETTJfSURYOlxuIFx0XHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xuLVx0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX1BSSVZfRl9XQU47XG4rXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSArMjI0NCw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnE7XG4gXHRMSVNUX0hFQUQodHhfbGlzdCk7XG5AQCAtMjE5OCw2ICsyMjU1LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRxZG1hID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VxZG1hKTtcbiBcdHFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuIFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcbiBcbkBAIC0yMjQ3LDYgKzIzMDYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG5AQCAtMjMwOSw2ICsyMzcwLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG5AQCAtMjMyNCw2ICsyMzg2LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycm9yOlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdG5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuQEAgLTI0MDMsMTcgKzI0NjYsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxuLVx0XHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbitcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbiBcdFx0XHRcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGFpcm9oYV9xZG1hX3dyKGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbitcdFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4gXHRcdFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfQ0hBTl9JRFhfTUFTSywgY2hhbm5lbCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcbkBAIC0yNDIxLDEyICsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4rXHRcdFx0XHRcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0YWlyb2hhX3FkbWFfcm13KGRldi1cdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbitcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbiBcdFx0XHRDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksXG4gXHRcdFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xuIFxuQEAgLTI0OTAsMTMgKzI1NTUsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0dTY0IGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cywgdHhfcGFja2V0cztcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbi1cdHU2NCBjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSk7XG4tXHR1NjQgZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxuLVx0XHRcdFx0XHQgICAgUkVHX0NOVFJfVkFMKChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSArIDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSArXG4tXHRcdFx0IChmd2RfdHhfcGFja2V0cyAtIGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyk7XG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbitcdGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcbitcdFx0XHRcdFx0UkVHX0NOVFJfVkFMKChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSArIDEpKTtcbitcdHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcbitcdFx0ICAgICAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4gXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbkBAIC0yNzU2LDE2ICsyODIzLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaSwgZXJyO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpKyspIHtcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxuIFx0XHRcdFx0XHRcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODAxLDExICsyODcwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuIFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcbiBcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxuIFx0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdCAgIFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwiKTtcbkBAIC0yODQxLDcgKzI5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxuIFx0XHRcdFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSsrKSB7XG5AQCAtMzAxNiwxMCArMzA4NiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwKTtcbiBcbkBAIC0zMDQ1LDYgKzMxMTYsOTUgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKG5ldGRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCIsIGVycik7XG4rXG4rXHRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QUlST0hBX0RFVl9GX1dBTjtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitcbitcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbitcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbitcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX1BQRTEpO1xuK31cbitcbitzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4rXHRpbnQgZXJyID0gLUVCVVNZO1xuK1xuK1x0aWYgKHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG4rXHRcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpKSAvKiBBbHJlYWR5IGVuYWJsZWQgKi9cbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rXG4rXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuK1x0aWYgKHdhbl9kZXYpIHtcbitcdFx0aWYgKCh3YW5fZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfREVWX0ZfUU9TKSB8fFxuK1x0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiUW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcIik7XG4rXHRcdFx0Z290byBlcnJvcl91bmxvY2s7XG4rXHRcdH1cbitcdFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcbitcdH1cbitcbitcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK1x0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xuK1xuK1x0ZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0dTMyIHBzZV9wb3J0O1xuK1xuK1x0XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbitcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuK1x0YWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuK2Vycm9yX2Rpc2FibGVfd2FuOlxuK1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rZXJyb3JfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbkBAIC0zMDUzLDYgKzMyMTMsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKVxuIFx0XHRhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShuZXRkZXYsIHEpO1xuIFxuK1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9RT1M7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzA3MiwyNCArMzIzNCwzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuK1x0Y2FzZSBUQ19IVEJfQ1JFQVRFOiB7XG4rXHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdFx0aW50IGVycjtcbitcbitcdFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldiwgb3B0LVx1MDAzZWV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBUQ19IVEJfREVTVFJPWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XG4gXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1RfRk9SQ0U6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuaW5kZXggZDdmZjhjNTIwMGUyMGMuLmI5NzIyNGE1NDk1YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTUzNSwxMyArNTM1LDE0IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbiB9O1xuIFxuLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3Mge1xuLVx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXG4rZW51bSBhaXJvaGFfZGV2X2ZsYWdzIHtcbitcdEFJUk9IQV9ERVZfRl9XQU4gPSBCSVQoMCksXG4rXHRBSVJPSEFfREVWX0ZfUU9TID0gQklUKDEpLFxuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fZGV2IHtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSBfX3JjdSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFxuIFx0REVDTEFSRV9CSVRNQVAocW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbkBAIC02NTksNyArNjYwLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbitcdHJldHVybiAhKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgQUlST0hBX0RFVl9GX1dBTik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuQEAgLTY3Niw2ICs2NzcsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbitcdFx0XHRcdFx0IGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcbit9XG4rXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCA0MmY0YjBmMjFkMTc5OC4uMGYyNjBjNTBhYzNjOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTUsNyArMTUsMTAgQEBcbiAjaW5jbHVkZSBcImFpcm9oYV9yZWdzLmhcIlxuICNpbmNsdWRlIFwiYWlyb2hhX2V0aC5oXCJcbiBcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rLyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxuKyAqIGNvbmZpZ3VyYXRpb24uXG4rICovXG4rREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XG5AQCAtODYsOCArODksOCBAQCBzdGF0aWMgdTMyIGFpcm9oYV9wcGVfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKVxuIFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpXG4ge1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4tXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHR1OCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuIFx0dTMyIGZlX2NwdV9wb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTM3Niw2ICszNzYsNyBAQFxuIFxuICNkZWZpbmUgUkVHX1NSQ19QT1JUX0ZDX01BUDZcdFx0MHgyMjk4XG4gI2RlZmluZSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKF9uKVx0R0VOTUFTSyg0ICsgKChfbikgXHUwMDNjXHUwMDNjIDMpLCAoKF9uKSBcdTAwM2NcdTAwM2MgMykpXG4rI2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVx0XHQweDFiMWExOTE4XG4gXG4gI2RlZmluZSBSRUdfQ0RNNV9SWF9PUTFfRFJPUF9DTlRcdDB4MjlkNFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDc6MTMuNDAzNjI0NTI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNDU5MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgZm9yIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGFpcm9oYV9ldGguY2AgYW5kIHJlbGF0ZWQgZmlsZXMuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gdG8gYGRldi1cdTAwM2VxZG1hYCDigJMgYSBnb29kIHByYWN0aWNlLCBnZW5lcmFsbHksIGFzIGl0IHN1Z2dlc3RzIHRoZXkncmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCBhbHNvIGludHJvZHVjZXMgYGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNGAgYW5kIGBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0YCwgd2hpY2ggY2xlYXJseSBwb2ludCB0byBzb21lIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBmdW5jdGlvbmFsaXR5LiBGdW5jdGlvbmFsbHksIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBpbXByb3ZlbWVudCB0byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgZm9jdXNlZCBvbiBjb25jdXJyZW50IGFjY2VzcyBhbmQgUW9TLlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpczogaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgaW4gdGhlIHVzdWFsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gQWlyb2hhIFNvQ3MgYXJlIHR5cGljYWxseSBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBlbXVsYXRpb24gbGF5ZXIgZm9yIHRoYXQgaGFyZHdhcmUuIEkgaGlnaGx5IGRvdWJ0IHRoZXJlJ3MgYSBmdWxsIEFpcm9oYSBldGhlcm5ldCBlbXVsYXRvciByZWFkaWx5IGF2YWlsYWJsZSBpbiBRRU1VLiBJdCdzIG5vdCB0aGUgdHlwaWNhbCBjYXNlLlxuXG5TbywgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIHRoaXMgZHJpdmVyIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCdsbCBiZSBhIGdvb2QgaW5kaWNhdG9yIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIG9yIGlmIGl0IGNhbiBiZSB0ZXN0ZWQgd2l0aG91dCBhIHNwZWNpZmljIEFpcm9oYSBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzoxOS42MjgyMTgzNzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjAxODI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjE5LjczNTgzMTQ2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNTk1NDU4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBmaWxlcyB0aGVyZTogdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50cywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGxpa2VseSB0aGUgUEhZIG1hbmFnZW1lbnQgY29kZSBpZiB0aGV5J3JlIG5vdCB1c2luZyBhIGRlZGljYXRlZCBQSFkgZHJpdmVyLiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGdhdWdlIHRoZSBhcHByb2FjaCB0aGV5J3ZlIHRha2VuIOKAkyB3aGV0aGVyIGl0J3MgYSBzdGFuZGFyZCBOQVBJIGltcGxlbWVudGF0aW9uLCBhIGxlZ2FjeSBpbnRlcnJ1cHQtZHJpdmVuIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbm92ZWwuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBhY2tldCBkZXNjcmlwdG9ycywgRE1BIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlIGFyZSBnb2luZyB0byBiZSBzb21lIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG51YW5jZXMgYW5kIGl0IGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQwLjMzMTI5Mzc3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFpcm9oYV9ldGguY1wiLFxuICAgIFwiYWlyb2hhX2V0aC5oXCIsXG4gICAgXCJhaXJvaGFfbnB1LmNcIixcbiAgICBcImFpcm9oYV9wcGUuY1wiLFxuICAgIFwiYWlyb2hhX3BwZV9kZWJ1Z2ZzLmNcIixcbiAgICBcImFpcm9oYV9yZWdzLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDc6NDAuMzMxMzc5MDg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNzcxNzg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRmluZGluZyB0aGUgS2NvbmZpZyBmb3IgQWlyb2hhIEV0aGVybmV0KipcblxuSG1tLCB3aGVyZSBkaWQgSSBwdXQgdGhhdCBLY29uZmlnPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBmb3IgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgYGFpcm9oYV9ldGhgIHdpdGhpbiB0aGUgc3RhbmRhcmQgbG9jYXRpb25zLCB0aGUgb2J2aW91cyBzcG90cyAtIGZpcnN0LCBsZXQncyBsb29rIGluIHRoZSBtYWluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnYCBmaWxlLiBJZiBpdCdzIG5vdCB0aGVyZSwgSSdsbCBleHBhbmQgdGhlIHNlYXJjaCwgYW5kIHRyeSB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLCB3aGljaCB3b3VsZCBiZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIFRoYXQgc2hvdWxkIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQ0LjY0OTEwMzkzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1MzM2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0yMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZzoyMzpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMjQtc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hbGFjcml0ZWNoL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQ0LjgwMDY0OTY0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDM0NzIzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgS2NvbmZpZyBTZWFyY2gqKlxuXG5Pa2F5LCBzbyB0aGUgZ3JlcCBkaWRuJ3QgdHVybiB1cCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgaXQgKnNob3VsZCogZXhpc3QuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgaXQgbWFudWFsbHkuIEkgbmVlZCB0byBnZXQgbXkgZXllcyBvbiB0aGF0IEtjb25maWcgZmlsZS4gTGV0J3Mgc2VlIGlmIHNvbWV0aGluZyBpcyBvZmYgd2l0aCB0aGUgc2VhcmNoIHBhdGggb3IgaWYgSSBzaW1wbHkgbWlzcmVtZW1iZXJlZCB0aGUgbW9kdWxlIHBhdGguIE5vIHRpbWUgdG8gZGl0aGVyLCBsZXQgbWUgZ2V0IHRoYXQgZmlsZSBvcGVuIGFuZCByZWFkIGl0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uIFNvbWV0aGluZyBpcyBub3QgcXVpdGUgcmlnaHQgaGVyZSwgYW5kIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzo0OS4zNDQxMzA4OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICAzOlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRpZiBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgTkVUX0FJUk9IQV9OUFVcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gIDEzOlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXFxuICAxNjpcXHRcXHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9BSVJPSEFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcbiAgMjE6XFx0XFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXFxuICAyNTpcXHRcXHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVUX0FJUk9IQV9GTE9XX1NUQVRTXFxuICAyODpcXHRcXHRkZWZhdWx0IHlcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBmbG93IHN0YXRzXFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFxcdTAwMjZcXHUwMDI2IE5FVF9BSVJPSEFfTlBVXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQ5LjM0NDIyMzMwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUzNzMwOTkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBHaWdhYml0IEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQWlyb2hhIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyLiBUaGUgZGVzY3JpcHRpb24gY2xlYXJseSBzdGF0ZXMgaXQncyBzcGVjaWZpY2FsbHkgYnVpbHQgZm9yIHRoZSBBaXJvaGEgU29DLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBoYXJkd2FyZS1kZXBlbmRlbnQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzIGFyZSBnb2luZyB0byBiZSB0cmlja3kgdG8gd29yayB3aXRoIGluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3Igc3BlY2lmaWNhbGx5IGZvciB0aGUgQWlyb2hhIFNvQyBvciBzb21lIGtpbmQgb2Ygc29mdHdhcmUgYnVzIHRoYXQgY2FuIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgSSdtIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBnZXQgdGhpcyB0byBwcm9iZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgbWFjaGluZS4gVGhlIGZhY3QgdGhhdCBpdCB1c2VzIE1NSU8gZnVydGhlciBjb25maXJtcyBpdHMgY2xvc2UgdGllcyB0byB0aGUgdW5kZXJseWluZyBTb0MgaGFyZHdhcmUuIFRoZSBjb2RlJ3MgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYWxzbyBzdWdnZXN0cyB0aGF0IGl0IGNhbiBiZSBlbmFibGVkIHdoZW4gYSByZWxldmFudCBwbGF0Zm9ybSBpcyBhY3RpdmUgb3IgdGVzdCBtb2RlIGlzIGVuYWJsZWQ6IGBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RgLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIGlmIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoYXQgd291bGQgcHJvdmlkZSBzb21lIGNvbnRleHQgZm9yIGhvdyB0aGUga2VybmVsIGlzIGRldGVjdGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGludGVuZGVkIHRvIGludGVncmF0ZSB3aXRoIHRoZSBzeXN0ZW0gYW5kIGlmIGl0IHJlbGllcyBvbiBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgZmVhdHVyZXMgb3IgcHJvYmluZyBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDg6MTQuODgxNTM2NzU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5Njg3MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowODoxNC45OTY1MjgxMTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU4MzE5Mjk3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0aGUgc2FtZTogKndoYXQqIGFtIEkgZGVhbGluZyB3aXRoPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJcyBpdCBhIHNwZWNpZmljIGRldmljZSwgYSBnZW5lcmljIGNsYXNzLCBvciBhIHZpcnR1YWwgZHJpdmVyPyBUaGUgZGV0YWlscyB3aWxsIGluZmx1ZW5jZSB0aGUgZGlhZ25vc3RpYyBwYXRoLiBLbm93aW5nIHRoZSBkcml2ZXIncyB0eXBlIHF1aWNrbHkgbmFycm93cyB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYW5kIGF2YWlsYWJsZSB0cm91Ymxlc2hvb3RpbmcgdG9vbHMuIFRoaXMgYmFzaWMgY2xhc3NpZmljYXRpb24gaXMgYWJzb2x1dGVseSBjcml0aWNhbCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbG9ncyBvciBydW5uaW5nIHRlc3RzLiBUaGUgdHlwZSBvZiBkcml2ZXIgZGljdGF0ZXMgdGhlIGFwcHJvYWNoLCBzbyBJIG5lZWQgdG8gZXN0YWJsaXNoIGEgYmFzZSBjYXNlIGZvciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowODozMC44Mjg0NjMwNTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDIyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4OTk9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwNi19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MzkwNzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODEzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyMTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDg6MzAuOTIwNDkzNTQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjU5MDExMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyBhIHBsYXRmb3JtIGRyaXZlci4gUGxhdGZvcm0gZHJpdmVycywgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBrZXJuZWwgY29kZSwgcmVseSBvbiBkZXZpY2UgaW5mb3JtYXRpb24gZWl0aGVyIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlIG9yIHRocm91Z2ggQUNQSS4gTm93LCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgd2hpY2ggYXJlIGdlbmVyaWMgVk1zLCB3ZSBkb24ndCBoYXZlIHRob3NlIEFpcm9oYSBTb0MgZGV2aWNlIHRyZWUgbm9kZXMgZGVmaW5lZC4gQmVjYXVzZSBvZiB0aGlzLCB0aGlzIHNwZWNpZmljIGRyaXZlciB3aWxsIG5ldmVyIGFjdHVhbGx5IHByb2JlLCBtZWFuaW5nIHRoZSBjb3JlIGxvZ2ljIHdpbGwganVzdCBzaXQgdGhlcmUsIHVudG91Y2hlZC5cblxuVGhpcyBtZWFucyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuIEkgbmVlZGVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2gsIHNvIEkgd2VudCB0aHJvdWdoIGl0IGFsbCBhZ2Fpbi5cblxuSSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoZXJlIHdhc24ndCBzb21lIGtpbmQgb2YgYmFja2Rvb3IgZW50cnkgcG9pbnQsIGxpa2UgbmV0bGluayBmb3IgZXhhbXBsZSwgdG8gcmVhY2ggdGhhdCBgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YmAgZnVuY3Rpb24uIFR1cm5zIG91dCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggYG5kb19zZXR1cF90Y2AuIEJ1dCB0byBldmVuIGNhbGwgYG5kb19zZXR1cF90Y2AsIHdlJ2QgbmVlZCBhIGBuZXRfZGV2aWNlYCByZWdpc3RlcmVkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBBbmQgdG8gcmVnaXN0ZXIgdGhhdCBgbmV0X2RldmljZWAsIHRoZSBkcml2ZXIgaGFzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gUHJvYmluZywgaG93ZXZlciwgcmVxdWlyZXMgdGhhdCB0aGUgZHJpdmVyIGZpbmQgYSBwbGF0Zm9ybSBkZXZpY2UgbWF0Y2hpbmcgaXRzIGBvZl9tYXRjaF90YWJsZWAuIFNpbmNlIHdlIGRvbid0IGhhdmUgdGhlIGFjdHVhbCBBaXJvaGEgaGFyZHdhcmUsIG9yIGEgcHJlY2lzZSBlbXVsYXRvciBvZiB0aGF0IGhhcmR3YXJlLCB0aGUgcGxhdGZvcm0gZGV2aWNlIHdpbGwgbmV2ZXIgZXhpc3QsIHNvIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgZGVmaW5pdGl2ZWx5IHVucmVhY2hhYmxlIGluIG91ciB0ZXN0aW5nIHNldHVwLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAgYW5kIGp1c3RpZnkgaXQgd2l0aCB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MDIsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA4OjM4LjY4NjM5ODM2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsxg5c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 16:58:50 +0000 UTC FinishedAt: 2026-06-29 17:08:40 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OWMxYjhlM2Q2NDFmM2M0ZDhiMzY1NmZhNzEyMGJlZjY1NmZhOGNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTc6MDc6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDkzMmIzYTNkZjJlNTc3Li4yMzFjOGYyZjIwZGQ0NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTE4MzcsMTMgJiM0MzsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4gXHR1MzIgY3VyX2xlbiwgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MDMsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5MTEsNyAmIzQzOzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXHUwMDNlZXRoLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbiBcdHJldHVybiAwO1xuQEAgLTE5OTgsNiAmIzQzOzE5OTgsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgaSwgc3JjX3BvcnQ7XG4mIzQzO1x0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRzcmNfcG9ydCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXHUwMDNlcG9ydCwgZGV2LVx1MDAzZW5icSk7XG4mIzQzO1x0aWYgKHNyY19wb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHNyY19wb3J0O1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLFxuJiM0MztcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbiYjNDM7XHRcdFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRMUEJLX0NIQU5fTUFTSyB8IExQQktfTU9ERV9NQVNLIHwgTFBCS19FTl9NQVNLKTtcbiYjNDM7XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSyxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoLVx1MDAzZXNvYy1cdTAwM2VudW1fcHBlOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBWSVAgYW5kIElGQyBmb3IgR0RNMiAqL1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuJiM0MztcdFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cdTAwM2VuYnEpO1xuJiM0MztcbiYjNDM7XHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbiYjNDM7XHRcdFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXHUwMDI2IG1hc2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDI0LDE1ICYjNDM7MjA3MSwyNSBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqY3VyX3FkbWEsICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHRpbnQgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuJiM0MztcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdXJfcWRtYSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5AQCAtMjA0OCw3ICYjNDM7MjEwNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XG4gXHRcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXG4tXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcbiYjNDM7XHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSAmIzQzOzIyNDQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMTk4LDYgJiM0MzsyMjU1LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNDcsNiAmIzQzOzIzMDYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzA5LDYgJiM0MzsyMzcwLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzMjQsNiAmIzQzOzIzODYsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQwMywxNyAmIzQzOzI0NjYsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0MjEsMTIgJiM0MzsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjQ5MCwxMyAmIzQzOzI1NTUsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHU2NCBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHMsIHR4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuJiM0MztcdFx0ICAgICAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4gXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbkBAIC0yNzU2LDE2ICYjNDM7MjgyMywxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCB1MzIgYnVja2V0X3NpemUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpLCBlcnI7XG4gXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuJiM0MztcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxuIFx0XHRcdFx0XHRcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbiYjNDM7XHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCxcbiBcdFx0XHRcdFx0XHRcdCBSRUdfRUdSRVNTX1RSVENNX0NGRyxcbiBcdFx0XHRcdFx0XHRcdCBpLCByYXRlLCBidWNrZXRfc2l6ZSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMjgwMSwxMSAmIzQzOzI4NzAsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG4gXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICYjNDM7IGNoYW5uZWwgJiM0MzsgMTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxuIFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXG4gXHQgKi9cbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdCAgIFwmIzM0O3FkbWEgcW9zIGNoYW5uZWwgYWxyZWFkeSBpbiB1c2VcJiMzNDspO1xuQEAgLTI4NDEsNyAmIzQzOzI5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxuIFx0XHRcdFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXHUwMDNlcV9yeCk7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMzAxNiwxMCAmIzQzOzMwODYsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XG4gXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwKTtcbiBcbkBAIC0zMDQ1LDYgJiM0MzszMTE2LDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuJiM0MztcdGludCBlcnIgPSAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbiYjNDM7XHRcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuJiM0MztcdGlmICh3YW5fZGV2KSB7XG4mIzQzO1x0XHRpZiAoKHdhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9RT1MpIHx8XG4mIzQzO1x0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjtcbiYjNDM7XHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4mIzQzO1x0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXG4mIzQzO1x0XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuJiM0MztcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46XG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztlcnJvcl91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA1Myw2ICYjNDM7MzIxMyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9RT1M7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMwNzIsMjQgJiM0MzszMjM0LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuJiM0MztcdGNhc2UgVENfSFRCX0NSRUFURToge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7XG4gXHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGNhc2UgVENfSFRCX0RFU1RST1k6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuaW5kZXggZDdmZjhjNTIwMGUyMGMuLmI5NzIyNGE1NDk1YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTUzNSwxMyAmIzQzOzUzNSwxNCBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xuIFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4gfTtcbiBcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcbi1cdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxuJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuJiM0MztcdEFJUk9IQV9ERVZfRl9XQU4gPSBCSVQoMCksXG4mIzQzO1x0QUlST0hBX0RFVl9GX1FPUyA9IEJJVCgxKSxcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuQEAgLTY1OSw3ICYjNDM7NjYwLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbiYjNDM7XHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9XQU4pO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbkBAIC02NzYsNiAmIzQzOzY3NywxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gXG4mIzQzO2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxuJiM0MzthaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cdTAwM2VxZG1hLFxuJiM0MztcdFx0XHRcdFx0IGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHxcbiYjNDM7XHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KSk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCA0MmY0YjBmMjFkMTc5OC4uMGYyNjBjNTBhYzNjOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTUsNyAmIzQzOzE1LDEwIEBAXG4gI2luY2x1ZGUgXCYjMzQ7YWlyb2hhX3JlZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9ldGguaFwmIzM0O1xuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7LyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxuJiM0MzsgKiBjb25maWd1cmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7REVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XG5AQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHR1OCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuIFx0dTMyIGZlX2NwdV9wb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTM3Niw2ICYjNDM7Mzc2LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCAmIzQzOyAoKF9uKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAzY1x1MDAzYyAzKSlcbiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVx0XHQweDFiMWExOTE4XG4gXG4gI2RlZmluZSBSRUdfQ0RNNV9SWF9PUTFfRFJPUF9DTlRcdDB4MjlkNFxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ5YzFiOGUzZDY0MWYzYzRkOGIzNjU2ZmE3MTIwYmVmNjU2ZmE4Y2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxNzowNzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCmluZGV4IDkzMmIzYTNkZjJlNTc3Li4yMzFjOGYyZjIwZGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSkKIAkJCWlmICghZGV2KQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoZGV2LSZndDtxZG1hICE9IHFkbWEpCiYjNDM7CQkJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtJmd0O3FkbWEpICE9IHFkbWEpCiAJCQkJY29udGludWU7CiAKIAkJCW5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKQEAgLTE4MzcsMTMgJiM0MzsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiAJdTMyIGN1cl9sZW4sIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAllcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSkKIAkJYWlyb2hhX2ZlX3NldChxZG1hLSZndDtldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC0mZ3Q7aWQpLAogCQkJICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7CkBAIC0xOTAzLDcgJiM0MzsxOTA0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiAKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAJYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpOwpAQCAtMTkxMSw3ICYjNDM7MTkxMSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJaWYgKC0tcG9ydC0mZ3Q7dXNlcnMpCiAJCWFpcm9oYV9zZXRfcG9ydF9tdHUoZGV2LSZndDtldGgsIHBvcnQpOwogCWVsc2UKLQkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtJmd0O2V0aCwKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKIAkJCQkJICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKIAlyZXR1cm4gMDsKQEAgLTE5OTgsNiAmIzQzOzE5OTgsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiYjNDM7CWludCBpLCBzcmNfcG9ydDsKJiM0MzsJdTMyIHBzZV9wb3J0OwomIzQzOwomIzQzOwlzcmNfcG9ydCA9IGV0aC0mZ3Q7c29jLSZndDtvcHMuZ2V0X3Nwb3J0KGRldi0mZ3Q7cG9ydCwgZGV2LSZndDtuYnEpOwomIzQzOwlpZiAoc3JjX3BvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHNyY19wb3J0OwomIzQzOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLAomIzQzOwkJCVJFR19TUF9ERlRfQ1BPUlQoc3JjX3BvcnQgJmd0OyZndDsgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksCiYjNDM7CQkJU1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCAmYW1wOyBTUF9DUE9SVF9ERlRfTUFTSykpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spOwomIzQzOwlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSwKJiM0MzsJCQkJICAgIEZFX1BTRV9QT1JUX0RST1ApOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJTFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7CiYjNDM7CXBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyCiYjNDM7CQkJCQkJIDogRkVfUFNFX1BPUlRfUFBFMTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSywKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGV0aC0mZ3Q7c29jLSZndDtudW1fcHBlOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCURGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi8KJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNNF9JRFggJmFtcDsmYW1wOyBhaXJvaGFfaXNfNzU4MShldGgpKSB7CiYjNDM7CQl1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LSZndDtuYnEpOwomIzQzOwomIzQzOwkJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19TUkNfUE9SVF9GQ19NQVA2LCBtYXNrLAomIzQzOwkJCSAgICAgIEZDX01BUDZfREVGX1ZBTFVFICZhbXA7IG1hc2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKgogYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogewpAQCAtMjAyNCwxNSAmIzQzOzIwNzEsMjUgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiAJaW50IHBwZV9pZDsKIAogCS8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi8KLQlkZXYtJmd0O3FkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildOwotCW5ldGRldi0mZ3Q7aXJxID0gZGV2LSZndDtxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwomIzQzOwlxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKJiM0MzsJY3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKJiM0MzsJbmV0ZGV2LSZndDtpcnEgPSBxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwogCiAJcHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpICZhbXA7JmFtcDsgYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSk7CiAJYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTsKJiM0MzsKJiM0MzsJaWYgKCFjdXJfcWRtYSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwogfQogCiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjA0OCw3ICYjNDM7MjEwNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgQUlST0hBX0dETTJfSURYOgogCQkvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqLwotCQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOOwomIzQzOwkJZGV2LSZndDtmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTIxODcsOSAmIzQzOzIyNDQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCXUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47CiAJc3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxOwogCUxJU1RfSEVBRCh0eF9saXN0KTsKQEAgLTIxOTgsNiAmIzQzOzIyNTUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJdTE2IGluZGV4OwogCXU4IGZwb3J0OwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3FkbWEpOwogCXFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCXRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7CiAKQEAgLTIyNDcsNiAmIzQzOzIzMDYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJcS0mZ3Q7dHhxX3N0b3BwZWQgPSB0cnVlOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTIzMDksNiAmIzQzOzIzNzAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJRklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cS0mZ3Q7bG9jayk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIApAQCAtMjMyNCw2ICYjNDM7MjM4Niw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGVycm9yOgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJbmV0ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMjQwMywxNyAmIzQzOzI0NjYsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJaW50IGk7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSYjNDM7JiM0MzspCi0JCWFpcm9oYV9xZG1hX2NsZWFyKGRldi0mZ3Q7cWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSwKJiM0MzsJCWFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiAJCQkJICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5fd2VpZ2h0czsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHN0YXR1czsKIAkJaW50IGVycjsKIAotCQlhaXJvaGFfcWRtYV93cihkZXYtJmd0O3FkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAomIzQzOwkJYWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsCiAJCQkgICAgICAgVFdSUl9SV19DTURfTUFTSyB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHwKIAkJCSAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHwKQEAgLTI0MjEsMTIgJiM0MzsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cywKIAkJCQkJc3RhdHVzICZhbXA7IFRXUlJfUldfQ01EX0RPTkUsCiAJCQkJCVVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQywKLQkJCQkJdHJ1ZSwgZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiYjNDM7CQkJCQl0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWFpcm9oYV9xZG1hX3JtdyhkZXYtJmd0O3FkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgJmd0OyZndDsgMyksCiYjNDM7CWFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAogCQkJQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLAogCQkJX19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpOwogCkBAIC0yNDkwLDEzICYjNDM7MjU1NSwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsCiAJCQkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJdTY0IGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cywgdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCi0JdTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgJmx0OyZsdDsgMSkpOwotCXU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsCi0JCQkJCSAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgJmx0OyZsdDsgMSkgJiM0MzsgMSkpOwotCXU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LSZndDtjcHVfdHhfcGFja2V0cykgJiM0MzsKLQkJCSAoZndkX3R4X3BhY2tldHMgLSBkZXYtJmd0O2Z3ZF90eF9wYWNrZXRzKTsKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CWNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgJmx0OyZsdDsgMSkpOwomIzQzOwlmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsCiYjNDM7CQkJCQlSRUdfQ05UUl9WQUwoKGNoYW5uZWwgJmx0OyZsdDsgMSkgJiM0MzsgMSkpOwomIzQzOwl0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LSZndDtjcHVfdHhfcGFja2V0cykgJiM0MzsKJiM0MzsJCSAgICAgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LSZndDtmd2RfdHhfcGFja2V0cyk7CiAKIAlfYnN0YXRzX3VwZGF0ZShvcHQtJmd0O3N0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7CiAJZGV2LSZndDtjcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzOwpAQCAtMjc1NiwxNiAmIzQzOzI4MjMsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgdTMyIGJ1Y2tldF9zaXplKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpLCBlcnI7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7PSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LSZndDtxZG1hLCBjaGFubmVsLAomIzQzOwkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLAogCQkJCQkJICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksCiAJCQkJCQkgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi0mZ3Q7cWRtYSwgY2hhbm5lbCwKJiM0MzsJCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCwKIAkJCQkJCQkgUkVHX0VHUkVTU19UUlRDTV9DRkcsCiAJCQkJCQkJIGksIHJhdGUsIGJ1Y2tldF9zaXplKTsKIAkJaWYgKGVycikKQEAgLTI4MDEsMTEgJiM0MzsyODcwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJdTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtJmd0O2NsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7CiAJaW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyAmIzQzOyBjaGFubmVsICYjNDM7IDE7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCiAJLyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5CiAJICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suCiAJICovCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtJmd0O3Fvc19jaGFubmVsX21hcCkpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKG9wdC0mZ3Q7ZXh0YWNrLAogCQkJCSAgICYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZSYjMzQ7KTsKQEAgLTI4NDEsNyAmIzQzOzI5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwKIAkJCQkgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSwKIAkJCQkgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKQogewotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHFkbWEtJmd0O3FfcngpOyBpJiM0MzsmIzQzOykgewpAQCAtMzAxNiwxMCAmIzQzOzMwODYsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORzsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCWFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWNsZWFyX2JpdChxdWV1ZSwgcWRtYS0mZ3Q7cW9zX2NoYW5uZWxfbWFwKTsKIAljbGVhcl9iaXQocXVldWUsIGRldi0mZ3Q7cW9zX3NxX2JtYXApOwogCkBAIC0zMDQ1LDYgJiM0MzszMTE2LDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbmV0ZGV2X3dhcm4obmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwomIzQzOwlhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAoKHdhbl9kZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9ERVZfRl9RT1MpIHx8CiYjNDM7CQkgICAgd2FuX2Rldi0mZ3Q7cG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTJfSURYKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJZ290byBlcnJvcl91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldi0mZ3Q7ZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwllcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfZGlzYWJsZV93YW47CiYjNDM7CiYjNDM7CWVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazoKJiM0MzsJYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzO2Vycm9yX2Rpc2FibGVfd2FuOgomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTMwNTMsNiAmIzQzOzMyMTMsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZvcl9lYWNoX3NldF9iaXQocSwgZGV2LSZndDtxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpCiAJCWFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7CiAKJiM0MzsJZGV2LSZndDtmbGFncyAmYW1wOz0gfkFJUk9IQV9ERVZfRl9RT1M7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNzIsMjQgJiM0MzszMjM0LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN3aXRjaCAob3B0LSZndDtjb21tYW5kKSB7Ci0JY2FzZSBUQ19IVEJfQ1JFQVRFOgomIzQzOwljYXNlIFRDX0hUQl9DUkVBVEU6IHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtJmd0O2V4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBUQ19IVEJfREVTVFJPWToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpOwogCWNhc2UgVENfSFRCX05PREVfTU9ESUZZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTsKIAljYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfREVMOgogCWNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAppbmRleCBkN2ZmOGM1MjAwZTIwYy4uYjk3MjI0YTU0OTVjMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaApAQCAtNTM1LDEzICYjNDM7NTM1LDE0IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJREVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7CiB9OwogCi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHsKLQlBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSwKJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3MgewomIzQzOwlBSVJPSEFfREVWX0ZfV0FOID0gQklUKDApLAomIzQzOwlBSVJPSEFfREVWX0ZfUU9TID0gQklUKDEpLAogfTsKIAogc3RydWN0IGFpcm9oYV9nZG1fZGV2IHsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZXRoICpldGg7CiAKIAlERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpOwpAQCAtNjU5LDcgJiM0Mzs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZCkKIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKLQlyZXR1cm4gIShkZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9QUklWX0ZfV0FOKTsKJiM0MzsJcmV0dXJuICEoZGV2LSZndDtmbGFncyAmYW1wOyBBSVJPSEFfREVWX0ZfV0FOKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCkBAIC02NzYsNiAmIzQzOzY3NywxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJCSAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogCiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKgomIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LSZndDtxZG1hLAomIzQzOwkJCQkJIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTsKIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7CiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTE1LDcgJiM0MzsxNSwxMCBAQAogI2luY2x1ZGUgJiMzNDthaXJvaGFfcmVncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWlyb2hhX2V0aC5oJiMzNDsKIAotc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnQKJiM0MzsgKiBjb25maWd1cmF0aW9uLgomIzQzOyAqLwomIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0gewpAQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSkKIAogdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCkKIHsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7Ci0Jc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwogCXU4IHFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiAJdTMyIGZlX2NwdV9wb3J0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDcgQEAKIAogI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNgkJMHgyMjk4CiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pCUdFTk1BU0soNCAmIzQzOyAoKF9uKSAmbHQ7Jmx0OyAzKSwgKChfbikgJmx0OyZsdDsgMykpCiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRQkJMHgxYjFhMTkxOAogCiAjZGVmaW5lIFJFR19DRE01X1JYX09RMV9EUk9QX0NOVAkweDI5ZDQKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGZvciB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBhaXJvaGFfZXRoLmNgIGFuZCByZWxhdGVkIGZpbGVzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiB0byBgZGV2LSZndDtxZG1hYCDigJMgYSBnb29kIHByYWN0aWNlLCBnZW5lcmFsbHksIGFzIGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgIGFuZCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIHdoaWNoIGNsZWFybHkgcG9pbnQgdG8gc29tZSBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgZnVuY3Rpb25hbGl0eS4gRnVuY3Rpb25hbGx5LCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgaW1wcm92ZW1lbnQgdG8gdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIsIGZvY3VzZWQgb24gY29uY3VycmVudCBhY2Nlc3MgYW5kIFFvUy4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZSBpbiB0aGUgdXN1YWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBBaXJvaGEgU29DcyBhcmUgdHlwaWNhbGx5IG5vdCBzb21ldGhpbmcgeW91IGNhbiBqdXN0IHNwaW4gdXAgaW4gUUVNVSB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBlbXVsYXRpb24gbGF5ZXIgZm9yIHRoYXQgaGFyZHdhcmUuIEkgaGlnaGx5IGRvdWJ0IHRoZXJlJiMzOTtzIGEgZnVsbCBBaXJvaGEgZXRoZXJuZXQgZW11bGF0b3IgcmVhZGlseSBhdmFpbGFibGUgaW4gUUVNVS4gSXQmIzM5O3Mgbm90IHRoZSB0eXBpY2FsIGNhc2UuCgpTbywgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIHRoaXMgZHJpdmVyIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQmIzM5O2xsIGJlIGEgZ29vZCBpbmRpY2F0b3IgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIgb3IgaWYgaXQgY2FuIGJlIHRlc3RlZCB3aXRob3V0IGEgc3BlY2lmaWMgQWlyb2hhIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcm9oYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIGltcGxlbWVudGF0aW9uLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGZpbGVzIHRoZXJlOiB0aGUgZHJpdmVyJiMzOTtzIGVudHJ5IHBvaW50cywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGxpa2VseSB0aGUgUEhZIG1hbmFnZW1lbnQgY29kZSBpZiB0aGV5JiMzOTtyZSBub3QgdXNpbmcgYSBkZWRpY2F0ZWQgUEhZIGRyaXZlci4gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gZ2F1Z2UgdGhlIGFwcHJvYWNoIHRoZXkmIzM5O3ZlIHRha2VuIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGEgc3RhbmRhcmQgTkFQSSBpbXBsZW1lbnRhdGlvbiwgYSBsZWdhY3kgaW50ZXJydXB0LWRyaXZlbiBhcHByb2FjaCwgb3Igc29tZXRoaW5nIG5vdmVsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBwYWNrZXQgZGVzY3JpcHRvcnMsIERNQSBjb25maWd1cmF0aW9uLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBhcmUgZ29pbmcgdG8gYmUgc29tZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBudWFuY2VzIGFuZCBpdCBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWlyb2hhX2V0aC5jJiMzNDssCiAgICAmIzM0O2Fpcm9oYV9ldGguaCYjMzQ7LAogICAgJiMzNDthaXJvaGFfbnB1LmMmIzM0OywKICAgICYjMzQ7YWlyb2hhX3BwZS5jJiMzNDssCiAgICAmIzM0O2Fpcm9oYV9wcGVfZGVidWdmcy5jJiMzNDssCiAgICAmIzM0O2Fpcm9oYV9yZWdzLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqRmluZGluZyB0aGUgS2NvbmZpZyBmb3IgQWlyb2hhIEV0aGVybmV0KioKCkhtbSwgd2hlcmUgZGlkIEkgcHV0IHRoYXQgS2NvbmZpZz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZm9yIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGFpcm9oYV9ldGhgIHdpdGhpbiB0aGUgc3RhbmRhcmQgbG9jYXRpb25zLCB0aGUgb2J2aW91cyBzcG90cyAtIGZpcnN0LCBsZXQmIzM5O3MgbG9vayBpbiB0aGUgbWFpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ2AgZmlsZS4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBleHBhbmQgdGhlIHNlYXJjaCwgYW5kIHRyeSB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLCB3aGljaCB3b3VsZCBiZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIFRoYXQgc2hvdWxkIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIHBvc3NpYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjIzOnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0yNC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxhY3JpdGVjaC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBhIEtjb25maWcgU2VhcmNoKioKCk9rYXksIHNvIHRoZSBncmVwIGRpZG4mIzM5O3QgdHVybiB1cCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgaXQgKnNob3VsZCogZXhpc3QuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgaXQgbWFudWFsbHkuIEkgbmVlZCB0byBnZXQgbXkgZXllcyBvbiB0aGF0IEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZSBpZiBzb21ldGhpbmcgaXMgb2ZmIHdpdGggdGhlIHNlYXJjaCBwYXRoIG9yIGlmIEkgc2ltcGx5IG1pc3JlbWVtYmVyZWQgdGhlIG1vZHVsZSBwYXRoLiBObyB0aW1lIHRvIGRpdGhlciwgbGV0IG1lIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgcmVhZCBpdC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIFNvbWV0aGluZyBpcyBub3QgcXVpdGUgcmlnaHQgaGVyZSwgYW5kIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRpZiBORVRfVkVORE9SX0FJUk9IQVxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORVRfQUlST0hBX05QVVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgMTM6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXG4gIDE2Olx0XHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX0FJUk9IQVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuICAyMTpcdFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXG4gIDI1Olx0XHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcbiAgMjg6XHRcdGRlZmF1bHQgeVxuICAyOTpcdFx0Ym9vbCBcJiMzNDtBaXJvaGEgZmxvdyBzdGF0c1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFx1MDAyNlx1MDAyNiBORVRfQUlST0hBX05QVVxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXG4gIDMzOlx0XG4gIDM0Olx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQWlyb2hhIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyLiBUaGUgZGVzY3JpcHRpb24gY2xlYXJseSBzdGF0ZXMgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGJ1aWx0IGZvciB0aGUgQWlyb2hhIFNvQywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgaGFyZHdhcmUtZGVwZW5kZW50LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlc2UgdHlwZXMgb2YgZHJpdmVycyBhcmUgZ29pbmcgdG8gYmUgdHJpY2t5IHRvIHdvcmsgd2l0aCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBaXJvaGEgU29DIG9yIHNvbWUga2luZCBvZiBzb2Z0d2FyZSBidXMgdGhhdCBjYW4gc2ltdWxhdGUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLCBJJiMzOTttIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBnZXQgdGhpcyB0byBwcm9iZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgbWFjaGluZS4gVGhlIGZhY3QgdGhhdCBpdCB1c2VzIE1NSU8gZnVydGhlciBjb25maXJtcyBpdHMgY2xvc2UgdGllcyB0byB0aGUgdW5kZXJseWluZyBTb0MgaGFyZHdhcmUuIFRoZSBjb2RlJiMzOTtzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFsc28gc3VnZ2VzdHMgdGhhdCBpdCBjYW4gYmUgZW5hYmxlZCB3aGVuIGEgcmVsZXZhbnQgcGxhdGZvcm0gaXMgYWN0aXZlIG9yIHRlc3QgbW9kZSBpcyBlbmFibGVkOiBgQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUYC4KCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gaWYgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCB3b3VsZCBwcm92aWRlIHNvbWUgY29udGV4dCBmb3IgaG93IHRoZSBrZXJuZWwgaXMgZGV0ZWN0aW5nIGFuZCBpbml0aWFsaXppbmcgaXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gaW50ZWdyYXRlIHdpdGggdGhlIHN5c3RlbSBhbmQgaWYgaXQgcmVsaWVzIG9uIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBmZWF0dXJlcyBvciBwcm9iaW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0aGUgc2FtZTogKndoYXQqIGFtIEkgZGVhbGluZyB3aXRoPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJcyBpdCBhIHNwZWNpZmljIGRldmljZSwgYSBnZW5lcmljIGNsYXNzLCBvciBhIHZpcnR1YWwgZHJpdmVyPyBUaGUgZGV0YWlscyB3aWxsIGluZmx1ZW5jZSB0aGUgZGlhZ25vc3RpYyBwYXRoLiBLbm93aW5nIHRoZSBkcml2ZXImIzM5O3MgdHlwZSBxdWlja2x5IG5hcnJvd3MgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFuZCBhdmFpbGFibGUgdHJvdWJsZXNob290aW5nIHRvb2xzLiBUaGlzIGJhc2ljIGNsYXNzaWZpY2F0aW9uIGlzIGFic29sdXRlbHkgY3JpdGljYWwgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIGxvZ3Mgb3IgcnVubmluZyB0ZXN0cy4gVGhlIHR5cGUgb2YgZHJpdmVyIGRpY3RhdGVzIHRoZSBhcHByb2FjaCwgc28gSSBuZWVkIHRvIGVzdGFibGlzaCBhIGJhc2UgY2FzZSBmb3IgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mzg5OT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTA3Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MDgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIxOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTAyCgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlci4gUGxhdGZvcm0gZHJpdmVycywgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBrZXJuZWwgY29kZSwgcmVseSBvbiBkZXZpY2UgaW5mb3JtYXRpb24gZWl0aGVyIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlIG9yIHRocm91Z2ggQUNQSS4gTm93LCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgd2hpY2ggYXJlIGdlbmVyaWMgVk1zLCB3ZSBkb24mIzM5O3QgaGF2ZSB0aG9zZSBBaXJvaGEgU29DIGRldmljZSB0cmVlIG5vZGVzIGRlZmluZWQuIEJlY2F1c2Ugb2YgdGhpcywgdGhpcyBzcGVjaWZpYyBkcml2ZXIgd2lsbCBuZXZlciBhY3R1YWxseSBwcm9iZSwgbWVhbmluZyB0aGUgY29yZSBsb2dpYyB3aWxsIGp1c3Qgc2l0IHRoZXJlLCB1bnRvdWNoZWQuCgpUaGlzIG1lYW5zIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSBuZWVkZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRob3VnaCwgc28gSSB3ZW50IHRocm91Z2ggaXQgYWxsIGFnYWluLgoKSSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoZXJlIHdhc24mIzM5O3Qgc29tZSBraW5kIG9mIGJhY2tkb29yIGVudHJ5IHBvaW50LCBsaWtlIG5ldGxpbmsgZm9yIGV4YW1wbGUsIHRvIHJlYWNoIHRoYXQgYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgIGZ1bmN0aW9uLiBUdXJucyBvdXQsIHRoZSBwYXRjaCBtb2RpZmllcyBgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YmAsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIGBuZG9fc2V0dXBfdGNgLiBCdXQgdG8gZXZlbiBjYWxsIGBuZG9fc2V0dXBfdGNgLCB3ZSYjMzk7ZCBuZWVkIGEgYG5ldF9kZXZpY2VgIHJlZ2lzdGVyZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEFuZCB0byByZWdpc3RlciB0aGF0IGBuZXRfZGV2aWNlYCwgdGhlIGRyaXZlciBoYXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBQcm9iaW5nLCBob3dldmVyLCByZXF1aXJlcyB0aGF0IHRoZSBkcml2ZXIgZmluZCBhIHBsYXRmb3JtIGRldmljZSBtYXRjaGluZyBpdHMgYG9mX21hdGNoX3RhYmxlYC4gU2luY2Ugd2UgZG9uJiMzOTt0IGhhdmUgdGhlIGFjdHVhbCBBaXJvaGEgaGFyZHdhcmUsIG9yIGEgcHJlY2lzZSBlbXVsYXRvciBvZiB0aGF0IGhhcmR3YXJlLCB0aGUgcGxhdGZvcm0gZGV2aWNlIHdpbGwgbmV2ZXIgZXhpc3QsIHNvIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIGRlZmluaXRpdmVseSB1bnJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZyBzZXR1cC4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZyA9IGZhbHNlYCBhbmQganVzdGlmeSBpdCB3aXRoIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzoxMi45MDA3OTUwNjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc4NTY0ODA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgU29DIGhhcmR3YXJlIChvciBkZXZpY2UgdHJlZSBub2RlcykgdG8gcHJvYmUuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlLCBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKGluY2x1ZGluZyB0aGUgbmV0X2RldmljZSBvcGVyYXRpb25zIGFuZCBUQyBvZmZsb2FkIGNhbGxiYWNrcykgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDc6MTIuOTAwODA0NDg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIwMjI0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OWMxYjhlM2Q2NDFmM2M0ZDhiMzY1NmZhNzEyMGJlZjY1NmZhOGNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDE3OjA3OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuaW5kZXggOTMyYjNhM2RmMmU1NzcuLjIzMWM4ZjJmMjBkZDQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXFxuIFxcdFxcdFxcdGlmICghZGV2KVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZXFkbWEgIT0gcWRtYSlcXG4rXFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEpICE9IHFkbWEpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xcbkBAIC0xODM3LDEzICsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4gXFx0dTMyIGN1cl9sZW4sIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdGVyciA9IGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIHRydWUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcXG4gXFx0XFx0YWlyb2hhX2ZlX3NldChxZG1hLVxcdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cXHUwMDNlaWQpLFxcbiBcXHRcXHRcXHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcXG5AQCAtMTkwMyw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4gXFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xcbkBAIC0xOTExLDcgKzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRpZiAoLS1wb3J0LVxcdTAwM2V1c2VycylcXG4gXFx0XFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXFx1MDAzZWV0aCwgcG9ydCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXFx1MDAzZWV0aCxcXG4rXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cXHUwMDNlZXRoLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTk5OCw2ICsxOTk4LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4rXFx0aW50IGksIHNyY19wb3J0O1xcbitcXHR1MzIgcHNlX3BvcnQ7XFxuK1xcbitcXHRzcmNfcG9ydCA9IGV0aC1cXHUwMDNlc29jLVxcdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cXHUwMDNlcG9ydCwgZGV2LVxcdTAwM2VuYnEpO1xcbitcXHRpZiAoc3JjX3BvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gc3JjX3BvcnQ7XFxuK1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLFxcbitcXHRcXHRcXHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFxcdTAwM2VcXHUwMDNlIGZscyhTUF9DUE9SVF9ERlRfTUFTSykpLFxcbitcXHRcXHRcXHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFxcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcXG4rXFxuK1xcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcXG4rXFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRMUEJLX0NIQU5fTUFTSyB8IExQQktfTU9ERV9NQVNLIHwgTFBCS19FTl9NQVNLKTtcXG4rXFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcXG4rXFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdFxcdFxcdCAgICBwc2VfcG9ydCk7XFxuK1xcbitcXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXFxuK1xcdFxcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGgtXFx1MDAzZXNvYy1cXHUwMDNlbnVtX3BwZTsgaSsrKVxcbitcXHRcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHRERlRfQ1BPUlRfTUFTSyhBSVJPSEFfR0RNMl9JRFgpKTtcXG4rXFxuK1xcdC8qIEVuYWJsZSBWSVAgYW5kIElGQyBmb3IgR0RNMiAqL1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcXG4rXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXFx1MDAyNlxcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xcbitcXHRcXHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVxcdTAwM2VuYnEpO1xcbitcXG4rXFx0XFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19TUkNfUE9SVF9GQ19NQVA2LCBtYXNrLFxcbitcXHRcXHRcXHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcXHUwMDI2IG1hc2spO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXFxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4ge1xcbkBAIC0yMDI0LDE1ICsyMDcxLDI1IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbiBcXHRpbnQgcHBlX2lkO1xcbiBcXG4gXFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xcbi1cXHRkZXYtXFx1MDAzZXFkbWEgPSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XFxuLVxcdG5ldGRldi1cXHUwMDNlaXJxID0gZGV2LVxcdTAwM2VxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbitcXHRxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbitcXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hLCBxZG1hKTtcXG4rXFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbiBcXG4gXFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xcbiBcXHRhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpO1xcbitcXG4rXFx0aWYgKCFjdXJfcWRtYSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbkBAIC0yMDQ4LDcgKzIxMDUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XFxuIFxcdFxcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXFxuLVxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gQUlST0hBX1BSSVZfRl9XQU47XFxuK1xcdFxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yMTg3LDkgKzIyNDQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47XFxuIFxcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxO1xcbiBcXHRMSVNUX0hFQUQodHhfbGlzdCk7XFxuQEAgLTIxOTgsNiArMjI1NSw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0dTE2IGluZGV4O1xcbiBcXHR1OCBmcG9ydDtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZXFkbWEpO1xcbiBcXHRxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTtcXG4gXFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcXG4gXFxuQEAgLTIyNDcsNiArMjMwNiw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpO1xcbiBcXHRcXHRxLVxcdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuIFxcdH1cXG4gXFxuQEAgLTIzMDksNiArMjM3MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXG5AQCAtMjMyNCw2ICsyMzg2LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBlcnJvcjpcXG4gXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbkBAIC0yNDAzLDE3ICsyNDY2LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpKyspXFxuLVxcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKGRldi1cXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0XFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcdFxcdGludCBlcnI7XFxuIFxcbi1cXHRcXHRhaXJvaGFfcWRtYV93cihkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLFxcbitcXHRcXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4gXFx0XFx0XFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxcbiBcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxcbkBAIC0yNDIxLDEyICsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG4gXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcXG4gXFx0XFx0XFx0XFx0XFx0VVNFQ19QRVJfTVNFQywgMTAgKiBVU0VDX1BFUl9NU0VDLFxcbi1cXHRcXHRcXHRcXHRcXHR0cnVlLCBkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4rXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRhaXJvaGFfcWRtYV9ybXcoZGV2LVxcdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFxcdTAwM2VcXHUwMDNlIDMpLFxcbitcXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4gXFx0XFx0XFx0Q0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLFxcbiBcXHRcXHRcXHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XFxuIFxcbkBAIC0yNDkwLDEzICsyNTU1LDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0dTY0IGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cywgdHhfcGFja2V0cztcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4tXFx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkpO1xcbi1cXHR1NjQgZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgUkVHX0NOVFJfVkFMKChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpICsgMSkpO1xcbi1cXHR1NjQgdHhfcGFja2V0cyA9IChjcHVfdHhfcGFja2V0cyAtIGRldi1cXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcXG4tXFx0XFx0XFx0IChmd2RfdHhfcGFja2V0cyAtIGRldi1cXHUwMDNlZndkX3R4X3BhY2tldHMpO1xcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0Y3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSk7XFxuK1xcdGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcXG4rXFx0XFx0XFx0XFx0XFx0UkVHX0NOVFJfVkFMKChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpICsgMSkpO1xcbitcXHR0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cykgK1xcbitcXHRcXHQgICAgIChmd2RfdHhfcGFja2V0cyAtIGRldi1cXHUwMDNlZndkX3R4X3BhY2tldHMpO1xcbiBcXG4gXFx0X2JzdGF0c191cGRhdGUob3B0LVxcdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xcbiBcXHRkZXYtXFx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XFxuQEAgLTI3NTYsMTYgKzI4MjMsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgdTMyIGJ1Y2tldF9zaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRpbnQgaSwgZXJyO1xcbiBcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXFx1MDAzZXFkbWEsIGNoYW5uZWwsXFxuK1xcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcocWRtYSwgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cXHUwMDNlcWRtYSwgY2hhbm5lbCxcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBpLCByYXRlLCBidWNrZXRfc2l6ZSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTI4MDEsMTEgKzI4NzAsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0dTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtXFx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuIFxcdGludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgKyBjaGFubmVsICsgMTtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFxuIFxcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxcbiBcXHQgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay5cXG4gXFx0ICovXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFubmVsLCBxZG1hLVxcdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXFx1MDAzZWV4dGFjayxcXG4gXFx0XFx0XFx0XFx0ICAgXFxcInFkbWEgcW9zIGNoYW5uZWwgYWxyZWFkeSBpbiB1c2VcXFwiKTtcXG5AQCAtMjg0MSw3ICsyOTExLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcnhfbWV0ZXIoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxcbiB7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShxZG1hLVxcdTAwM2VxX3J4KTsgaSsrKSB7XFxuQEAgLTMwMTYsMTAgKzMwODYsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Y2xlYXJfYml0KHF1ZXVlLCBxZG1hLVxcdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xcbiBcXHRjbGVhcl9iaXQocXVldWUsIGRldi1cXHUwMDNlcW9zX3NxX2JtYXApO1xcbiBcXG5AQCAtMzA0NSw2ICszMTE2LDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFxuK1xcdGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rXFxuK1xcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVxcdTAwM2VldGgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbitcXHRpbnQgZXJyID0gLUVCVVNZO1xcbitcXG4rXFx0aWYgKHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XFxuK1xcdFxcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xcbitcXHRpZiAod2FuX2Rldikge1xcbitcXHRcXHRpZiAoKHdhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUlST0hBX0RFVl9GX1FPUykgfHxcXG4rXFx0XFx0ICAgIHdhbl9kZXYtXFx1MDAzZXBvcnQtXFx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiUW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0XFx0Z290byBlcnJvcl91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK1xcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4rXFx0XFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0XFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcXG4rXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHBzZV9wb3J0KTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxcbitcXHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK2Vycm9yX2Rpc2FibGVfd2FuOlxcbitcXHRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK2Vycm9yX3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuQEAgLTMwNTMsNiArMzIxMyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXFxuIFxcdFxcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XFxuIFxcbitcXHRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5BSVJPSEFfREVWX0ZfUU9TO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMwNzIsMjQgKzMyMzQsMzMgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3dpdGNoIChvcHQtXFx1MDAzZWNvbW1hbmQpIHtcXG4tXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbitcXHRjYXNlIFRDX0hUQl9DUkVBVEU6IHtcXG4rXFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldiwgb3B0LVxcdTAwM2VleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfUU9TO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0fVxcbiBcXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTk9ERV9NT0RJRlk6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1RfRk9SQ0U6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5pbmRleCBkN2ZmOGM1MjAwZTIwYy4uYjk3MjI0YTU0OTVjMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5AQCAtNTM1LDEzICs1MzUsMTQgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcXG4gXFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuIH07XFxuIFxcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcXG4tXFx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXFxuK2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XFxuK1xcdEFJUk9IQV9ERVZfRl9XQU4gPSBCSVQoMCksXFxuK1xcdEFJUk9IQV9ERVZfRl9RT1MgPSBCSVQoMSksXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcXG4gXFxuIFxcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuQEAgLTY1OSw3ICs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4tXFx0cmV0dXJuICEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcXG4rXFx0cmV0dXJuICEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEFJUk9IQV9ERVZfRl9XQU4pO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG5AQCAtNjc2LDYgKzY3NywxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXFx1MDAzZXFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xcbit9XFxuK1xcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTtcXG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcXG4gdm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5pbmRleCA0MmY0YjBmMjFkMTc5OC4uMGYyNjBjNTBhYzNjOTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5AQCAtMTUsNyArMTUsMTAgQEBcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9yZWdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhaXJvaGFfZXRoLmhcXFwiXFxuIFxcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuKy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcXG4rICogY29uZmlndXJhdGlvbi5cXG4rICovXFxuK0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBwZV9sb2NrKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xcbkBAIC04Niw4ICs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXFxuIFxcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxcbiB7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4tXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbiBcXHR1OCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuIFxcdHUzMiBmZV9jcHVfcG9ydDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG5pbmRleCA0MzZmM2M4Nzc5YzEwMi4uNGUxN2RmYmNmMmI4OGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbkBAIC0zNzYsNiArMzc2LDcgQEBcXG4gXFxuICNkZWZpbmUgUkVHX1NSQ19QT1JUX0ZDX01BUDZcXHRcXHQweDIyOThcXG4gI2RlZmluZSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKF9uKVxcdEdFTk1BU0soNCArICgoX24pIFxcdTAwM2NcXHUwMDNjIDMpLCAoKF9uKSBcXHUwMDNjXFx1MDAzYyAzKSlcXG4rI2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVxcdFxcdDB4MWIxYTE5MThcXG4gXFxuICNkZWZpbmUgUkVHX0NETTVfUlhfT1ExX0RST1BfQ05UXFx0MHgyOWQ0XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzoxMy40MDM2MjE2OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MjgyODEyMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBTb0MgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0byBwcm9iZS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUsIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoaW5jbHVkaW5nIHRoZSBuZXRfZGV2aWNlIG9wZXJhdGlvbnMgYW5kIFRDIG9mZmxvYWQgY2FsbGJhY2tzKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5YzFiOGUzZDY0MWYzYzRkOGIzNjU2ZmE3MTIwYmVmNjU2ZmE4Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzowNzoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5pbmRleCA5MzJiM2EzZGYyZTU3Ny4uMjMxYzhmMmYyMGRkNDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtOTI5LDcgKzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuK1x0XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEpICE9IHFkbWEpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG5AQCAtMTgzNywxMyArMTgzNywxNCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0dTMyIGN1cl9sZW4sIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXG4gXHRcdGFpcm9oYV9mZV9zZXQocWRtYS1cdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XG5AQCAtMTkwMyw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiBcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcbkBAIC0xOTExLDcgKzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXHUwMDNlZXRoLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiBcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTk5OCw2ICsxOTk4LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBpLCBzcmNfcG9ydDtcbitcdHUzMiBwc2VfcG9ydDtcbitcbitcdHNyY19wb3J0ID0gZXRoLVx1MDAzZXNvYy1cdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cdTAwM2Vwb3J0LCBkZXYtXHUwMDNlbmJxKTtcbitcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHNyY19wb3J0O1xuK1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbitcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbitcdFx0XHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFx1MDAyNiBTUF9DUE9SVF9ERlRfTUFTSykpO1xuK1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHQgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4rXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSsrKVxuK1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuK1x0XHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVx1MDAzZW5icSk7XG4rXG4rXHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbitcdFx0XHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcdTAwMjYgbWFzayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDI0LDE1ICsyMDcxLDI1IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0aW50IHBwZV9pZDtcbiBcbiBcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cbi1cdGRldi1cdTAwM2VxZG1hID0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcbi1cdG5ldGRldi1cdTAwM2VpcnEgPSBkZXYtXHUwMDNlcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4rXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuK1x0bmV0ZGV2LVx1MDAzZWlycSA9IHFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbiBcbiBcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcdTAwMjZcdTAwMjYgYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSk7XG4gXHRhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpO1xuK1xuK1x0aWYgKCFjdXJfcWRtYSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDQ4LDcgKzIxMDUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgQUlST0hBX0dETTJfSURYOlxuIFx0XHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xuLVx0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX1BSSVZfRl9XQU47XG4rXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSArMjI0NCw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnE7XG4gXHRMSVNUX0hFQUQodHhfbGlzdCk7XG5AQCAtMjE5OCw2ICsyMjU1LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRxZG1hID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VxZG1hKTtcbiBcdHFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuIFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcbiBcbkBAIC0yMjQ3LDYgKzIzMDYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG5AQCAtMjMwOSw2ICsyMzcwLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG5AQCAtMjMyNCw2ICsyMzg2LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycm9yOlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdG5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuQEAgLTI0MDMsMTcgKzI0NjYsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxuLVx0XHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbitcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbiBcdFx0XHRcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGFpcm9oYV9xZG1hX3dyKGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbitcdFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4gXHRcdFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfQ0hBTl9JRFhfTUFTSywgY2hhbm5lbCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcbkBAIC0yNDIxLDEyICsyNDg2LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4rXHRcdFx0XHRcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0YWlyb2hhX3FkbWFfcm13KGRldi1cdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbitcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbiBcdFx0XHRDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksXG4gXHRcdFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xuIFxuQEAgLTI0OTAsMTMgKzI1NTUsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0dTY0IGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cywgdHhfcGFja2V0cztcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbi1cdHU2NCBjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSk7XG4tXHR1NjQgZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxuLVx0XHRcdFx0XHQgICAgUkVHX0NOVFJfVkFMKChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSArIDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSArXG4tXHRcdFx0IChmd2RfdHhfcGFja2V0cyAtIGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyk7XG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbitcdGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcbitcdFx0XHRcdFx0UkVHX0NOVFJfVkFMKChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSArIDEpKTtcbitcdHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcbitcdFx0ICAgICAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4gXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbkBAIC0yNzU2LDE2ICsyODIzLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaSwgZXJyO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpKyspIHtcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxuIFx0XHRcdFx0XHRcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODAxLDExICsyODcwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuIFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcbiBcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxuIFx0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdCAgIFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwiKTtcbkBAIC0yODQxLDcgKzI5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxuIFx0XHRcdFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSsrKSB7XG5AQCAtMzAxNiwxMCArMzA4NiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwKTtcbiBcbkBAIC0zMDQ1LDYgKzMxMTYsOTUgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKG5ldGRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCIsIGVycik7XG4rXG4rXHRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QUlST0hBX0RFVl9GX1dBTjtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitcbitcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbitcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbitcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX1BQRTEpO1xuK31cbitcbitzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4rXHRpbnQgZXJyID0gLUVCVVNZO1xuK1xuK1x0aWYgKHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG4rXHRcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpKSAvKiBBbHJlYWR5IGVuYWJsZWQgKi9cbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rXG4rXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuK1x0aWYgKHdhbl9kZXYpIHtcbitcdFx0aWYgKCh3YW5fZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfREVWX0ZfUU9TKSB8fFxuK1x0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiUW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcIik7XG4rXHRcdFx0Z290byBlcnJvcl91bmxvY2s7XG4rXHRcdH1cbitcdFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcbitcdH1cbitcbitcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK1x0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xuK1xuK1x0ZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0dTMyIHBzZV9wb3J0O1xuK1xuK1x0XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbitcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuK1x0YWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuK2Vycm9yX2Rpc2FibGVfd2FuOlxuK1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rZXJyb3JfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbkBAIC0zMDUzLDYgKzMyMTMsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKVxuIFx0XHRhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShuZXRkZXYsIHEpO1xuIFxuK1x0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9RT1M7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzA3MiwyNCArMzIzNCwzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuK1x0Y2FzZSBUQ19IVEJfQ1JFQVRFOiB7XG4rXHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdFx0aW50IGVycjtcbitcbitcdFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldiwgb3B0LVx1MDAzZWV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBUQ19IVEJfREVTVFJPWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XG4gXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1RfRk9SQ0U6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuaW5kZXggZDdmZjhjNTIwMGUyMGMuLmI5NzIyNGE1NDk1YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTUzNSwxMyArNTM1LDE0IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbiB9O1xuIFxuLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3Mge1xuLVx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXG4rZW51bSBhaXJvaGFfZGV2X2ZsYWdzIHtcbitcdEFJUk9IQV9ERVZfRl9XQU4gPSBCSVQoMCksXG4rXHRBSVJPSEFfREVWX0ZfUU9TID0gQklUKDEpLFxuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fZGV2IHtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSBfX3JjdSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFxuIFx0REVDTEFSRV9CSVRNQVAocW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbkBAIC02NTksNyArNjYwLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbitcdHJldHVybiAhKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgQUlST0hBX0RFVl9GX1dBTik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuQEAgLTY3Niw2ICs2NzcsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbitcdFx0XHRcdFx0IGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcbit9XG4rXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCA0MmY0YjBmMjFkMTc5OC4uMGYyNjBjNTBhYzNjOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTUsNyArMTUsMTAgQEBcbiAjaW5jbHVkZSBcImFpcm9oYV9yZWdzLmhcIlxuICNpbmNsdWRlIFwiYWlyb2hhX2V0aC5oXCJcbiBcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4rLyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxuKyAqIGNvbmZpZ3VyYXRpb24uXG4rICovXG4rREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XG5AQCAtODYsOCArODksOCBAQCBzdGF0aWMgdTMyIGFpcm9oYV9wcGVfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKVxuIFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpXG4ge1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4tXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHR1OCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuIFx0dTMyIGZlX2NwdV9wb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTM3Niw2ICszNzYsNyBAQFxuIFxuICNkZWZpbmUgUkVHX1NSQ19QT1JUX0ZDX01BUDZcdFx0MHgyMjk4XG4gI2RlZmluZSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKF9uKVx0R0VOTUFTSyg0ICsgKChfbikgXHUwMDNjXHUwMDNjIDMpLCAoKF9uKSBcdTAwM2NcdTAwM2MgMykpXG4rI2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVx0XHQweDFiMWExOTE4XG4gXG4gI2RlZmluZSBSRUdfQ0RNNV9SWF9PUTFfRFJPUF9DTlRcdDB4MjlkNFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDc6MTMuNDAzNjI0NTI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNDU5MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgZm9yIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGFpcm9oYV9ldGguY2AgYW5kIHJlbGF0ZWQgZmlsZXMuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gdG8gYGRldi1cdTAwM2VxZG1hYCDigJMgYSBnb29kIHByYWN0aWNlLCBnZW5lcmFsbHksIGFzIGl0IHN1Z2dlc3RzIHRoZXkncmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCBhbHNvIGludHJvZHVjZXMgYGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNGAgYW5kIGBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0YCwgd2hpY2ggY2xlYXJseSBwb2ludCB0byBzb21lIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBmdW5jdGlvbmFsaXR5LiBGdW5jdGlvbmFsbHksIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBpbXByb3ZlbWVudCB0byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgZm9jdXNlZCBvbiBjb25jdXJyZW50IGFjY2VzcyBhbmQgUW9TLlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpczogaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgaW4gdGhlIHVzdWFsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gQWlyb2hhIFNvQ3MgYXJlIHR5cGljYWxseSBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBlbXVsYXRpb24gbGF5ZXIgZm9yIHRoYXQgaGFyZHdhcmUuIEkgaGlnaGx5IGRvdWJ0IHRoZXJlJ3MgYSBmdWxsIEFpcm9oYSBldGhlcm5ldCBlbXVsYXRvciByZWFkaWx5IGF2YWlsYWJsZSBpbiBRRU1VLiBJdCdzIG5vdCB0aGUgdHlwaWNhbCBjYXNlLlxuXG5TbywgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIHRoaXMgZHJpdmVyIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCdsbCBiZSBhIGdvb2QgaW5kaWNhdG9yIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIG9yIGlmIGl0IGNhbiBiZSB0ZXN0ZWQgd2l0aG91dCBhIHNwZWNpZmljIEFpcm9oYSBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzoxOS42MjgyMTgzNzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjAxODI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjE5LjczNTgzMTQ2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNTk1NDU4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBmaWxlcyB0aGVyZTogdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50cywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGxpa2VseSB0aGUgUEhZIG1hbmFnZW1lbnQgY29kZSBpZiB0aGV5J3JlIG5vdCB1c2luZyBhIGRlZGljYXRlZCBQSFkgZHJpdmVyLiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGdhdWdlIHRoZSBhcHByb2FjaCB0aGV5J3ZlIHRha2VuIOKAkyB3aGV0aGVyIGl0J3MgYSBzdGFuZGFyZCBOQVBJIGltcGxlbWVudGF0aW9uLCBhIGxlZ2FjeSBpbnRlcnJ1cHQtZHJpdmVuIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbm92ZWwuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBhY2tldCBkZXNjcmlwdG9ycywgRE1BIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlIGFyZSBnb2luZyB0byBiZSBzb21lIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG51YW5jZXMgYW5kIGl0IGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQwLjMzMTI5Mzc3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFpcm9oYV9ldGguY1wiLFxuICAgIFwiYWlyb2hhX2V0aC5oXCIsXG4gICAgXCJhaXJvaGFfbnB1LmNcIixcbiAgICBcImFpcm9oYV9wcGUuY1wiLFxuICAgIFwiYWlyb2hhX3BwZV9kZWJ1Z2ZzLmNcIixcbiAgICBcImFpcm9oYV9yZWdzLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDc6NDAuMzMxMzc5MDg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNzcxNzg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRmluZGluZyB0aGUgS2NvbmZpZyBmb3IgQWlyb2hhIEV0aGVybmV0KipcblxuSG1tLCB3aGVyZSBkaWQgSSBwdXQgdGhhdCBLY29uZmlnPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBmb3IgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgYGFpcm9oYV9ldGhgIHdpdGhpbiB0aGUgc3RhbmRhcmQgbG9jYXRpb25zLCB0aGUgb2J2aW91cyBzcG90cyAtIGZpcnN0LCBsZXQncyBsb29rIGluIHRoZSBtYWluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnYCBmaWxlLiBJZiBpdCdzIG5vdCB0aGVyZSwgSSdsbCBleHBhbmQgdGhlIHNlYXJjaCwgYW5kIHRyeSB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLCB3aGljaCB3b3VsZCBiZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIFRoYXQgc2hvdWxkIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQ0LjY0OTEwMzkzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1MzM2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0yMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZzoyMzpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMjQtc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hbGFjcml0ZWNoL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQ0LjgwMDY0OTY0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDM0NzIzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgS2NvbmZpZyBTZWFyY2gqKlxuXG5Pa2F5LCBzbyB0aGUgZ3JlcCBkaWRuJ3QgdHVybiB1cCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgaXQgKnNob3VsZCogZXhpc3QuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgaXQgbWFudWFsbHkuIEkgbmVlZCB0byBnZXQgbXkgZXllcyBvbiB0aGF0IEtjb25maWcgZmlsZS4gTGV0J3Mgc2VlIGlmIHNvbWV0aGluZyBpcyBvZmYgd2l0aCB0aGUgc2VhcmNoIHBhdGggb3IgaWYgSSBzaW1wbHkgbWlzcmVtZW1iZXJlZCB0aGUgbW9kdWxlIHBhdGguIE5vIHRpbWUgdG8gZGl0aGVyLCBsZXQgbWUgZ2V0IHRoYXQgZmlsZSBvcGVuIGFuZCByZWFkIGl0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uIFNvbWV0aGluZyBpcyBub3QgcXVpdGUgcmlnaHQgaGVyZSwgYW5kIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowNzo0OS4zNDQxMzA4OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICAzOlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRpZiBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgTkVUX0FJUk9IQV9OUFVcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gIDEzOlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXFxuICAxNjpcXHRcXHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9BSVJPSEFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcbiAgMjE6XFx0XFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXFxuICAyNTpcXHRcXHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVUX0FJUk9IQV9GTE9XX1NUQVRTXFxuICAyODpcXHRcXHRkZWZhdWx0IHlcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBmbG93IHN0YXRzXFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFxcdTAwMjZcXHUwMDI2IE5FVF9BSVJPSEFfTlBVXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA3OjQ5LjM0NDIyMzMwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUzNzMwOTkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBHaWdhYml0IEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQWlyb2hhIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyLiBUaGUgZGVzY3JpcHRpb24gY2xlYXJseSBzdGF0ZXMgaXQncyBzcGVjaWZpY2FsbHkgYnVpbHQgZm9yIHRoZSBBaXJvaGEgU29DLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBoYXJkd2FyZS1kZXBlbmRlbnQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzIGFyZSBnb2luZyB0byBiZSB0cmlja3kgdG8gd29yayB3aXRoIGluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3Igc3BlY2lmaWNhbGx5IGZvciB0aGUgQWlyb2hhIFNvQyBvciBzb21lIGtpbmQgb2Ygc29mdHdhcmUgYnVzIHRoYXQgY2FuIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgSSdtIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBnZXQgdGhpcyB0byBwcm9iZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgbWFjaGluZS4gVGhlIGZhY3QgdGhhdCBpdCB1c2VzIE1NSU8gZnVydGhlciBjb25maXJtcyBpdHMgY2xvc2UgdGllcyB0byB0aGUgdW5kZXJseWluZyBTb0MgaGFyZHdhcmUuIFRoZSBjb2RlJ3MgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYWxzbyBzdWdnZXN0cyB0aGF0IGl0IGNhbiBiZSBlbmFibGVkIHdoZW4gYSByZWxldmFudCBwbGF0Zm9ybSBpcyBhY3RpdmUgb3IgdGVzdCBtb2RlIGlzIGVuYWJsZWQ6IGBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RgLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIGlmIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoYXQgd291bGQgcHJvdmlkZSBzb21lIGNvbnRleHQgZm9yIGhvdyB0aGUga2VybmVsIGlzIGRldGVjdGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGludGVuZGVkIHRvIGludGVncmF0ZSB3aXRoIHRoZSBzeXN0ZW0gYW5kIGlmIGl0IHJlbGllcyBvbiBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgZmVhdHVyZXMgb3IgcHJvYmluZyBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDg6MTQuODgxNTM2NzU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5Njg3MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowODoxNC45OTY1MjgxMTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU4MzE5Mjk3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0aGUgc2FtZTogKndoYXQqIGFtIEkgZGVhbGluZyB3aXRoPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJcyBpdCBhIHNwZWNpZmljIGRldmljZSwgYSBnZW5lcmljIGNsYXNzLCBvciBhIHZpcnR1YWwgZHJpdmVyPyBUaGUgZGV0YWlscyB3aWxsIGluZmx1ZW5jZSB0aGUgZGlhZ25vc3RpYyBwYXRoLiBLbm93aW5nIHRoZSBkcml2ZXIncyB0eXBlIHF1aWNrbHkgbmFycm93cyB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYW5kIGF2YWlsYWJsZSB0cm91Ymxlc2hvb3RpbmcgdG9vbHMuIFRoaXMgYmFzaWMgY2xhc3NpZmljYXRpb24gaXMgYWJzb2x1dGVseSBjcml0aWNhbCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbG9ncyBvciBydW5uaW5nIHRlc3RzLiBUaGUgdHlwZSBvZiBkcml2ZXIgZGljdGF0ZXMgdGhlIGFwcHJvYWNoLCBzbyBJIG5lZWQgdG8gZXN0YWJsaXNoIGEgYmFzZSBjYXNlIGZvciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowODozMC44Mjg0NjMwNTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDIyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4OTk9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwNi19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MzkwNzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODEzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyMTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDg6MzAuOTIwNDkzNTQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjU5MDExMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyBhIHBsYXRmb3JtIGRyaXZlci4gUGxhdGZvcm0gZHJpdmVycywgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBrZXJuZWwgY29kZSwgcmVseSBvbiBkZXZpY2UgaW5mb3JtYXRpb24gZWl0aGVyIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlIG9yIHRocm91Z2ggQUNQSS4gTm93LCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgd2hpY2ggYXJlIGdlbmVyaWMgVk1zLCB3ZSBkb24ndCBoYXZlIHRob3NlIEFpcm9oYSBTb0MgZGV2aWNlIHRyZWUgbm9kZXMgZGVmaW5lZC4gQmVjYXVzZSBvZiB0aGlzLCB0aGlzIHNwZWNpZmljIGRyaXZlciB3aWxsIG5ldmVyIGFjdHVhbGx5IHByb2JlLCBtZWFuaW5nIHRoZSBjb3JlIGxvZ2ljIHdpbGwganVzdCBzaXQgdGhlcmUsIHVudG91Y2hlZC5cblxuVGhpcyBtZWFucyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuIEkgbmVlZGVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2gsIHNvIEkgd2VudCB0aHJvdWdoIGl0IGFsbCBhZ2Fpbi5cblxuSSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoZXJlIHdhc24ndCBzb21lIGtpbmQgb2YgYmFja2Rvb3IgZW50cnkgcG9pbnQsIGxpa2UgbmV0bGluayBmb3IgZXhhbXBsZSwgdG8gcmVhY2ggdGhhdCBgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YmAgZnVuY3Rpb24uIFR1cm5zIG91dCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggYG5kb19zZXR1cF90Y2AuIEJ1dCB0byBldmVuIGNhbGwgYG5kb19zZXR1cF90Y2AsIHdlJ2QgbmVlZCBhIGBuZXRfZGV2aWNlYCByZWdpc3RlcmVkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBBbmQgdG8gcmVnaXN0ZXIgdGhhdCBgbmV0X2RldmljZWAsIHRoZSBkcml2ZXIgaGFzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gUHJvYmluZywgaG93ZXZlciwgcmVxdWlyZXMgdGhhdCB0aGUgZHJpdmVyIGZpbmQgYSBwbGF0Zm9ybSBkZXZpY2UgbWF0Y2hpbmcgaXRzIGBvZl9tYXRjaF90YWJsZWAuIFNpbmNlIHdlIGRvbid0IGhhdmUgdGhlIGFjdHVhbCBBaXJvaGEgaGFyZHdhcmUsIG9yIGEgcHJlY2lzZSBlbXVsYXRvciBvZiB0aGF0IGhhcmR3YXJlLCB0aGUgcGxhdGZvcm0gZGV2aWNlIHdpbGwgbmV2ZXIgZXhpc3QsIHNvIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgZGVmaW5pdGl2ZWx5IHVucmVhY2hhYmxlIGluIG91ciB0ZXN0aW5nIHNldHVwLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAgYW5kIGp1c3RpZnkgaXQgd2l0aCB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MDIsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA4OjM4LjY4NjM5ODM2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIFNvQyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRvIHByb2JlLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSwgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChpbmNsdWRpbmcgdGhlIG5ldF9kZXZpY2Ugb3BlcmF0aW9ucyBhbmQgVEMgb2ZmbG9hZCBjYWxsYmFja3MpIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsxg5c[1] Phase: Running StartedAt: 2026-06-29 17:09:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsxg5c[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-29 17:09:07 +0000 UTC FinishedAt: 2026-06-29 17:09:13 +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,}