Name: series-workflowjw79w Phase: Failed StartedAt: 2026-07-01 16:27:09 +0000 UTC FinishedAt: 2026-07-01 16:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw79w[0] Phase: Succeeded StartedAt: 2026-07-01 16:27:09 +0000 UTC FinishedAt: 2026-07-01 16:44:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw79w[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 16:27:09 +0000 UTC FinishedAt: 2026-07-01 16:44:21 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQ1hMIHN1cHBvcnQgdG8gdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgbmV0d29yayBkcml2ZXIgKHNmYykgYW5kIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIENYTCBjb3JlIGZvciBpdC4gVGhlIHNmYyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU29sYXJmbGFyZSBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIFFFTVUgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYWExNDE2ZDk0ODBlMTQyNWU0ODdjYTMwZjViMjk2Mzc0YTFkNjI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNjo0Mjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXG5pbmRleCAwNzU1NWFlNjM4NTk0MC4uZjdjZWJiMDI2NTUyMzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9jb3JlLmhcbkBAIC0xMDEsNiAmIzQzOzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkcixcbiBzdHJ1Y3QgZGVudHJ5ICpjeGxfZGVidWdmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKmRpcik7XG4gaW50IGN4bF9kcGFfc2V0X3BhcnQoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCxcbiBcdFx0ICAgICBlbnVtIGN4bF9wYXJ0aXRpb25fbW9kZSBtb2RlKTtcbiYjNDM7c3RydWN0IGN4bF9tZW1kZXZfc3RhdGU7XG4mIzQzO2ludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKTtcbiBpbnQgY3hsX2RwYV9hbGxvYyhzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkLCB1NjQgc2l6ZSk7XG4gaW50IGN4bF9kcGFfZnJlZShzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkKTtcbiByZXNvdXJjZV9zaXplX3QgY3hsX2RwYV9zaXplKHN0cnVjdCBjeGxfZW5kcG9pbnRfZGVjb2RlciAqY3hsZWQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jIGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcbmluZGV4IDdjNmM1Yjc0NTBhNTRhLi45N2IxZTYxYWQwMTg3NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL21ib3guY1xuQEAgLTExNTIsNyAmIzQzOzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcJiMzNDtDWExcJiMzNDspO1xuICAqXG4gICogU2VlIENYTCBAOC4yLjkuNS4yLjEgR2V0IFBhcnRpdGlvbiBJbmZvXG4gICovXG4tc3RhdGljIGludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKVxuJiM0MztpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbiB7XG4gXHRzdHJ1Y3QgY3hsX21haWxib3ggKmN4bF9tYm94ID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzLmN4bF9tYm94O1xuIFx0c3RydWN0IGN4bF9tYm94X2dldF9wYXJ0aXRpb25faW5mbyBwaTtcbkBAIC0xMzA4LDU1ICYjNDM7MTMwOCw2IEBAIGludCBjeGxfbWVtX3Nhbml0aXplKHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZCwgdTE2IGNtZClcbiBcdHJldHVybiAtRUJVU1k7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXG4te1xuLVx0aW50IGkgPSBpbmZvLVx1MDAzZW5yX3BhcnRpdGlvbnM7XG4tXG4tXHRpZiAoc2l6ZSA9PSAwKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpbmZvLVx1MDAzZXBhcnRbaV0ucmFuZ2UgPSAoc3RydWN0IHJhbmdlKSB7XG4tXHRcdC5zdGFydCA9IHN0YXJ0LFxuLVx0XHQuZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZSAtIDEsXG4tXHR9O1xuLVx0aW5mby1cdTAwM2VwYXJ0W2ldLm1vZGUgPSBtb2RlO1xuLVx0aW5mby1cdTAwM2Vucl9wYXJ0aXRpb25zJiM0MzsmIzQzOztcbi19XG4tXG4taW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXG4te1xuLVx0c3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzO1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gY3hsZHMtXHUwMDNlZGV2O1xuLVx0aW50IHJjO1xuLVxuLVx0aWYgKCFjeGxkcy1cdTAwM2VtZWRpYV9yZWFkeSkge1xuLVx0XHRpbmZvLVx1MDAzZXNpemUgPSAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdGluZm8tXHUwMDNlc2l6ZSA9IG1kcy1cdTAwM2V0b3RhbF9ieXRlcztcbi1cbi1cdGlmIChtZHMtXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcbi1cdFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVx1MDAzZXZvbGF0aWxlX29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuLVx0XHRhZGRfcGFydChpbmZvLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcyxcbi1cdFx0XHQgbWRzLVx1MDAzZXBlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcbi1cdGlmIChyYykge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IHBhcnRpdGlvbiBpbmZvcm1hdGlvblxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiByYztcbi1cdH1cbi1cbi1cdGFkZF9wYXJ0KGluZm8sIDAsIG1kcy1cdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuLVx0YWRkX3BhcnQoaW5mbywgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVx1MDAzZWFjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLFxuLVx0XHQgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLUVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcJiMzNDtDWExcJiMzNDspO1xuLVxuIGludCBjeGxfZ2V0X2RpcnR5X2NvdW50KHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHUzMiAqY291bnQpXG4ge1xuIFx0c3RydWN0IGN4bF9tYWlsYm94ICpjeGxfbWJveCA9IFx1MDAyNm1kcy1cdTAwM2VjeGxkcy5jeGxfbWJveDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jIGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xuaW5kZXggMzNhM2QyZTdiMTNhZjkuLjJlNDU3YjFlYmM3ZGZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xuQEAgLTU5NCw2ICYjNDM7NTk0LDczIEBAIGJvb2wgaXNfY3hsX21lbWRldihjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsIFwmIzM0O0NYTFwmIzM0Oyk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSA9IGluZm8tXHUwMDNlbnJfcGFydGl0aW9ucztcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VwYXJ0W2ldLnJhbmdlID0gKHN0cnVjdCByYW5nZSkge1xuJiM0MztcdFx0LnN0YXJ0ID0gc3RhcnQsXG4mIzQzO1x0XHQuZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZSAtIDEsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbmZvLVx1MDAzZXBhcnRbaV0ubW9kZSA9IG1vZGU7XG4mIzQzO1x0aW5mby1cdTAwM2Vucl9wYXJ0aXRpb25zJiM0MzsmIzQzOztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMgPSBcdTAwMjZtZHMtXHUwMDNlY3hsZHM7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY3hsZHMtXHUwMDNlZGV2O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKCFjeGxkcy1cdTAwM2VtZWRpYV9yZWFkeSkge1xuJiM0MztcdFx0aW5mby1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VzaXplID0gbWRzLVx1MDAzZXRvdGFsX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRpZiAobWRzLVx1MDAzZXBhcnRpdGlvbl9hbGlnbl9ieXRlcyA9PSAwKSB7XG4mIzQzO1x0XHRhZGRfcGFydChpbmZvLCAwLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7XG4mIzQzO1x0XHRhZGRfcGFydChpbmZvLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcyxcbiYjNDM7XHRcdFx0IG1kcy1cdTAwM2VwZXJzaXN0ZW50X29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9QTUVNKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhtZHMpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7XG4mIzQzO1x0YWRkX3BhcnQoaW5mbywgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVx1MDAzZWFjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLFxuJiM0MztcdFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9kcGFfZmV0Y2gsIFwmIzM0O0NYTFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxuJiM0MzsgKlxuJiM0MzsgKiBAY3hsZHM6IHBvaW50ZXIgdG8gY3hsX2Rldl9zdGF0ZVxuJiM0MzsgKiBAY2FwYWNpdHk6IGRldmljZSB2b2xhdGlsZSBtZW1vcnkgc2l6ZVxuJiM0MzsgKi9cbiYjNDM7aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY3hsX2RwYV9pbmZvIHJhbmdlX2luZm8gPSB7XG4mIzQzO1x0XHQuc2l6ZSA9IGNhcGFjaXR5LFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGFkZF9wYXJ0KFx1MDAyNnJhbmdlX2luZm8sIDAsIGNhcGFjaXR5LCBDWExfUEFSVE1PREVfUkFNKTtcbiYjNDM7XHRyZXR1cm4gY3hsX2RwYV9zZXR1cChjeGxkcywgXHUwMDI2cmFuZ2VfaW5mbyk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbiYjNDM7XG4gLyoqXG4gICogc2V0X2V4Y2x1c2l2ZV9jeGxfY29tbWFuZHMoKSAtIGF0b21pY2FsbHkgZGlzYWJsZSB1c2VyIGN4bCBjb21tYW5kc1xuICAqIEBtZHM6IFRoZSBkZXZpY2Ugc3RhdGUgdG8gb3BlcmF0ZSBvblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5pbmRleCBlNDMzOGZkN2UwMWI0Ny4uOWQ4MDdjMWEwMDJjYTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLWRvZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N4bC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hscGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxtZW0uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jIGIvZHJpdmVycy9jeGwvY29yZS9wb3J0LmNcbmluZGV4IDEyMTVlZTRmNDAzNTFiLi5jYjYzM2UxOTE1MWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGwvZWluai5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N4bC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hscGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGwuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jIGIvZHJpdmVycy9jeGwvY29yZS9yZWdzLmNcbmluZGV4IDkzNzEwY2Y0ZjBhNjk3Li4yMGMyZDlmYmNmZTdkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xuQEAgLTQsNiAmIzQzOzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxwY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3BtdS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY3hscGNpLmggYi9kcml2ZXJzL2N4bC9jeGxwY2kuaFxuaW5kZXggYjgyNmViNTNjZjdiYWMuLjExMGVjOWM0NGYwOWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY3hscGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oXG5AQCAtMTMsMTYgJiM0MzsxMyw2IEBAXG4gICovXG4gI2RlZmluZSBDWExfUENJX0RFRkFVTFRfTUFYX1ZFQ1RPUlMgMTZcbiBcbi0vKiBSZWdpc3RlciBCbG9jayBJZGVudGlmaWVyIChSQkkpICovXG4tZW51bSBjeGxfcmVnbG9jX3R5cGUge1xuLVx0Q1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLFxuLVx0Q1hMX1JFR0xPQ19SQklfQ09NUE9ORU5ULFxuLVx0Q1hMX1JFR0xPQ19SQklfVklSVCxcbi1cdENYTF9SRUdMT0NfUkJJX01FTURFVixcbi1cdENYTF9SRUdMT0NfUkJJX1BNVSxcbi1cdENYTF9SRUdMT0NfUkJJX1RZUEVTXG4tfTtcbi1cbiAvKlxuICAqIFRhYmxlIEFjY2VzcyBET0UsIENEQVQgUmVhZCBFbnRyeSBSZXNwb25zZVxuICAqXG5AQCAtMTEyLDYgJiM0MzsxMDIsNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9jeGxfcG9ydF9yYXNfc2V0dXAoc3RydWN0IGN4bF9wb3J0ICpwb3J0KVxuIH1cbiAjZW5kaWZcbiBcbi1pbnQgY3hsX3BjaV9zZXR1cF9yZWdzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIGN4bF9yZWdsb2NfdHlwZSB0eXBlLFxuLVx0XHQgICAgICAgc3RydWN0IGN4bF9yZWdpc3Rlcl9tYXAgKm1hcCk7XG4gI2VuZGlmIC8qIF9fQ1hMX1BDSV9IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9wY2kuYyBiL2RyaXZlcnMvY3hsL3BjaS5jXG5pbmRleCAyNjdjNjc5YjBiM2MyMC4uYmI4OTJkYmZkZDZkNmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvcGNpLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N4bC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bC9tYWlsYm94LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtjeGxtZW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2N4bHBjaS5oXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xuaW5kZXggYzRjNDM0MzRmMzE0MzQuLjk3OWYyODAxZTJhOGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnXG5AQCAtNjYsNiAmIzQzOzY2LDE1IEBAIGNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXG4gXHQgIERyaXZlci1JbnRlcmZhY2UpIGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFsbG93aW5nIGRlYnVnZ2luZyBvZlxuIFx0ICBkcml2ZXIvZmlybXdhcmUgaW50ZXJhY3Rpb24uICBUaGUgdHJhY2luZyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5XG4gXHQgIGEgc3lzZnMgZmlsZSAmIzM5O21jZGlfbG9nZ2luZyYjMzk7IHVuZGVyIHRoZSBQQ0kgZGV2aWNlLlxuJiM0Mztjb25maWcgU0ZDX0NYTFxuJiM0MztcdGJvb2wgXCYjMzQ7U29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBDWEwgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBDWExfQlVTIFx1MDAzZT0gU0ZDXG4mIzQzO1x0ZGVmYXVsdCBTRkNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgU0ZDIENYTCBzdXBwb3J0IGlmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJpbmcgQ1hMIGZvclxuJiM0MztcdCAgdXNpbmcgQ1RQSU8gd2l0aCBDWEwubWVtLiBUaGUgU0ZDIGRldmljZSB3aXRoIENYTCBzdXBwb3J0IGFuZFxuJiM0MztcdCAgd2l0aCBhIENYTC1hd2FyZSBmaXJtd2FyZSBjYW4gYmUgdXNlZCBmb3IgbWluaW1pemluZyBsYXRlbmNpZXNcbiYjNDM7XHQgIHdoZW4gc2VuZGluZyB0aHJvdWdoIENUUElPLlxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL0tjb25maWdcJiMzNDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGVcbmluZGV4IGQ5OTAzOWVjNDY4ZDY3Li5iYjBmMTg5MWNkZTY1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlXG5AQCAtMTMsNiAmIzQzOzEzLDcgQEAgc2ZjLSQoQ09ORklHX1NGQ19TUklPVilcdCYjNDM7PSBzcmlvdi5vIGVmMTBfc3Jpb3YubyBlZjEwMF9zcmlvdi5vIGVmMTAwX3JlcC5vIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFlLm8gdGMubyB0Y19iaW5kaW5ncy5vIHRjX2NvdW50ZXJzLm8gXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y19lbmNhcF9hY3Rpb25zLm8gdGNfY29ubnRyYWNrLm9cbiBcbiYjNDM7c2ZjLSQoQ09ORklHX1NGQ19DWEwpXHQmIzQzOz0gZWZ4X2N4bC5vXG4gb2JqLSQoQ09ORklHX1NGQylcdCYjNDM7PSBzZmMub1xuIFxuIG9iai0kKENPTkZJR19TRkNfRkFMQ09OKSAmIzQzOz0gZmFsY29uL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jXG5pbmRleCA3ZTA0ZjExNWJiYWFhZi4uNzNiYzA2NDkyOWY2MzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC91ZHBfdHVubmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZWZ4X2N4bC5oXCYjMzQ7XG4gXG4gLyogSGFyZHdhcmUgY29udHJvbCBmb3IgRUYxMCBhcmNoaXRlY3R1cmUgaW5jbHVkaW5nICYjMzk7SHVudGluZ3RvbiYjMzk7LiAqL1xuIFxuQEAgLTEwNiw3ICYjNDM7MTA3LDcgQEAgc3RhdGljIGludCBlZnhfZWYxMF9nZXRfdmZfaW5kZXgoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcbiBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIHtcbi1cdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WNF9PVVRfTEVOKTtcbiYjNDM7XHRNQ0RJX0RFQ0xBUkVfQlVGKG91dGJ1ZiwgTUNfQ01EX0dFVF9DQVBBQklMSVRJRVNfVjdfT1VUX0xFTik7XG4gXHRzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LVx1MDAzZW5pY19kYXRhO1xuIFx0c2l6ZV90IG91dGxlbjtcbiBcdGludCByYztcbkBAIC0xNzcsNiAmIzQzOzE3OCwxMiBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0XHRcdCAgZWZ4LVx1MDAzZW51bV9tYWNfc3RhdHMpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChvdXRsZW4gXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pXG4mIzQzO1x0XHRuaWNfZGF0YS1cdTAwM2VkYXRhcGF0aF9jYXBzMyA9IDA7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgPSBNQ0RJX0RXT1JEKG91dGJ1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgR0VUX0NBUEFCSUxJVElFU19WN19PVVRfRkxBR1MzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTE0MCw2ICYjNDM7MTE0Nyw5IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0dW5zaWduZWQgaW50IGNoYW5uZWxfdmlzLCBwaW9fd3JpdGVfdmlfYmFzZSwgbWF4X3ZpcztcbiBcdHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtXHUwMDNlbmljX2RhdGE7XG4gXHR1bnNpZ25lZCBpbnQgdWNfbWVtX21hcF9zaXplLCB3Y19tZW1fbWFwX3NpemU7XG4mIzQzOyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuJiM0MztcdHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YTtcbiYjNDM7I2VuZGlmXG4gXHR2b2lkIF9faW9tZW0gKm1lbWJhc2U7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMTI2Myw4ICYjNDM7MTI3MywyMyBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2RpbWVuc2lvbl9yZXNvdXJjZXMoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcdGlvdW5tYXAoZWZ4LVx1MDAzZW1lbWJhc2UpO1xuIFx0ZWZ4LVx1MDAzZW1lbWJhc2UgPSBtZW1iYXNlO1xuIFxuLVx0LyogU2V0IHVwIHRoZSBXQyBtYXBwaW5nIGlmIG5lZWRlZCAqL1xuLVx0aWYgKHdjX21lbV9tYXBfc2l6ZSkge1xuJiM0MztcdGlmICghd2NfbWVtX21hcF9zaXplKVxuJiM0MztcdFx0Z290byBza2lwX3BpbztcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHVwIHRoZSBXQyBtYXBwaW5nICovXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NGQ19DWExcbiYjNDM7XHRwcm9iZV9kYXRhID0gY29udGFpbmVyX29mKGVmeCwgc3RydWN0IGVmeF9wcm9iZV9kYXRhLCBlZngpO1xuJiM0MztcdGlmICgobmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgXHUwMDI2XG4mIzQzO1x0ICAgICgxIFx1MDAzY1x1MDAzYyBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfQ1hMX0NPTkZJR19FTkFCTEVfTEJOKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHByb2JlX2RhdGEtXHUwMDNlY3hsX3Bpb19pbml0aWFsaXNlZCkge1xuJiM0MztcdFx0LyogVXNpbmcgUElPIHRocm91Z2ggQ1hMIG1hcHBpbmcgKi9cbiYjNDM7XHRcdG5pY19kYXRhLVx1MDAzZXBpb193cml0ZV9iYXNlID0gcHJvYmVfZGF0YS1cdTAwM2VjeGwtXHUwMDNlY3RwaW9fY3hsO1xuJiM0MztcdFx0bmljX2RhdGEtXHUwMDNlcGlvX3dyaXRlX3ZpX2Jhc2UgPSBwaW9fd3JpdGVfdmlfYmFzZTtcbiYjNDM7XHR9IGVsc2VcbiYjNDM7I2VuZGlmXG4mIzQzO1x0e1xuJiM0MztcdFx0LyogVXNpbmcgbGVnYWN5IFBJTyBCQVIgbWFwcGluZyAqL1xuIFx0XHRuaWNfZGF0YS1cdTAwM2V3Y19tZW1iYXNlID0gaW9yZW1hcF93YyhlZngtXHUwMDNlbWVtYmFzZV9waHlzICYjNDM7XG4gXHRcdFx0XHRcdFx0ICB1Y19tZW1fbWFwX3NpemUsXG4gXHRcdFx0XHRcdFx0ICB3Y19tZW1fbWFwX3NpemUpO1xuQEAgLTEyNzksMTIgJiM0MzsxMzA0LDE0IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0XHRcdG5pY19kYXRhLVx1MDAzZXdjX21lbWJhc2UgJiM0MztcbiBcdFx0XHQocGlvX3dyaXRlX3ZpX2Jhc2UgKiBlZngtXHUwMDNldmlfc3RyaWRlICYjNDM7IEVSX0RaX1RYX1BJT0JVRiAtXG4gXHRcdFx0IHVjX21lbV9tYXBfc2l6ZSk7XG4tXG4tXHRcdHJjID0gZWZ4X2VmMTBfbGlua19waW9idWZzKGVmeCk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRlZnhfZWYxMF9mcmVlX3Bpb2J1ZnMoZWZ4KTtcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IGVmeF9lZjEwX2xpbmtfcGlvYnVmcyhlZngpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGVmeF9lZjEwX2ZyZWVfcGlvYnVmcyhlZngpO1xuJiM0MztcbiYjNDM7c2tpcF9waW86XG4mIzQzO1xuIFx0bmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC1cdTAwM2VuZXRfZGV2LFxuIFx0XHQgIFwmIzM0O21lbW9yeSBCQVIgYXQgJXBhICh2aXJ0dWFsICVwJiM0MzsleCBVQywgJXAmIzQzOyV4IFdDKVxcblwmIzM0OyxcbiBcdFx0ICBcdTAwMjZlZngtXHUwMDNlbWVtYmFzZV9waHlzLCBlZngtXHUwMDNlbWVtYmFzZSwgdWNfbWVtX21hcF9zaXplLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xuaW5kZXggOGYxMzZhMTFkMzk2OGEuLjM4MDZjZDNkZDdmNDg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmNcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzcmlvdi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZWZ4X2RldmxpbmsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlZnhfY3hsLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDttY2RpX3BvcnRfY29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttY2RpX3Bjb2wuaFwmIzM0O1xuQEAgLTk4MSwxMiAmIzQzOzk4MiwxNSBAQCBzdGF0aWMgdm9pZCBlZnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldilcbiBcdGVmeF9wY2lfcmVtb3ZlX21haW4oZWZ4KTtcbiBcbiBcdGVmeF9maW5pX2lvKGVmeCk7XG4mIzQzO1xuJiM0MztcdHByb2JlX2RhdGEgPSBjb250YWluZXJfb2YoZWZ4LCBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEsIGVmeCk7XG4mIzQzO1x0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xuJiM0MztcbiBcdHBjaV9kYmcoZWZ4LVx1MDAzZXBjaV9kZXYsIFwmIzM0O3NodXRkb3duIHN1Y2Nlc3NmdWxcXG5cJiMzNDspO1xuIFxuIFx0ZWZ4X2ZpbmlfZGV2bGlua19hbmRfdW5sb2NrKGVmeCk7XG4gXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcbiBcdGZyZWVfbmV0ZGV2KGVmeC1cdTAwM2VuZXRfZGV2KTtcbi1cdHByb2JlX2RhdGEgPSBjb250YWluZXJfb2YoZWZ4LCBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEsIGVmeCk7XG4gXHRrZnJlZShwcm9iZV9kYXRhKTtcbiB9O1xuIFxuQEAgLTExOTAsNiAmIzQzOzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGZhaWwyO1xuIFxuJiM0MztcdC8qIEEgc3VjY2Vzc2Z1bCBjeGwgaW5pdGlhbGl6YXRpb24gaW1wbGllcyBhIENYTCByZWdpb24gY3JlYXRlZCB0byBiZVxuJiM0MztcdCAqIHVzZWQgZm9yIFBJTyBidWZmZXJzLiBJZiB0aGVyZSBpcyBubyBDWEwgc3VwcG9ydCBsZWdhY3kgUElPIGJ1ZmZlcnNcbiYjNDM7XHQgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTFxuJiM0MztcdCAqIHN1cHBvcnQgYW5kIHRoZSBjeGwgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O0NYTCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxcblwmIzM0OywgcmMpO1xuJiM0MztcdFx0Z290byBmYWlsMztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcbiBcdGlmIChyYykge1xuIFx0XHQvKiBPbiBmYWlsdXJlLCByZXRyeSBvbmNlIGltbWVkaWF0ZWx5LlxuQEAgLTEyMjgsNiAmIzQzOzEyNDMsNyBAQCBzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsXG4gXHRyZXR1cm4gMDtcbiBcbiAgZmFpbDM6XG4mIzQzO1x0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xuIFx0ZWZ4X2ZpbmlfaW8oZWZ4KTtcbiAgZmFpbDI6XG4gXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xuQEAgLTAsMCAmIzQzOzEsMTA1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVyIGZvciBBTUQgbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NjeGwvY3hsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O25ldF9kcml2ZXIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlZnhfY3hsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUZYX0NUUElPX0JVRkZFUl9TSVpFXHRTWl8yNTZNXG4mIzQzO1xuJiM0MztpbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZnhfbmljICplZnggPSBcdTAwMjZwcm9iZV9kYXRhLVx1MDAzZWVmeDtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGVmeC1cdTAwM2VwY2lfZGV2O1xuJiM0MztcdHN0cnVjdCByYW5nZSBjeGxfcGlvX3JhbmdlO1xuJiM0MztcdHN0cnVjdCBlZnhfY3hsICpjeGw7XG4mIzQzO1x0dTE2IGR2c2VjO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogSXMgdGhlIGRldmljZSBjb25maWd1cmVkIHdpdGggYW5kIHVzaW5nIENYTD8gKi9cbiYjNDM7XHRpZiAoIXBjaWVfaXNfY3hsKHBjaV9kZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGR2c2VjID0gcGNpX2ZpbmRfZHZzZWNfY2FwYWJpbGl0eShwY2lfZGV2LCBQQ0lfVkVORE9SX0lEX0NYTCxcbiYjNDM7XHRcdFx0XHRcdCAgUENJX0RWU0VDX0NYTF9ERVZJQ0UpO1xuJiM0MztcdGlmICghZHZzZWMpIHtcbiYjNDM7XHRcdHBjaV9pbmZvKHBjaV9kZXYsIFwmIzM0O0NYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9kYmcocGNpX2RldiwgXCYjMzQ7Q1hMX0RWU0VDX1BDSUVfREVWSUNFIGNhcGFiaWxpdHkgZm91bmRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgYSBjeGxfZGV2X3N0YXRlIGVtYmVkZGVkIGluIHRoZSBjeGwgc3RydWN0IHVzaW5nIGN4bCBjb3JlIGFwaVxuJiM0MztcdCAqIHNwZWNpZnlpbmcgbm8gbWJveCBhdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3hsID0gZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShcdTAwMjZwY2lfZGV2LVx1MDAzZWRldiwgQ1hMX0RFVlRZUEVfREVWTUVNLFxuJiM0MztcdFx0XHRcdFx0cGNpX2dldF9kc24ocGNpX2RldiksIGR2c2VjLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGVmeF9jeGwsIGN4bGRzLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGlmICghY3hsKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJjID0gY3hsX3BjaV9zZXR1cF9yZWdzKHBjaV9kZXYsIENYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZjeGwtXHUwMDNlY3hsZHMucmVnX21hcCk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O05vIGNvbXBvbmVudCByZWdpc3RlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjeGwtXHUwMDNlY3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLmhkbV9kZWNvZGVyLnZhbGlkKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O0V4cGVjdGVkIEhETSBjb21wb25lbnQgcmVnaXN0ZXIgbm90IGZvdW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjeGwtXHUwMDNlY3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLnJhcy52YWxpZCkge1xuJiM0MztcdFx0cGNpX2VycihwY2lfZGV2LCBcJiMzNDtFeHBlY3RlZCBSQVMgY29tcG9uZW50IHJlZ2lzdGVyIG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNldCBtZWRpYSByZWFkeSBleHBsaWNpdGx5IGFzIHRoZXJlIGFyZSBuZWl0aGVyIG1haWxib3ggZm9yIGNoZWNraW5nXG4mIzQzO1x0ICogdGhpcyBzdGF0ZSBub3IgdGhlIENYTCByZWdpc3RlciBpbnZvbHZlZCwgYm90aCBub3QgbWFuZGF0b3J5IGZvclxuJiM0MztcdCAqIHR5cGUyLlxuJiM0MztcdCAqL1xuJiM0MztcdGN4bC1cdTAwM2VjeGxkcy5tZWRpYV9yZWFkeSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChjeGxfc2V0X2NhcGFjaXR5KFx1MDAyNmN4bC1cdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xuJiM0MztcdFx0cGNpX2VycihwY2lfZGV2LCBcJiMzNDtkcGEgY2FwYWNpdHkgc2V0dXAgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3hsLVx1MDAzZWN4bG1kID0gZGV2bV9jeGxfcHJvYmVfbWVtKFx1MDAyNmN4bC1cdTAwM2VjeGxkcywgXHUwMDI2Y3hsX3Bpb19yYW5nZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjeGwtXHUwMDNlY3hsbWQpKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O0NYTCBhY2NlbCBtZW1kZXYgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGN4bC1cdTAwM2VjeGxtZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjeGwtXHUwMDNlY3RwaW9fY3hsID0gaW9yZW1hcF93YyhjeGxfcGlvX3JhbmdlLnN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgICByYW5nZV9sZW4oXHUwMDI2Y3hsX3Bpb19yYW5nZSkpO1xuJiM0MztcdGlmICghY3hsLVx1MDAzZWN0cGlvX2N4bCkge1xuJiM0MztcdFx0cGNpX2VycihwY2lfZGV2LCBcJiMzNDtDWEwgaW9yZW1hcCByZWdpb24gKCVwcmEpIGZhaWxlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHUwMDI2Y3hsX3Bpb19yYW5nZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByb2JlX2RhdGEtXHUwMDNlY3hsX3Bpb19pbml0aWFsaXNlZCA9IHRydWU7XG4mIzQzO1x0cHJvYmVfZGF0YS1cdTAwM2VjeGwgPSBjeGw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByb2JlX2RhdGEtXHUwMDNlY3hsKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpb3VubWFwKHByb2JlX2RhdGEtXHUwMDNlY3hsLVx1MDAzZWN0cGlvX2N4bCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7Q1hMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZTI3MDVjYjA2M2Y2YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaFxuQEAgLTAsMCAmIzQzOzEsMzIgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuJiM0MzsgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHNcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4mIzQzOyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZFxuJiM0MzsgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEVGWF9DWExfSFxuJiM0MzsjZGVmaW5lIEVGWF9DWExfSFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NjeGwvY3hsLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBlZnhfcHJvYmVfZGF0YTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBlZnhfY3hsIHtcbiYjNDM7XHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSBjeGxkcztcbiYjNDM7XHRzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQ7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpjdHBpb19jeGw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XG4mIzQzO3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHsgcmV0dXJuIDA7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9XG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxuaW5kZXggYjk4YzI1OWY2NzJkYjUuLjM5NjRiMmM1NjYwOWM0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxuQEAgLTExOTcsMTQgJiM0MzsxMTk3LDI0IEBAIHN0cnVjdCBlZnhfbmljIHtcbiBcdGF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7XG4gfTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMXG4mIzQzO3N0cnVjdCBlZnhfY3hsO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGVmeF9wcm9iZV9kYXRhIC0gU3RhdGUgYWZ0ZXIgaGFyZHdhcmUgcHJvYmVcbiAgKiBAcGNpX2RldjogVGhlIFBDSSBkZXZpY2VcbiAgKiBAZWZ4OiBFZnggTklDIGRldGFpbHNcbiYjNDM7ICogQGN4bDogZGV0YWlscyBvZiByZWxhdGVkIGN4bCBvYmplY3RzXG4mIzQzOyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS5cbiAgKi9cbiBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEge1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgZWZ4X25pYyBlZng7XG4mIzQzOyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuJiM0MztcdHN0cnVjdCBlZnhfY3hsICpjeGw7XG4mIzQzO1x0Ym9vbCBjeGxfcGlvX2luaXRpYWxpc2VkO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVmeF9uaWMgKmVmeF9uZXRkZXZfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaFxuaW5kZXggZWMzYjJkZjQzYjY4ZDkuLjc0ODBmOTk5NWRmYjhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcbkBAIC0xNTIsNiAmIzQzOzE1Miw4IEBAIGVudW0ge1xuICAqXHQlTUNfQ01EX0dFVF9DQVBBQklMSVRJRVMgcmVzcG9uc2UpXG4gICogQGRhdGFwYXRoX2NhcHMyOiBGdXJ0aGVyIENhcGFiaWxpdGllcyBvZiBkYXRhcGF0aCBmaXJtd2FyZSAoRkxBR1MyIGZpZWxkIG9mXG4gICogJU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKVxuJiM0MzsgKiBAZGF0YXBhdGhfY2FwczM6IEZ1cnRoZXIgQ2FwYWJpbGl0aWVzIG9mIGRhdGFwYXRoIGZpcm13YXJlIChGTEFHUzMgZmllbGQgb2ZcbiYjNDM7ICogJU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKVxuICAqIEByeF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFJ4RFBDUFVcbiAgKiBAdHhfZHBjcHVfZndfaWQ6IEZpcm13YXJlIElEIG9mIHRoZSBUeERQQ1BVXG4gICogQG11c3RfcHJvYmVfdnN3aXRjaGluZzogRmxhZzogdnN3aXRjaGluZyBoYXMgeWV0IHRvIGJlIHNldHVwIGFmdGVyIE1DIHJlYm9vdFxuQEAgLTE4Nyw2ICYjNDM7MTg5LDcgQEAgc3RydWN0IGVmeF9lZjEwX25pY19kYXRhIHtcbiBcdGJvb2wgbXVzdF9jaGVja19kYXRhcGF0aF9jYXBzO1xuIFx0dTMyIGRhdGFwYXRoX2NhcHM7XG4gXHR1MzIgZGF0YXBhdGhfY2FwczI7XG4mIzQzO1x0dTMyIGRhdGFwYXRoX2NhcHMzO1xuIFx0dW5zaWduZWQgaW50IHJ4X2RwY3B1X2Z3X2lkO1xuIFx0dW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkO1xuIFx0Ym9vbCBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaFxuaW5kZXggMDE2Yzc0ZmI3NDdjZjYuLjgwMmIxNDNkZTgzZGI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9jeGwvY3hsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvY3hsL2N4bC5oXG5AQCAtMjI2LDQgJiM0MzsyMjYsNiBAQCBzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqX2Rldm1fY3hsX2Rldl9zdGF0ZV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIHN0cnVjdCBjeGxfbWVtZGV2ICpkZXZtX2N4bF9wcm9iZV9tZW0oc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHJhbmdlICpyYW5nZSk7XG4mIzQzO1xuJiM0MztpbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSk7XG4gI2VuZGlmIC8qIF9fQ1hMX0NYTF9IX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlMDAwMDAxNTg3MWEyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2N4bC9wY2kuaFxuQEAgLTAsMCAmIzQzOzEsMjIgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKiBDb3B5cmlnaHQoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19DWExfQ1hMX1BDSV9IX19cbiYjNDM7I2RlZmluZSBfX0NYTF9DWExfUENJX0hfX1xuJiM0MztcbiYjNDM7LyogUmVnaXN0ZXIgQmxvY2sgSWRlbnRpZmllciAoUkJJKSAqL1xuJiM0MztlbnVtIGN4bF9yZWdsb2NfdHlwZSB7XG4mIzQzO1x0Q1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLFxuJiM0MztcdENYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCxcbiYjNDM7XHRDWExfUkVHTE9DX1JCSV9WSVJULFxuJiM0MztcdENYTF9SRUdMT0NfUkJJX01FTURFVixcbiYjNDM7XHRDWExfUkVHTE9DX1JCSV9QTVUsXG4mIzQzO1x0Q1hMX1JFR0xPQ19SQklfVFlQRVNcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwO1xuJiM0MztzdHJ1Y3QgcGNpX2RldjtcbiYjNDM7XG4mIzQzO2ludCBjeGxfcGNpX3NldHVwX3JlZ3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gY3hsX3JlZ2xvY190eXBlIHR5cGUsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGN4bF9yZWdpc3Rlcl9tYXAgKm1hcCk7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQ1hMIHN1cHBvcnQgdG8gdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgbmV0d29yayBkcml2ZXIgKHNmYykgYW5kIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIENYTCBjb3JlIGZvciBpdC4gVGhlIHNmYyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU29sYXJmbGFyZSBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIFFFTVUgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFhYTE0MTZkOTQ4MGUxNDI1ZTQ4N2NhMzBmNWIyOTYzNzRhMWQ2MjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDE2OjQyOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9jb3JlLmggYi9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaAppbmRleCAwNzU1NWFlNjM4NTk0MC4uZjdjZWJiMDI2NTUyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oCkBAIC0xMDEsNiAmIzQzOzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkciwKIHN0cnVjdCBkZW50cnkgKmN4bF9kZWJ1Z2ZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqZGlyKTsKIGludCBjeGxfZHBhX3NldF9wYXJ0KHN0cnVjdCBjeGxfZW5kcG9pbnRfZGVjb2RlciAqY3hsZWQsCiAJCSAgICAgZW51bSBjeGxfcGFydGl0aW9uX21vZGUgbW9kZSk7CiYjNDM7c3RydWN0IGN4bF9tZW1kZXZfc3RhdGU7CiYjNDM7aW50IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMpOwogaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpOwogaW50IGN4bF9kcGFfZnJlZShzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkKTsKIHJlc291cmNlX3NpemVfdCBjeGxfZHBhX3NpemUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21ib3guYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jCmluZGV4IDdjNmM1Yjc0NTBhNTRhLi45N2IxZTYxYWQwMTg3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tYm94LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmMKQEAgLTExNTIsNyAmIzQzOzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCAmIzM0O0NYTCYjMzQ7KTsKICAqCiAgKiBTZWUgQ1hMIEA4LjIuOS41LjIuMSBHZXQgUGFydGl0aW9uIEluZm8KICAqLwotc3RhdGljIGludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKQomIzQzO2ludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKQogewogCXN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSAmYW1wO21kcy0mZ3Q7Y3hsZHMuY3hsX21ib3g7CiAJc3RydWN0IGN4bF9tYm94X2dldF9wYXJ0aXRpb25faW5mbyBwaTsKQEAgLTEzMDgsNTUgJiM0MzsxMzA4LDYgQEAgaW50IGN4bF9tZW1fc2FuaXRpemUoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kLCB1MTYgY21kKQogCXJldHVybiAtRUJVU1k7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpCi17Ci0JaW50IGkgPSBpbmZvLSZndDtucl9wYXJ0aXRpb25zOwotCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuOwotCi0JaW5mby0mZ3Q7cGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHsKLQkJLnN0YXJ0ID0gc3RhcnQsCi0JCS5lbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMSwKLQl9OwotCWluZm8tJmd0O3BhcnRbaV0ubW9kZSA9IG1vZGU7Ci0JaW5mby0mZ3Q7bnJfcGFydGl0aW9ucyYjNDM7JiM0Mzs7Ci19Ci0KLWludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKQotewotCXN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyA9ICZhbXA7bWRzLSZndDtjeGxkczsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy0mZ3Q7ZGV2OwotCWludCByYzsKLQotCWlmICghY3hsZHMtJmd0O21lZGlhX3JlYWR5KSB7Ci0JCWluZm8tJmd0O3NpemUgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpbmZvLSZndDtzaXplID0gbWRzLSZndDt0b3RhbF9ieXRlczsKLQotCWlmIChtZHMtJmd0O3BhcnRpdGlvbl9hbGlnbl9ieXRlcyA9PSAwKSB7Ci0JCWFkZF9wYXJ0KGluZm8sIDAsIG1kcy0mZ3Q7dm9sYXRpbGVfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7Ci0JCWFkZF9wYXJ0KGluZm8sIG1kcy0mZ3Q7dm9sYXRpbGVfb25seV9ieXRlcywKLQkJCSBtZHMtJmd0O3BlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKG1kcyk7Ci0JaWYgKHJjKSB7Ci0JCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cbiYjMzQ7KTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWFkZF9wYXJ0KGluZm8sIDAsIG1kcy0mZ3Q7YWN0aXZlX3ZvbGF0aWxlX2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTsKLQlhZGRfcGFydChpbmZvLCBtZHMtJmd0O2FjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLSZndDthY3RpdmVfcGVyc2lzdGVudF9ieXRlcywKLQkJIENYTF9QQVJUTU9ERV9QTUVNKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9kcGFfZmV0Y2gsICYjMzQ7Q1hMJiMzNDspOwotCiBpbnQgY3hsX2dldF9kaXJ0eV9jb3VudChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCB1MzIgKmNvdW50KQogewogCXN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSAmYW1wO21kcy0mZ3Q7Y3hsZHMuY3hsX21ib3g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jIGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYwppbmRleCAzM2EzZDJlN2IxM2FmOS4uMmU0NTdiMWViYzdkZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYwpAQCAtNTk0LDYgJiM0Mzs1OTQsNzMgQEAgYm9vbCBpc19jeGxfbWVtZGV2KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsICYjMzQ7Q1hMJiMzNDspOwogCiYjNDM7c3RhdGljIHZvaWQgYWRkX3BhcnQoc3RydWN0IGN4bF9kcGFfaW5mbyAqaW5mbywgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgZW51bSBjeGxfcGFydGl0aW9uX21vZGUgbW9kZSkKJiM0Mzt7CiYjNDM7CWludCBpID0gaW5mby0mZ3Q7bnJfcGFydGl0aW9uczsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7cGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHsKJiM0MzsJCS5zdGFydCA9IHN0YXJ0LAomIzQzOwkJLmVuZCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxLAomIzQzOwl9OwomIzQzOwlpbmZvLSZndDtwYXJ0W2ldLm1vZGUgPSBtb2RlOwomIzQzOwlpbmZvLSZndDtucl9wYXJ0aXRpb25zJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMgPSAmYW1wO21kcy0mZ3Q7Y3hsZHM7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGN4bGRzLSZndDtkZXY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKCFjeGxkcy0mZ3Q7bWVkaWFfcmVhZHkpIHsKJiM0MzsJCWluZm8tJmd0O3NpemUgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c2l6ZSA9IG1kcy0mZ3Q7dG90YWxfYnl0ZXM7CiYjNDM7CiYjNDM7CWlmIChtZHMtJmd0O3BhcnRpdGlvbl9hbGlnbl9ieXRlcyA9PSAwKSB7CiYjNDM7CQlhZGRfcGFydChpbmZvLCAwLCBtZHMtJmd0O3ZvbGF0aWxlX29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pOwomIzQzOwkJYWRkX3BhcnQoaW5mbywgbWRzLSZndDt2b2xhdGlsZV9vbmx5X2J5dGVzLAomIzQzOwkJCSBtZHMtJmd0O3BlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhtZHMpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlhZGRfcGFydChpbmZvLCAwLCBtZHMtJmd0O2FjdGl2ZV92b2xhdGlsZV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7CiYjNDM7CWFkZF9wYXJ0KGluZm8sIG1kcy0mZ3Q7YWN0aXZlX3ZvbGF0aWxlX2J5dGVzLCBtZHMtJmd0O2FjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLAomIzQzOwkJIENYTF9QQVJUTU9ERV9QTUVNKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCAmIzM0O0NYTCYjMzQ7KTsKJiM0MzsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjeGxfc2V0X2NhcGFjaXR5OiBpbml0aWFsaXplIGRwYSBieSBhIGRyaXZlciB3aXRob3V0IGEgbWFpbGJveC4KJiM0MzsgKgomIzQzOyAqIEBjeGxkczogcG9pbnRlciB0byBjeGxfZGV2X3N0YXRlCiYjNDM7ICogQGNhcGFjaXR5OiBkZXZpY2Ugdm9sYXRpbGUgbWVtb3J5IHNpemUKJiM0MzsgKi8KJiM0MztpbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjeGxfZHBhX2luZm8gcmFuZ2VfaW5mbyA9IHsKJiM0MzsJCS5zaXplID0gY2FwYWNpdHksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWFkZF9wYXJ0KCZhbXA7cmFuZ2VfaW5mbywgMCwgY2FwYWNpdHksIENYTF9QQVJUTU9ERV9SQU0pOwomIzQzOwlyZXR1cm4gY3hsX2RwYV9zZXR1cChjeGxkcywgJmFtcDtyYW5nZV9pbmZvKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgJiMzNDtDWEwmIzM0Oyk7CiYjNDM7CiAvKioKICAqIHNldF9leGNsdXNpdmVfY3hsX2NvbW1hbmRzKCkgLSBhdG9taWNhbGx5IGRpc2FibGUgdXNlciBjeGwgY29tbWFuZHMKICAqIEBtZHM6IFRoZSBkZXZpY2Ugc3RhdGUgdG8gb3BlcmF0ZSBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9wY2kuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMKaW5kZXggZTQzMzhmZDdlMDFiNDcuLjlkODA3YzFhMDAyY2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLWRvZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjeGwvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hscGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hsbWVtLmgmZ3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jCmluZGV4IDEyMTVlZTRmNDAzNTFiLi5jYjYzM2UxOTE1MWI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jeGwvY29yZS9wb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9wb3J0LmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWRyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbm9kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2N4bC9laW5qLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2N4bC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtjeGxtZW0uaCZndDsKICNpbmNsdWRlICZsdDtjeGxwY2kuaCZndDsKICNpbmNsdWRlICZsdDtjeGwuaCZndDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jIGIvZHJpdmVycy9jeGwvY29yZS9yZWdzLmMKaW5kZXggOTM3MTBjZjRmMGE2OTcuLjIwYzJkOWZiY2ZlN2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuYwpAQCAtNCw2ICYjNDM7NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjeGwvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hsbWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hscGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cG11LmgmZ3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jeGxwY2kuaCBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oCmluZGV4IGI4MjZlYjUzY2Y3YmFjLi4xMTBlYzljNDRmMDlmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jeGwvY3hscGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY3hscGNpLmgKQEAgLTEzLDE2ICYjNDM7MTMsNiBAQAogICovCiAjZGVmaW5lIENYTF9QQ0lfREVGQVVMVF9NQVhfVkVDVE9SUyAxNgogCi0vKiBSZWdpc3RlciBCbG9jayBJZGVudGlmaWVyIChSQkkpICovCi1lbnVtIGN4bF9yZWdsb2NfdHlwZSB7Ci0JQ1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLAotCUNYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCwKLQlDWExfUkVHTE9DX1JCSV9WSVJULAotCUNYTF9SRUdMT0NfUkJJX01FTURFViwKLQlDWExfUkVHTE9DX1JCSV9QTVUsCi0JQ1hMX1JFR0xPQ19SQklfVFlQRVMKLX07Ci0KIC8qCiAgKiBUYWJsZSBBY2Nlc3MgRE9FLCBDREFUIFJlYWQgRW50cnkgUmVzcG9uc2UKICAqCkBAIC0xMTIsNiAmIzQzOzEwMiw0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZtX2N4bF9wb3J0X3Jhc19zZXR1cChzdHJ1Y3QgY3hsX3BvcnQgKnBvcnQpCiB9CiAjZW5kaWYKIAotaW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSwKLQkJICAgICAgIHN0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwICptYXApOwogI2VuZGlmIC8qIF9fQ1hMX1BDSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL3BjaS5jIGIvZHJpdmVycy9jeGwvcGNpLmMKaW5kZXggMjY3YzY3OWIwYjNjMjAuLmJiODkyZGJmZGQ2ZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2N4bC9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9wY2kuYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjeGwvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hsL21haWxib3guaCZndDsKICNpbmNsdWRlICYjMzQ7Y3hsbWVtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtjeGxwY2kuaCYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnCmluZGV4IGM0YzQzNDM0ZjMxNDM0Li45NzlmMjgwMWUyYThlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcKQEAgLTY2LDYgJiM0Mzs2NiwxNSBAQCBjb25maWcgU0ZDX01DRElfTE9HR0lORwogCSAgRHJpdmVyLUludGVyZmFjZSkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcywgYWxsb3dpbmcgZGVidWdnaW5nIG9mCiAJICBkcml2ZXIvZmlybXdhcmUgaW50ZXJhY3Rpb24uICBUaGUgdHJhY2luZyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5CiAJICBhIHN5c2ZzIGZpbGUgJiMzOTttY2RpX2xvZ2dpbmcmIzM5OyB1bmRlciB0aGUgUENJIGRldmljZS4KJiM0Mztjb25maWcgU0ZDX0NYTAomIzQzOwlib29sICYjMzQ7U29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBDWEwgc3VwcG9ydCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gU0ZDICZhbXA7JmFtcDsgQ1hMX0JVUyAmZ3Q7PSBTRkMKJiM0MzsJZGVmYXVsdCBTRkMKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBTRkMgQ1hMIHN1cHBvcnQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmluZyBDWEwgZm9yCiYjNDM7CSAgdXNpbmcgQ1RQSU8gd2l0aCBDWEwubWVtLiBUaGUgU0ZDIGRldmljZSB3aXRoIENYTCBzdXBwb3J0IGFuZAomIzQzOwkgIHdpdGggYSBDWEwtYXdhcmUgZmlybXdhcmUgY2FuIGJlIHVzZWQgZm9yIG1pbmltaXppbmcgbGF0ZW5jaWVzCiYjNDM7CSAgd2hlbiBzZW5kaW5nIHRocm91Z2ggQ1RQSU8uCiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvS2NvbmZpZyYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUKaW5kZXggZDk5MDM5ZWM0NjhkNjcuLmJiMGYxODkxY2RlNjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlCkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBzZmMtJChDT05GSUdfU0ZDX1NSSU9WKQkmIzQzOz0gc3Jpb3YubyBlZjEwX3NyaW92Lm8gZWYxMDBfc3Jpb3YubyBlZjEwMF9yZXAubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWUubyB0Yy5vIHRjX2JpbmRpbmdzLm8gdGNfY291bnRlcnMubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y19lbmNhcF9hY3Rpb25zLm8gdGNfY29ubnRyYWNrLm8KIAomIzQzO3NmYy0kKENPTkZJR19TRkNfQ1hMKQkmIzQzOz0gZWZ4X2N4bC5vCiBvYmotJChDT05GSUdfU0ZDKQkmIzQzOz0gc2ZjLm8KIAogb2JqLSQoQ09ORklHX1NGQ19GQUxDT04pICYjNDM7PSBmYWxjb24vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYwppbmRleCA3ZTA0ZjExNWJiYWFhZi4uNzNiYzA2NDkyOWY2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3VkcF90dW5uZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VmeF9jeGwuaCYjMzQ7CiAKIC8qIEhhcmR3YXJlIGNvbnRyb2wgZm9yIEVGMTAgYXJjaGl0ZWN0dXJlIGluY2x1ZGluZyAmIzM5O0h1bnRpbmd0b24mIzM5Oy4gKi8KIApAQCAtMTA2LDcgJiM0MzsxMDcsNyBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2dldF92Zl9pbmRleChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogCiBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCU1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WNF9PVVRfTEVOKTsKJiM0MzsJTUNESV9ERUNMQVJFX0JVRihvdXRidWYsIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pOwogCXN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtJmd0O25pY19kYXRhOwogCXNpemVfdCBvdXRsZW47CiAJaW50IHJjOwpAQCAtMTc3LDYgJiM0MzsxNzgsMTIgQEAgc3RhdGljIGludCBlZnhfZWYxMF9pbml0X2RhdGFwYXRoX2NhcHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIAkJCSAgZWZ4LSZndDtudW1fbWFjX3N0YXRzKTsKIAl9CiAKJiM0MzsJaWYgKG91dGxlbiAmbHQ7IE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pCiYjNDM7CQluaWNfZGF0YS0mZ3Q7ZGF0YXBhdGhfY2FwczMgPSAwOwomIzQzOwllbHNlCiYjNDM7CQluaWNfZGF0YS0mZ3Q7ZGF0YXBhdGhfY2FwczMgPSBNQ0RJX0RXT1JEKG91dGJ1ZiwKJiM0MzsJCQkJCQkgICAgICBHRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9GTEFHUzMpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMTQwLDYgJiM0MzsxMTQ3LDkgQEAgc3RhdGljIGludCBlZnhfZWYxMF9kaW1lbnNpb25fcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpCiAJdW5zaWduZWQgaW50IGNoYW5uZWxfdmlzLCBwaW9fd3JpdGVfdmlfYmFzZSwgbWF4X3ZpczsKIAlzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LSZndDtuaWNfZGF0YTsKIAl1bnNpZ25lZCBpbnQgdWNfbWVtX21hcF9zaXplLCB3Y19tZW1fbWFwX3NpemU7CiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMCiYjNDM7CXN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YTsKJiM0MzsjZW5kaWYKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CiAJaW50IHJjOwogCkBAIC0xMjYzLDggJiM0MzsxMjczLDIzIEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogCWlvdW5tYXAoZWZ4LSZndDttZW1iYXNlKTsKIAllZngtJmd0O21lbWJhc2UgPSBtZW1iYXNlOwogCi0JLyogU2V0IHVwIHRoZSBXQyBtYXBwaW5nIGlmIG5lZWRlZCAqLwotCWlmICh3Y19tZW1fbWFwX3NpemUpIHsKJiM0MzsJaWYgKCF3Y19tZW1fbWFwX3NpemUpCiYjNDM7CQlnb3RvIHNraXBfcGlvOwomIzQzOwomIzQzOwkvKiBTZXQgdXAgdGhlIFdDIG1hcHBpbmcgKi8KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1NGQ19DWEwKJiM0MzsJcHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTsKJiM0MzsJaWYgKChuaWNfZGF0YS0mZ3Q7ZGF0YXBhdGhfY2FwczMgJmFtcDsKJiM0MzsJICAgICgxICZsdDsmbHQ7IE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9DWExfQ09ORklHX0VOQUJMRV9MQk4pKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwcm9iZV9kYXRhLSZndDtjeGxfcGlvX2luaXRpYWxpc2VkKSB7CiYjNDM7CQkvKiBVc2luZyBQSU8gdGhyb3VnaCBDWEwgbWFwcGluZyAqLwomIzQzOwkJbmljX2RhdGEtJmd0O3Bpb193cml0ZV9iYXNlID0gcHJvYmVfZGF0YS0mZ3Q7Y3hsLSZndDtjdHBpb19jeGw7CiYjNDM7CQluaWNfZGF0YS0mZ3Q7cGlvX3dyaXRlX3ZpX2Jhc2UgPSBwaW9fd3JpdGVfdmlfYmFzZTsKJiM0MzsJfSBlbHNlCiYjNDM7I2VuZGlmCiYjNDM7CXsKJiM0MzsJCS8qIFVzaW5nIGxlZ2FjeSBQSU8gQkFSIG1hcHBpbmcgKi8KIAkJbmljX2RhdGEtJmd0O3djX21lbWJhc2UgPSBpb3JlbWFwX3djKGVmeC0mZ3Q7bWVtYmFzZV9waHlzICYjNDM7CiAJCQkJCQkgIHVjX21lbV9tYXBfc2l6ZSwKIAkJCQkJCSAgd2NfbWVtX21hcF9zaXplKTsKQEAgLTEyNzksMTIgJiM0MzsxMzA0LDE0IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogCQkJbmljX2RhdGEtJmd0O3djX21lbWJhc2UgJiM0MzsKIAkJCShwaW9fd3JpdGVfdmlfYmFzZSAqIGVmeC0mZ3Q7dmlfc3RyaWRlICYjNDM7IEVSX0RaX1RYX1BJT0JVRiAtCiAJCQkgdWNfbWVtX21hcF9zaXplKTsKLQotCQlyYyA9IGVmeF9lZjEwX2xpbmtfcGlvYnVmcyhlZngpOwotCQlpZiAocmMpCi0JCQllZnhfZWYxMF9mcmVlX3Bpb2J1ZnMoZWZ4KTsKIAl9CiAKJiM0MzsJcmMgPSBlZnhfZWYxMF9saW5rX3Bpb2J1ZnMoZWZ4KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7CiYjNDM7CiYjNDM7c2tpcF9waW86CiYjNDM7CiAJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0mZ3Q7bmV0X2RldiwKIAkJICAmIzM0O21lbW9yeSBCQVIgYXQgJXBhICh2aXJ0dWFsICVwJiM0MzsleCBVQywgJXAmIzQzOyV4IFdDKVxuJiMzNDssCiAJCSAgJmFtcDtlZngtJmd0O21lbWJhc2VfcGh5cywgZWZ4LSZndDttZW1iYXNlLCB1Y19tZW1fbWFwX3NpemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMKaW5kZXggOGYxMzZhMTFkMzk2OGEuLjM4MDZjZDNkZDdmNDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2luY2x1ZGUgJiMzNDtzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3Jpb3YuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VmeF9kZXZsaW5rLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZWZ4X2N4bC5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDttY2RpX3BvcnRfY29tbW9uLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttY2RpX3Bjb2wuaCYjMzQ7CkBAIC05ODEsMTIgJiM0Mzs5ODIsMTUgQEAgc3RhdGljIHZvaWQgZWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiAJZWZ4X3BjaV9yZW1vdmVfbWFpbihlZngpOwogCiAJZWZ4X2ZpbmlfaW8oZWZ4KTsKJiM0MzsKJiM0MzsJcHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTsKJiM0MzsJZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpOwomIzQzOwogCXBjaV9kYmcoZWZ4LSZndDtwY2lfZGV2LCAmIzM0O3NodXRkb3duIHN1Y2Nlc3NmdWxcbiYjMzQ7KTsKIAogCWVmeF9maW5pX2RldmxpbmtfYW5kX3VubG9jayhlZngpOwogCWVmeF9maW5pX3N0cnVjdChlZngpOwogCWZyZWVfbmV0ZGV2KGVmeC0mZ3Q7bmV0X2Rldik7Ci0JcHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTsKIAlrZnJlZShwcm9iZV9kYXRhKTsKIH07CiAKQEAgLTExOTAsNiAmIzQzOzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCWlmIChyYykKIAkJZ290byBmYWlsMjsKIAomIzQzOwkvKiBBIHN1Y2Nlc3NmdWwgY3hsIGluaXRpYWxpemF0aW9uIGltcGxpZXMgYSBDWEwgcmVnaW9uIGNyZWF0ZWQgdG8gYmUKJiM0MzsJICogdXNlZCBmb3IgUElPIGJ1ZmZlcnMuIElmIHRoZXJlIGlzIG5vIENYTCBzdXBwb3J0IGxlZ2FjeSBQSU8gYnVmZmVycwomIzQzOwkgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTAomIzQzOwkgKiBzdXBwb3J0IGFuZCB0aGUgY3hsIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzLgomIzQzOwkgKi8KJiM0MzsJcmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJcGNpX2VycihwY2lfZGV2LCAmIzM0O0NYTCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCWdvdG8gZmFpbDM7CiYjNDM7CX0KJiM0MzsKIAlyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpOwogCWlmIChyYykgewogCQkvKiBPbiBmYWlsdXJlLCByZXRyeSBvbmNlIGltbWVkaWF0ZWx5LgpAQCAtMTIyOCw2ICYjNDM7MTI0Myw3IEBAIHN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAlyZXR1cm4gMDsKIAogIGZhaWwzOgomIzQzOwllZnhfY3hsX2V4aXQocHJvYmVfZGF0YSk7CiAJZWZ4X2ZpbmlfaW8oZWZ4KTsKICBmYWlsMjoKIAllZnhfZmluaV9zdHJ1Y3QoZWZ4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMKQEAgLTAsMCAmIzQzOzEsMTA1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHMKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjUsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2N4bC9jeGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3hsL3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0X2RyaXZlci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VmeF9jeGwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUJU1pfMjU2TQomIzQzOwomIzQzO2ludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmeF9uaWMgKmVmeCA9ICZhbXA7cHJvYmVfZGF0YS0mZ3Q7ZWZ4OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGVmeC0mZ3Q7cGNpX2RldjsKJiM0MzsJc3RydWN0IHJhbmdlIGN4bF9waW9fcmFuZ2U7CiYjNDM7CXN0cnVjdCBlZnhfY3hsICpjeGw7CiYjNDM7CXUxNiBkdnNlYzsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBJcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBhbmQgdXNpbmcgQ1hMPyAqLwomIzQzOwlpZiAoIXBjaWVfaXNfY3hsKHBjaV9kZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWR2c2VjID0gcGNpX2ZpbmRfZHZzZWNfY2FwYWJpbGl0eShwY2lfZGV2LCBQQ0lfVkVORE9SX0lEX0NYTCwKJiM0MzsJCQkJCSAgUENJX0RWU0VDX0NYTF9ERVZJQ0UpOwomIzQzOwlpZiAoIWR2c2VjKSB7CiYjNDM7CQlwY2lfaW5mbyhwY2lfZGV2LCAmIzM0O0NYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGNpX2RiZyhwY2lfZGV2LCAmIzM0O0NYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IGZvdW5kXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBhIGN4bF9kZXZfc3RhdGUgZW1iZWRkZWQgaW4gdGhlIGN4bCBzdHJ1Y3QgdXNpbmcgY3hsIGNvcmUgYXBpCiYjNDM7CSAqIHNwZWNpZnlpbmcgbm8gbWJveCBhdmFpbGFibGUuCiYjNDM7CSAqLwomIzQzOwljeGwgPSBkZXZtX2N4bF9kZXZfc3RhdGVfY3JlYXRlKCZhbXA7cGNpX2Rldi0mZ3Q7ZGV2LCBDWExfREVWVFlQRV9ERVZNRU0sCiYjNDM7CQkJCQlwY2lfZ2V0X2RzbihwY2lfZGV2KSwgZHZzZWMsCiYjNDM7CQkJCQlzdHJ1Y3QgZWZ4X2N4bCwgY3hsZHMsIGZhbHNlKTsKJiM0MzsKJiM0MzsJaWYgKCFjeGwpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmMgPSBjeGxfcGNpX3NldHVwX3JlZ3MocGNpX2RldiwgQ1hMX1JFR0xPQ19SQklfQ09NUE9ORU5ULAomIzQzOwkJCQkmYW1wO2N4bC0mZ3Q7Y3hsZHMucmVnX21hcCk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJcGNpX2VycihwY2lfZGV2LCAmIzM0O05vIGNvbXBvbmVudCByZWdpc3RlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWN4bC0mZ3Q7Y3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLmhkbV9kZWNvZGVyLnZhbGlkKSB7CiYjNDM7CQlwY2lfZXJyKHBjaV9kZXYsICYjMzQ7RXhwZWN0ZWQgSERNIGNvbXBvbmVudCByZWdpc3RlciBub3QgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY3hsLSZndDtjeGxkcy5yZWdfbWFwLmNvbXBvbmVudF9tYXAucmFzLnZhbGlkKSB7CiYjNDM7CQlwY2lfZXJyKHBjaV9kZXYsICYjMzQ7RXhwZWN0ZWQgUkFTIGNvbXBvbmVudCByZWdpc3RlciBub3QgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNldCBtZWRpYSByZWFkeSBleHBsaWNpdGx5IGFzIHRoZXJlIGFyZSBuZWl0aGVyIG1haWxib3ggZm9yIGNoZWNraW5nCiYjNDM7CSAqIHRoaXMgc3RhdGUgbm9yIHRoZSBDWEwgcmVnaXN0ZXIgaW52b2x2ZWQsIGJvdGggbm90IG1hbmRhdG9yeSBmb3IKJiM0MzsJICogdHlwZTIuCiYjNDM7CSAqLwomIzQzOwljeGwtJmd0O2N4bGRzLm1lZGlhX3JlYWR5ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGN4bF9zZXRfY2FwYWNpdHkoJmFtcDtjeGwtJmd0O2N4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7CiYjNDM7CQlwY2lfZXJyKHBjaV9kZXYsICYjMzQ7ZHBhIGNhcGFjaXR5IHNldHVwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3hsLSZndDtjeGxtZCA9IGRldm1fY3hsX3Byb2JlX21lbSgmYW1wO2N4bC0mZ3Q7Y3hsZHMsICZhbXA7Y3hsX3Bpb19yYW5nZSk7CiYjNDM7CWlmIChJU19FUlIoY3hsLSZndDtjeGxtZCkpIHsKJiM0MzsJCXBjaV9lcnIocGNpX2RldiwgJiMzNDtDWEwgYWNjZWwgbWVtZGV2IGNyZWF0aW9uIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY3hsLSZndDtjeGxtZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3hsLSZndDtjdHBpb19jeGwgPSBpb3JlbWFwX3djKGN4bF9waW9fcmFuZ2Uuc3RhcnQsCiYjNDM7CQkJCSAgICByYW5nZV9sZW4oJmFtcDtjeGxfcGlvX3JhbmdlKSk7CiYjNDM7CWlmICghY3hsLSZndDtjdHBpb19jeGwpIHsKJiM0MzsJCXBjaV9lcnIocGNpX2RldiwgJiMzNDtDWEwgaW9yZW1hcCByZWdpb24gKCVwcmEpIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJJmFtcDtjeGxfcGlvX3JhbmdlKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByb2JlX2RhdGEtJmd0O2N4bF9waW9faW5pdGlhbGlzZWQgPSB0cnVlOwomIzQzOwlwcm9iZV9kYXRhLSZndDtjeGwgPSBjeGw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpCiYjNDM7ewomIzQzOwlpZiAoIXByb2JlX2RhdGEtJmd0O2N4bCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaW91bm1hcChwcm9iZV9kYXRhLSZndDtjeGwtJmd0O2N0cGlvX2N4bCk7CiYjNDM7fQomIzQzOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtDWEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uM2UyNzA1Y2IwNjNmNmEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oCkBAIC0wLDAgJiM0MzsxLDMyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiYjNDM7ICogRHJpdmVyIGZvciBBTUQgbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAomIzQzOyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAomIzQzOyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgRUZYX0NYTF9ICiYjNDM7I2RlZmluZSBFRlhfQ1hMX0gKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1NGQ19DWEwKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3hsL2N4bC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBlZnhfcHJvYmVfZGF0YTsKJiM0MzsKJiM0MztzdHJ1Y3QgZWZ4X2N4bCB7CiYjNDM7CXN0cnVjdCBjeGxfZGV2X3N0YXRlIGN4bGRzOwomIzQzOwlzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQ7CiYjNDM7CXZvaWQgX19pb21lbSAqY3RwaW9fY3hsOwomIzQzO307CiYjNDM7CiYjNDM7aW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpOwomIzQzO3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKSB7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9CiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCBiOThjMjU5ZjY3MmRiNS4uMzk2NGIyYzU2NjA5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMTE5NywxNCAmIzQzOzExOTcsMjQgQEAgc3RydWN0IGVmeF9uaWMgewogCWF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7CiB9OwogCiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMCiYjNDM7c3RydWN0IGVmeF9jeGw7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAtIFN0YXRlIGFmdGVyIGhhcmR3YXJlIHByb2JlCiAgKiBAcGNpX2RldjogVGhlIFBDSSBkZXZpY2UKICAqIEBlZng6IEVmeCBOSUMgZGV0YWlscwomIzQzOyAqIEBjeGw6IGRldGFpbHMgb2YgcmVsYXRlZCBjeGwgb2JqZWN0cwomIzQzOyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS4KICAqLwogc3RydWN0IGVmeF9wcm9iZV9kYXRhIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAlzdHJ1Y3QgZWZ4X25pYyBlZng7CiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMCiYjNDM7CXN0cnVjdCBlZnhfY3hsICpjeGw7CiYjNDM7CWJvb2wgY3hsX3Bpb19pbml0aWFsaXNlZDsKJiM0MzsjZW5kaWYKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVmeF9uaWMgKmVmeF9uZXRkZXZfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oCmluZGV4IGVjM2IyZGY0M2I2OGQ5Li43NDgwZjk5OTVkZmI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaApAQCAtMTUyLDYgJiM0MzsxNTIsOCBAQCBlbnVtIHsKICAqCSVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSkKICAqIEBkYXRhcGF0aF9jYXBzMjogRnVydGhlciBDYXBhYmlsaXRpZXMgb2YgZGF0YXBhdGggZmlybXdhcmUgKEZMQUdTMiBmaWVsZCBvZgogICogJU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKQomIzQzOyAqIEBkYXRhcGF0aF9jYXBzMzogRnVydGhlciBDYXBhYmlsaXRpZXMgb2YgZGF0YXBhdGggZmlybXdhcmUgKEZMQUdTMyBmaWVsZCBvZgomIzQzOyAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSkKICAqIEByeF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFJ4RFBDUFUKICAqIEB0eF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFR4RFBDUFUKICAqIEBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc6IEZsYWc6IHZzd2l0Y2hpbmcgaGFzIHlldCB0byBiZSBzZXR1cCBhZnRlciBNQyByZWJvb3QKQEAgLTE4Nyw2ICYjNDM7MTg5LDcgQEAgc3RydWN0IGVmeF9lZjEwX25pY19kYXRhIHsKIAlib29sIG11c3RfY2hlY2tfZGF0YXBhdGhfY2FwczsKIAl1MzIgZGF0YXBhdGhfY2FwczsKIAl1MzIgZGF0YXBhdGhfY2FwczI7CiYjNDM7CXUzMiBkYXRhcGF0aF9jYXBzMzsKIAl1bnNpZ25lZCBpbnQgcnhfZHBjcHVfZndfaWQ7CiAJdW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkOwogCWJvb2wgbXVzdF9wcm9iZV92c3dpdGNoaW5nOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaAppbmRleCAwMTZjNzRmYjc0N2NmNi4uODAyYjE0M2RlODNkYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3hsL2N4bC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvY3hsL2N4bC5oCkBAIC0yMjYsNCAmIzQzOzIyNiw2IEBAIHN0cnVjdCBjeGxfZGV2X3N0YXRlICpfZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIHN0cnVjdCBjeGxfbWVtZGV2ICpkZXZtX2N4bF9wcm9iZV9tZW0oc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLAogCQkJCSAgICAgIHN0cnVjdCByYW5nZSAqcmFuZ2UpOwomIzQzOwomIzQzO2ludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KTsKICNlbmRpZiAvKiBfX0NYTF9DWExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZTAwMDAwMTU4NzFhMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvY3hsL3BjaS5oCkBAIC0wLDAgJiM0MzsxLDIyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qIENvcHlyaWdodChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19DWExfQ1hMX1BDSV9IX18KJiM0MzsjZGVmaW5lIF9fQ1hMX0NYTF9QQ0lfSF9fCiYjNDM7CiYjNDM7LyogUmVnaXN0ZXIgQmxvY2sgSWRlbnRpZmllciAoUkJJKSAqLwomIzQzO2VudW0gY3hsX3JlZ2xvY190eXBlIHsKJiM0MzsJQ1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLAomIzQzOwlDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsCiYjNDM7CUNYTF9SRUdMT0NfUkJJX1ZJUlQsCiYjNDM7CUNYTF9SRUdMT0NfUkJJX01FTURFViwKJiM0MzsJQ1hMX1JFR0xPQ19SQklfUE1VLAomIzQzOwlDWExfUkVHTE9DX1JCSV9UWVBFUwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGN4bF9yZWdpc3Rlcl9tYXA7CiYjNDM7c3RydWN0IHBjaV9kZXY7CiYjNDM7CiYjNDM7aW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSwKJiM0MzsJCSAgICAgICBzdHJ1Y3QgY3hsX3JlZ2lzdGVyX21hcCAqbWFwKTsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA4NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgU0ZDOTEwMCB3aXRoIENYTCBTdXBwb3J0KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgQ1hMIHN1cHBvcnQgdG8gdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMCBuZXR3b3JrIGRyaXZlciwgaW50cm9kdWNpbmcgYENPTkZJR19TRkNfQ1hMYC4gSXQgbW9kaWZpZXMgc29tZSBjb3JlIENYTCBmaWxlcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGV4cG9ydGluZyBzb21lIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuIGZ1enogdGhpcz8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZS4KClRoZSBTRkMgZHJpdmVyIGlzIGEgUENJIG5ldHdvcmsgZHJpdmVyLiBQQ0kgZHJpdmVycyAqc2hvdWxkKiBiZSBmdXp6YWJsZSwgcmlnaHQ/IFN5emthbGxlciBjYW4gZG8gcHNldWRvLVBDSSBkZXZpY2VzIG9yIFZGSU8gaWYgaXQmIzM5O3Mgc3VwcG9ydGVkLiBCdXQgSSByZW1lbWJlciB0aGVyZSYjMzk7cyBubyBtYWdpYyAmIzM0O2dlbmVyaWMmIzM0OyBQQ0kgZnV6emVyIHRoYXQgKmp1c3Qgd29ya3MqIHVubGVzcyBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQuIEl0JiMzOTtzIHVzdWFsbHkgZGVwZW5kZW50IG9uIHNwZWNpYWwgc3VwcG9ydCBvciBpZiBpdCYjMzk7cyBVU0Igb3IgdmlydHVhbC4gVGhlIHByb21wdCByZW1pbmRzIG1lIG9mIHRoZSBsaW1pdGF0aW9uczogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGVtdWxhdGUgdGhlIFNGQzkxMDA/IE5vLCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIFFFTVUgaGFuZGxlcyB0aGUgdXN1YWwgc3VzcGVjdHMgYnV0IG5vdCB0aGUgU0ZDOTEwMCwgc28gYGVmeF9wY2lfcHJvYmVgIGlzbiYjMzk7dCBnb2luZyB0byBiZSBjYWxsZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBTbyB0aGF0IG1lYW5zIG5vIHByb2JlLCBubyBmdXp6LgoKSSYjMzk7bSByYWNraW5nIG15IGJyYWluLiBTeXprYWxsZXIuLi4gZG9lcyBpdCBoYXZlIHNvbWUgbWFnaWMgYHN5el9wY2lfZGV2aWNlYCBmdW5jdGlvbiB0aGF0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2U/IEkga25vdyBhYm91dCBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgZm9yIFBDSSBkZXZpY2VzPyBEb2VzIGl0IHVzZSBgdmhjaWAgZm9yIFBDST8gT3IsIERvZXMgc3l6a2FsbGVyIGhhdmUgYSBnZW5lcmFsIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsIHRoYXQgY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzPyBObyEgV2FpdCwgYWN0dWFsbHksIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHVzZXMgYHZmaW9gIG9yIHJlbGllcyBvbiBRRU1VLCBzbyB0aGF0JiMzOTtzIHRoZSBvbmx5IHJlYWwgb3B0aW9uLiBObywgU3l6a2FsbGVyIGRvZXMgaGF2ZSBhIGB2aGNpYCBmb3IgVVNCLCBidXQgdGhhdCB3b24mIzM5O3Qgd29yayBoZXJlLgoKTGV0IG1lIHNlZSBpZiBJIGNhbiBmaW5kIHNvbWUgUENJIGVtdWxhdGlvbiB3aXRoaW4gU3l6a2FsbGVyLiBJdCBsb29rcyBsaWtlIGl0IGRvZXMgaGF2ZSBzdHVmZiBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgLiBPaCwgd2FpdCwgZGlkIHRoZXkgcmVjZW50bHkgYWRkIHNvbWV0aGluZyB3aXRoIGB2ZmlvYCBvciBhIGR1bW15IFBDSSBjb250cm9sbGVyPyBObywgU3l6a2FsbGVyIHN0aWxsIHVzZXMgYHFlbXVgIHdpdGggdGhlIHN0YW5kYXJkIGRldmljZXMuCgpUaGlzIGRyaXZlciBpc24mIzM5O3QgcmVhY2hhYmxlIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGF0IG1ha2VzIGZ1enppbmcgYSB3YXN0ZSBvZiB0aW1lLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcm9iZSBgc2ZjYCB0byBldmVuIHN0YXJ0LiBJcyB0aGVyZSBhIHZpcnR1YWwgZGV2aWNlIGZvciB0aGlzPyBObywgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIEkgd291bGQgY2hlY2sgc3l6a2FsbGVyIGZvciBgc2ZjYCBidXQgSSBkb24mIzM5O3QgaGF2ZSB0aGF0IHNvdXJjZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlLiBOb3JtYWxseSBQQ0kgZHJpdmVycyByZXF1aXJlIGEgbWF0Y2hpbmcgdmVuZG9yL2RldmljZSBJRCBmcm9tIGEgcmVhbCBQQ0kgZGV2aWNlLiBXaXRob3V0IFFFTVUgZW11bGF0aW9uLCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLgoKT2theSwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRoaW5nOiBpcyB0aGVyZSAqYW55KiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFNGQyBpbiB0aGUga2VybmVsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NGQzkxMDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6MjA6XHR0cmlzdGF0ZSBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAvRUYxMDAtZmFtaWx5IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNy1cdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgMTAvNDAtZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcyBiYXNlZCBvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6Mjg6XHQgIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IGNvbnRyb2xsZXJzLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MzU9Y29uZmlnIFNGQ19NVERcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjM2Olx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IE1URCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0zNy1cdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBNVEQgXHUwMDI2XHUwMDI2ICEoU0ZDPXkgXHUwMDI2XHUwMDI2IE1URD1tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTQ0PWNvbmZpZyBTRkNfTUNESV9NT05cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjQ1Olx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IGh3bW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTQ2LVx0ZGVwZW5kcyBvbiBTRkMgXHUwMDI2XHUwMDI2IEhXTU9OIFx1MDAyNlx1MDAyNiAhKFNGQz15IFx1MDAyNlx1MDAyNiBIV01PTj1tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTUxPWNvbmZpZyBTRkNfU1JJT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjUyOlx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IFNSLUlPViBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy01My1cdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBQQ0lfSU9WXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9NjA9Y29uZmlnIFNGQ19NQ0RJX0xPR0dJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjYxOlx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IE1DREkgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy02Mi1cdGRlcGVuZHMgb24gU0ZDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9Njk9Y29uZmlnIFNGQ19DWExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjcwOlx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IENYTCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBDWExfQlVTIFx1MDAzZT0gU0ZDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oPTI2PWVudW0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaC0xMjQtLyogTWF4aW11bSBudW1iZXIgb2YgVFggUElPIGJ1ZmZlcnMgd2UgbWF5IGFsbG9jYXRlIHRvIGEgZnVuY3Rpb24uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmg6MTI1OiAqIFRoaXMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgb24gZWFjaCBTRkM5MTAwLWZhbWlseVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oLTEyNi0gKiBjb250cm9sbGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzgyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRUZYIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU29sYXJmbGFyZSBTRkM5MTAwL0VGMTAwLWZhbWlseSBkcml2ZXIsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgcHJpbWFyeSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSYjMzk7cyBubyBrZXJuZWwtbGV2ZWwgZW11bGF0aW9uIG9mIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCBRRU1VIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBpdHMgb3duLiBUaGlzIG1lYW5zIHRoZSBgZWZ4X3BjaV9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoZSBkcml2ZXIsIHdpbGwgbmV2ZXIgZ2V0IHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoYXQgbXVjaCBpcyBvYnZpb3VzLgoKQnV0IHdhaXQsIGhvbGQgb24uIFRoZSBwYXRjaCBtZW50aW9ucyBDWEwgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgU0ZDIGRyaXZlci4gTm93LCAqdGhhdCogY29tcGxpY2F0ZXMgdGhpbmdzLiBEb2VzIFFFTVUgZXZlbiBlbXVsYXRlIENYTD8gWWVzLCBpdCBkb2VzISBRRU1VIGhhcyBhZGRlZCBzb21lIENYTCBlbXVsYXRpb24sIGZvY3VzaW5nIG9uLCBmb3IgaW5zdGFuY2UsIENYTCB0eXBlIDMgZGV2aWNlcy4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBhIFNvbGFyZmxhcmUgTklDICp3aXRoKiBDWEw/IEFuZCB0aGUgYW5zd2VyLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXMgbm8uIFNvLCB0aGUgb3JpZ2luYWwgcHJvYmxlbSByZW1haW5zOyB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGlzbiYjMzk7dCBnZXR0aW5nIGNhbGxlZC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIERvZXMgc3l6a2FsbGVyIG9mZmVyIHNvbWUgc29ydCBvZiBtYWdpYz8gTWF5YmUgaXQgaGFzIGEgYHN5el9wY2lfZGV2aWNlYCBvciBzaW1pbGFyPyBEb2VzIHRoYXQgZ2l2ZSB1cyBhbiBhbHRlcm5hdGl2ZSByb3V0ZSBpbj8gQWgsIG5vLCBpdCYjMzk7cyBub3QgdGhhdCBzaW1wbGUuIFN5emthbGxlciBkb2VzbiYjMzk7dCBwcm92aWRlIGEgd2F5IHRvIGZ1enogZW50aXJlbHkgYXJiaXRyYXJ5IFBDSSBkcml2ZXJzIHVubGVzcyB0aGV5IGhhdmUgYXNzb2NpYXRlZCB2aXJ0dWFsIGRldmljZXMuIEV4YW1wbGVzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWAsIGB2a21zYCwgb3IgYHNuZC1kdW1teWAsIG9yIGlmIGl0IGNhbiBpbmplY3QgZGV2aWNlcyBpbnRvIHRoZSBzeXN0ZW0uCgpBaGEhIFdhaXQsIG15IG1lbW9yeSBzZXJ2ZXMgbWUgd2VsbC4gVGhlcmUgKmlzKiBhIFBDSSBmdXp6aW5nIHN1YnN5c3RlbSBpbiBzeXprYWxsZXIuIEkmIzM5O3ZlIHNlZW4gaXQhIFN5emthbGxlciBoYXMgdGhlIGBzeXpfcGNpX2RldmljZWAgbWVjaGFuaXNtISBUaGF0IGFsbG93cyBzeXprYWxsZXIgdG8gYWN0dWFsbHkgZW11bGF0ZSBQQ0kgZGV2aWNlcyEgTm93LCB0aGlzIGlzIHByb21pc2luZy4gV2UgbWlnaHQgaGF2ZSBhIHdheSBpbiBhZnRlciBhbGwuIFJpZ2h0LCBzbyBub3cgdGhlIGtleSBxdWVzdGlvbjogRG9lcyBgc3l6X3BjaV9kZXZpY2VgIGV4aXN0IGluIHRoZSBrZXJuZWw/IFRpbWUgdG8gZ28gaHVudGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9wY2lfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gU0ZDIERldmljZSBFbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGBzZmNgIGRldmljZSB0aHJvdWdoIHN5emthbGxlci4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgc3l6X3BjaV9kZXZpY2VgLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoYXQmIzM5O3Mgbm90IGFjdHVhbGx5IGluIHRoZSBrZXJuZWwgaXRzZWxmOyBpdCYjMzk7cyBhIHN5emthbGxlciBjb25zdHJ1Y3QuIEFuZCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZSBhcmJpdHJhcnkgUENJIGRldmljZXMgd2l0aGluIHRoZSBrZXJuZWwgc3BhY2UsIGl0IHVzZXMgUUVNVSBvciByZWxpZXMgb24gZXhpc3Rpbmcga2VybmVsIG1vZHVsZXMuIFNvLCBpZiB0aGVyZSBpc24mIzM5O3QgYSBrZXJuZWwgbW9kdWxlIHRvIHN0YW5kIGluIGZvciB0aGUgU0ZDIGRldmljZSwgSSYjMzk7bSBvdXQgb2YgbHVjay4gSXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBkaXJlY3RseS4KCkFscmlnaHQsIGEgbmV3IHBsYW4uIEkgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGludGVyYWN0IHdpdGggYGVmeF9jeGxfaW5pdGAgb3IgYGN4bF9zZXRfY2FwYWNpdHlgLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCBgY3hsX3NldF9jYXBhY2l0eWAgaXMgZXhwb3J0ZWQsIGFuZCBgZWZ4X2N4bF9pbml0YCBtYWtlcyB1c2Ugb2YgaXQuIFRoYXTigJlzIHByb21pc2luZy4gTG9va2luZyBmdXJ0aGVyLCBgZWZ4X2N4bF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgZWZ4X3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGBzZmNgIGRyaXZlci4gU28sIEkgaGF2ZSBhIHBhdGggaGVyZSEgTm93IEkgbmVlZCB0byBjaGVjayB0aGUgUENJIElEcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBzZmNgIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZnhfcGNpX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYz0xMDAxPXN0YXRpYyB2b2lkIGVmeF9wcm9iZV92cGRfc3RyaW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDM0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEwMzU6c3RhdGljIGludCBlZnhfcGNpX3Byb2JlX21haW4oc3RydWN0IGVmeF9uaWMgKmVmeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDM2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTA4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxMDg2OnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKHN0cnVjdCBlZnhfbmljICplZngpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTA4Ny17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTA4OC1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gZWZ4LVx1MDAzZW5ldF9kZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTA4OTpcdGludCByYyA9IGVmeF9wY2lfcHJvYmVfbWFpbihlZngpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEwOTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTExNTItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTE1MzpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTE1NC1cdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjA3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEyMDg6XHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMDktXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTIxMy1cdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEyMTQ6XHRcdHJjID0gZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKGVmeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTIxNS1cdFx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMjMtXHRcdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEyMjQ6XHRcdFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjI1LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTE0MDg9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xNDEwLVx0LmlkX3RhYmxlXHQ9IGVmeF9wY2lfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMTpcdC5wcm9iZVx0XHQ9IGVmeF9wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTQxMi1cdC5yZW1vdmVcdFx0PSBlZnhfcGNpX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9ODk2PXN0YXRpYyB2b2lkIGVmeF9wcm9iZV92cGRfc3RyaW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy05MjktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6OTMwOnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9tYWluKHN0cnVjdCBlZnhfbmljICplZngpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTMxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjk4MTpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTk4Mi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgzLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBlZngtXHUwMDNlbmV0X2RldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo5ODQ6XHRpbnQgcmMgPSBlZnhfcGNpX3Byb2JlX21haW4oZWZ4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy05ODUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwNDEtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6MTA0MjpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA0My1cdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwNzY6XHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwNzctXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA4MS1cdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwODI6XHRcdHJjID0gZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKGVmeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA4My1cdFx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwOTEtXHRcdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwOTI6XHRcdFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDkzLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEyNzM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc1LVx0LmlkX3RhYmxlXHQ9IGVmeF9wY2lfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6MTI3NjpcdC5wcm9iZVx0XHQ9IGVmeF9wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTI3Ny1cdC5yZW1vdmVcdFx0PSBlZnhfcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFNGQyBEcml2ZXIgYW5kIEV4cGxvcmluZyBDWEwgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBTeXprYWxsZXIgY2FuJiMzOTt0IGRpcmVjdGx5IHRhcmdldCB0aGUgYHNmY2AgZHJpdmVyLiBUaGUgZnJ1c3RyYXRpbmcgdGhpbmcgaXMsIGl0IG5lZWRzIHRoYXQgc3BlY2lmaWMgUENJIGhhcmR3YXJlLCBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgZ29vZCBlbXVsYXRpb24uIEJ1dCBob2xkIG9uLi4uIGxldCYjMzk7cyBzaGlmdCBnZWFycy4gV2hhdCBhYm91dCBleHBsb3JpbmcgcG90ZW50aWFsIGVudHJ5IHBvaW50cyB3aXRoaW4gdGhlIENYTCBzdWJzeXN0ZW0/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBjeGxfc2V0X2NhcGFjaXR5YCBhbmQgYGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvYC4gQXJlIHRoZXkgcmVhY2hhYmxlIGFuZCB3b3J0aCBpbnZlc3RpZ2F0aW5nPwoKYGN4bF9zZXRfY2FwYWNpdHlgLCBhcyBJIHJlY2FsbCwgaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGRpdGlvbiwgcmVzaWRpbmcgaW4gYGRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS4gVGhlIGNyaXRpY2FsIHN0ZXAgbm93IGlzIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSWYgd2UgY2FuIHJlYWNoIHRoYXQsIGl0IG1pZ2h0IGJlIGEgbmV3IHBsYWNlIHRvIGF0dGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hsX3NldF9jYXBhY2l0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTY0ND1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY0Ny0vKipcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjQ4OiAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDktICpcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1Mi0gKi9cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjUzOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KVxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NTQte1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYxLX1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjYyOkVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9zZXRfY2FwYWNpdHksIFwmIzM0O0NYTFwmIzM0Oyk7XG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY2My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jPTE3PWludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jOjcyOlx0aWYgKGN4bF9zZXRfY2FwYWNpdHkoXHUwMDI2Y3hsLVx1MDAzZWN4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jLTczLVx0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O2RwYSBjYXBhY2l0eSBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmluY2x1ZGUvY3hsL2N4bC5oPTIyNz1zdHJ1Y3QgY3hsX21lbWRldiAqZGV2bV9jeGxfcHJvYmVfbWVtKHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyxcbi0tXG5pbmNsdWRlL2N4bC9jeGwuaC0yMjktXG5pbmNsdWRlL2N4bC9jeGwuaDoyMzA6aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xuaW5jbHVkZS9jeGwvY3hsLmgtMjMxLSNlbmRpZiAvKiBfX0NYTF9DWExfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTeW1ib2wgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGFydGljdWxhciBzeW1ib2wsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgaXQmIzM5O3Mgb25seSBiZWluZyB1c2VkIHdpdGhpbiBgZWZ4X2N4bC5jYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCB3aGljaCBnZW5lcmFsbHkgc2ltcGxpZmllcyB0aGluZ3MsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gT25lIHRoaW5nIHRoYXQgYWx3YXlzIHNwcmluZ3MgdG8gbWluZCBpbiB0aGVzZSBraW5kcyBvZiBpbnZlc3RpZ2F0aW9ucyBpcyB0byBiZSBleGhhdXN0aXZlIGluIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCB2ZXJpZmljYXRpb24uCgpIb3dldmVyLCBhIG5hZ2dpbmcgcXVlc3Rpb24gaXMgYWxyZWFkeSBidWJibGluZyB1cDogd2hhdCBhYm91dCBgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm9gPyBXaGlsZSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQgKmlzbiYjMzk7dCogdXNlZCB0aGVyZSwgdGhpcyBmdW5jdGlvbiYjMzk7cyBzY29wZSwgb3Igc2ltaWxhcml0eSwgaGFzIGNhdXNlZCBtZSB0byBwYXVzZSwgYW5kIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUuIEV2ZW4gaWYgdGhlIHN5bWJvbCBpc24mIzM5O3QgZGlyZWN0bHkgKnVzZWQqIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB0aGVyZSBjb3VsZCBiZSBzdWJ0bGUgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZyBhdCBmaXJzdCBnbGFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oPTEwND1zdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZTtcbmRyaXZlcnMvY3hsL2NvcmUvY29yZS5oOjEwNTppbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcyk7XG5kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaC0xMDYtaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpO1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jPTExNDE9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9nZXRfZXZlbnRfcmVjb3JkcywgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTQzLS8qKlxuZHJpdmVycy9jeGwvY29yZS9tYm94LmM6MTE0NDogKiBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyAtIEdldCBwYXJ0aXRpb24gaW5mb1xuZHJpdmVycy9jeGwvY29yZS9tYm94LmMtMTE0NS0gKiBAbWRzOiBUaGUgZHJpdmVyIGRhdGEgZm9yIHRoZSBvcGVyYXRpb25cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTU0LSAqL1xuZHJpdmVycy9jeGwvY29yZS9tYm94LmM6MTE1NTppbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jLTExNTYte1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM9NjEyPWludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjMxLVxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYzo2MzI6XHRyYyA9IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKG1kcyk7XG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTYzMy1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgV29ydGhpbmVzcyBvZiBhIENYTCBDb3JlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm9gIGlzIHVzZWQgaW4gYGN4bF9tZW1fZHBhX2ZldGNoYCwgd2hpY2ggdGhlIENYTCBjb3JlIGV4cG9ydHMsIGFuZCBJIHNlZSB0aGF0IGBjeGxfbWVtX2RwYV9mZXRjaGAgd2FzIG1vdmVkIOKAkyBpdCBsb29rcyBsaWtlIGl0IHdlbnQgZnJvbSBgbWJveC5jYCB0byBgbWVtZGV2LmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhhdCBkaWZmLCBzaGFsbCB3ZT8KCkFscmlnaHQsIHNvIHRoZSBmaWxlcyBJIHNlZSBhcmU6CgoqICAgSW4gYGRyaXZlcnMvY3hsL2NvcmUvbWJveC5jYCwgYGN4bF9tZW1fZHBhX2ZldGNoYCBhbmQgYGFkZF9wYXJ0YCB3ZXJlIHJlbW92ZWQuCiogICBBbmQgaW4gYGRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNgLCB0aGV5JiMzOTt2ZSBiZWVuIGFkZGVkLgoKU28gdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIG1vdmUgb2YgYGN4bF9tZW1fZHBhX2ZldGNoYCwgYW5kIHRoZSBhc3NvY2lhdGVkIGBhZGRfcGFydGAgZnVuY3Rpb24sIGZyb20gYG1ib3guY2AgdG8gYG1lbWRldi5jYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSByZWZhY3RvcmluZzsgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBmdW5kYW1lbnRhbGx5IGFsdGVyIHRoZSBDWEwgY29yZSYjMzk7cyBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiByZWFzb24gZm9yIHRoZSBtb3ZlIGlzIHRvIGFsbG93IGBjeGxfc2V0X2NhcGFjaXR5YCB0byB1c2UgYGFkZF9wYXJ0YCwgd2hpY2ggaXMgbm93IHN0YXRpYyB3aXRoaW4gYG1lbWRldi5jYC4KCkFoYSwgYGN4bF9zZXRfY2FwYWNpdHlgICpkb2VzKiB1c2UgYGFkZF9wYXJ0YC4gU28gaXQgc2VlbXMgdGhlIGNvcmUgYWRkZWQgZnVuY3Rpb25hbGl0eSBpcyBgY3hsX3NldF9jYXBhY2l0eWAgYW5kIGFsc28gYGVmeF9jeGxfaW5pdGAgaW4gdGhlIGBzZmNgIGRyaXZlci4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgYHNmY2AgZHJpdmVyLCBhcyBJIHJlY2FsbCwgaXMgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkuIFRoZXJlJiMzOTtzIG5vIGVmZmVjdGl2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yICp0aGF0KiEgQW5kIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsgU2luY2UgdGhlIGBzZmNgIGRyaXZlciBpcyB0aWVkIHRvIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNoYW5nZXMgaW4gdGhlIENYTCBjb3JlIGFyZSBlc3NlbnRpYWxseSByZWZhY3RvcmluZywgd2l0aCB0aGUgYGN4bF9tZW1fZHBhX2ZldGNoYCBhbmQgYGFkZF9wYXJ0YCBtb3ZlbWVudCwgYW5kIHRoZW4gYWRkaW5nIGBjeGxfc2V0X2NhcGFjaXR5YCB3aGljaCAqb25seSogaXMgY2FsbGVkIGJ5IHRoYXQgYHNmY2AgZHJpdmVyLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGBzZmNgIGRyaXZlciwgd2hpY2ggKm9ubHkqIHdvcmtzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGlzIGlzIGVzc2VudGlhbGx5IHVuLWZ1enphYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayByZWFsIHF1aWNrIGlmIGBjeGxfc2V0X2NhcGFjaXR5YCBpcyBjYWxsZWQgYW55d2hlcmUgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hsX3NldF9jYXBhY2l0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTY0ND1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY0Ny0vKipcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjQ4OiAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDktICpcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1Mi0gKi9cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjUzOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KVxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NTQte1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYxLX1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjYyOkVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9zZXRfY2FwYWNpdHksIFwmIzM0O0NYTFwmIzM0Oyk7XG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY2My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jPTE3PWludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jOjcyOlx0aWYgKGN4bF9zZXRfY2FwYWNpdHkoXHUwMDI2Y3hsLVx1MDAzZWN4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jLTczLVx0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O2RwYSBjYXBhY2l0eSBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmluY2x1ZGUvY3hsL2N4bC5oPTIyNz1zdHJ1Y3QgY3hsX21lbWRldiAqZGV2bV9jeGxfcHJvYmVfbWVtKHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyxcbi0tXG5pbmNsdWRlL2N4bC9jeGwuaC0yMjktXG5pbmNsdWRlL2N4bC9jeGwuaDoyMzA6aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xuaW5jbHVkZS9jeGwvY3hsLmgtMjMxLSNlbmRpZiAvKiBfX0NYTF9DWExfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTY1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBDWEwgRW11bGF0aW9uIGluIHRoZSBzZmMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGNhbGwgaW4gYGVmeF9jeGwuY2AsIGFuZCBJIGtub3cgdGhhdCB0aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgYHNmY2AgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGNvdWxkIHdlIHBvdGVudGlhbGx5IHByb2JlIG9yIGludGVyYWN0IHdpdGggdGhlIGBzZmNgIGRyaXZlciB1c2luZyBzb21lIGZvcm0gb2YgZ2VuZXJpYyBDWEwgZW11bGF0aW9uPyBJdCYjMzk7cyBhIGxvbmcgc2hvdCwgYnV0IHdvcnRoIGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0aWVzLgoKVGhlIGBzZmNgIGRyaXZlciwgYXMgSSByZWNhbGwsIHRpZXMgaXRzZWxmIHRvIHNwZWNpZmljIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMuIFRoaXMgbWVhbnMgYSBkaXJlY3QsIHVubWVkaWF0ZWQgZW11bGF0aW9uIG1pZ2h0IGJlIHRyaWNreS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgUENJIElEIHRhYmxlLCBgZWZ4X3BjaV90YWJsZWAsIHdoaWNoIHNob3VsZCByZXNpZGUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY2AuIFNlZWluZyB0aGlzIHRhYmxlIHdpbGwgY29uZmlybSB0aGUgUENJIElEcyBhbmQgdGhlIGxldmVsIG9mIGRpcmVjdCBpbnRlcmFjdGlvbiB0aGF0IGlzIHBvc3NpYmxlLiBJdCB3aWxsIGhlbHAgbWUgZXZhbHVhdGUgd2hldGhlciB0aGUgQ1hMIGludGVyYWN0aW9uIGlzIHNvbGVseSBkZXBlbmRlbnQgb24gUENJIElEcyBvciBpZiB0aGVyZSBhcmUgb3RoZXIgYWNjZXNzIG1ldGhvZHMuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIGFzc2Vzc2luZyB0aGUgZmVhc2liaWxpdHkgb2YgYW55IGVtdWxhdGlvbiBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZ4X3BjaV90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM9ODYzPXN0YXRpYyB2b2lkIGVmeF91bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy04ODUtLyogUENJIGRldmljZSBJRCB0YWJsZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZ4X3BjaV90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTg4Ny1cdHtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU09MQVJGTEFSRSwgMHgwOTAzKSwgIC8qIFNGQzkxMjAgUEYgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM9MTQwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWZ4X3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTQwOS1cdC5uYW1lXHRcdD0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMDpcdC5pZF90YWJsZVx0PSBlZnhfcGNpX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTE0MTEtXHQucHJvYmVcdFx0PSBlZnhfcGNpX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYz0xNDc4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQ3OTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZWZ4X3BjaV90YWJsZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTc4Mz1zdGF0aWMgdm9pZCBlZnhfdW5yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGVmeF9uaWMgKmVmeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtODA0LS8qIFBDSSBkZXZpY2UgSUQgdGFibGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo4MDU6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVmeF9wY2lfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy04MDYtXHR7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NPTEFSRkxBUkUsIDB4MDgwMyksXHQvKiBTRkM5MDIwICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEyNzM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEyNzQtXHQubmFtZVx0XHQ9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEyNzU6XHQuaWRfdGFibGVcdD0gZWZ4X3BjaV90YWJsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc2LVx0LnByb2JlXHRcdD0gZWZ4X3BjaV9wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9MTM0OT1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEzNTA6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGVmeF9wY2lfdGFibGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5NwoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBTb2xhcmZsYXJlLVNwZWNpZmljIEhhcmR3YXJlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBjbGVhci4gVGhlIGNvZGUgYmVpbmcgaW50cm9kdWNlZCBoZXJlIGlzIGFsbCB0aWVkIGRpcmVjdGx5IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAgbmV0d29yayBkcml2ZXIuIEkgcmVtZW1iZXIgdGhvc2UgUENJIElEcywgYFBDSV9WRU5ET1JfSURfU09MQVJGTEFSRSwgMHgwOTAzYCwgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gdGhlaXIgaGFyZHdhcmUuIEFuZCBRRU1VLCB0aGUgZW52aXJvbm1lbnQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBmb3IgZnV6emluZywgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0LiBUaGVyZSYjMzk7cyBubyBnZW5lcmljIFBDSSBkZXZpY2UgZW11bGF0b3IgaW4gc3l6a2FsbGVyIHRvIGp1c3Qgd2hpcCB1cCBhIG1vY2sgb2YgdGhhdCBoYXJkd2FyZSBlaXRoZXIuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBkcml2ZXIgKnJlcXVpcmVzKiBhY3R1YWwgcGh5c2ljYWwgU29sYXJmbGFyZSBoYXJkd2FyZSwgdGhlIG5ldyBDWEwgc3VwcG9ydCBjb2RlLCB3aGljaCB0aGlzIHBhdGNoIGludHJvZHVjZXMsIGlzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAuIEl0IGRvZXNuJiMzOTt0IG1hdHRlciB0aGF0IHNvbWUgb2YgdGhlIGNoYW5nZXMgYXJlIGp1c3QgcmVmYWN0b3JpbmcgaW4gdGhlIENYTCBjb3JlLCBvciB0aGF0IHRoZXkgYXJlIGdlbmVyYWwsIHRoaXMgQ1hMIGNvcmUgcmVmYWN0b3JpbmcgaXMgbm90IHRyaWdnZXJlZCwgYWNjZXNzaWJsZSBvciByZWFjaGVkIHdpdGhvdXQgdGhlIFNGQyBkcml2ZXIgZmlyc3QuCgpUaGlzIGNvbmZpcm1zIHdoYXQgSSBleHBlY3RlZDsgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsgY2F0ZWdvcnkuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgb25lLiBXb3J0aEZ1enppbmc9ZmFsc2UgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDWEwgc3VwcG9ydCB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBuZXR3b3JrIGRyaXZlciAoc2ZjKSBhbmQgaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgQ1hMIGNvcmUgZm9yIGl0LiBUaGUgc2ZjIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTb2xhcmZsYXJlIFBDSSBoYXJkd2FyZSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDWEwgc3VwcG9ydCB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBuZXR3b3JrIGRyaXZlciAoc2ZjKSBhbmQgaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgQ1hMIGNvcmUgZm9yIGl0LiBUaGUgc2ZjIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTb2xhcmZsYXJlIFBDSSBoYXJkd2FyZSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQyOjUzLjQ3MjQwNzAyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjM3MTY0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0Mjo1My40NzI0MTc3MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjc4MzcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFhYTE0MTZkOTQ4MGUxNDI1ZTQ4N2NhMzBmNWIyOTYzNzRhMWQ2MjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxNjo0Mjo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXFxuaW5kZXggMDc1NTVhZTYzODU5NDAuLmY3Y2ViYjAyNjU1MjM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXFxuKysrIGIvZHJpdmVycy9jeGwvY29yZS9jb3JlLmhcXG5AQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkcixcXG4gc3RydWN0IGRlbnRyeSAqY3hsX2RlYnVnZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpkaXIpO1xcbiBpbnQgY3hsX2RwYV9zZXRfcGFydChzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkLFxcbiBcXHRcXHQgICAgIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpO1xcbitzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZTtcXG4raW50IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMpO1xcbiBpbnQgY3hsX2RwYV9hbGxvYyhzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkLCB1NjQgc2l6ZSk7XFxuIGludCBjeGxfZHBhX2ZyZWUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7XFxuIHJlc291cmNlX3NpemVfdCBjeGxfZHBhX3NpemUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jIGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcXG5pbmRleCA3YzZjNWI3NDUwYTU0YS4uOTdiMWU2MWFkMDE4NzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcXG4rKysgYi9kcml2ZXJzL2N4bC9jb3JlL21ib3guY1xcbkBAIC0xMTUyLDcgKzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcXFwiQ1hMXFxcIik7XFxuICAqXFxuICAqIFNlZSBDWEwgQDguMi45LjUuMi4xIEdldCBQYXJ0aXRpb24gSW5mb1xcbiAgKi9cXG4tc3RhdGljIGludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKVxcbitpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcXG4ge1xcbiBcXHRzdHJ1Y3QgY3hsX21haWxib3ggKmN4bF9tYm94ID0gXFx1MDAyNm1kcy1cXHUwMDNlY3hsZHMuY3hsX21ib3g7XFxuIFxcdHN0cnVjdCBjeGxfbWJveF9nZXRfcGFydGl0aW9uX2luZm8gcGk7XFxuQEAgLTEzMDgsNTUgKzEzMDgsNiBAQCBpbnQgY3hsX21lbV9zYW5pdGl6ZShzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQsIHUxNiBjbWQpXFxuIFxcdHJldHVybiAtRUJVU1k7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXFxuLXtcXG4tXFx0aW50IGkgPSBpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zO1xcbi1cXG4tXFx0aWYgKHNpemUgPT0gMClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aW5mby1cXHUwMDNlcGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHtcXG4tXFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuLVxcdFxcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxcbi1cXHR9O1xcbi1cXHRpbmZvLVxcdTAwM2VwYXJ0W2ldLm1vZGUgPSBtb2RlO1xcbi1cXHRpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zKys7XFxuLX1cXG4tXFxuLWludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKVxcbi17XFxuLVxcdHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyA9IFxcdTAwMjZtZHMtXFx1MDAzZWN4bGRzO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy1cXHUwMDNlZGV2O1xcbi1cXHRpbnQgcmM7XFxuLVxcbi1cXHRpZiAoIWN4bGRzLVxcdTAwM2VtZWRpYV9yZWFkeSkge1xcbi1cXHRcXHRpbmZvLVxcdTAwM2VzaXplID0gMDtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGluZm8tXFx1MDAzZXNpemUgPSBtZHMtXFx1MDAzZXRvdGFsX2J5dGVzO1xcbi1cXG4tXFx0aWYgKG1kcy1cXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcXG4tXFx0XFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTtcXG4tXFx0XFx0YWRkX3BhcnQoaW5mbywgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLFxcbi1cXHRcXHRcXHQgbWRzLVxcdTAwM2VwZXJzaXN0ZW50X29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9QTUVNKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcXG4tXFx0aWYgKHJjKSB7XFxuLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IHBhcnRpdGlvbiBpbmZvcm1hdGlvblxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiByYztcXG4tXFx0fVxcbi1cXG4tXFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xcbi1cXHRhZGRfcGFydChpbmZvLCBtZHMtXFx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVxcdTAwM2VhY3RpdmVfcGVyc2lzdGVudF9ieXRlcyxcXG4tXFx0XFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcXFwiQ1hMXFxcIik7XFxuLVxcbiBpbnQgY3hsX2dldF9kaXJ0eV9jb3VudChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCB1MzIgKmNvdW50KVxcbiB7XFxuIFxcdHN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSBcXHUwMDI2bWRzLVxcdTAwM2VjeGxkcy5jeGxfbWJveDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcXG5pbmRleCAzM2EzZDJlN2IxM2FmOS4uMmU0NTdiMWViYzdkZmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcXG5AQCAtNTk0LDYgKzU5NCw3MyBAQCBib29sIGlzX2N4bF9tZW1kZXYoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsIFxcXCJDWExcXFwiKTtcXG4gXFxuK3N0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXFxuK3tcXG4rXFx0aW50IGkgPSBpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zO1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlcGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHtcXG4rXFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuK1xcdFxcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxcbitcXHR9O1xcbitcXHRpbmZvLVxcdTAwM2VwYXJ0W2ldLm1vZGUgPSBtb2RlO1xcbitcXHRpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zKys7XFxuK31cXG4rXFxuK2ludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyA9IFxcdTAwMjZtZHMtXFx1MDAzZWN4bGRzO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWN4bGRzLVxcdTAwM2VtZWRpYV9yZWFkeSkge1xcbitcXHRcXHRpbmZvLVxcdTAwM2VzaXplID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNpemUgPSBtZHMtXFx1MDAzZXRvdGFsX2J5dGVzO1xcbitcXG4rXFx0aWYgKG1kcy1cXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcXG4rXFx0XFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTtcXG4rXFx0XFx0YWRkX3BhcnQoaW5mbywgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLFxcbitcXHRcXHRcXHQgbWRzLVxcdTAwM2VwZXJzaXN0ZW50X29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9QTUVNKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IHBhcnRpdGlvbiBpbmZvcm1hdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xcbitcXHRhZGRfcGFydChpbmZvLCBtZHMtXFx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVxcdTAwM2VhY3RpdmVfcGVyc2lzdGVudF9ieXRlcyxcXG4rXFx0XFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcXFwiQ1hMXFxcIik7XFxuK1xcbitcXG4rLyoqXFxuKyAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxcbisgKlxcbisgKiBAY3hsZHM6IHBvaW50ZXIgdG8gY3hsX2Rldl9zdGF0ZVxcbisgKiBAY2FwYWNpdHk6IGRldmljZSB2b2xhdGlsZSBtZW1vcnkgc2l6ZVxcbisgKi9cXG4raW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpXFxuK3tcXG4rXFx0c3RydWN0IGN4bF9kcGFfaW5mbyByYW5nZV9pbmZvID0ge1xcbitcXHRcXHQuc2l6ZSA9IGNhcGFjaXR5LFxcbitcXHR9O1xcbitcXG4rXFx0YWRkX3BhcnQoXFx1MDAyNnJhbmdlX2luZm8sIDAsIGNhcGFjaXR5LCBDWExfUEFSVE1PREVfUkFNKTtcXG4rXFx0cmV0dXJuIGN4bF9kcGFfc2V0dXAoY3hsZHMsIFxcdTAwMjZyYW5nZV9pbmZvKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfc2V0X2NhcGFjaXR5LCBcXFwiQ1hMXFxcIik7XFxuK1xcbiAvKipcXG4gICogc2V0X2V4Y2x1c2l2ZV9jeGxfY29tbWFuZHMoKSAtIGF0b21pY2FsbHkgZGlzYWJsZSB1c2VyIGN4bCBjb21tYW5kc1xcbiAgKiBAbWRzOiBUaGUgZGV2aWNlIHN0YXRlIHRvIG9wZXJhdGUgb25cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9wY2kuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmNcXG5pbmRleCBlNDMzOGZkN2UwMWI0Ny4uOWQ4MDdjMWEwMDJjYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9wY2kuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1kb2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9wY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Flci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hscGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGxtZW0uaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9wb3J0LmMgYi9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xcbmluZGV4IDEyMTVlZTRmNDAzNTFiLi5jYjYzM2UxOTE1MWI1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lkci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hsL2VpbmouaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9wY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2N4bG1lbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hscGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGwuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9yZWdzLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xcbmluZGV4IDkzNzEwY2Y0ZjBhNjk3Li4yMGMyZDlmYmNmZTdkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jXFxuQEAgLTQsNiArNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3hsL3BjaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hsbWVtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGxwY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3BtdS5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jeGxwY2kuaCBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oXFxuaW5kZXggYjgyNmViNTNjZjdiYWMuLjExMGVjOWM0NGYwOWYxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3hsL2N4bHBjaS5oXFxuKysrIGIvZHJpdmVycy9jeGwvY3hscGNpLmhcXG5AQCAtMTMsMTYgKzEzLDYgQEBcXG4gICovXFxuICNkZWZpbmUgQ1hMX1BDSV9ERUZBVUxUX01BWF9WRUNUT1JTIDE2XFxuIFxcbi0vKiBSZWdpc3RlciBCbG9jayBJZGVudGlmaWVyIChSQkkpICovXFxuLWVudW0gY3hsX3JlZ2xvY190eXBlIHtcXG4tXFx0Q1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLFxcbi1cXHRDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXFxuLVxcdENYTF9SRUdMT0NfUkJJX1ZJUlQsXFxuLVxcdENYTF9SRUdMT0NfUkJJX01FTURFVixcXG4tXFx0Q1hMX1JFR0xPQ19SQklfUE1VLFxcbi1cXHRDWExfUkVHTE9DX1JCSV9UWVBFU1xcbi19O1xcbi1cXG4gLypcXG4gICogVGFibGUgQWNjZXNzIERPRSwgQ0RBVCBSZWFkIEVudHJ5IFJlc3BvbnNlXFxuICAqXFxuQEAgLTExMiw2ICsxMDIsNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9jeGxfcG9ydF9yYXNfc2V0dXAoc3RydWN0IGN4bF9wb3J0ICpwb3J0KVxcbiB9XFxuICNlbmRpZlxcbiBcXG4taW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwICptYXApO1xcbiAjZW5kaWYgLyogX19DWExfUENJX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9wY2kuYyBiL2RyaXZlcnMvY3hsL3BjaS5jXFxuaW5kZXggMjY3YzY3OWIwYjNjMjAuLmJiODkyZGJmZGQ2ZDZmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3hsL3BjaS5jXFxuKysrIGIvZHJpdmVycy9jeGwvcGNpLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NjeGwvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGwvbWFpbGJveC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiY3hsbWVtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJjeGxwY2kuaFxcXCJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xcbmluZGV4IGM0YzQzNDM0ZjMxNDM0Li45NzlmMjgwMWUyYThlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnXFxuQEAgLTY2LDYgKzY2LDE1IEBAIGNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXFxuIFxcdCAgRHJpdmVyLUludGVyZmFjZSkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcywgYWxsb3dpbmcgZGVidWdnaW5nIG9mXFxuIFxcdCAgZHJpdmVyL2Zpcm13YXJlIGludGVyYWN0aW9uLiAgVGhlIHRyYWNpbmcgaXMgYWN0dWFsbHkgZW5hYmxlZCBieVxcbiBcXHQgIGEgc3lzZnMgZmlsZSAnbWNkaV9sb2dnaW5nJyB1bmRlciB0aGUgUENJIGRldmljZS5cXG4rY29uZmlnIFNGQ19DWExcXG4rXFx0Ym9vbCBcXFwiU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBDWEwgc3VwcG9ydFxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBTRkMgXFx1MDAyNlxcdTAwMjYgQ1hMX0JVUyBcXHUwMDNlPSBTRkNcXG4rXFx0ZGVmYXVsdCBTRkNcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgZW5hYmxlcyBTRkMgQ1hMIHN1cHBvcnQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmluZyBDWEwgZm9yXFxuK1xcdCAgdXNpbmcgQ1RQSU8gd2l0aCBDWEwubWVtLiBUaGUgU0ZDIGRldmljZSB3aXRoIENYTCBzdXBwb3J0IGFuZFxcbitcXHQgIHdpdGggYSBDWEwtYXdhcmUgZmlybXdhcmUgY2FuIGJlIHVzZWQgZm9yIG1pbmltaXppbmcgbGF0ZW5jaWVzXFxuK1xcdCAgd2hlbiBzZW5kaW5nIHRocm91Z2ggQ1RQSU8uXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vS2NvbmZpZ1xcXCJcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvS2NvbmZpZ1xcXCJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlXFxuaW5kZXggZDk5MDM5ZWM0NjhkNjcuLmJiMGYxODkxY2RlNjUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxcbkBAIC0xMyw2ICsxMyw3IEBAIHNmYy0kKENPTkZJR19TRkNfU1JJT1YpXFx0Kz0gc3Jpb3YubyBlZjEwX3NyaW92Lm8gZWYxMDBfc3Jpb3YubyBlZjEwMF9yZXAubyBcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZS5vIHRjLm8gdGNfYmluZGluZ3MubyB0Y19jb3VudGVycy5vIFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNfZW5jYXBfYWN0aW9ucy5vIHRjX2Nvbm50cmFjay5vXFxuIFxcbitzZmMtJChDT05GSUdfU0ZDX0NYTClcXHQrPSBlZnhfY3hsLm9cXG4gb2JqLSQoQ09ORklHX1NGQylcXHQrPSBzZmMub1xcbiBcXG4gb2JqLSQoQ09ORklHX1NGQ19GQUxDT04pICs9IGZhbGNvbi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmNcXG5pbmRleCA3ZTA0ZjExNWJiYWFhZi4uNzNiYzA2NDkyOWY2MzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdWRwX3R1bm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiZWZ4X2N4bC5oXFxcIlxcbiBcXG4gLyogSGFyZHdhcmUgY29udHJvbCBmb3IgRUYxMCBhcmNoaXRlY3R1cmUgaW5jbHVkaW5nICdIdW50aW5ndG9uJy4gKi9cXG4gXFxuQEAgLTEwNiw3ICsxMDcsNyBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2dldF92Zl9pbmRleChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbiBcXG4gc3RhdGljIGludCBlZnhfZWYxMF9pbml0X2RhdGFwYXRoX2NhcHMoc3RydWN0IGVmeF9uaWMgKmVmeClcXG4ge1xcbi1cXHRNQ0RJX0RFQ0xBUkVfQlVGKG91dGJ1ZiwgTUNfQ01EX0dFVF9DQVBBQklMSVRJRVNfVjRfT1VUX0xFTik7XFxuK1xcdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfTEVOKTtcXG4gXFx0c3RydWN0IGVmeF9lZjEwX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC1cXHUwMDNlbmljX2RhdGE7XFxuIFxcdHNpemVfdCBvdXRsZW47XFxuIFxcdGludCByYztcXG5AQCAtMTc3LDYgKzE3OCwxMiBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbiBcXHRcXHRcXHQgIGVmeC1cXHUwMDNlbnVtX21hY19zdGF0cyk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChvdXRsZW4gXFx1MDAzYyBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfTEVOKVxcbitcXHRcXHRuaWNfZGF0YS1cXHUwMDNlZGF0YXBhdGhfY2FwczMgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5pY19kYXRhLVxcdTAwM2VkYXRhcGF0aF9jYXBzMyA9IE1DRElfRFdPUkQob3V0YnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBHRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9GTEFHUzMpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTExNDAsNiArMTE0Nyw5IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbiBcXHR1bnNpZ25lZCBpbnQgY2hhbm5lbF92aXMsIHBpb193cml0ZV92aV9iYXNlLCBtYXhfdmlzO1xcbiBcXHRzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LVxcdTAwM2VuaWNfZGF0YTtcXG4gXFx0dW5zaWduZWQgaW50IHVjX21lbV9tYXBfc2l6ZSwgd2NfbWVtX21hcF9zaXplO1xcbisjaWZkZWYgQ09ORklHX1NGQ19DWExcXG4rXFx0c3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhO1xcbisjZW5kaWZcXG4gXFx0dm9pZCBfX2lvbWVtICptZW1iYXNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC0xMjYzLDggKzEyNzMsMjMgQEAgc3RhdGljIGludCBlZnhfZWYxMF9kaW1lbnNpb25fcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpXFxuIFxcdGlvdW5tYXAoZWZ4LVxcdTAwM2VtZW1iYXNlKTtcXG4gXFx0ZWZ4LVxcdTAwM2VtZW1iYXNlID0gbWVtYmFzZTtcXG4gXFxuLVxcdC8qIFNldCB1cCB0aGUgV0MgbWFwcGluZyBpZiBuZWVkZWQgKi9cXG4tXFx0aWYgKHdjX21lbV9tYXBfc2l6ZSkge1xcbitcXHRpZiAoIXdjX21lbV9tYXBfc2l6ZSlcXG4rXFx0XFx0Z290byBza2lwX3BpbztcXG4rXFxuK1xcdC8qIFNldCB1cCB0aGUgV0MgbWFwcGluZyAqL1xcbitcXG4rI2lmZGVmIENPTkZJR19TRkNfQ1hMXFxuK1xcdHByb2JlX2RhdGEgPSBjb250YWluZXJfb2YoZWZ4LCBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEsIGVmeCk7XFxuK1xcdGlmICgobmljX2RhdGEtXFx1MDAzZWRhdGFwYXRoX2NhcHMzIFxcdTAwMjZcXG4rXFx0ICAgICgxIFxcdTAwM2NcXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9DWExfQ09ORklHX0VOQUJMRV9MQk4pKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcHJvYmVfZGF0YS1cXHUwMDNlY3hsX3Bpb19pbml0aWFsaXNlZCkge1xcbitcXHRcXHQvKiBVc2luZyBQSU8gdGhyb3VnaCBDWEwgbWFwcGluZyAqL1xcbitcXHRcXHRuaWNfZGF0YS1cXHUwMDNlcGlvX3dyaXRlX2Jhc2UgPSBwcm9iZV9kYXRhLVxcdTAwM2VjeGwtXFx1MDAzZWN0cGlvX2N4bDtcXG4rXFx0XFx0bmljX2RhdGEtXFx1MDAzZXBpb193cml0ZV92aV9iYXNlID0gcGlvX3dyaXRlX3ZpX2Jhc2U7XFxuK1xcdH0gZWxzZVxcbisjZW5kaWZcXG4rXFx0e1xcbitcXHRcXHQvKiBVc2luZyBsZWdhY3kgUElPIEJBUiBtYXBwaW5nICovXFxuIFxcdFxcdG5pY19kYXRhLVxcdTAwM2V3Y19tZW1iYXNlID0gaW9yZW1hcF93YyhlZngtXFx1MDAzZW1lbWJhc2VfcGh5cyArXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgdWNfbWVtX21hcF9zaXplLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHdjX21lbV9tYXBfc2l6ZSk7XFxuQEAgLTEyNzksMTIgKzEzMDQsMTQgQEAgc3RhdGljIGludCBlZnhfZWYxMF9kaW1lbnNpb25fcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpXFxuIFxcdFxcdFxcdG5pY19kYXRhLVxcdTAwM2V3Y19tZW1iYXNlICtcXG4gXFx0XFx0XFx0KHBpb193cml0ZV92aV9iYXNlICogZWZ4LVxcdTAwM2V2aV9zdHJpZGUgKyBFUl9EWl9UWF9QSU9CVUYgLVxcbiBcXHRcXHRcXHQgdWNfbWVtX21hcF9zaXplKTtcXG4tXFxuLVxcdFxcdHJjID0gZWZ4X2VmMTBfbGlua19waW9idWZzKGVmeCk7XFxuLVxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0ZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0gZWZ4X2VmMTBfbGlua19waW9idWZzKGVmeCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0ZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7XFxuK1xcbitza2lwX3BpbzpcXG4rXFxuIFxcdG5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtXFx1MDAzZW5ldF9kZXYsXFxuIFxcdFxcdCAgXFxcIm1lbW9yeSBCQVIgYXQgJXBhICh2aXJ0dWFsICVwKyV4IFVDLCAlcCsleCBXQylcXFxcblxcXCIsXFxuIFxcdFxcdCAgXFx1MDAyNmVmeC1cXHUwMDNlbWVtYmFzZV9waHlzLCBlZngtXFx1MDAzZW1lbWJhc2UsIHVjX21lbV9tYXBfc2l6ZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jXFxuaW5kZXggOGYxMzZhMTFkMzk2OGEuLjM4MDZjZDNkZDdmNDg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xcbkBAIC0zNCw2ICszNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3Jpb3YuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVmeF9kZXZsaW5rLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlZnhfY3hsLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwibWNkaV9wb3J0X2NvbW1vbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibWNkaV9wY29sLmhcXFwiXFxuQEAgLTk4MSwxMiArOTgyLDE1IEBAIHN0YXRpYyB2b2lkIGVmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KVxcbiBcXHRlZnhfcGNpX3JlbW92ZV9tYWluKGVmeCk7XFxuIFxcbiBcXHRlZnhfZmluaV9pbyhlZngpO1xcbitcXG4rXFx0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcXG4rXFx0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xcbitcXG4gXFx0cGNpX2RiZyhlZngtXFx1MDAzZXBjaV9kZXYsIFxcXCJzaHV0ZG93biBzdWNjZXNzZnVsXFxcXG5cXFwiKTtcXG4gXFxuIFxcdGVmeF9maW5pX2RldmxpbmtfYW5kX3VubG9jayhlZngpO1xcbiBcXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcXG4gXFx0ZnJlZV9uZXRkZXYoZWZ4LVxcdTAwM2VuZXRfZGV2KTtcXG4tXFx0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcXG4gXFx0a2ZyZWUocHJvYmVfZGF0YSk7XFxuIH07XFxuIFxcbkBAIC0xMTkwLDYgKzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZmFpbDI7XFxuIFxcbitcXHQvKiBBIHN1Y2Nlc3NmdWwgY3hsIGluaXRpYWxpemF0aW9uIGltcGxpZXMgYSBDWEwgcmVnaW9uIGNyZWF0ZWQgdG8gYmVcXG4rXFx0ICogdXNlZCBmb3IgUElPIGJ1ZmZlcnMuIElmIHRoZXJlIGlzIG5vIENYTCBzdXBwb3J0IGxlZ2FjeSBQSU8gYnVmZmVyc1xcbitcXHQgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTFxcbitcXHQgKiBzdXBwb3J0IGFuZCB0aGUgY3hsIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzLlxcbitcXHQgKi9cXG4rXFx0cmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJDWEwgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggZXJyb3IgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0Z290byBmYWlsMztcXG4rXFx0fVxcbitcXG4gXFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG4gXFx0aWYgKHJjKSB7XFxuIFxcdFxcdC8qIE9uIGZhaWx1cmUsIHJldHJ5IG9uY2UgaW1tZWRpYXRlbHkuXFxuQEAgLTEyMjgsNiArMTI0Myw3IEBAIHN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldixcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiAgZmFpbDM6XFxuK1xcdGVmeF9jeGxfZXhpdChwcm9iZV9kYXRhKTtcXG4gXFx0ZWZ4X2ZpbmlfaW8oZWZ4KTtcXG4gIGZhaWwyOlxcbiBcXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jXFxuQEAgLTAsMCArMSwxMDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbisgKlxcbisgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHNcXG4rICogQ29weXJpZ2h0IChDKSAyMDI1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9jeGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcIm5ldF9kcml2ZXIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVmeF9jeGwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgRUZYX0NUUElPX0JVRkZFUl9TSVpFXFx0U1pfMjU2TVxcbitcXG4raW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGVmeF9uaWMgKmVmeCA9IFxcdTAwMjZwcm9iZV9kYXRhLVxcdTAwM2VlZng7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gZWZ4LVxcdTAwM2VwY2lfZGV2O1xcbitcXHRzdHJ1Y3QgcmFuZ2UgY3hsX3Bpb19yYW5nZTtcXG4rXFx0c3RydWN0IGVmeF9jeGwgKmN4bDtcXG4rXFx0dTE2IGR2c2VjO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBJcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBhbmQgdXNpbmcgQ1hMPyAqL1xcbitcXHRpZiAoIXBjaWVfaXNfY3hsKHBjaV9kZXYpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGR2c2VjID0gcGNpX2ZpbmRfZHZzZWNfY2FwYWJpbGl0eShwY2lfZGV2LCBQQ0lfVkVORE9SX0lEX0NYTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBQQ0lfRFZTRUNfQ1hMX0RFVklDRSk7XFxuK1xcdGlmICghZHZzZWMpIHtcXG4rXFx0XFx0cGNpX2luZm8ocGNpX2RldiwgXFxcIkNYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfZGJnKHBjaV9kZXYsIFxcXCJDWExfRFZTRUNfUENJRV9ERVZJQ0UgY2FwYWJpbGl0eSBmb3VuZFxcXFxuXFxcIik7XFxuK1xcbitcXHQvKiBDcmVhdGUgYSBjeGxfZGV2X3N0YXRlIGVtYmVkZGVkIGluIHRoZSBjeGwgc3RydWN0IHVzaW5nIGN4bCBjb3JlIGFwaVxcbitcXHQgKiBzcGVjaWZ5aW5nIG5vIG1ib3ggYXZhaWxhYmxlLlxcbitcXHQgKi9cXG4rXFx0Y3hsID0gZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShcXHUwMDI2cGNpX2Rldi1cXHUwMDNlZGV2LCBDWExfREVWVFlQRV9ERVZNRU0sXFxuK1xcdFxcdFxcdFxcdFxcdHBjaV9nZXRfZHNuKHBjaV9kZXYpLCBkdnNlYyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGVmeF9jeGwsIGN4bGRzLCBmYWxzZSk7XFxuK1xcbitcXHRpZiAoIWN4bClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyYyA9IGN4bF9wY2lfc2V0dXBfcmVncyhwY2lfZGV2LCBDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZjeGwtXFx1MDAzZWN4bGRzLnJlZ19tYXApO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cGNpX2VycihwY2lfZGV2LCBcXFwiTm8gY29tcG9uZW50IHJlZ2lzdGVyc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjeGwtXFx1MDAzZWN4bGRzLnJlZ19tYXAuY29tcG9uZW50X21hcC5oZG1fZGVjb2Rlci52YWxpZCkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJFeHBlY3RlZCBIRE0gY29tcG9uZW50IHJlZ2lzdGVyIG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWN4bC1cXHUwMDNlY3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLnJhcy52YWxpZCkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJFeHBlY3RlZCBSQVMgY29tcG9uZW50IHJlZ2lzdGVyIG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZXQgbWVkaWEgcmVhZHkgZXhwbGljaXRseSBhcyB0aGVyZSBhcmUgbmVpdGhlciBtYWlsYm94IGZvciBjaGVja2luZ1xcbitcXHQgKiB0aGlzIHN0YXRlIG5vciB0aGUgQ1hMIHJlZ2lzdGVyIGludm9sdmVkLCBib3RoIG5vdCBtYW5kYXRvcnkgZm9yXFxuK1xcdCAqIHR5cGUyLlxcbitcXHQgKi9cXG4rXFx0Y3hsLVxcdTAwM2VjeGxkcy5tZWRpYV9yZWFkeSA9IHRydWU7XFxuK1xcbitcXHRpZiAoY3hsX3NldF9jYXBhY2l0eShcXHUwMDI2Y3hsLVxcdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJkcGEgY2FwYWNpdHkgc2V0dXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdGN4bC1cXHUwMDNlY3hsbWQgPSBkZXZtX2N4bF9wcm9iZV9tZW0oXFx1MDAyNmN4bC1cXHUwMDNlY3hsZHMsIFxcdTAwMjZjeGxfcGlvX3JhbmdlKTtcXG4rXFx0aWYgKElTX0VSUihjeGwtXFx1MDAzZWN4bG1kKSkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJDWEwgYWNjZWwgbWVtZGV2IGNyZWF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGN4bC1cXHUwMDNlY3hsbWQpO1xcbitcXHR9XFxuK1xcbitcXHRjeGwtXFx1MDAzZWN0cGlvX2N4bCA9IGlvcmVtYXBfd2MoY3hsX3Bpb19yYW5nZS5zdGFydCxcXG4rXFx0XFx0XFx0XFx0ICAgIHJhbmdlX2xlbihcXHUwMDI2Y3hsX3Bpb19yYW5nZSkpO1xcbitcXHRpZiAoIWN4bC1cXHUwMDNlY3RwaW9fY3hsKSB7XFxuK1xcdFxcdHBjaV9lcnIocGNpX2RldiwgXFxcIkNYTCBpb3JlbWFwIHJlZ2lvbiAoJXByYSkgZmFpbGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHUwMDI2Y3hsX3Bpb19yYW5nZSk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRwcm9iZV9kYXRhLVxcdTAwM2VjeGxfcGlvX2luaXRpYWxpc2VkID0gdHJ1ZTtcXG4rXFx0cHJvYmVfZGF0YS1cXHUwMDNlY3hsID0gY3hsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcXG4re1xcbitcXHRpZiAoIXByb2JlX2RhdGEtXFx1MDAzZWN4bClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW91bm1hcChwcm9iZV9kYXRhLVxcdTAwM2VjeGwtXFx1MDAzZWN0cGlvX2N4bCk7XFxuK31cXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkNYTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlMjcwNWNiMDYzZjZhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmhcXG5AQCAtMCwwICsxLDMyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4rICogRHJpdmVyIGZvciBBTUQgbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxcbisgKlxcbisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxcbisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWRcXG4rICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBFRlhfQ1hMX0hcXG4rI2RlZmluZSBFRlhfQ1hMX0hcXG4rXFxuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9jeGwuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBlZnhfcHJvYmVfZGF0YTtcXG4rXFxuK3N0cnVjdCBlZnhfY3hsIHtcXG4rXFx0c3RydWN0IGN4bF9kZXZfc3RhdGUgY3hsZHM7XFxuK1xcdHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZDtcXG4rXFx0dm9pZCBfX2lvbWVtICpjdHBpb19jeGw7XFxuK307XFxuK1xcbitpbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XFxuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHsgcmV0dXJuIDA7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9XFxuKyNlbmRpZlxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcXG5pbmRleCBiOThjMjU5ZjY3MmRiNS4uMzk2NGIyYzU2NjA5YzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcXG5AQCAtMTE5NywxNCArMTE5NywyNCBAQCBzdHJ1Y3QgZWZ4X25pYyB7XFxuIFxcdGF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7XFxuIH07XFxuIFxcbisjaWZkZWYgQ09ORklHX1NGQ19DWExcXG4rc3RydWN0IGVmeF9jeGw7XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAtIFN0YXRlIGFmdGVyIGhhcmR3YXJlIHByb2JlXFxuICAqIEBwY2lfZGV2OiBUaGUgUENJIGRldmljZVxcbiAgKiBAZWZ4OiBFZnggTklDIGRldGFpbHNcXG4rICogQGN4bDogZGV0YWlscyBvZiByZWxhdGVkIGN4bCBvYmplY3RzXFxuKyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS5cXG4gICovXFxuIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSB7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xcbiBcXHRzdHJ1Y3QgZWZ4X25pYyBlZng7XFxuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxcbitcXHRzdHJ1Y3QgZWZ4X2N4bCAqY3hsO1xcbitcXHRib29sIGN4bF9waW9faW5pdGlhbGlzZWQ7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZWZ4X25pYyAqZWZ4X25ldGRldl9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaFxcbmluZGV4IGVjM2IyZGY0M2I2OGQ5Li43NDgwZjk5OTVkZmI4ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcXG5AQCAtMTUyLDYgKzE1Miw4IEBAIGVudW0ge1xcbiAgKlxcdCVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcXG4gICogQGRhdGFwYXRoX2NhcHMyOiBGdXJ0aGVyIENhcGFiaWxpdGllcyBvZiBkYXRhcGF0aCBmaXJtd2FyZSAoRkxBR1MyIGZpZWxkIG9mXFxuICAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcXG4rICogQGRhdGFwYXRoX2NhcHMzOiBGdXJ0aGVyIENhcGFiaWxpdGllcyBvZiBkYXRhcGF0aCBmaXJtd2FyZSAoRkxBR1MzIGZpZWxkIG9mXFxuKyAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcXG4gICogQHJ4X2RwY3B1X2Z3X2lkOiBGaXJtd2FyZSBJRCBvZiB0aGUgUnhEUENQVVxcbiAgKiBAdHhfZHBjcHVfZndfaWQ6IEZpcm13YXJlIElEIG9mIHRoZSBUeERQQ1BVXFxuICAqIEBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc6IEZsYWc6IHZzd2l0Y2hpbmcgaGFzIHlldCB0byBiZSBzZXR1cCBhZnRlciBNQyByZWJvb3RcXG5AQCAtMTg3LDYgKzE4OSw3IEBAIHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSB7XFxuIFxcdGJvb2wgbXVzdF9jaGVja19kYXRhcGF0aF9jYXBzO1xcbiBcXHR1MzIgZGF0YXBhdGhfY2FwcztcXG4gXFx0dTMyIGRhdGFwYXRoX2NhcHMyO1xcbitcXHR1MzIgZGF0YXBhdGhfY2FwczM7XFxuIFxcdHVuc2lnbmVkIGludCByeF9kcGNwdV9md19pZDtcXG4gXFx0dW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkO1xcbiBcXHRib29sIG11c3RfcHJvYmVfdnN3aXRjaGluZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaFxcbmluZGV4IDAxNmM3NGZiNzQ3Y2Y2Li44MDJiMTQzZGU4M2RiNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2N4bC9jeGwuaFxcbisrKyBiL2luY2x1ZGUvY3hsL2N4bC5oXFxuQEAgLTIyNiw0ICsyMjYsNiBAQCBzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqX2Rldm1fY3hsX2Rldl9zdGF0ZV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXG4gc3RydWN0IGN4bF9tZW1kZXYgKmRldm1fY3hsX3Byb2JlX21lbShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByYW5nZSAqcmFuZ2UpO1xcbitcXG4raW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xcbiAjZW5kaWYgLyogX19DWExfQ1hMX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2UwMDAwMDE1ODcxYTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9jeGwvcGNpLmhcXG5AQCAtMCwwICsxLDIyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuK1xcbisjaWZuZGVmIF9fQ1hMX0NYTF9QQ0lfSF9fXFxuKyNkZWZpbmUgX19DWExfQ1hMX1BDSV9IX19cXG4rXFxuKy8qIFJlZ2lzdGVyIEJsb2NrIElkZW50aWZpZXIgKFJCSSkgKi9cXG4rZW51bSBjeGxfcmVnbG9jX3R5cGUge1xcbitcXHRDWExfUkVHTE9DX1JCSV9FTVBUWSA9IDAsXFxuK1xcdENYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCxcXG4rXFx0Q1hMX1JFR0xPQ19SQklfVklSVCxcXG4rXFx0Q1hMX1JFR0xPQ19SQklfTUVNREVWLFxcbitcXHRDWExfUkVHTE9DX1JCSV9QTVUsXFxuK1xcdENYTF9SRUdMT0NfUkJJX1RZUEVTXFxuK307XFxuK1xcbitzdHJ1Y3QgY3hsX3JlZ2lzdGVyX21hcDtcXG4rc3RydWN0IHBjaV9kZXY7XFxuK1xcbitpbnQgY3hsX3BjaV9zZXR1cF9yZWdzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIGN4bF9yZWdsb2NfdHlwZSB0eXBlLFxcbitcXHRcXHQgICAgICAgc3RydWN0IGN4bF9yZWdpc3Rlcl9tYXAgKm1hcCk7XFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0Mjo1NC4zODA0NTg5NTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzI5MTAwMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhYTE0MTZkOTQ4MGUxNDI1ZTQ4N2NhMzBmNWIyOTYzNzRhMWQ2MjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDE2OjQyOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9jb3JlLmggYi9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaFxuaW5kZXggMDc1NTVhZTYzODU5NDAuLmY3Y2ViYjAyNjU1MjM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9jb3JlLmhcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXG5AQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkcixcbiBzdHJ1Y3QgZGVudHJ5ICpjeGxfZGVidWdmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKmRpcik7XG4gaW50IGN4bF9kcGFfc2V0X3BhcnQoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCxcbiBcdFx0ICAgICBlbnVtIGN4bF9wYXJ0aXRpb25fbW9kZSBtb2RlKTtcbitzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZTtcbitpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcyk7XG4gaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpO1xuIGludCBjeGxfZHBhX2ZyZWUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7XG4gcmVzb3VyY2Vfc2l6ZV90IGN4bF9kcGFfc2l6ZShzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21ib3guYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jXG5pbmRleCA3YzZjNWI3NDUwYTU0YS4uOTdiMWU2MWFkMDE4NzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL21ib3guY1xuKysrIGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcbkBAIC0xMTUyLDcgKzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcIkNYTFwiKTtcbiAgKlxuICAqIFNlZSBDWEwgQDguMi45LjUuMi4xIEdldCBQYXJ0aXRpb24gSW5mb1xuICAqL1xuLXN0YXRpYyBpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbitpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbiB7XG4gXHRzdHJ1Y3QgY3hsX21haWxib3ggKmN4bF9tYm94ID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzLmN4bF9tYm94O1xuIFx0c3RydWN0IGN4bF9tYm94X2dldF9wYXJ0aXRpb25faW5mbyBwaTtcbkBAIC0xMzA4LDU1ICsxMzA4LDYgQEAgaW50IGN4bF9tZW1fc2FuaXRpemUoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kLCB1MTYgY21kKVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWRkX3BhcnQoc3RydWN0IGN4bF9kcGFfaW5mbyAqaW5mbywgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgZW51bSBjeGxfcGFydGl0aW9uX21vZGUgbW9kZSlcbi17XG4tXHRpbnQgaSA9IGluZm8tXHUwMDNlbnJfcGFydGl0aW9ucztcbi1cbi1cdGlmIChzaXplID09IDApXG4tXHRcdHJldHVybjtcbi1cbi1cdGluZm8tXHUwMDNlcGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHtcbi1cdFx0LnN0YXJ0ID0gc3RhcnQsXG4tXHRcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxuLVx0fTtcbi1cdGluZm8tXHUwMDNlcGFydFtpXS5tb2RlID0gbW9kZTtcbi1cdGluZm8tXHUwMDNlbnJfcGFydGl0aW9ucysrO1xuLX1cbi1cbi1pbnQgY3hsX21lbV9kcGFfZmV0Y2goc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcywgc3RydWN0IGN4bF9kcGFfaW5mbyAqaW5mbylcbi17XG4tXHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMgPSBcdTAwMjZtZHMtXHUwMDNlY3hsZHM7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy1cdTAwM2VkZXY7XG4tXHRpbnQgcmM7XG4tXG4tXHRpZiAoIWN4bGRzLVx1MDAzZW1lZGlhX3JlYWR5KSB7XG4tXHRcdGluZm8tXHUwMDNlc2l6ZSA9IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0aW5mby1cdTAwM2VzaXplID0gbWRzLVx1MDAzZXRvdGFsX2J5dGVzO1xuLVxuLVx0aWYgKG1kcy1cdTAwM2VwYXJ0aXRpb25fYWxpZ25fYnl0ZXMgPT0gMCkge1xuLVx0XHRhZGRfcGFydChpbmZvLCAwLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7XG4tXHRcdGFkZF9wYXJ0KGluZm8sIG1kcy1cdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLFxuLVx0XHRcdCBtZHMtXHUwMDNlcGVyc2lzdGVudF9vbmx5X2J5dGVzLCBDWExfUEFSVE1PREVfUE1FTSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmMgPSBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhtZHMpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cXG5cIik7XG4tXHRcdHJldHVybiByYztcbi1cdH1cbi1cbi1cdGFkZF9wYXJ0KGluZm8sIDAsIG1kcy1cdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuLVx0YWRkX3BhcnQoaW5mbywgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVx1MDAzZWFjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLFxuLVx0XHQgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLUVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcIkNYTFwiKTtcbi1cbiBpbnQgY3hsX2dldF9kaXJ0eV9jb3VudChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCB1MzIgKmNvdW50KVxuIHtcbiBcdHN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSBcdTAwMjZtZHMtXHUwMDNlY3hsZHMuY3hsX21ib3g7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcbmluZGV4IDMzYTNkMmU3YjEzYWY5Li4yZTQ1N2IxZWJjN2RmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcbkBAIC01OTQsNiArNTk0LDczIEBAIGJvb2wgaXNfY3hsX21lbWRldihjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsIFwiQ1hMXCIpO1xuIFxuK3N0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXG4re1xuK1x0aW50IGkgPSBpbmZvLVx1MDAzZW5yX3BhcnRpdGlvbnM7XG4rXG4rXHRpZiAoc2l6ZSA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpbmZvLVx1MDAzZXBhcnRbaV0ucmFuZ2UgPSAoc3RydWN0IHJhbmdlKSB7XG4rXHRcdC5zdGFydCA9IHN0YXJ0LFxuK1x0XHQuZW5kID0gc3RhcnQgKyBzaXplIC0gMSxcbitcdH07XG4rXHRpbmZvLVx1MDAzZXBhcnRbaV0ubW9kZSA9IG1vZGU7XG4rXHRpbmZvLVx1MDAzZW5yX3BhcnRpdGlvbnMrKztcbit9XG4rXG4raW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY3hsZHMtXHUwMDNlZGV2O1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKCFjeGxkcy1cdTAwM2VtZWRpYV9yZWFkeSkge1xuK1x0XHRpbmZvLVx1MDAzZXNpemUgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGluZm8tXHUwMDNlc2l6ZSA9IG1kcy1cdTAwM2V0b3RhbF9ieXRlcztcbitcbitcdGlmIChtZHMtXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcbitcdFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVx1MDAzZXZvbGF0aWxlX29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuK1x0XHRhZGRfcGFydChpbmZvLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcyxcbitcdFx0XHQgbWRzLVx1MDAzZXBlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcbitcdGlmIChyYykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gcXVlcnkgcGFydGl0aW9uIGluZm9ybWF0aW9uXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRhZGRfcGFydChpbmZvLCAwLCBtZHMtXHUwMDNlYWN0aXZlX3ZvbGF0aWxlX2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTtcbitcdGFkZF9wYXJ0KGluZm8sIG1kcy1cdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIG1kcy1cdTAwM2VhY3RpdmVfcGVyc2lzdGVudF9ieXRlcyxcbitcdFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXCJDWExcIik7XG4rXG4rXG4rLyoqXG4rICogY3hsX3NldF9jYXBhY2l0eTogaW5pdGlhbGl6ZSBkcGEgYnkgYSBkcml2ZXIgd2l0aG91dCBhIG1haWxib3guXG4rICpcbisgKiBAY3hsZHM6IHBvaW50ZXIgdG8gY3hsX2Rldl9zdGF0ZVxuKyAqIEBjYXBhY2l0eTogZGV2aWNlIHZvbGF0aWxlIG1lbW9yeSBzaXplXG4rICovXG4raW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpXG4re1xuK1x0c3RydWN0IGN4bF9kcGFfaW5mbyByYW5nZV9pbmZvID0ge1xuK1x0XHQuc2l6ZSA9IGNhcGFjaXR5LFxuK1x0fTtcbitcbitcdGFkZF9wYXJ0KFx1MDAyNnJhbmdlX2luZm8sIDAsIGNhcGFjaXR5LCBDWExfUEFSVE1PREVfUkFNKTtcbitcdHJldHVybiBjeGxfZHBhX3NldHVwKGN4bGRzLCBcdTAwMjZyYW5nZV9pbmZvKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgXCJDWExcIik7XG4rXG4gLyoqXG4gICogc2V0X2V4Y2x1c2l2ZV9jeGxfY29tbWFuZHMoKSAtIGF0b21pY2FsbHkgZGlzYWJsZSB1c2VyIGN4bCBjb21tYW5kc1xuICAqIEBtZHM6IFRoZSBkZXZpY2Ugc3RhdGUgdG8gb3BlcmF0ZSBvblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5pbmRleCBlNDMzOGZkN2UwMWI0Ny4uOWQ4MDdjMWEwMDJjYTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG4rKysgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktZG9lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjeGwvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bHBjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jXG5pbmRleCAxMjE1ZWU0ZjQwMzUxYi4uY2I2MzNlMTkxNTFiNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xuKysrIGIvZHJpdmVycy9jeGwvY29yZS9wb3J0LmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGwvZWluai5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxwY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bC5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9yZWdzLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xuaW5kZXggOTM3MTBjZjRmMGE2OTcuLjIwYzJkOWZiY2ZlN2RmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9yZWdzLmNcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jXG5AQCAtNCw2ICs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxwY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3BtdS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY3hscGNpLmggYi9kcml2ZXJzL2N4bC9jeGxwY2kuaFxuaW5kZXggYjgyNmViNTNjZjdiYWMuLjExMGVjOWM0NGYwOWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY3hscGNpLmhcbisrKyBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oXG5AQCAtMTMsMTYgKzEzLDYgQEBcbiAgKi9cbiAjZGVmaW5lIENYTF9QQ0lfREVGQVVMVF9NQVhfVkVDVE9SUyAxNlxuIFxuLS8qIFJlZ2lzdGVyIEJsb2NrIElkZW50aWZpZXIgKFJCSSkgKi9cbi1lbnVtIGN4bF9yZWdsb2NfdHlwZSB7XG4tXHRDWExfUkVHTE9DX1JCSV9FTVBUWSA9IDAsXG4tXHRDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXG4tXHRDWExfUkVHTE9DX1JCSV9WSVJULFxuLVx0Q1hMX1JFR0xPQ19SQklfTUVNREVWLFxuLVx0Q1hMX1JFR0xPQ19SQklfUE1VLFxuLVx0Q1hMX1JFR0xPQ19SQklfVFlQRVNcbi19O1xuLVxuIC8qXG4gICogVGFibGUgQWNjZXNzIERPRSwgQ0RBVCBSZWFkIEVudHJ5IFJlc3BvbnNlXG4gICpcbkBAIC0xMTIsNiArMTAyLDQgQEAgc3RhdGljIGlubGluZSB2b2lkIGRldm1fY3hsX3BvcnRfcmFzX3NldHVwKHN0cnVjdCBjeGxfcG9ydCAqcG9ydClcbiB9XG4gI2VuZGlmXG4gXG4taW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSxcbi1cdFx0ICAgICAgIHN0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwICptYXApO1xuICNlbmRpZiAvKiBfX0NYTF9QQ0lfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvcGNpLmMgYi9kcml2ZXJzL2N4bC9wY2kuY1xuaW5kZXggMjY3YzY3OWIwYjNjMjAuLmJiODkyZGJmZGQ2ZDZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvcGNpLmNcbisrKyBiL2RyaXZlcnMvY3hsL3BjaS5jXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsL21haWxib3guaFx1MDAzZVxuICNpbmNsdWRlIFwiY3hsbWVtLmhcIlxuICNpbmNsdWRlIFwiY3hscGNpLmhcIlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWdcbmluZGV4IGM0YzQzNDM0ZjMxNDM0Li45NzlmMjgwMWUyYThlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xuQEAgLTY2LDYgKzY2LDE1IEBAIGNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXG4gXHQgIERyaXZlci1JbnRlcmZhY2UpIGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFsbG93aW5nIGRlYnVnZ2luZyBvZlxuIFx0ICBkcml2ZXIvZmlybXdhcmUgaW50ZXJhY3Rpb24uICBUaGUgdHJhY2luZyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5XG4gXHQgIGEgc3lzZnMgZmlsZSAnbWNkaV9sb2dnaW5nJyB1bmRlciB0aGUgUENJIGRldmljZS5cbitjb25maWcgU0ZDX0NYTFxuK1x0Ym9vbCBcIlNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgQ1hMIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBTRkMgXHUwMDI2XHUwMDI2IENYTF9CVVMgXHUwMDNlPSBTRkNcbitcdGRlZmF1bHQgU0ZDXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBTRkMgQ1hMIHN1cHBvcnQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmluZyBDWEwgZm9yXG4rXHQgIHVzaW5nIENUUElPIHdpdGggQ1hMLm1lbS4gVGhlIFNGQyBkZXZpY2Ugd2l0aCBDWEwgc3VwcG9ydCBhbmRcbitcdCAgd2l0aCBhIENYTC1hd2FyZSBmaXJtd2FyZSBjYW4gYmUgdXNlZCBmb3IgbWluaW1pemluZyBsYXRlbmNpZXNcbitcdCAgd2hlbiBzZW5kaW5nIHRocm91Z2ggQ1RQSU8uXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvS2NvbmZpZ1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlXG5pbmRleCBkOTkwMzllYzQ2OGQ2Ny4uYmIwZjE4OTFjZGU2NTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxuQEAgLTEzLDYgKzEzLDcgQEAgc2ZjLSQoQ09ORklHX1NGQ19TUklPVilcdCs9IHNyaW92Lm8gZWYxMF9zcmlvdi5vIGVmMTAwX3NyaW92Lm8gZWYxMDBfcmVwLm8gXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWUubyB0Yy5vIHRjX2JpbmRpbmdzLm8gdGNfY291bnRlcnMubyBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjX2VuY2FwX2FjdGlvbnMubyB0Y19jb25udHJhY2sub1xuIFxuK3NmYy0kKENPTkZJR19TRkNfQ1hMKVx0Kz0gZWZ4X2N4bC5vXG4gb2JqLSQoQ09ORklHX1NGQylcdCs9IHNmYy5vXG4gXG4gb2JqLSQoQ09ORklHX1NGQ19GQUxDT04pICs9IGZhbGNvbi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xuaW5kZXggN2UwNGYxMTViYmFhYWYuLjczYmMwNjQ5MjlmNjM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC91ZHBfdHVubmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcImVmeF9jeGwuaFwiXG4gXG4gLyogSGFyZHdhcmUgY29udHJvbCBmb3IgRUYxMCBhcmNoaXRlY3R1cmUgaW5jbHVkaW5nICdIdW50aW5ndG9uJy4gKi9cbiBcbkBAIC0xMDYsNyArMTA3LDcgQEAgc3RhdGljIGludCBlZnhfZWYxMF9nZXRfdmZfaW5kZXgoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcbiBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIHtcbi1cdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WNF9PVVRfTEVOKTtcbitcdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfTEVOKTtcbiBcdHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtXHUwMDNlbmljX2RhdGE7XG4gXHRzaXplX3Qgb3V0bGVuO1xuIFx0aW50IHJjO1xuQEAgLTE3Nyw2ICsxNzgsMTIgQEAgc3RhdGljIGludCBlZnhfZWYxMF9pbml0X2RhdGFwYXRoX2NhcHMoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcdFx0XHQgIGVmeC1cdTAwM2VudW1fbWFjX3N0YXRzKTtcbiBcdH1cbiBcbitcdGlmIChvdXRsZW4gXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pXG4rXHRcdG5pY19kYXRhLVx1MDAzZWRhdGFwYXRoX2NhcHMzID0gMDtcbitcdGVsc2VcbitcdFx0bmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgPSBNQ0RJX0RXT1JEKG91dGJ1ZixcbitcdFx0XHRcdFx0XHQgICAgICBHRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9GTEFHUzMpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTExNDAsNiArMTE0Nyw5IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0dW5zaWduZWQgaW50IGNoYW5uZWxfdmlzLCBwaW9fd3JpdGVfdmlfYmFzZSwgbWF4X3ZpcztcbiBcdHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtXHUwMDNlbmljX2RhdGE7XG4gXHR1bnNpZ25lZCBpbnQgdWNfbWVtX21hcF9zaXplLCB3Y19tZW1fbWFwX3NpemU7XG4rI2lmZGVmIENPTkZJR19TRkNfQ1hMXG4rXHRzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGE7XG4rI2VuZGlmXG4gXHR2b2lkIF9faW9tZW0gKm1lbWJhc2U7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMTI2Myw4ICsxMjczLDIzIEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0aW91bm1hcChlZngtXHUwMDNlbWVtYmFzZSk7XG4gXHRlZngtXHUwMDNlbWVtYmFzZSA9IG1lbWJhc2U7XG4gXG4tXHQvKiBTZXQgdXAgdGhlIFdDIG1hcHBpbmcgaWYgbmVlZGVkICovXG4tXHRpZiAod2NfbWVtX21hcF9zaXplKSB7XG4rXHRpZiAoIXdjX21lbV9tYXBfc2l6ZSlcbitcdFx0Z290byBza2lwX3BpbztcbitcbitcdC8qIFNldCB1cCB0aGUgV0MgbWFwcGluZyAqL1xuK1xuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuK1x0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcbitcdGlmICgobmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgXHUwMDI2XG4rXHQgICAgKDEgXHUwMDNjXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9DWExfQ09ORklHX0VOQUJMRV9MQk4pKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9iZV9kYXRhLVx1MDAzZWN4bF9waW9faW5pdGlhbGlzZWQpIHtcbitcdFx0LyogVXNpbmcgUElPIHRocm91Z2ggQ1hMIG1hcHBpbmcgKi9cbitcdFx0bmljX2RhdGEtXHUwMDNlcGlvX3dyaXRlX2Jhc2UgPSBwcm9iZV9kYXRhLVx1MDAzZWN4bC1cdTAwM2VjdHBpb19jeGw7XG4rXHRcdG5pY19kYXRhLVx1MDAzZXBpb193cml0ZV92aV9iYXNlID0gcGlvX3dyaXRlX3ZpX2Jhc2U7XG4rXHR9IGVsc2VcbisjZW5kaWZcbitcdHtcbitcdFx0LyogVXNpbmcgbGVnYWN5IFBJTyBCQVIgbWFwcGluZyAqL1xuIFx0XHRuaWNfZGF0YS1cdTAwM2V3Y19tZW1iYXNlID0gaW9yZW1hcF93YyhlZngtXHUwMDNlbWVtYmFzZV9waHlzICtcbiBcdFx0XHRcdFx0XHQgIHVjX21lbV9tYXBfc2l6ZSxcbiBcdFx0XHRcdFx0XHQgIHdjX21lbV9tYXBfc2l6ZSk7XG5AQCAtMTI3OSwxMiArMTMwNCwxNCBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2RpbWVuc2lvbl9yZXNvdXJjZXMoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcdFx0XHRuaWNfZGF0YS1cdTAwM2V3Y19tZW1iYXNlICtcbiBcdFx0XHQocGlvX3dyaXRlX3ZpX2Jhc2UgKiBlZngtXHUwMDNldmlfc3RyaWRlICsgRVJfRFpfVFhfUElPQlVGIC1cbiBcdFx0XHQgdWNfbWVtX21hcF9zaXplKTtcbi1cbi1cdFx0cmMgPSBlZnhfZWYxMF9saW5rX3Bpb2J1ZnMoZWZ4KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGVmeF9lZjEwX2ZyZWVfcGlvYnVmcyhlZngpO1xuIFx0fVxuIFxuK1x0cmMgPSBlZnhfZWYxMF9saW5rX3Bpb2J1ZnMoZWZ4KTtcbitcdGlmIChyYylcbitcdFx0ZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7XG4rXG4rc2tpcF9waW86XG4rXG4gXHRuZXRpZl9kYmcoZWZ4LCBwcm9iZSwgZWZ4LVx1MDAzZW5ldF9kZXYsXG4gXHRcdCAgXCJtZW1vcnkgQkFSIGF0ICVwYSAodmlydHVhbCAlcCsleCBVQywgJXArJXggV0MpXFxuXCIsXG4gXHRcdCAgXHUwMDI2ZWZ4LVx1MDAzZW1lbWJhc2VfcGh5cywgZWZ4LVx1MDAzZW1lbWJhc2UsIHVjX21lbV9tYXBfc2l6ZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmNcbmluZGV4IDhmMTM2YTExZDM5NjhhLi4zODA2Y2QzZGQ3ZjQ4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFwic2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJzcmlvdi5oXCJcbiAjaW5jbHVkZSBcImVmeF9kZXZsaW5rLmhcIlxuKyNpbmNsdWRlIFwiZWZ4X2N4bC5oXCJcbiBcbiAjaW5jbHVkZSBcIm1jZGlfcG9ydF9jb21tb24uaFwiXG4gI2luY2x1ZGUgXCJtY2RpX3Bjb2wuaFwiXG5AQCAtOTgxLDEyICs5ODIsMTUgQEAgc3RhdGljIHZvaWQgZWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXG4gXHRlZnhfcGNpX3JlbW92ZV9tYWluKGVmeCk7XG4gXG4gXHRlZnhfZmluaV9pbyhlZngpO1xuK1xuK1x0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcbitcdGVmeF9jeGxfZXhpdChwcm9iZV9kYXRhKTtcbitcbiBcdHBjaV9kYmcoZWZ4LVx1MDAzZXBjaV9kZXYsIFwic2h1dGRvd24gc3VjY2Vzc2Z1bFxcblwiKTtcbiBcbiBcdGVmeF9maW5pX2RldmxpbmtfYW5kX3VubG9jayhlZngpO1xuIFx0ZWZ4X2Zpbmlfc3RydWN0KGVmeCk7XG4gXHRmcmVlX25ldGRldihlZngtXHUwMDNlbmV0X2Rldik7XG4tXHRwcm9iZV9kYXRhID0gY29udGFpbmVyX29mKGVmeCwgc3RydWN0IGVmeF9wcm9iZV9kYXRhLCBlZngpO1xuIFx0a2ZyZWUocHJvYmVfZGF0YSk7XG4gfTtcbiBcbkBAIC0xMTkwLDYgKzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGZhaWwyO1xuIFxuK1x0LyogQSBzdWNjZXNzZnVsIGN4bCBpbml0aWFsaXphdGlvbiBpbXBsaWVzIGEgQ1hMIHJlZ2lvbiBjcmVhdGVkIHRvIGJlXG4rXHQgKiB1c2VkIGZvciBQSU8gYnVmZmVycy4gSWYgdGhlcmUgaXMgbm8gQ1hMIHN1cHBvcnQgbGVnYWN5IFBJTyBidWZmZXJzXG4rXHQgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTFxuK1x0ICogc3VwcG9ydCBhbmQgdGhlIGN4bCBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGRyaXZlciBwcm9iZSBmYWlscy5cbitcdCAqL1xuK1x0cmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7XG4rXHRpZiAocmMpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkNYTCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxcblwiLCByYyk7XG4rXHRcdGdvdG8gZmFpbDM7XG4rXHR9XG4rXG4gXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xuIFx0aWYgKHJjKSB7XG4gXHRcdC8qIE9uIGZhaWx1cmUsIHJldHJ5IG9uY2UgaW1tZWRpYXRlbHkuXG5AQCAtMTIyOCw2ICsxMjQzLDcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxuIFx0cmV0dXJuIDA7XG4gXG4gIGZhaWwzOlxuK1x0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xuIFx0ZWZ4X2ZpbmlfaW8oZWZ4KTtcbiAgZmFpbDI6XG4gXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xuQEAgLTAsMCArMSwxMDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKlxuKyAqIERyaXZlciBmb3IgQU1EIG5ldHdvcmsgY29udHJvbGxlcnMgYW5kIGJvYXJkc1xuKyAqIENvcHlyaWdodCAoQykgMjAyNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjY3hsL2N4bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXCJuZXRfZHJpdmVyLmhcIlxuKyNpbmNsdWRlIFwiZWZ4X2N4bC5oXCJcbitcbisjZGVmaW5lIEVGWF9DVFBJT19CVUZGRVJfU0laRVx0U1pfMjU2TVxuK1xuK2ludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxuK3tcbitcdHN0cnVjdCBlZnhfbmljICplZnggPSBcdTAwMjZwcm9iZV9kYXRhLVx1MDAzZWVmeDtcbitcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gZWZ4LVx1MDAzZXBjaV9kZXY7XG4rXHRzdHJ1Y3QgcmFuZ2UgY3hsX3Bpb19yYW5nZTtcbitcdHN0cnVjdCBlZnhfY3hsICpjeGw7XG4rXHR1MTYgZHZzZWM7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBJcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBhbmQgdXNpbmcgQ1hMPyAqL1xuK1x0aWYgKCFwY2llX2lzX2N4bChwY2lfZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkdnNlYyA9IHBjaV9maW5kX2R2c2VjX2NhcGFiaWxpdHkocGNpX2RldiwgUENJX1ZFTkRPUl9JRF9DWEwsXG4rXHRcdFx0XHRcdCAgUENJX0RWU0VDX0NYTF9ERVZJQ0UpO1xuK1x0aWYgKCFkdnNlYykge1xuK1x0XHRwY2lfaW5mbyhwY2lfZGV2LCBcIkNYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRwY2lfZGJnKHBjaV9kZXYsIFwiQ1hMX0RWU0VDX1BDSUVfREVWSUNFIGNhcGFiaWxpdHkgZm91bmRcXG5cIik7XG4rXG4rXHQvKiBDcmVhdGUgYSBjeGxfZGV2X3N0YXRlIGVtYmVkZGVkIGluIHRoZSBjeGwgc3RydWN0IHVzaW5nIGN4bCBjb3JlIGFwaVxuK1x0ICogc3BlY2lmeWluZyBubyBtYm94IGF2YWlsYWJsZS5cbitcdCAqL1xuK1x0Y3hsID0gZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShcdTAwMjZwY2lfZGV2LVx1MDAzZWRldiwgQ1hMX0RFVlRZUEVfREVWTUVNLFxuK1x0XHRcdFx0XHRwY2lfZ2V0X2RzbihwY2lfZGV2KSwgZHZzZWMsXG4rXHRcdFx0XHRcdHN0cnVjdCBlZnhfY3hsLCBjeGxkcywgZmFsc2UpO1xuK1xuK1x0aWYgKCFjeGwpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmMgPSBjeGxfcGNpX3NldHVwX3JlZ3MocGNpX2RldiwgQ1hMX1JFR0xPQ19SQklfQ09NUE9ORU5ULFxuK1x0XHRcdFx0XHUwMDI2Y3hsLVx1MDAzZWN4bGRzLnJlZ19tYXApO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHBjaV9lcnIocGNpX2RldiwgXCJObyBjb21wb25lbnQgcmVnaXN0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRpZiAoIWN4bC1cdTAwM2VjeGxkcy5yZWdfbWFwLmNvbXBvbmVudF9tYXAuaGRtX2RlY29kZXIudmFsaWQpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkV4cGVjdGVkIEhETSBjb21wb25lbnQgcmVnaXN0ZXIgbm90IGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdGlmICghY3hsLVx1MDAzZWN4bGRzLnJlZ19tYXAuY29tcG9uZW50X21hcC5yYXMudmFsaWQpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkV4cGVjdGVkIFJBUyBjb21wb25lbnQgcmVnaXN0ZXIgbm90IGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdC8qIFNldCBtZWRpYSByZWFkeSBleHBsaWNpdGx5IGFzIHRoZXJlIGFyZSBuZWl0aGVyIG1haWxib3ggZm9yIGNoZWNraW5nXG4rXHQgKiB0aGlzIHN0YXRlIG5vciB0aGUgQ1hMIHJlZ2lzdGVyIGludm9sdmVkLCBib3RoIG5vdCBtYW5kYXRvcnkgZm9yXG4rXHQgKiB0eXBlMi5cbitcdCAqL1xuK1x0Y3hsLVx1MDAzZWN4bGRzLm1lZGlhX3JlYWR5ID0gdHJ1ZTtcbitcbitcdGlmIChjeGxfc2V0X2NhcGFjaXR5KFx1MDAyNmN4bC1cdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xuK1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwiZHBhIGNhcGFjaXR5IHNldHVwIGZhaWxlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRjeGwtXHUwMDNlY3hsbWQgPSBkZXZtX2N4bF9wcm9iZV9tZW0oXHUwMDI2Y3hsLVx1MDAzZWN4bGRzLCBcdTAwMjZjeGxfcGlvX3JhbmdlKTtcbitcdGlmIChJU19FUlIoY3hsLVx1MDAzZWN4bG1kKSkge1xuK1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwiQ1hMIGFjY2VsIG1lbWRldiBjcmVhdGlvbiBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiBQVFJfRVJSKGN4bC1cdTAwM2VjeGxtZCk7XG4rXHR9XG4rXG4rXHRjeGwtXHUwMDNlY3RwaW9fY3hsID0gaW9yZW1hcF93YyhjeGxfcGlvX3JhbmdlLnN0YXJ0LFxuK1x0XHRcdFx0ICAgIHJhbmdlX2xlbihcdTAwMjZjeGxfcGlvX3JhbmdlKSk7XG4rXHRpZiAoIWN4bC1cdTAwM2VjdHBpb19jeGwpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkNYTCBpb3JlbWFwIHJlZ2lvbiAoJXByYSkgZmFpbGVkXFxuXCIsXG4rXHRcdFx0XHUwMDI2Y3hsX3Bpb19yYW5nZSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cHJvYmVfZGF0YS1cdTAwM2VjeGxfcGlvX2luaXRpYWxpc2VkID0gdHJ1ZTtcbitcdHByb2JlX2RhdGEtXHUwMDNlY3hsID0gY3hsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcbit7XG4rXHRpZiAoIXByb2JlX2RhdGEtXHUwMDNlY3hsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpb3VubWFwKHByb2JlX2RhdGEtXHUwMDNlY3hsLVx1MDAzZWN0cGlvX2N4bCk7XG4rfVxuK1xuK01PRFVMRV9JTVBPUlRfTlMoXCJDWExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2UyNzA1Y2IwNjNmNmFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmhcbkBAIC0wLDAgKzEsMzIgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHNcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cbisgKlxuKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkXG4rICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuXG4rICovXG4rXG4rI2lmbmRlZiBFRlhfQ1hMX0hcbisjZGVmaW5lIEVGWF9DWExfSFxuK1xuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuK1xuKyNpbmNsdWRlIFx1MDAzY2N4bC9jeGwuaFx1MDAzZVxuK1xuK3N0cnVjdCBlZnhfcHJvYmVfZGF0YTtcbitcbitzdHJ1Y3QgZWZ4X2N4bCB7XG4rXHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSBjeGxkcztcbitcdHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZDtcbitcdHZvaWQgX19pb21lbSAqY3RwaW9fY3hsO1xuK307XG4rXG4raW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpO1xuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKSB7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9XG4rI2VuZGlmXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcbmluZGV4IGI5OGMyNTlmNjcyZGI1Li4zOTY0YjJjNTY2MDljNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcbkBAIC0xMTk3LDE0ICsxMTk3LDI0IEBAIHN0cnVjdCBlZnhfbmljIHtcbiBcdGF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7XG4gfTtcbiBcbisjaWZkZWYgQ09ORklHX1NGQ19DWExcbitzdHJ1Y3QgZWZ4X2N4bDtcbisjZW5kaWZcbitcbiAvKipcbiAgKiBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgLSBTdGF0ZSBhZnRlciBoYXJkd2FyZSBwcm9iZVxuICAqIEBwY2lfZGV2OiBUaGUgUENJIGRldmljZVxuICAqIEBlZng6IEVmeCBOSUMgZGV0YWlsc1xuKyAqIEBjeGw6IGRldGFpbHMgb2YgcmVsYXRlZCBjeGwgb2JqZWN0c1xuKyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS5cbiAgKi9cbiBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEge1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgZWZ4X25pYyBlZng7XG4rI2lmZGVmIENPTkZJR19TRkNfQ1hMXG4rXHRzdHJ1Y3QgZWZ4X2N4bCAqY3hsO1xuK1x0Ym9vbCBjeGxfcGlvX2luaXRpYWxpc2VkO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZWZ4X25pYyAqZWZ4X25ldGRldl9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oXG5pbmRleCBlYzNiMmRmNDNiNjhkOS4uNzQ4MGY5OTk1ZGZiOGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaFxuQEAgLTE1Miw2ICsxNTIsOCBAQCBlbnVtIHtcbiAgKlx0JU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKVxuICAqIEBkYXRhcGF0aF9jYXBzMjogRnVydGhlciBDYXBhYmlsaXRpZXMgb2YgZGF0YXBhdGggZmlybXdhcmUgKEZMQUdTMiBmaWVsZCBvZlxuICAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcbisgKiBAZGF0YXBhdGhfY2FwczM6IEZ1cnRoZXIgQ2FwYWJpbGl0aWVzIG9mIGRhdGFwYXRoIGZpcm13YXJlIChGTEFHUzMgZmllbGQgb2ZcbisgKiAlTUNfQ01EX0dFVF9DQVBBQklMSVRJRVMgcmVzcG9uc2UpXG4gICogQHJ4X2RwY3B1X2Z3X2lkOiBGaXJtd2FyZSBJRCBvZiB0aGUgUnhEUENQVVxuICAqIEB0eF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFR4RFBDUFVcbiAgKiBAbXVzdF9wcm9iZV92c3dpdGNoaW5nOiBGbGFnOiB2c3dpdGNoaW5nIGhhcyB5ZXQgdG8gYmUgc2V0dXAgYWZ0ZXIgTUMgcmVib290XG5AQCAtMTg3LDYgKzE4OSw3IEBAIHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSB7XG4gXHRib29sIG11c3RfY2hlY2tfZGF0YXBhdGhfY2FwcztcbiBcdHUzMiBkYXRhcGF0aF9jYXBzO1xuIFx0dTMyIGRhdGFwYXRoX2NhcHMyO1xuK1x0dTMyIGRhdGFwYXRoX2NhcHMzO1xuIFx0dW5zaWduZWQgaW50IHJ4X2RwY3B1X2Z3X2lkO1xuIFx0dW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkO1xuIFx0Ym9vbCBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaFxuaW5kZXggMDE2Yzc0ZmI3NDdjZjYuLjgwMmIxNDNkZTgzZGI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9jeGwvY3hsLmhcbisrKyBiL2luY2x1ZGUvY3hsL2N4bC5oXG5AQCAtMjI2LDQgKzIyNiw2IEBAIHN0cnVjdCBjeGxfZGV2X3N0YXRlICpfZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gc3RydWN0IGN4bF9tZW1kZXYgKmRldm1fY3hsX3Byb2JlX21lbShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgcmFuZ2UgKnJhbmdlKTtcbitcbitpbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSk7XG4gI2VuZGlmIC8qIF9fQ1hMX0NYTF9IX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlMDAwMDAxNTg3MWEyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2N4bC9wY2kuaFxuQEAgLTAsMCArMSwyMiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbitcbisjaWZuZGVmIF9fQ1hMX0NYTF9QQ0lfSF9fXG4rI2RlZmluZSBfX0NYTF9DWExfUENJX0hfX1xuK1xuKy8qIFJlZ2lzdGVyIEJsb2NrIElkZW50aWZpZXIgKFJCSSkgKi9cbitlbnVtIGN4bF9yZWdsb2NfdHlwZSB7XG4rXHRDWExfUkVHTE9DX1JCSV9FTVBUWSA9IDAsXG4rXHRDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXG4rXHRDWExfUkVHTE9DX1JCSV9WSVJULFxuK1x0Q1hMX1JFR0xPQ19SQklfTUVNREVWLFxuK1x0Q1hMX1JFR0xPQ19SQklfUE1VLFxuK1x0Q1hMX1JFR0xPQ19SQklfVFlQRVNcbit9O1xuK1xuK3N0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwO1xuK3N0cnVjdCBwY2lfZGV2O1xuK1xuK2ludCBjeGxfcGNpX3NldHVwX3JlZ3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gY3hsX3JlZ2xvY190eXBlIHR5cGUsXG4rXHRcdCAgICAgICBzdHJ1Y3QgY3hsX3JlZ2lzdGVyX21hcCAqbWFwKTtcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQyOjU0LjM4MDQ2MjczNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODExOTAwNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFNGQzkxMDAgd2l0aCBDWEwgU3VwcG9ydCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBDWEwgc3VwcG9ydCB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwIG5ldHdvcmsgZHJpdmVyLCBpbnRyb2R1Y2luZyBgQ09ORklHX1NGQ19DWExgLiBJdCBtb2RpZmllcyBzb21lIGNvcmUgQ1hMIGZpbGVzLCB3aGljaCBpcyBpbnRlcmVzdGluZywgZXhwb3J0aW5nIHNvbWUgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gZnV6eiB0aGlzPyBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFjaGFibGUuXG5cblRoZSBTRkMgZHJpdmVyIGlzIGEgUENJIG5ldHdvcmsgZHJpdmVyLiBQQ0kgZHJpdmVycyAqc2hvdWxkKiBiZSBmdXp6YWJsZSwgcmlnaHQ/IFN5emthbGxlciBjYW4gZG8gcHNldWRvLVBDSSBkZXZpY2VzIG9yIFZGSU8gaWYgaXQncyBzdXBwb3J0ZWQuIEJ1dCBJIHJlbWVtYmVyIHRoZXJlJ3Mgbm8gbWFnaWMgXCJnZW5lcmljXCIgUENJIGZ1enplciB0aGF0ICpqdXN0IHdvcmtzKiB1bmxlc3Mgc3BlY2lmaWNhbGx5IHRhcmdldGVkLiBJdCdzIHVzdWFsbHkgZGVwZW5kZW50IG9uIHNwZWNpYWwgc3VwcG9ydCBvciBpZiBpdCdzIFVTQiBvciB2aXJ0dWFsLiBUaGUgcHJvbXB0IHJlbWluZHMgbWUgb2YgdGhlIGxpbWl0YXRpb25zOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIi5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIHRoZSBTRkM5MTAwPyBObywgdGhhdCdzIGEgZGVhZCBlbmQuIFFFTVUgaGFuZGxlcyB0aGUgdXN1YWwgc3VzcGVjdHMgYnV0IG5vdCB0aGUgU0ZDOTEwMCwgc28gYGVmeF9wY2lfcHJvYmVgIGlzbid0IGdvaW5nIHRvIGJlIGNhbGxlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFNvIHRoYXQgbWVhbnMgbm8gcHJvYmUsIG5vIGZ1enouXG5cbkknbSByYWNraW5nIG15IGJyYWluLiBTeXprYWxsZXIuLi4gZG9lcyBpdCBoYXZlIHNvbWUgbWFnaWMgYHN5el9wY2lfZGV2aWNlYCBmdW5jdGlvbiB0aGF0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2U/IEkga25vdyBhYm91dCBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgZm9yIFBDSSBkZXZpY2VzPyBEb2VzIGl0IHVzZSBgdmhjaWAgZm9yIFBDST8gT3IsIERvZXMgc3l6a2FsbGVyIGhhdmUgYSBnZW5lcmFsIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsIHRoYXQgY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzPyBObyEgV2FpdCwgYWN0dWFsbHksIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHVzZXMgYHZmaW9gIG9yIHJlbGllcyBvbiBRRU1VLCBzbyB0aGF0J3MgdGhlIG9ubHkgcmVhbCBvcHRpb24uIE5vLCBTeXprYWxsZXIgZG9lcyBoYXZlIGEgYHZoY2lgIGZvciBVU0IsIGJ1dCB0aGF0IHdvbid0IHdvcmsgaGVyZS5cblxuTGV0IG1lIHNlZSBpZiBJIGNhbiBmaW5kIHNvbWUgUENJIGVtdWxhdGlvbiB3aXRoaW4gU3l6a2FsbGVyLiBJdCBsb29rcyBsaWtlIGl0IGRvZXMgaGF2ZSBzdHVmZiBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgLiBPaCwgd2FpdCwgZGlkIHRoZXkgcmVjZW50bHkgYWRkIHNvbWV0aGluZyB3aXRoIGB2ZmlvYCBvciBhIGR1bW15IFBDSSBjb250cm9sbGVyPyBObywgU3l6a2FsbGVyIHN0aWxsIHVzZXMgYHFlbXVgIHdpdGggdGhlIHN0YW5kYXJkIGRldmljZXMuXG5cblRoaXMgZHJpdmVyIGlzbid0IHJlYWNoYWJsZSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCB0aGF0IG1ha2VzIGZ1enppbmcgYSB3YXN0ZSBvZiB0aW1lLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcm9iZSBgc2ZjYCB0byBldmVuIHN0YXJ0LiBJcyB0aGVyZSBhIHZpcnR1YWwgZGV2aWNlIGZvciB0aGlzPyBObywgdGhhdCdzIG5vdCB0aGUgY2FzZS4gSSB3b3VsZCBjaGVjayBzeXprYWxsZXIgZm9yIGBzZmNgIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBzb3VyY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlLiBOb3JtYWxseSBQQ0kgZHJpdmVycyByZXF1aXJlIGEgbWF0Y2hpbmcgdmVuZG9yL2RldmljZSBJRCBmcm9tIGEgcmVhbCBQQ0kgZGV2aWNlLiBXaXRob3V0IFFFTVUgZW11bGF0aW9uLCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLlxuXG5Pa2F5LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGhpbmc6IGlzIHRoZXJlICphbnkqIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgU0ZDIGluIHRoZSBrZXJuZWw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6MDcuMTkyMzcyMzk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mzc5MjkwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0ZDOTEwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjIwOlxcdHRyaXN0YXRlIFxcXCJTb2xhcmZsYXJlIFNGQzkxMDAvRUYxMDAtZmFtaWx5IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI3LVxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgMTAvNDAtZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcyBiYXNlZCBvblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI4OlxcdCAgdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgY29udHJvbGxlcnMuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz0zNT1jb25maWcgU0ZDX01URFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjM2OlxcdGJvb2wgXFxcIlNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgTVREIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMzctXFx0ZGVwZW5kcyBvbiBTRkMgXFx1MDAyNlxcdTAwMjYgTVREIFxcdTAwMjZcXHUwMDI2ICEoU0ZDPXkgXFx1MDAyNlxcdTAwMjYgTVREPW0pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz00ND1jb25maWcgU0ZDX01DRElfTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6NDU6XFx0Ym9vbCBcXFwiU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBod21vbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTQ2LVxcdGRlcGVuZHMgb24gU0ZDIFxcdTAwMjZcXHUwMDI2IEhXTU9OIFxcdTAwMjZcXHUwMDI2ICEoU0ZDPXkgXFx1MDAyNlxcdTAwMjYgSFdNT049bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTUxPWNvbmZpZyBTRkNfU1JJT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzo1MjpcXHRib29sIFxcXCJTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IFNSLUlPViBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTUzLVxcdGRlcGVuZHMgb24gU0ZDIFxcdTAwMjZcXHUwMDI2IFBDSV9JT1ZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTYwPWNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6NjE6XFx0Ym9vbCBcXFwiU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBNQ0RJIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy02Mi1cXHRkZXBlbmRzIG9uIFNGQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9Njk9Y29uZmlnIFNGQ19DWExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzo3MDpcXHRib29sIFxcXCJTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IENYTCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gU0ZDIFxcdTAwMjZcXHUwMDI2IENYTF9CVVMgXFx1MDAzZT0gU0ZDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmg9MjY9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmgtMTI0LS8qIE1heGltdW0gbnVtYmVyIG9mIFRYIFBJTyBidWZmZXJzIHdlIG1heSBhbGxvY2F0ZSB0byBhIGZ1bmN0aW9uLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaDoxMjU6ICogVGhpcyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVycyBvbiBlYWNoIFNGQzkxMDAtZmFtaWx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oLTEyNi0gKiBjb250cm9sbGVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0MzoxMi4xMzAzMTMzMDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk3NzYwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZYIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNvbGFyZmxhcmUgU0ZDOTEwMC9FRjEwMC1mYW1pbHkgZHJpdmVyLCBhbmQgaXQncyBjbGVhciB0aGUgcHJpbWFyeSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSdzIG5vIGtlcm5lbC1sZXZlbCBlbXVsYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIFFFTVUgZG9lc24ndCBzZWVtIHRvIGhhdmUgaXRzIG93bi4gVGhpcyBtZWFucyB0aGUgYGVmeF9wY2lfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLCB3aWxsIG5ldmVyIGdldCB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGF0IG11Y2ggaXMgb2J2aW91cy5cblxuQnV0IHdhaXQsIGhvbGQgb24uIFRoZSBwYXRjaCBtZW50aW9ucyBDWEwgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgU0ZDIGRyaXZlci4gTm93LCAqdGhhdCogY29tcGxpY2F0ZXMgdGhpbmdzLiBEb2VzIFFFTVUgZXZlbiBlbXVsYXRlIENYTD8gWWVzLCBpdCBkb2VzISBRRU1VIGhhcyBhZGRlZCBzb21lIENYTCBlbXVsYXRpb24sIGZvY3VzaW5nIG9uLCBmb3IgaW5zdGFuY2UsIENYTCB0eXBlIDMgZGV2aWNlcy4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBhIFNvbGFyZmxhcmUgTklDICp3aXRoKiBDWEw/IEFuZCB0aGUgYW5zd2VyLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXMgbm8uIFNvLCB0aGUgb3JpZ2luYWwgcHJvYmxlbSByZW1haW5zOyB0aGUgZHJpdmVyJ3MgcHJvYmUgaXNuJ3QgZ2V0dGluZyBjYWxsZWQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjay4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZSBzb3J0IG9mIG1hZ2ljPyBNYXliZSBpdCBoYXMgYSBgc3l6X3BjaV9kZXZpY2VgIG9yIHNpbWlsYXI/IERvZXMgdGhhdCBnaXZlIHVzIGFuIGFsdGVybmF0aXZlIHJvdXRlIGluPyBBaCwgbm8sIGl0J3Mgbm90IHRoYXQgc2ltcGxlLiBTeXprYWxsZXIgZG9lc24ndCBwcm92aWRlIGEgd2F5IHRvIGZ1enogZW50aXJlbHkgYXJiaXRyYXJ5IFBDSSBkcml2ZXJzIHVubGVzcyB0aGV5IGhhdmUgYXNzb2NpYXRlZCB2aXJ0dWFsIGRldmljZXMuIEV4YW1wbGVzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWAsIGB2a21zYCwgb3IgYHNuZC1kdW1teWAsIG9yIGlmIGl0IGNhbiBpbmplY3QgZGV2aWNlcyBpbnRvIHRoZSBzeXN0ZW0uXG5cbkFoYSEgV2FpdCwgbXkgbWVtb3J5IHNlcnZlcyBtZSB3ZWxsLiBUaGVyZSAqaXMqIGEgUENJIGZ1enppbmcgc3Vic3lzdGVtIGluIHN5emthbGxlci4gSSd2ZSBzZWVuIGl0ISBTeXprYWxsZXIgaGFzIHRoZSBgc3l6X3BjaV9kZXZpY2VgIG1lY2hhbmlzbSEgVGhhdCBhbGxvd3Mgc3l6a2FsbGVyIHRvIGFjdHVhbGx5IGVtdWxhdGUgUENJIGRldmljZXMhIE5vdywgdGhpcyBpcyBwcm9taXNpbmcuIFdlIG1pZ2h0IGhhdmUgYSB3YXkgaW4gYWZ0ZXIgYWxsLiBSaWdodCwgc28gbm93IHRoZSBrZXkgcXVlc3Rpb246IERvZXMgYHN5el9wY2lfZGV2aWNlYCBleGlzdCBpbiB0aGUga2VybmVsPyBUaW1lIHRvIGdvIGh1bnRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzgyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQzOjE4LjUyODA3NzY2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1MTQ1ODEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfcGNpX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQzOjIxLjE2MzIzNzc2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzEwMjU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIFNGQyBEZXZpY2UgRW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoaXMgYHNmY2AgZGV2aWNlIHRocm91Z2ggc3l6a2FsbGVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBzeXpfcGNpX2RldmljZWAsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCdzIG5vdCBhY3R1YWxseSBpbiB0aGUga2VybmVsIGl0c2VsZjsgaXQncyBhIHN5emthbGxlciBjb25zdHJ1Y3QuIEFuZCBzeXprYWxsZXIgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIGFyYml0cmFyeSBQQ0kgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBzcGFjZSwgaXQgdXNlcyBRRU1VIG9yIHJlbGllcyBvbiBleGlzdGluZyBrZXJuZWwgbW9kdWxlcy4gU28sIGlmIHRoZXJlIGlzbid0IGEga2VybmVsIG1vZHVsZSB0byBzdGFuZCBpbiBmb3IgdGhlIFNGQyBkZXZpY2UsIEknbSBvdXQgb2YgbHVjay4gSXQncyBub3QgcmVhY2hhYmxlIGRpcmVjdGx5LlxuXG5BbHJpZ2h0LCBhIG5ldyBwbGFuLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBpbnRlcmFjdCB3aXRoIGBlZnhfY3hsX2luaXRgIG9yIGBjeGxfc2V0X2NhcGFjaXR5YC4gTGV0J3Mgc2VlLi4uIEFoLCBgY3hsX3NldF9jYXBhY2l0eWAgaXMgZXhwb3J0ZWQsIGFuZCBgZWZ4X2N4bF9pbml0YCBtYWtlcyB1c2Ugb2YgaXQuIFRoYXTigJlzIHByb21pc2luZy4gTG9va2luZyBmdXJ0aGVyLCBgZWZ4X2N4bF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgZWZ4X3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGBzZmNgIGRyaXZlci4gU28sIEkgaGF2ZSBhIHBhdGggaGVyZSEgTm93IEkgbmVlZCB0byBjaGVjayB0aGUgUENJIElEcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBzZmNgIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6MjYuMjM0MjY4NTM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjM3OTY4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWZ4X3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTEwMDE9c3RhdGljIHZvaWQgZWZ4X3Byb2JlX3ZwZF9zdHJpbmdzKHN0cnVjdCBlZnhfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTAzNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTAzNTpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmVfbWFpbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxMDg2OnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKHN0cnVjdCBlZnhfbmljICplZngpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEwODcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDg4LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gZWZ4LVxcdTAwM2VuZXRfZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxMDg5OlxcdGludCByYyA9IGVmeF9wY2lfcHJvYmVfbWFpbihlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTExNTItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjExNTM6c3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMTU0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50cnkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTIwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTIwODpcXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjA5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMTMtXFx0XFx0ZWZ4LVxcdTAwM2VyZXNldF9wZW5kaW5nID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTIxNDpcXHRcXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjE1LVxcdFxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMjMtXFx0XFx0XFx0ZWZ4LVxcdTAwM2VyZXNldF9wZW5kaW5nID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTIyNDpcXHRcXHRcXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjI1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYz0xNDA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlZnhfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xNDEwLVxcdC5pZF90YWJsZVxcdD0gZWZ4X3BjaV90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMTpcXHQucHJvYmVcXHRcXHQ9IGVmeF9wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTE0MTItXFx0LnJlbW92ZVxcdFxcdD0gZWZ4X3BjaV9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9ODk2PXN0YXRpYyB2b2lkIGVmeF9wcm9iZV92cGRfc3RyaW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTkyOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6OTMwOnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9tYWluKHN0cnVjdCBlZnhfbmljICplZngpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTkzMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo5ODE6c3RhdGljIGludCBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oc3RydWN0IGVmeF9uaWMgKmVmeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgzLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gZWZ4LVxcdTAwM2VuZXRfZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo5ODQ6XFx0aW50IHJjID0gZWZ4X3BjaV9wcm9iZV9tYWluKGVmeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTk4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDQxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzoxMDQyOnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA0My1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwNzY6XFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA3Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDgxLVxcdFxcdGVmeC1cXHUwMDNlcmVzZXRfcGVuZGluZyA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwODI6XFx0XFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA4My1cXHRcXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDkxLVxcdFxcdFxcdGVmeC1cXHUwMDNlcmVzZXRfcGVuZGluZyA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwOTI6XFx0XFx0XFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA5My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9MTI3Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWZ4X3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTI3NS1cXHQuaWRfdGFibGVcXHQ9IGVmeF9wY2lfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEyNzY6XFx0LnByb2JlXFx0XFx0PSBlZnhfcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc3LVxcdC5yZW1vdmVcXHRcXHQ9IGVmeF9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0MzoyOS4yNTgwODI1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mjc5Njc3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgU0ZDIERyaXZlciBhbmQgRXhwbG9yaW5nIENYTCBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gU3l6a2FsbGVyIGNhbid0IGRpcmVjdGx5IHRhcmdldCB0aGUgYHNmY2AgZHJpdmVyLiBUaGUgZnJ1c3RyYXRpbmcgdGhpbmcgaXMsIGl0IG5lZWRzIHRoYXQgc3BlY2lmaWMgUENJIGhhcmR3YXJlLCBhbmQgd2UgZG9uJ3QgaGF2ZSBnb29kIGVtdWxhdGlvbi4gQnV0IGhvbGQgb24uLi4gbGV0J3Mgc2hpZnQgZ2VhcnMuIFdoYXQgYWJvdXQgZXhwbG9yaW5nIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBDWEwgc3Vic3lzdGVtPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBjeGxfc2V0X2NhcGFjaXR5YCBhbmQgYGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvYC4gQXJlIHRoZXkgcmVhY2hhYmxlIGFuZCB3b3J0aCBpbnZlc3RpZ2F0aW5nP1xuXG5gY3hsX3NldF9jYXBhY2l0eWAsIGFzIEkgcmVjYWxsLCBpcyBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZGl0aW9uLCByZXNpZGluZyBpbiBgZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY2AuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHVzYWdlLiBUaGUgY3JpdGljYWwgc3RlcCBub3cgaXMgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgYW5kIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIElmIHdlIGNhbiByZWFjaCB0aGF0LCBpdCBtaWdodCBiZSBhIG5ldyBwbGFjZSB0byBhdHRhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODA1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6MzMuODg2MDU0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MDM3ODcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGxfc2V0X2NhcGFjaXR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTY0ND1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXFxcIkNYTFxcXCIpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDctLyoqXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYzo2NDg6ICogY3hsX3NldF9jYXBhY2l0eTogaW5pdGlhbGl6ZSBkcGEgYnkgYSBkcml2ZXIgd2l0aG91dCBhIG1haWxib3guXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDktICpcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjUyLSAqL1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjUzOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjU0LXtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYxLX1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jOjY2MjpFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfc2V0X2NhcGFjaXR5LCBcXFwiQ1hMXFxcIik7XFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jPTE3PWludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYy03MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jOjcyOlxcdGlmIChjeGxfc2V0X2NhcGFjaXR5KFxcdTAwMjZjeGwtXFx1MDAzZWN4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYy03My1cXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJkcGEgY2FwYWNpdHkgc2V0dXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4tLVxcbmluY2x1ZGUvY3hsL2N4bC5oPTIyNz1zdHJ1Y3QgY3hsX21lbWRldiAqZGV2bV9jeGxfcHJvYmVfbWVtKHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyxcXG4tLVxcbmluY2x1ZGUvY3hsL2N4bC5oLTIyOS1cXG5pbmNsdWRlL2N4bC9jeGwuaDoyMzA6aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xcbmluY2x1ZGUvY3hsL2N4bC5oLTIzMS0jZW5kaWYgLyogX19DWExfQ1hMX0hfXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0MzozOC42NTY0NDUwNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4ODgzNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTeW1ib2wgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgc3ltYm9sLCBhbmQgbXkgaW5pdGlhbCBzY2FuIHN1Z2dlc3RzIGl0J3Mgb25seSBiZWluZyB1c2VkIHdpdGhpbiBgZWZ4X2N4bC5jYC4gVGhhdCdzIGEgcHJldHR5IGxpbWl0ZWQgc2NvcGUsIHdoaWNoIGdlbmVyYWxseSBzaW1wbGlmaWVzIHRoaW5ncywgYnV0IEkgbmVlZCB0byBiZSBwcmVjaXNlLiBPbmUgdGhpbmcgdGhhdCBhbHdheXMgc3ByaW5ncyB0byBtaW5kIGluIHRoZXNlIGtpbmRzIG9mIGludmVzdGlnYXRpb25zIGlzIHRvIGJlIGV4aGF1c3RpdmUgaW4gY3Jvc3MtcmVmZXJlbmNpbmcgYW5kIHZlcmlmaWNhdGlvbi5cblxuSG93ZXZlciwgYSBuYWdnaW5nIHF1ZXN0aW9uIGlzIGFscmVhZHkgYnViYmxpbmcgdXA6IHdoYXQgYWJvdXQgYGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvYD8gV2hpbGUgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0ICppc24ndCogdXNlZCB0aGVyZSwgdGhpcyBmdW5jdGlvbidzIHNjb3BlLCBvciBzaW1pbGFyaXR5LCBoYXMgY2F1c2VkIG1lIHRvIHBhdXNlLCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZS4gRXZlbiBpZiB0aGUgc3ltYm9sIGlzbid0IGRpcmVjdGx5ICp1c2VkKiB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUgY291bGQgYmUgc3VidGxlIGluZGlyZWN0IGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZyBhdCBmaXJzdCBnbGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6NDEuODQ1MjgzOTg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg0OTYzMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2N4bC9jb3JlL2NvcmUuaD0xMDQ9c3RydWN0IGN4bF9tZW1kZXZfc3RhdGU7XFxuZHJpdmVycy9jeGwvY29yZS9jb3JlLmg6MTA1OmludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKTtcXG5kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaC0xMDYtaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tYm94LmM9MTE0MT1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcXFwiQ1hMXFxcIik7XFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTQzLS8qKlxcbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jOjExNDQ6ICogY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8gLSBHZXQgcGFydGl0aW9uIGluZm9cXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTQ1LSAqIEBtZHM6IFRoZSBkcml2ZXIgZGF0YSBmb3IgdGhlIG9wZXJhdGlvblxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tYm94LmMtMTE1NC0gKi9cXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYzoxMTU1OmludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKVxcbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jLTExNTYte1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYz02MTI9aW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTYzMS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jOjYzMjpcXHRyYyA9IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKG1kcyk7XFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02MzMtXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQzOjQ0LjczMDI2MzIyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQ5MTkwNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBXb3J0aGluZXNzIG9mIGEgQ1hMIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm9gIGlzIHVzZWQgaW4gYGN4bF9tZW1fZHBhX2ZldGNoYCwgd2hpY2ggdGhlIENYTCBjb3JlIGV4cG9ydHMsIGFuZCBJIHNlZSB0aGF0IGBjeGxfbWVtX2RwYV9mZXRjaGAgd2FzIG1vdmVkIOKAkyBpdCBsb29rcyBsaWtlIGl0IHdlbnQgZnJvbSBgbWJveC5jYCB0byBgbWVtZGV2LmNgLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGF0IGRpZmYsIHNoYWxsIHdlP1xuXG5BbHJpZ2h0LCBzbyB0aGUgZmlsZXMgSSBzZWUgYXJlOlxuXG4qICAgSW4gYGRyaXZlcnMvY3hsL2NvcmUvbWJveC5jYCwgYGN4bF9tZW1fZHBhX2ZldGNoYCBhbmQgYGFkZF9wYXJ0YCB3ZXJlIHJlbW92ZWQuXG4qICAgQW5kIGluIGBkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jYCwgdGhleSd2ZSBiZWVuIGFkZGVkLlxuXG5TbyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNvZGUgbW92ZSBvZiBgY3hsX21lbV9kcGFfZmV0Y2hgLCBhbmQgdGhlIGFzc29jaWF0ZWQgYGFkZF9wYXJ0YCBmdW5jdGlvbiwgZnJvbSBgbWJveC5jYCB0byBgbWVtZGV2LmNgLiBUaGlzIGFwcGVhcnMgdG8gYmUgcHJpbWFyaWx5IHJlZmFjdG9yaW5nOyBpdCBkb2Vzbid0IHNlZW0gdG8gZnVuZGFtZW50YWxseSBhbHRlciB0aGUgQ1hMIGNvcmUncyBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiByZWFzb24gZm9yIHRoZSBtb3ZlIGlzIHRvIGFsbG93IGBjeGxfc2V0X2NhcGFjaXR5YCB0byB1c2UgYGFkZF9wYXJ0YCwgd2hpY2ggaXMgbm93IHN0YXRpYyB3aXRoaW4gYG1lbWRldi5jYC5cblxuQWhhLCBgY3hsX3NldF9jYXBhY2l0eWAgKmRvZXMqIHVzZSBgYWRkX3BhcnRgLiBTbyBpdCBzZWVtcyB0aGUgY29yZSBhZGRlZCBmdW5jdGlvbmFsaXR5IGlzIGBjeGxfc2V0X2NhcGFjaXR5YCBhbmQgYWxzbyBgZWZ4X2N4bF9pbml0YCBpbiB0aGUgYHNmY2AgZHJpdmVyLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgYHNmY2AgZHJpdmVyLCBhcyBJIHJlY2FsbCwgaXMgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkuIFRoZXJlJ3Mgbm8gZWZmZWN0aXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgKnRoYXQqISBBbmQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBTaW5jZSB0aGUgYHNmY2AgZHJpdmVyIGlzIHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIGluIHRoZSBDWEwgY29yZSBhcmUgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcsIHdpdGggdGhlIGBjeGxfbWVtX2RwYV9mZXRjaGAgYW5kIGBhZGRfcGFydGAgbW92ZW1lbnQsIGFuZCB0aGVuIGFkZGluZyBgY3hsX3NldF9jYXBhY2l0eWAgd2hpY2ggKm9ubHkqIGlzIGNhbGxlZCBieSB0aGF0IGBzZmNgIGRyaXZlci5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGBzZmNgIGRyaXZlciwgd2hpY2ggKm9ubHkqIHdvcmtzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGlzIGlzIGVzc2VudGlhbGx5IHVuLWZ1enphYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgaWYgYGN4bF9zZXRfY2FwYWNpdHlgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM5OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0Mzo1My4yNzk0NTgzNTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDMwNTQ3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hsX3NldF9jYXBhY2l0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYz02NDQ9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9kcGFfZmV0Y2gsIFxcXCJDWExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjQ3LS8qKlxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjQ4OiAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjQ5LSAqXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1Mi0gKi9cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jOjY1MzppbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSlcXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1NC17XFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY2MS19XFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYzo2NjI6RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgXFxcIkNYTFxcXCIpO1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYz0xNz1pbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYzo3MjpcXHRpZiAoY3hsX3NldF9jYXBhY2l0eShcXHUwMDI2Y3hsLVxcdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzMtXFx0XFx0cGNpX2VycihwY2lfZGV2LCBcXFwiZHBhIGNhcGFjaXR5IHNldHVwIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5pbmNsdWRlL2N4bC9jeGwuaD0yMjc9c3RydWN0IGN4bF9tZW1kZXYgKmRldm1fY3hsX3Byb2JlX21lbShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsXFxuLS1cXG5pbmNsdWRlL2N4bC9jeGwuaC0yMjktXFxuaW5jbHVkZS9jeGwvY3hsLmg6MjMwOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KTtcXG5pbmNsdWRlL2N4bC9jeGwuaC0yMzEtI2VuZGlmIC8qIF9fQ1hMX0NYTF9IX18gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6NTYuNzgyNTI0MDgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjYyMTgxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIENYTCBFbXVsYXRpb24gaW4gdGhlIHNmYyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGNhbGwgaW4gYGVmeF9jeGwuY2AsIGFuZCBJIGtub3cgdGhhdCB0aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgYHNmY2AgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGNvdWxkIHdlIHBvdGVudGlhbGx5IHByb2JlIG9yIGludGVyYWN0IHdpdGggdGhlIGBzZmNgIGRyaXZlciB1c2luZyBzb21lIGZvcm0gb2YgZ2VuZXJpYyBDWEwgZW11bGF0aW9uPyBJdCdzIGEgbG9uZyBzaG90LCBidXQgd29ydGggY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXRpZXMuXG5cblRoZSBgc2ZjYCBkcml2ZXIsIGFzIEkgcmVjYWxsLCB0aWVzIGl0c2VsZiB0byBzcGVjaWZpYyBQQ0kgdmVuZG9yIGFuZCBkZXZpY2UgSURzLiBUaGlzIG1lYW5zIGEgZGlyZWN0LCB1bm1lZGlhdGVkIGVtdWxhdGlvbiBtaWdodCBiZSB0cmlja3kuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIFBDSSBJRCB0YWJsZSwgYGVmeF9wY2lfdGFibGVgLCB3aGljaCBzaG91bGQgcmVzaWRlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmNgLiBTZWVpbmcgdGhpcyB0YWJsZSB3aWxsIGNvbmZpcm0gdGhlIFBDSSBJRHMgYW5kIHRoZSBsZXZlbCBvZiBkaXJlY3QgaW50ZXJhY3Rpb24gdGhhdCBpcyBwb3NzaWJsZS4gSXQgd2lsbCBoZWxwIG1lIGV2YWx1YXRlIHdoZXRoZXIgdGhlIENYTCBpbnRlcmFjdGlvbiBpcyBzb2xlbHkgZGVwZW5kZW50IG9uIFBDSSBJRHMgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGFjY2VzcyBtZXRob2RzLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCBpbiBhc3Nlc3NpbmcgdGhlIGZlYXNpYmlsaXR5IG9mIGFueSBlbXVsYXRpb24gYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTY1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQ0OjAxLjI0ODc0NzMyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NDQ1NDczMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZnhfcGNpX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM9ODYzPXN0YXRpYyB2b2lkIGVmeF91bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTg4NS0vKiBQQ0kgZGV2aWNlIElEIHRhYmxlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZ4X3BjaV90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy04ODctXFx0e1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TT0xBUkZMQVJFLCAweDA5MDMpLCAgLyogU0ZDOTEyMCBQRiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTE0MDg9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xNDA5LVxcdC5uYW1lXFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMDpcXHQuaWRfdGFibGVcXHQ9IGVmeF9wY2lfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTE0MTEtXFx0LnByb2JlXFx0XFx0PSBlZnhfcGNpX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTE0Nzg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxNDc5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBlZnhfcGNpX3RhYmxlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYz03ODM9c3RhdGljIHZvaWQgZWZ4X3VucmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBlZnhfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtODA0LS8qIFBDSSBkZXZpY2UgSUQgdGFibGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6ODA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlZnhfcGNpX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTgwNi1cXHR7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NPTEFSRkxBUkUsIDB4MDgwMyksXFx0LyogU0ZDOTAyMCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEyNzM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc0LVxcdC5uYW1lXFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6MTI3NTpcXHQuaWRfdGFibGVcXHQ9IGVmeF9wY2lfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEyNzYtXFx0LnByb2JlXFx0XFx0PSBlZnhfcGNpX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEzNDk9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzoxMzUwOk1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBlZnhfcGNpX3RhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDQ6MDQuMTAzMjE5OTc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDYyODE4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBTb2xhcmZsYXJlLVNwZWNpZmljIEhhcmR3YXJlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBwcmV0dHkgY2xlYXIuIFRoZSBjb2RlIGJlaW5nIGludHJvZHVjZWQgaGVyZSBpcyBhbGwgdGllZCBkaXJlY3RseSB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwIG5ldHdvcmsgZHJpdmVyLiBJIHJlbWVtYmVyIHRob3NlIFBDSSBJRHMsIGBQQ0lfVkVORE9SX0lEX1NPTEFSRkxBUkUsIDB4MDkwM2AsIHRoZXkncmUgc3BlY2lmaWMgdG8gdGhlaXIgaGFyZHdhcmUuIEFuZCBRRU1VLCB0aGUgZW52aXJvbm1lbnQgd2UncmUgd29ya2luZyB3aXRoIGZvciBmdXp6aW5nLCBkb2Vzbid0IGVtdWxhdGUgdGhhdC4gVGhlcmUncyBubyBnZW5lcmljIFBDSSBkZXZpY2UgZW11bGF0b3IgaW4gc3l6a2FsbGVyIHRvIGp1c3Qgd2hpcCB1cCBhIG1vY2sgb2YgdGhhdCBoYXJkd2FyZSBlaXRoZXIuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIGRyaXZlciAqcmVxdWlyZXMqIGFjdHVhbCBwaHlzaWNhbCBTb2xhcmZsYXJlIGhhcmR3YXJlLCB0aGUgbmV3IENYTCBzdXBwb3J0IGNvZGUsIHdoaWNoIHRoaXMgcGF0Y2ggaW50cm9kdWNlcywgaXMgc2ltcGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgUUVNVSBzZXR1cC4gSXQgZG9lc24ndCBtYXR0ZXIgdGhhdCBzb21lIG9mIHRoZSBjaGFuZ2VzIGFyZSBqdXN0IHJlZmFjdG9yaW5nIGluIHRoZSBDWEwgY29yZSwgb3IgdGhhdCB0aGV5IGFyZSBnZW5lcmFsLCB0aGlzIENYTCBjb3JlIHJlZmFjdG9yaW5nIGlzIG5vdCB0cmlnZ2VyZWQsIGFjY2Vzc2libGUgb3IgcmVhY2hlZCB3aXRob3V0IHRoZSBTRkMgZHJpdmVyIGZpcnN0LlxuXG5UaGlzIGNvbmZpcm1zIHdoYXQgSSBleHBlY3RlZDsgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXCIgY2F0ZWdvcnkuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgb25lLiBXb3J0aEZ1enppbmc9ZmFsc2UgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjk3LCJPdXRwdXRUb2tlbnMiOjExMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0NDoxMC4xMDk1MDU1NjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw79w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 16:27:09 +0000 UTC FinishedAt: 2026-07-01 16:44:11 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQ1hMIHN1cHBvcnQgdG8gdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgbmV0d29yayBkcml2ZXIgKHNmYykgYW5kIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIENYTCBjb3JlIGZvciBpdC4gVGhlIHNmYyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU29sYXJmbGFyZSBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIFFFTVUgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYWExNDE2ZDk0ODBlMTQyNWU0ODdjYTMwZjViMjk2Mzc0YTFkNjI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNjo0Mjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXG5pbmRleCAwNzU1NWFlNjM4NTk0MC4uZjdjZWJiMDI2NTUyMzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9jb3JlLmhcbkBAIC0xMDEsNiAmIzQzOzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkcixcbiBzdHJ1Y3QgZGVudHJ5ICpjeGxfZGVidWdmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKmRpcik7XG4gaW50IGN4bF9kcGFfc2V0X3BhcnQoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCxcbiBcdFx0ICAgICBlbnVtIGN4bF9wYXJ0aXRpb25fbW9kZSBtb2RlKTtcbiYjNDM7c3RydWN0IGN4bF9tZW1kZXZfc3RhdGU7XG4mIzQzO2ludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKTtcbiBpbnQgY3hsX2RwYV9hbGxvYyhzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkLCB1NjQgc2l6ZSk7XG4gaW50IGN4bF9kcGFfZnJlZShzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkKTtcbiByZXNvdXJjZV9zaXplX3QgY3hsX2RwYV9zaXplKHN0cnVjdCBjeGxfZW5kcG9pbnRfZGVjb2RlciAqY3hsZWQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jIGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcbmluZGV4IDdjNmM1Yjc0NTBhNTRhLi45N2IxZTYxYWQwMTg3NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL21ib3guY1xuQEAgLTExNTIsNyAmIzQzOzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcJiMzNDtDWExcJiMzNDspO1xuICAqXG4gICogU2VlIENYTCBAOC4yLjkuNS4yLjEgR2V0IFBhcnRpdGlvbiBJbmZvXG4gICovXG4tc3RhdGljIGludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKVxuJiM0MztpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbiB7XG4gXHRzdHJ1Y3QgY3hsX21haWxib3ggKmN4bF9tYm94ID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzLmN4bF9tYm94O1xuIFx0c3RydWN0IGN4bF9tYm94X2dldF9wYXJ0aXRpb25faW5mbyBwaTtcbkBAIC0xMzA4LDU1ICYjNDM7MTMwOCw2IEBAIGludCBjeGxfbWVtX3Nhbml0aXplKHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZCwgdTE2IGNtZClcbiBcdHJldHVybiAtRUJVU1k7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXG4te1xuLVx0aW50IGkgPSBpbmZvLVx1MDAzZW5yX3BhcnRpdGlvbnM7XG4tXG4tXHRpZiAoc2l6ZSA9PSAwKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpbmZvLVx1MDAzZXBhcnRbaV0ucmFuZ2UgPSAoc3RydWN0IHJhbmdlKSB7XG4tXHRcdC5zdGFydCA9IHN0YXJ0LFxuLVx0XHQuZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZSAtIDEsXG4tXHR9O1xuLVx0aW5mby1cdTAwM2VwYXJ0W2ldLm1vZGUgPSBtb2RlO1xuLVx0aW5mby1cdTAwM2Vucl9wYXJ0aXRpb25zJiM0MzsmIzQzOztcbi19XG4tXG4taW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXG4te1xuLVx0c3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzO1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gY3hsZHMtXHUwMDNlZGV2O1xuLVx0aW50IHJjO1xuLVxuLVx0aWYgKCFjeGxkcy1cdTAwM2VtZWRpYV9yZWFkeSkge1xuLVx0XHRpbmZvLVx1MDAzZXNpemUgPSAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdGluZm8tXHUwMDNlc2l6ZSA9IG1kcy1cdTAwM2V0b3RhbF9ieXRlcztcbi1cbi1cdGlmIChtZHMtXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcbi1cdFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVx1MDAzZXZvbGF0aWxlX29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuLVx0XHRhZGRfcGFydChpbmZvLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcyxcbi1cdFx0XHQgbWRzLVx1MDAzZXBlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcbi1cdGlmIChyYykge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IHBhcnRpdGlvbiBpbmZvcm1hdGlvblxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiByYztcbi1cdH1cbi1cbi1cdGFkZF9wYXJ0KGluZm8sIDAsIG1kcy1cdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuLVx0YWRkX3BhcnQoaW5mbywgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVx1MDAzZWFjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLFxuLVx0XHQgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLUVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcJiMzNDtDWExcJiMzNDspO1xuLVxuIGludCBjeGxfZ2V0X2RpcnR5X2NvdW50KHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHUzMiAqY291bnQpXG4ge1xuIFx0c3RydWN0IGN4bF9tYWlsYm94ICpjeGxfbWJveCA9IFx1MDAyNm1kcy1cdTAwM2VjeGxkcy5jeGxfbWJveDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jIGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xuaW5kZXggMzNhM2QyZTdiMTNhZjkuLjJlNDU3YjFlYmM3ZGZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xuQEAgLTU5NCw2ICYjNDM7NTk0LDczIEBAIGJvb2wgaXNfY3hsX21lbWRldihjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsIFwmIzM0O0NYTFwmIzM0Oyk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSA9IGluZm8tXHUwMDNlbnJfcGFydGl0aW9ucztcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VwYXJ0W2ldLnJhbmdlID0gKHN0cnVjdCByYW5nZSkge1xuJiM0MztcdFx0LnN0YXJ0ID0gc3RhcnQsXG4mIzQzO1x0XHQuZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZSAtIDEsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbmZvLVx1MDAzZXBhcnRbaV0ubW9kZSA9IG1vZGU7XG4mIzQzO1x0aW5mby1cdTAwM2Vucl9wYXJ0aXRpb25zJiM0MzsmIzQzOztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMgPSBcdTAwMjZtZHMtXHUwMDNlY3hsZHM7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY3hsZHMtXHUwMDNlZGV2O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKCFjeGxkcy1cdTAwM2VtZWRpYV9yZWFkeSkge1xuJiM0MztcdFx0aW5mby1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VzaXplID0gbWRzLVx1MDAzZXRvdGFsX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRpZiAobWRzLVx1MDAzZXBhcnRpdGlvbl9hbGlnbl9ieXRlcyA9PSAwKSB7XG4mIzQzO1x0XHRhZGRfcGFydChpbmZvLCAwLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7XG4mIzQzO1x0XHRhZGRfcGFydChpbmZvLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcyxcbiYjNDM7XHRcdFx0IG1kcy1cdTAwM2VwZXJzaXN0ZW50X29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9QTUVNKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhtZHMpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7XG4mIzQzO1x0YWRkX3BhcnQoaW5mbywgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVx1MDAzZWFjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLFxuJiM0MztcdFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9kcGFfZmV0Y2gsIFwmIzM0O0NYTFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxuJiM0MzsgKlxuJiM0MzsgKiBAY3hsZHM6IHBvaW50ZXIgdG8gY3hsX2Rldl9zdGF0ZVxuJiM0MzsgKiBAY2FwYWNpdHk6IGRldmljZSB2b2xhdGlsZSBtZW1vcnkgc2l6ZVxuJiM0MzsgKi9cbiYjNDM7aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY3hsX2RwYV9pbmZvIHJhbmdlX2luZm8gPSB7XG4mIzQzO1x0XHQuc2l6ZSA9IGNhcGFjaXR5LFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGFkZF9wYXJ0KFx1MDAyNnJhbmdlX2luZm8sIDAsIGNhcGFjaXR5LCBDWExfUEFSVE1PREVfUkFNKTtcbiYjNDM7XHRyZXR1cm4gY3hsX2RwYV9zZXR1cChjeGxkcywgXHUwMDI2cmFuZ2VfaW5mbyk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbiYjNDM7XG4gLyoqXG4gICogc2V0X2V4Y2x1c2l2ZV9jeGxfY29tbWFuZHMoKSAtIGF0b21pY2FsbHkgZGlzYWJsZSB1c2VyIGN4bCBjb21tYW5kc1xuICAqIEBtZHM6IFRoZSBkZXZpY2Ugc3RhdGUgdG8gb3BlcmF0ZSBvblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5pbmRleCBlNDMzOGZkN2UwMWI0Ny4uOWQ4MDdjMWEwMDJjYTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLWRvZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N4bC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hscGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxtZW0uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jIGIvZHJpdmVycy9jeGwvY29yZS9wb3J0LmNcbmluZGV4IDEyMTVlZTRmNDAzNTFiLi5jYjYzM2UxOTE1MWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGwvZWluai5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N4bC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hscGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGwuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jIGIvZHJpdmVycy9jeGwvY29yZS9yZWdzLmNcbmluZGV4IDkzNzEwY2Y0ZjBhNjk3Li4yMGMyZDlmYmNmZTdkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xuQEAgLTQsNiAmIzQzOzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxwY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3BtdS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY3hscGNpLmggYi9kcml2ZXJzL2N4bC9jeGxwY2kuaFxuaW5kZXggYjgyNmViNTNjZjdiYWMuLjExMGVjOWM0NGYwOWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY3hscGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oXG5AQCAtMTMsMTYgJiM0MzsxMyw2IEBAXG4gICovXG4gI2RlZmluZSBDWExfUENJX0RFRkFVTFRfTUFYX1ZFQ1RPUlMgMTZcbiBcbi0vKiBSZWdpc3RlciBCbG9jayBJZGVudGlmaWVyIChSQkkpICovXG4tZW51bSBjeGxfcmVnbG9jX3R5cGUge1xuLVx0Q1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLFxuLVx0Q1hMX1JFR0xPQ19SQklfQ09NUE9ORU5ULFxuLVx0Q1hMX1JFR0xPQ19SQklfVklSVCxcbi1cdENYTF9SRUdMT0NfUkJJX01FTURFVixcbi1cdENYTF9SRUdMT0NfUkJJX1BNVSxcbi1cdENYTF9SRUdMT0NfUkJJX1RZUEVTXG4tfTtcbi1cbiAvKlxuICAqIFRhYmxlIEFjY2VzcyBET0UsIENEQVQgUmVhZCBFbnRyeSBSZXNwb25zZVxuICAqXG5AQCAtMTEyLDYgJiM0MzsxMDIsNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9jeGxfcG9ydF9yYXNfc2V0dXAoc3RydWN0IGN4bF9wb3J0ICpwb3J0KVxuIH1cbiAjZW5kaWZcbiBcbi1pbnQgY3hsX3BjaV9zZXR1cF9yZWdzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIGN4bF9yZWdsb2NfdHlwZSB0eXBlLFxuLVx0XHQgICAgICAgc3RydWN0IGN4bF9yZWdpc3Rlcl9tYXAgKm1hcCk7XG4gI2VuZGlmIC8qIF9fQ1hMX1BDSV9IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9wY2kuYyBiL2RyaXZlcnMvY3hsL3BjaS5jXG5pbmRleCAyNjdjNjc5YjBiM2MyMC4uYmI4OTJkYmZkZDZkNmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvcGNpLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N4bC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bC9tYWlsYm94LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtjeGxtZW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2N4bHBjaS5oXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xuaW5kZXggYzRjNDM0MzRmMzE0MzQuLjk3OWYyODAxZTJhOGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnXG5AQCAtNjYsNiAmIzQzOzY2LDE1IEBAIGNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXG4gXHQgIERyaXZlci1JbnRlcmZhY2UpIGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFsbG93aW5nIGRlYnVnZ2luZyBvZlxuIFx0ICBkcml2ZXIvZmlybXdhcmUgaW50ZXJhY3Rpb24uICBUaGUgdHJhY2luZyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5XG4gXHQgIGEgc3lzZnMgZmlsZSAmIzM5O21jZGlfbG9nZ2luZyYjMzk7IHVuZGVyIHRoZSBQQ0kgZGV2aWNlLlxuJiM0Mztjb25maWcgU0ZDX0NYTFxuJiM0MztcdGJvb2wgXCYjMzQ7U29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBDWEwgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBDWExfQlVTIFx1MDAzZT0gU0ZDXG4mIzQzO1x0ZGVmYXVsdCBTRkNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgU0ZDIENYTCBzdXBwb3J0IGlmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJpbmcgQ1hMIGZvclxuJiM0MztcdCAgdXNpbmcgQ1RQSU8gd2l0aCBDWEwubWVtLiBUaGUgU0ZDIGRldmljZSB3aXRoIENYTCBzdXBwb3J0IGFuZFxuJiM0MztcdCAgd2l0aCBhIENYTC1hd2FyZSBmaXJtd2FyZSBjYW4gYmUgdXNlZCBmb3IgbWluaW1pemluZyBsYXRlbmNpZXNcbiYjNDM7XHQgIHdoZW4gc2VuZGluZyB0aHJvdWdoIENUUElPLlxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL0tjb25maWdcJiMzNDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGVcbmluZGV4IGQ5OTAzOWVjNDY4ZDY3Li5iYjBmMTg5MWNkZTY1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlXG5AQCAtMTMsNiAmIzQzOzEzLDcgQEAgc2ZjLSQoQ09ORklHX1NGQ19TUklPVilcdCYjNDM7PSBzcmlvdi5vIGVmMTBfc3Jpb3YubyBlZjEwMF9zcmlvdi5vIGVmMTAwX3JlcC5vIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFlLm8gdGMubyB0Y19iaW5kaW5ncy5vIHRjX2NvdW50ZXJzLm8gXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y19lbmNhcF9hY3Rpb25zLm8gdGNfY29ubnRyYWNrLm9cbiBcbiYjNDM7c2ZjLSQoQ09ORklHX1NGQ19DWEwpXHQmIzQzOz0gZWZ4X2N4bC5vXG4gb2JqLSQoQ09ORklHX1NGQylcdCYjNDM7PSBzZmMub1xuIFxuIG9iai0kKENPTkZJR19TRkNfRkFMQ09OKSAmIzQzOz0gZmFsY29uL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jXG5pbmRleCA3ZTA0ZjExNWJiYWFhZi4uNzNiYzA2NDkyOWY2MzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC91ZHBfdHVubmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZWZ4X2N4bC5oXCYjMzQ7XG4gXG4gLyogSGFyZHdhcmUgY29udHJvbCBmb3IgRUYxMCBhcmNoaXRlY3R1cmUgaW5jbHVkaW5nICYjMzk7SHVudGluZ3RvbiYjMzk7LiAqL1xuIFxuQEAgLTEwNiw3ICYjNDM7MTA3LDcgQEAgc3RhdGljIGludCBlZnhfZWYxMF9nZXRfdmZfaW5kZXgoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcbiBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIHtcbi1cdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WNF9PVVRfTEVOKTtcbiYjNDM7XHRNQ0RJX0RFQ0xBUkVfQlVGKG91dGJ1ZiwgTUNfQ01EX0dFVF9DQVBBQklMSVRJRVNfVjdfT1VUX0xFTik7XG4gXHRzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LVx1MDAzZW5pY19kYXRhO1xuIFx0c2l6ZV90IG91dGxlbjtcbiBcdGludCByYztcbkBAIC0xNzcsNiAmIzQzOzE3OCwxMiBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0XHRcdCAgZWZ4LVx1MDAzZW51bV9tYWNfc3RhdHMpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChvdXRsZW4gXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pXG4mIzQzO1x0XHRuaWNfZGF0YS1cdTAwM2VkYXRhcGF0aF9jYXBzMyA9IDA7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgPSBNQ0RJX0RXT1JEKG91dGJ1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgR0VUX0NBUEFCSUxJVElFU19WN19PVVRfRkxBR1MzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTE0MCw2ICYjNDM7MTE0Nyw5IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0dW5zaWduZWQgaW50IGNoYW5uZWxfdmlzLCBwaW9fd3JpdGVfdmlfYmFzZSwgbWF4X3ZpcztcbiBcdHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtXHUwMDNlbmljX2RhdGE7XG4gXHR1bnNpZ25lZCBpbnQgdWNfbWVtX21hcF9zaXplLCB3Y19tZW1fbWFwX3NpemU7XG4mIzQzOyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuJiM0MztcdHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YTtcbiYjNDM7I2VuZGlmXG4gXHR2b2lkIF9faW9tZW0gKm1lbWJhc2U7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMTI2Myw4ICYjNDM7MTI3MywyMyBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2RpbWVuc2lvbl9yZXNvdXJjZXMoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcdGlvdW5tYXAoZWZ4LVx1MDAzZW1lbWJhc2UpO1xuIFx0ZWZ4LVx1MDAzZW1lbWJhc2UgPSBtZW1iYXNlO1xuIFxuLVx0LyogU2V0IHVwIHRoZSBXQyBtYXBwaW5nIGlmIG5lZWRlZCAqL1xuLVx0aWYgKHdjX21lbV9tYXBfc2l6ZSkge1xuJiM0MztcdGlmICghd2NfbWVtX21hcF9zaXplKVxuJiM0MztcdFx0Z290byBza2lwX3BpbztcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHVwIHRoZSBXQyBtYXBwaW5nICovXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NGQ19DWExcbiYjNDM7XHRwcm9iZV9kYXRhID0gY29udGFpbmVyX29mKGVmeCwgc3RydWN0IGVmeF9wcm9iZV9kYXRhLCBlZngpO1xuJiM0MztcdGlmICgobmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgXHUwMDI2XG4mIzQzO1x0ICAgICgxIFx1MDAzY1x1MDAzYyBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfQ1hMX0NPTkZJR19FTkFCTEVfTEJOKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHByb2JlX2RhdGEtXHUwMDNlY3hsX3Bpb19pbml0aWFsaXNlZCkge1xuJiM0MztcdFx0LyogVXNpbmcgUElPIHRocm91Z2ggQ1hMIG1hcHBpbmcgKi9cbiYjNDM7XHRcdG5pY19kYXRhLVx1MDAzZXBpb193cml0ZV9iYXNlID0gcHJvYmVfZGF0YS1cdTAwM2VjeGwtXHUwMDNlY3RwaW9fY3hsO1xuJiM0MztcdFx0bmljX2RhdGEtXHUwMDNlcGlvX3dyaXRlX3ZpX2Jhc2UgPSBwaW9fd3JpdGVfdmlfYmFzZTtcbiYjNDM7XHR9IGVsc2VcbiYjNDM7I2VuZGlmXG4mIzQzO1x0e1xuJiM0MztcdFx0LyogVXNpbmcgbGVnYWN5IFBJTyBCQVIgbWFwcGluZyAqL1xuIFx0XHRuaWNfZGF0YS1cdTAwM2V3Y19tZW1iYXNlID0gaW9yZW1hcF93YyhlZngtXHUwMDNlbWVtYmFzZV9waHlzICYjNDM7XG4gXHRcdFx0XHRcdFx0ICB1Y19tZW1fbWFwX3NpemUsXG4gXHRcdFx0XHRcdFx0ICB3Y19tZW1fbWFwX3NpemUpO1xuQEAgLTEyNzksMTIgJiM0MzsxMzA0LDE0IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0XHRcdG5pY19kYXRhLVx1MDAzZXdjX21lbWJhc2UgJiM0MztcbiBcdFx0XHQocGlvX3dyaXRlX3ZpX2Jhc2UgKiBlZngtXHUwMDNldmlfc3RyaWRlICYjNDM7IEVSX0RaX1RYX1BJT0JVRiAtXG4gXHRcdFx0IHVjX21lbV9tYXBfc2l6ZSk7XG4tXG4tXHRcdHJjID0gZWZ4X2VmMTBfbGlua19waW9idWZzKGVmeCk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRlZnhfZWYxMF9mcmVlX3Bpb2J1ZnMoZWZ4KTtcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IGVmeF9lZjEwX2xpbmtfcGlvYnVmcyhlZngpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGVmeF9lZjEwX2ZyZWVfcGlvYnVmcyhlZngpO1xuJiM0MztcbiYjNDM7c2tpcF9waW86XG4mIzQzO1xuIFx0bmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC1cdTAwM2VuZXRfZGV2LFxuIFx0XHQgIFwmIzM0O21lbW9yeSBCQVIgYXQgJXBhICh2aXJ0dWFsICVwJiM0MzsleCBVQywgJXAmIzQzOyV4IFdDKVxcblwmIzM0OyxcbiBcdFx0ICBcdTAwMjZlZngtXHUwMDNlbWVtYmFzZV9waHlzLCBlZngtXHUwMDNlbWVtYmFzZSwgdWNfbWVtX21hcF9zaXplLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xuaW5kZXggOGYxMzZhMTFkMzk2OGEuLjM4MDZjZDNkZDdmNDg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmNcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzcmlvdi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZWZ4X2RldmxpbmsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlZnhfY3hsLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDttY2RpX3BvcnRfY29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttY2RpX3Bjb2wuaFwmIzM0O1xuQEAgLTk4MSwxMiAmIzQzOzk4MiwxNSBAQCBzdGF0aWMgdm9pZCBlZnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldilcbiBcdGVmeF9wY2lfcmVtb3ZlX21haW4oZWZ4KTtcbiBcbiBcdGVmeF9maW5pX2lvKGVmeCk7XG4mIzQzO1xuJiM0MztcdHByb2JlX2RhdGEgPSBjb250YWluZXJfb2YoZWZ4LCBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEsIGVmeCk7XG4mIzQzO1x0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xuJiM0MztcbiBcdHBjaV9kYmcoZWZ4LVx1MDAzZXBjaV9kZXYsIFwmIzM0O3NodXRkb3duIHN1Y2Nlc3NmdWxcXG5cJiMzNDspO1xuIFxuIFx0ZWZ4X2ZpbmlfZGV2bGlua19hbmRfdW5sb2NrKGVmeCk7XG4gXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcbiBcdGZyZWVfbmV0ZGV2KGVmeC1cdTAwM2VuZXRfZGV2KTtcbi1cdHByb2JlX2RhdGEgPSBjb250YWluZXJfb2YoZWZ4LCBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEsIGVmeCk7XG4gXHRrZnJlZShwcm9iZV9kYXRhKTtcbiB9O1xuIFxuQEAgLTExOTAsNiAmIzQzOzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGZhaWwyO1xuIFxuJiM0MztcdC8qIEEgc3VjY2Vzc2Z1bCBjeGwgaW5pdGlhbGl6YXRpb24gaW1wbGllcyBhIENYTCByZWdpb24gY3JlYXRlZCB0byBiZVxuJiM0MztcdCAqIHVzZWQgZm9yIFBJTyBidWZmZXJzLiBJZiB0aGVyZSBpcyBubyBDWEwgc3VwcG9ydCBsZWdhY3kgUElPIGJ1ZmZlcnNcbiYjNDM7XHQgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTFxuJiM0MztcdCAqIHN1cHBvcnQgYW5kIHRoZSBjeGwgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O0NYTCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxcblwmIzM0OywgcmMpO1xuJiM0MztcdFx0Z290byBmYWlsMztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcbiBcdGlmIChyYykge1xuIFx0XHQvKiBPbiBmYWlsdXJlLCByZXRyeSBvbmNlIGltbWVkaWF0ZWx5LlxuQEAgLTEyMjgsNiAmIzQzOzEyNDMsNyBAQCBzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsXG4gXHRyZXR1cm4gMDtcbiBcbiAgZmFpbDM6XG4mIzQzO1x0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xuIFx0ZWZ4X2ZpbmlfaW8oZWZ4KTtcbiAgZmFpbDI6XG4gXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xuQEAgLTAsMCAmIzQzOzEsMTA1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVyIGZvciBBTUQgbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NjeGwvY3hsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O25ldF9kcml2ZXIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlZnhfY3hsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUZYX0NUUElPX0JVRkZFUl9TSVpFXHRTWl8yNTZNXG4mIzQzO1xuJiM0MztpbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZnhfbmljICplZnggPSBcdTAwMjZwcm9iZV9kYXRhLVx1MDAzZWVmeDtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGVmeC1cdTAwM2VwY2lfZGV2O1xuJiM0MztcdHN0cnVjdCByYW5nZSBjeGxfcGlvX3JhbmdlO1xuJiM0MztcdHN0cnVjdCBlZnhfY3hsICpjeGw7XG4mIzQzO1x0dTE2IGR2c2VjO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogSXMgdGhlIGRldmljZSBjb25maWd1cmVkIHdpdGggYW5kIHVzaW5nIENYTD8gKi9cbiYjNDM7XHRpZiAoIXBjaWVfaXNfY3hsKHBjaV9kZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGR2c2VjID0gcGNpX2ZpbmRfZHZzZWNfY2FwYWJpbGl0eShwY2lfZGV2LCBQQ0lfVkVORE9SX0lEX0NYTCxcbiYjNDM7XHRcdFx0XHRcdCAgUENJX0RWU0VDX0NYTF9ERVZJQ0UpO1xuJiM0MztcdGlmICghZHZzZWMpIHtcbiYjNDM7XHRcdHBjaV9pbmZvKHBjaV9kZXYsIFwmIzM0O0NYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9kYmcocGNpX2RldiwgXCYjMzQ7Q1hMX0RWU0VDX1BDSUVfREVWSUNFIGNhcGFiaWxpdHkgZm91bmRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgYSBjeGxfZGV2X3N0YXRlIGVtYmVkZGVkIGluIHRoZSBjeGwgc3RydWN0IHVzaW5nIGN4bCBjb3JlIGFwaVxuJiM0MztcdCAqIHNwZWNpZnlpbmcgbm8gbWJveCBhdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3hsID0gZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShcdTAwMjZwY2lfZGV2LVx1MDAzZWRldiwgQ1hMX0RFVlRZUEVfREVWTUVNLFxuJiM0MztcdFx0XHRcdFx0cGNpX2dldF9kc24ocGNpX2RldiksIGR2c2VjLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGVmeF9jeGwsIGN4bGRzLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGlmICghY3hsKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJjID0gY3hsX3BjaV9zZXR1cF9yZWdzKHBjaV9kZXYsIENYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZjeGwtXHUwMDNlY3hsZHMucmVnX21hcCk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O05vIGNvbXBvbmVudCByZWdpc3RlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjeGwtXHUwMDNlY3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLmhkbV9kZWNvZGVyLnZhbGlkKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O0V4cGVjdGVkIEhETSBjb21wb25lbnQgcmVnaXN0ZXIgbm90IGZvdW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjeGwtXHUwMDNlY3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLnJhcy52YWxpZCkge1xuJiM0MztcdFx0cGNpX2VycihwY2lfZGV2LCBcJiMzNDtFeHBlY3RlZCBSQVMgY29tcG9uZW50IHJlZ2lzdGVyIG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNldCBtZWRpYSByZWFkeSBleHBsaWNpdGx5IGFzIHRoZXJlIGFyZSBuZWl0aGVyIG1haWxib3ggZm9yIGNoZWNraW5nXG4mIzQzO1x0ICogdGhpcyBzdGF0ZSBub3IgdGhlIENYTCByZWdpc3RlciBpbnZvbHZlZCwgYm90aCBub3QgbWFuZGF0b3J5IGZvclxuJiM0MztcdCAqIHR5cGUyLlxuJiM0MztcdCAqL1xuJiM0MztcdGN4bC1cdTAwM2VjeGxkcy5tZWRpYV9yZWFkeSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChjeGxfc2V0X2NhcGFjaXR5KFx1MDAyNmN4bC1cdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xuJiM0MztcdFx0cGNpX2VycihwY2lfZGV2LCBcJiMzNDtkcGEgY2FwYWNpdHkgc2V0dXAgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3hsLVx1MDAzZWN4bG1kID0gZGV2bV9jeGxfcHJvYmVfbWVtKFx1MDAyNmN4bC1cdTAwM2VjeGxkcywgXHUwMDI2Y3hsX3Bpb19yYW5nZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjeGwtXHUwMDNlY3hsbWQpKSB7XG4mIzQzO1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O0NYTCBhY2NlbCBtZW1kZXYgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGN4bC1cdTAwM2VjeGxtZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjeGwtXHUwMDNlY3RwaW9fY3hsID0gaW9yZW1hcF93YyhjeGxfcGlvX3JhbmdlLnN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgICByYW5nZV9sZW4oXHUwMDI2Y3hsX3Bpb19yYW5nZSkpO1xuJiM0MztcdGlmICghY3hsLVx1MDAzZWN0cGlvX2N4bCkge1xuJiM0MztcdFx0cGNpX2VycihwY2lfZGV2LCBcJiMzNDtDWEwgaW9yZW1hcCByZWdpb24gKCVwcmEpIGZhaWxlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHUwMDI2Y3hsX3Bpb19yYW5nZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByb2JlX2RhdGEtXHUwMDNlY3hsX3Bpb19pbml0aWFsaXNlZCA9IHRydWU7XG4mIzQzO1x0cHJvYmVfZGF0YS1cdTAwM2VjeGwgPSBjeGw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByb2JlX2RhdGEtXHUwMDNlY3hsKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpb3VubWFwKHByb2JlX2RhdGEtXHUwMDNlY3hsLVx1MDAzZWN0cGlvX2N4bCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7Q1hMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZTI3MDVjYjA2M2Y2YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaFxuQEAgLTAsMCAmIzQzOzEsMzIgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuJiM0MzsgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHNcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4mIzQzOyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZFxuJiM0MzsgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEVGWF9DWExfSFxuJiM0MzsjZGVmaW5lIEVGWF9DWExfSFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NjeGwvY3hsLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBlZnhfcHJvYmVfZGF0YTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBlZnhfY3hsIHtcbiYjNDM7XHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSBjeGxkcztcbiYjNDM7XHRzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQ7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpjdHBpb19jeGw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XG4mIzQzO3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHsgcmV0dXJuIDA7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9XG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxuaW5kZXggYjk4YzI1OWY2NzJkYjUuLjM5NjRiMmM1NjYwOWM0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxuQEAgLTExOTcsMTQgJiM0MzsxMTk3LDI0IEBAIHN0cnVjdCBlZnhfbmljIHtcbiBcdGF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7XG4gfTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMXG4mIzQzO3N0cnVjdCBlZnhfY3hsO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGVmeF9wcm9iZV9kYXRhIC0gU3RhdGUgYWZ0ZXIgaGFyZHdhcmUgcHJvYmVcbiAgKiBAcGNpX2RldjogVGhlIFBDSSBkZXZpY2VcbiAgKiBAZWZ4OiBFZnggTklDIGRldGFpbHNcbiYjNDM7ICogQGN4bDogZGV0YWlscyBvZiByZWxhdGVkIGN4bCBvYmplY3RzXG4mIzQzOyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS5cbiAgKi9cbiBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEge1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgZWZ4X25pYyBlZng7XG4mIzQzOyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuJiM0MztcdHN0cnVjdCBlZnhfY3hsICpjeGw7XG4mIzQzO1x0Ym9vbCBjeGxfcGlvX2luaXRpYWxpc2VkO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVmeF9uaWMgKmVmeF9uZXRkZXZfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaFxuaW5kZXggZWMzYjJkZjQzYjY4ZDkuLjc0ODBmOTk5NWRmYjhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcbkBAIC0xNTIsNiAmIzQzOzE1Miw4IEBAIGVudW0ge1xuICAqXHQlTUNfQ01EX0dFVF9DQVBBQklMSVRJRVMgcmVzcG9uc2UpXG4gICogQGRhdGFwYXRoX2NhcHMyOiBGdXJ0aGVyIENhcGFiaWxpdGllcyBvZiBkYXRhcGF0aCBmaXJtd2FyZSAoRkxBR1MyIGZpZWxkIG9mXG4gICogJU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKVxuJiM0MzsgKiBAZGF0YXBhdGhfY2FwczM6IEZ1cnRoZXIgQ2FwYWJpbGl0aWVzIG9mIGRhdGFwYXRoIGZpcm13YXJlIChGTEFHUzMgZmllbGQgb2ZcbiYjNDM7ICogJU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKVxuICAqIEByeF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFJ4RFBDUFVcbiAgKiBAdHhfZHBjcHVfZndfaWQ6IEZpcm13YXJlIElEIG9mIHRoZSBUeERQQ1BVXG4gICogQG11c3RfcHJvYmVfdnN3aXRjaGluZzogRmxhZzogdnN3aXRjaGluZyBoYXMgeWV0IHRvIGJlIHNldHVwIGFmdGVyIE1DIHJlYm9vdFxuQEAgLTE4Nyw2ICYjNDM7MTg5LDcgQEAgc3RydWN0IGVmeF9lZjEwX25pY19kYXRhIHtcbiBcdGJvb2wgbXVzdF9jaGVja19kYXRhcGF0aF9jYXBzO1xuIFx0dTMyIGRhdGFwYXRoX2NhcHM7XG4gXHR1MzIgZGF0YXBhdGhfY2FwczI7XG4mIzQzO1x0dTMyIGRhdGFwYXRoX2NhcHMzO1xuIFx0dW5zaWduZWQgaW50IHJ4X2RwY3B1X2Z3X2lkO1xuIFx0dW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkO1xuIFx0Ym9vbCBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaFxuaW5kZXggMDE2Yzc0ZmI3NDdjZjYuLjgwMmIxNDNkZTgzZGI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9jeGwvY3hsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvY3hsL2N4bC5oXG5AQCAtMjI2LDQgJiM0MzsyMjYsNiBAQCBzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqX2Rldm1fY3hsX2Rldl9zdGF0ZV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIHN0cnVjdCBjeGxfbWVtZGV2ICpkZXZtX2N4bF9wcm9iZV9tZW0oc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHJhbmdlICpyYW5nZSk7XG4mIzQzO1xuJiM0MztpbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSk7XG4gI2VuZGlmIC8qIF9fQ1hMX0NYTF9IX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlMDAwMDAxNTg3MWEyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2N4bC9wY2kuaFxuQEAgLTAsMCAmIzQzOzEsMjIgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKiBDb3B5cmlnaHQoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19DWExfQ1hMX1BDSV9IX19cbiYjNDM7I2RlZmluZSBfX0NYTF9DWExfUENJX0hfX1xuJiM0MztcbiYjNDM7LyogUmVnaXN0ZXIgQmxvY2sgSWRlbnRpZmllciAoUkJJKSAqL1xuJiM0MztlbnVtIGN4bF9yZWdsb2NfdHlwZSB7XG4mIzQzO1x0Q1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLFxuJiM0MztcdENYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCxcbiYjNDM7XHRDWExfUkVHTE9DX1JCSV9WSVJULFxuJiM0MztcdENYTF9SRUdMT0NfUkJJX01FTURFVixcbiYjNDM7XHRDWExfUkVHTE9DX1JCSV9QTVUsXG4mIzQzO1x0Q1hMX1JFR0xPQ19SQklfVFlQRVNcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwO1xuJiM0MztzdHJ1Y3QgcGNpX2RldjtcbiYjNDM7XG4mIzQzO2ludCBjeGxfcGNpX3NldHVwX3JlZ3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gY3hsX3JlZ2xvY190eXBlIHR5cGUsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGN4bF9yZWdpc3Rlcl9tYXAgKm1hcCk7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQ1hMIHN1cHBvcnQgdG8gdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgbmV0d29yayBkcml2ZXIgKHNmYykgYW5kIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIENYTCBjb3JlIGZvciBpdC4gVGhlIHNmYyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU29sYXJmbGFyZSBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIFFFTVUgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFhYTE0MTZkOTQ4MGUxNDI1ZTQ4N2NhMzBmNWIyOTYzNzRhMWQ2MjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDE2OjQyOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9jb3JlLmggYi9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaAppbmRleCAwNzU1NWFlNjM4NTk0MC4uZjdjZWJiMDI2NTUyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oCkBAIC0xMDEsNiAmIzQzOzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkciwKIHN0cnVjdCBkZW50cnkgKmN4bF9kZWJ1Z2ZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqZGlyKTsKIGludCBjeGxfZHBhX3NldF9wYXJ0KHN0cnVjdCBjeGxfZW5kcG9pbnRfZGVjb2RlciAqY3hsZWQsCiAJCSAgICAgZW51bSBjeGxfcGFydGl0aW9uX21vZGUgbW9kZSk7CiYjNDM7c3RydWN0IGN4bF9tZW1kZXZfc3RhdGU7CiYjNDM7aW50IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMpOwogaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpOwogaW50IGN4bF9kcGFfZnJlZShzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkKTsKIHJlc291cmNlX3NpemVfdCBjeGxfZHBhX3NpemUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21ib3guYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jCmluZGV4IDdjNmM1Yjc0NTBhNTRhLi45N2IxZTYxYWQwMTg3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tYm94LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmMKQEAgLTExNTIsNyAmIzQzOzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCAmIzM0O0NYTCYjMzQ7KTsKICAqCiAgKiBTZWUgQ1hMIEA4LjIuOS41LjIuMSBHZXQgUGFydGl0aW9uIEluZm8KICAqLwotc3RhdGljIGludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKQomIzQzO2ludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKQogewogCXN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSAmYW1wO21kcy0mZ3Q7Y3hsZHMuY3hsX21ib3g7CiAJc3RydWN0IGN4bF9tYm94X2dldF9wYXJ0aXRpb25faW5mbyBwaTsKQEAgLTEzMDgsNTUgJiM0MzsxMzA4LDYgQEAgaW50IGN4bF9tZW1fc2FuaXRpemUoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kLCB1MTYgY21kKQogCXJldHVybiAtRUJVU1k7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpCi17Ci0JaW50IGkgPSBpbmZvLSZndDtucl9wYXJ0aXRpb25zOwotCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuOwotCi0JaW5mby0mZ3Q7cGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHsKLQkJLnN0YXJ0ID0gc3RhcnQsCi0JCS5lbmQgPSBzdGFydCAmIzQzOyBzaXplIC0gMSwKLQl9OwotCWluZm8tJmd0O3BhcnRbaV0ubW9kZSA9IG1vZGU7Ci0JaW5mby0mZ3Q7bnJfcGFydGl0aW9ucyYjNDM7JiM0Mzs7Ci19Ci0KLWludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKQotewotCXN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyA9ICZhbXA7bWRzLSZndDtjeGxkczsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy0mZ3Q7ZGV2OwotCWludCByYzsKLQotCWlmICghY3hsZHMtJmd0O21lZGlhX3JlYWR5KSB7Ci0JCWluZm8tJmd0O3NpemUgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpbmZvLSZndDtzaXplID0gbWRzLSZndDt0b3RhbF9ieXRlczsKLQotCWlmIChtZHMtJmd0O3BhcnRpdGlvbl9hbGlnbl9ieXRlcyA9PSAwKSB7Ci0JCWFkZF9wYXJ0KGluZm8sIDAsIG1kcy0mZ3Q7dm9sYXRpbGVfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7Ci0JCWFkZF9wYXJ0KGluZm8sIG1kcy0mZ3Q7dm9sYXRpbGVfb25seV9ieXRlcywKLQkJCSBtZHMtJmd0O3BlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKG1kcyk7Ci0JaWYgKHJjKSB7Ci0JCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cbiYjMzQ7KTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWFkZF9wYXJ0KGluZm8sIDAsIG1kcy0mZ3Q7YWN0aXZlX3ZvbGF0aWxlX2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTsKLQlhZGRfcGFydChpbmZvLCBtZHMtJmd0O2FjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLSZndDthY3RpdmVfcGVyc2lzdGVudF9ieXRlcywKLQkJIENYTF9QQVJUTU9ERV9QTUVNKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9kcGFfZmV0Y2gsICYjMzQ7Q1hMJiMzNDspOwotCiBpbnQgY3hsX2dldF9kaXJ0eV9jb3VudChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCB1MzIgKmNvdW50KQogewogCXN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSAmYW1wO21kcy0mZ3Q7Y3hsZHMuY3hsX21ib3g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jIGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYwppbmRleCAzM2EzZDJlN2IxM2FmOS4uMmU0NTdiMWViYzdkZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYwpAQCAtNTk0LDYgJiM0Mzs1OTQsNzMgQEAgYm9vbCBpc19jeGxfbWVtZGV2KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsICYjMzQ7Q1hMJiMzNDspOwogCiYjNDM7c3RhdGljIHZvaWQgYWRkX3BhcnQoc3RydWN0IGN4bF9kcGFfaW5mbyAqaW5mbywgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgZW51bSBjeGxfcGFydGl0aW9uX21vZGUgbW9kZSkKJiM0Mzt7CiYjNDM7CWludCBpID0gaW5mby0mZ3Q7bnJfcGFydGl0aW9uczsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7cGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHsKJiM0MzsJCS5zdGFydCA9IHN0YXJ0LAomIzQzOwkJLmVuZCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxLAomIzQzOwl9OwomIzQzOwlpbmZvLSZndDtwYXJ0W2ldLm1vZGUgPSBtb2RlOwomIzQzOwlpbmZvLSZndDtucl9wYXJ0aXRpb25zJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMgPSAmYW1wO21kcy0mZ3Q7Y3hsZHM7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGN4bGRzLSZndDtkZXY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKCFjeGxkcy0mZ3Q7bWVkaWFfcmVhZHkpIHsKJiM0MzsJCWluZm8tJmd0O3NpemUgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c2l6ZSA9IG1kcy0mZ3Q7dG90YWxfYnl0ZXM7CiYjNDM7CiYjNDM7CWlmIChtZHMtJmd0O3BhcnRpdGlvbl9hbGlnbl9ieXRlcyA9PSAwKSB7CiYjNDM7CQlhZGRfcGFydChpbmZvLCAwLCBtZHMtJmd0O3ZvbGF0aWxlX29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pOwomIzQzOwkJYWRkX3BhcnQoaW5mbywgbWRzLSZndDt2b2xhdGlsZV9vbmx5X2J5dGVzLAomIzQzOwkJCSBtZHMtJmd0O3BlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhtZHMpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlhZGRfcGFydChpbmZvLCAwLCBtZHMtJmd0O2FjdGl2ZV92b2xhdGlsZV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7CiYjNDM7CWFkZF9wYXJ0KGluZm8sIG1kcy0mZ3Q7YWN0aXZlX3ZvbGF0aWxlX2J5dGVzLCBtZHMtJmd0O2FjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLAomIzQzOwkJIENYTF9QQVJUTU9ERV9QTUVNKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCAmIzM0O0NYTCYjMzQ7KTsKJiM0MzsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjeGxfc2V0X2NhcGFjaXR5OiBpbml0aWFsaXplIGRwYSBieSBhIGRyaXZlciB3aXRob3V0IGEgbWFpbGJveC4KJiM0MzsgKgomIzQzOyAqIEBjeGxkczogcG9pbnRlciB0byBjeGxfZGV2X3N0YXRlCiYjNDM7ICogQGNhcGFjaXR5OiBkZXZpY2Ugdm9sYXRpbGUgbWVtb3J5IHNpemUKJiM0MzsgKi8KJiM0MztpbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjeGxfZHBhX2luZm8gcmFuZ2VfaW5mbyA9IHsKJiM0MzsJCS5zaXplID0gY2FwYWNpdHksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWFkZF9wYXJ0KCZhbXA7cmFuZ2VfaW5mbywgMCwgY2FwYWNpdHksIENYTF9QQVJUTU9ERV9SQU0pOwomIzQzOwlyZXR1cm4gY3hsX2RwYV9zZXR1cChjeGxkcywgJmFtcDtyYW5nZV9pbmZvKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgJiMzNDtDWEwmIzM0Oyk7CiYjNDM7CiAvKioKICAqIHNldF9leGNsdXNpdmVfY3hsX2NvbW1hbmRzKCkgLSBhdG9taWNhbGx5IGRpc2FibGUgdXNlciBjeGwgY29tbWFuZHMKICAqIEBtZHM6IFRoZSBkZXZpY2Ugc3RhdGUgdG8gb3BlcmF0ZSBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9wY2kuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMKaW5kZXggZTQzMzhmZDdlMDFiNDcuLjlkODA3YzFhMDAyY2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLWRvZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjeGwvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hscGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hsbWVtLmgmZ3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jCmluZGV4IDEyMTVlZTRmNDAzNTFiLi5jYjYzM2UxOTE1MWI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jeGwvY29yZS9wb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY29yZS9wb3J0LmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWRyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbm9kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2N4bC9laW5qLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2N4bC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtjeGxtZW0uaCZndDsKICNpbmNsdWRlICZsdDtjeGxwY2kuaCZndDsKICNpbmNsdWRlICZsdDtjeGwuaCZndDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jIGIvZHJpdmVycy9jeGwvY29yZS9yZWdzLmMKaW5kZXggOTM3MTBjZjRmMGE2OTcuLjIwYzJkOWZiY2ZlN2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuYwpAQCAtNCw2ICYjNDM7NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjeGwvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hsbWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hscGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cG11LmgmZ3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jeGxwY2kuaCBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oCmluZGV4IGI4MjZlYjUzY2Y3YmFjLi4xMTBlYzljNDRmMDlmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jeGwvY3hscGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jeGwvY3hscGNpLmgKQEAgLTEzLDE2ICYjNDM7MTMsNiBAQAogICovCiAjZGVmaW5lIENYTF9QQ0lfREVGQVVMVF9NQVhfVkVDVE9SUyAxNgogCi0vKiBSZWdpc3RlciBCbG9jayBJZGVudGlmaWVyIChSQkkpICovCi1lbnVtIGN4bF9yZWdsb2NfdHlwZSB7Ci0JQ1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLAotCUNYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCwKLQlDWExfUkVHTE9DX1JCSV9WSVJULAotCUNYTF9SRUdMT0NfUkJJX01FTURFViwKLQlDWExfUkVHTE9DX1JCSV9QTVUsCi0JQ1hMX1JFR0xPQ19SQklfVFlQRVMKLX07Ci0KIC8qCiAgKiBUYWJsZSBBY2Nlc3MgRE9FLCBDREFUIFJlYWQgRW50cnkgUmVzcG9uc2UKICAqCkBAIC0xMTIsNiAmIzQzOzEwMiw0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZtX2N4bF9wb3J0X3Jhc19zZXR1cChzdHJ1Y3QgY3hsX3BvcnQgKnBvcnQpCiB9CiAjZW5kaWYKIAotaW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSwKLQkJICAgICAgIHN0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwICptYXApOwogI2VuZGlmIC8qIF9fQ1hMX1BDSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL3BjaS5jIGIvZHJpdmVycy9jeGwvcGNpLmMKaW5kZXggMjY3YzY3OWIwYjNjMjAuLmJiODkyZGJmZGQ2ZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2N4bC9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2N4bC9wY2kuYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjeGwvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3hsL21haWxib3guaCZndDsKICNpbmNsdWRlICYjMzQ7Y3hsbWVtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtjeGxwY2kuaCYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnCmluZGV4IGM0YzQzNDM0ZjMxNDM0Li45NzlmMjgwMWUyYThlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcKQEAgLTY2LDYgJiM0Mzs2NiwxNSBAQCBjb25maWcgU0ZDX01DRElfTE9HR0lORwogCSAgRHJpdmVyLUludGVyZmFjZSkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcywgYWxsb3dpbmcgZGVidWdnaW5nIG9mCiAJICBkcml2ZXIvZmlybXdhcmUgaW50ZXJhY3Rpb24uICBUaGUgdHJhY2luZyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5CiAJICBhIHN5c2ZzIGZpbGUgJiMzOTttY2RpX2xvZ2dpbmcmIzM5OyB1bmRlciB0aGUgUENJIGRldmljZS4KJiM0Mztjb25maWcgU0ZDX0NYTAomIzQzOwlib29sICYjMzQ7U29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBDWEwgc3VwcG9ydCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gU0ZDICZhbXA7JmFtcDsgQ1hMX0JVUyAmZ3Q7PSBTRkMKJiM0MzsJZGVmYXVsdCBTRkMKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBTRkMgQ1hMIHN1cHBvcnQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmluZyBDWEwgZm9yCiYjNDM7CSAgdXNpbmcgQ1RQSU8gd2l0aCBDWEwubWVtLiBUaGUgU0ZDIGRldmljZSB3aXRoIENYTCBzdXBwb3J0IGFuZAomIzQzOwkgIHdpdGggYSBDWEwtYXdhcmUgZmlybXdhcmUgY2FuIGJlIHVzZWQgZm9yIG1pbmltaXppbmcgbGF0ZW5jaWVzCiYjNDM7CSAgd2hlbiBzZW5kaW5nIHRocm91Z2ggQ1RQSU8uCiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvS2NvbmZpZyYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUKaW5kZXggZDk5MDM5ZWM0NjhkNjcuLmJiMGYxODkxY2RlNjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlCkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBzZmMtJChDT05GSUdfU0ZDX1NSSU9WKQkmIzQzOz0gc3Jpb3YubyBlZjEwX3NyaW92Lm8gZWYxMDBfc3Jpb3YubyBlZjEwMF9yZXAubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWUubyB0Yy5vIHRjX2JpbmRpbmdzLm8gdGNfY291bnRlcnMubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y19lbmNhcF9hY3Rpb25zLm8gdGNfY29ubnRyYWNrLm8KIAomIzQzO3NmYy0kKENPTkZJR19TRkNfQ1hMKQkmIzQzOz0gZWZ4X2N4bC5vCiBvYmotJChDT05GSUdfU0ZDKQkmIzQzOz0gc2ZjLm8KIAogb2JqLSQoQ09ORklHX1NGQ19GQUxDT04pICYjNDM7PSBmYWxjb24vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYwppbmRleCA3ZTA0ZjExNWJiYWFhZi4uNzNiYzA2NDkyOWY2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3VkcF90dW5uZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VmeF9jeGwuaCYjMzQ7CiAKIC8qIEhhcmR3YXJlIGNvbnRyb2wgZm9yIEVGMTAgYXJjaGl0ZWN0dXJlIGluY2x1ZGluZyAmIzM5O0h1bnRpbmd0b24mIzM5Oy4gKi8KIApAQCAtMTA2LDcgJiM0MzsxMDcsNyBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2dldF92Zl9pbmRleChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogCiBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCU1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WNF9PVVRfTEVOKTsKJiM0MzsJTUNESV9ERUNMQVJFX0JVRihvdXRidWYsIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pOwogCXN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtJmd0O25pY19kYXRhOwogCXNpemVfdCBvdXRsZW47CiAJaW50IHJjOwpAQCAtMTc3LDYgJiM0MzsxNzgsMTIgQEAgc3RhdGljIGludCBlZnhfZWYxMF9pbml0X2RhdGFwYXRoX2NhcHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIAkJCSAgZWZ4LSZndDtudW1fbWFjX3N0YXRzKTsKIAl9CiAKJiM0MzsJaWYgKG91dGxlbiAmbHQ7IE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pCiYjNDM7CQluaWNfZGF0YS0mZ3Q7ZGF0YXBhdGhfY2FwczMgPSAwOwomIzQzOwllbHNlCiYjNDM7CQluaWNfZGF0YS0mZ3Q7ZGF0YXBhdGhfY2FwczMgPSBNQ0RJX0RXT1JEKG91dGJ1ZiwKJiM0MzsJCQkJCQkgICAgICBHRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9GTEFHUzMpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMTQwLDYgJiM0MzsxMTQ3LDkgQEAgc3RhdGljIGludCBlZnhfZWYxMF9kaW1lbnNpb25fcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpCiAJdW5zaWduZWQgaW50IGNoYW5uZWxfdmlzLCBwaW9fd3JpdGVfdmlfYmFzZSwgbWF4X3ZpczsKIAlzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LSZndDtuaWNfZGF0YTsKIAl1bnNpZ25lZCBpbnQgdWNfbWVtX21hcF9zaXplLCB3Y19tZW1fbWFwX3NpemU7CiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMCiYjNDM7CXN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YTsKJiM0MzsjZW5kaWYKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CiAJaW50IHJjOwogCkBAIC0xMjYzLDggJiM0MzsxMjczLDIzIEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogCWlvdW5tYXAoZWZ4LSZndDttZW1iYXNlKTsKIAllZngtJmd0O21lbWJhc2UgPSBtZW1iYXNlOwogCi0JLyogU2V0IHVwIHRoZSBXQyBtYXBwaW5nIGlmIG5lZWRlZCAqLwotCWlmICh3Y19tZW1fbWFwX3NpemUpIHsKJiM0MzsJaWYgKCF3Y19tZW1fbWFwX3NpemUpCiYjNDM7CQlnb3RvIHNraXBfcGlvOwomIzQzOwomIzQzOwkvKiBTZXQgdXAgdGhlIFdDIG1hcHBpbmcgKi8KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1NGQ19DWEwKJiM0MzsJcHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTsKJiM0MzsJaWYgKChuaWNfZGF0YS0mZ3Q7ZGF0YXBhdGhfY2FwczMgJmFtcDsKJiM0MzsJICAgICgxICZsdDsmbHQ7IE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9DWExfQ09ORklHX0VOQUJMRV9MQk4pKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwcm9iZV9kYXRhLSZndDtjeGxfcGlvX2luaXRpYWxpc2VkKSB7CiYjNDM7CQkvKiBVc2luZyBQSU8gdGhyb3VnaCBDWEwgbWFwcGluZyAqLwomIzQzOwkJbmljX2RhdGEtJmd0O3Bpb193cml0ZV9iYXNlID0gcHJvYmVfZGF0YS0mZ3Q7Y3hsLSZndDtjdHBpb19jeGw7CiYjNDM7CQluaWNfZGF0YS0mZ3Q7cGlvX3dyaXRlX3ZpX2Jhc2UgPSBwaW9fd3JpdGVfdmlfYmFzZTsKJiM0MzsJfSBlbHNlCiYjNDM7I2VuZGlmCiYjNDM7CXsKJiM0MzsJCS8qIFVzaW5nIGxlZ2FjeSBQSU8gQkFSIG1hcHBpbmcgKi8KIAkJbmljX2RhdGEtJmd0O3djX21lbWJhc2UgPSBpb3JlbWFwX3djKGVmeC0mZ3Q7bWVtYmFzZV9waHlzICYjNDM7CiAJCQkJCQkgIHVjX21lbV9tYXBfc2l6ZSwKIAkJCQkJCSAgd2NfbWVtX21hcF9zaXplKTsKQEAgLTEyNzksMTIgJiM0MzsxMzA0LDE0IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogCQkJbmljX2RhdGEtJmd0O3djX21lbWJhc2UgJiM0MzsKIAkJCShwaW9fd3JpdGVfdmlfYmFzZSAqIGVmeC0mZ3Q7dmlfc3RyaWRlICYjNDM7IEVSX0RaX1RYX1BJT0JVRiAtCiAJCQkgdWNfbWVtX21hcF9zaXplKTsKLQotCQlyYyA9IGVmeF9lZjEwX2xpbmtfcGlvYnVmcyhlZngpOwotCQlpZiAocmMpCi0JCQllZnhfZWYxMF9mcmVlX3Bpb2J1ZnMoZWZ4KTsKIAl9CiAKJiM0MzsJcmMgPSBlZnhfZWYxMF9saW5rX3Bpb2J1ZnMoZWZ4KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7CiYjNDM7CiYjNDM7c2tpcF9waW86CiYjNDM7CiAJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0mZ3Q7bmV0X2RldiwKIAkJICAmIzM0O21lbW9yeSBCQVIgYXQgJXBhICh2aXJ0dWFsICVwJiM0MzsleCBVQywgJXAmIzQzOyV4IFdDKVxuJiMzNDssCiAJCSAgJmFtcDtlZngtJmd0O21lbWJhc2VfcGh5cywgZWZ4LSZndDttZW1iYXNlLCB1Y19tZW1fbWFwX3NpemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMKaW5kZXggOGYxMzZhMTFkMzk2OGEuLjM4MDZjZDNkZDdmNDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2luY2x1ZGUgJiMzNDtzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3Jpb3YuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VmeF9kZXZsaW5rLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZWZ4X2N4bC5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDttY2RpX3BvcnRfY29tbW9uLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttY2RpX3Bjb2wuaCYjMzQ7CkBAIC05ODEsMTIgJiM0Mzs5ODIsMTUgQEAgc3RhdGljIHZvaWQgZWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiAJZWZ4X3BjaV9yZW1vdmVfbWFpbihlZngpOwogCiAJZWZ4X2ZpbmlfaW8oZWZ4KTsKJiM0MzsKJiM0MzsJcHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTsKJiM0MzsJZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpOwomIzQzOwogCXBjaV9kYmcoZWZ4LSZndDtwY2lfZGV2LCAmIzM0O3NodXRkb3duIHN1Y2Nlc3NmdWxcbiYjMzQ7KTsKIAogCWVmeF9maW5pX2RldmxpbmtfYW5kX3VubG9jayhlZngpOwogCWVmeF9maW5pX3N0cnVjdChlZngpOwogCWZyZWVfbmV0ZGV2KGVmeC0mZ3Q7bmV0X2Rldik7Ci0JcHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTsKIAlrZnJlZShwcm9iZV9kYXRhKTsKIH07CiAKQEAgLTExOTAsNiAmIzQzOzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCWlmIChyYykKIAkJZ290byBmYWlsMjsKIAomIzQzOwkvKiBBIHN1Y2Nlc3NmdWwgY3hsIGluaXRpYWxpemF0aW9uIGltcGxpZXMgYSBDWEwgcmVnaW9uIGNyZWF0ZWQgdG8gYmUKJiM0MzsJICogdXNlZCBmb3IgUElPIGJ1ZmZlcnMuIElmIHRoZXJlIGlzIG5vIENYTCBzdXBwb3J0IGxlZ2FjeSBQSU8gYnVmZmVycwomIzQzOwkgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTAomIzQzOwkgKiBzdXBwb3J0IGFuZCB0aGUgY3hsIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzLgomIzQzOwkgKi8KJiM0MzsJcmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJcGNpX2VycihwY2lfZGV2LCAmIzM0O0NYTCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCWdvdG8gZmFpbDM7CiYjNDM7CX0KJiM0MzsKIAlyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpOwogCWlmIChyYykgewogCQkvKiBPbiBmYWlsdXJlLCByZXRyeSBvbmNlIGltbWVkaWF0ZWx5LgpAQCAtMTIyOCw2ICYjNDM7MTI0Myw3IEBAIHN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAlyZXR1cm4gMDsKIAogIGZhaWwzOgomIzQzOwllZnhfY3hsX2V4aXQocHJvYmVfZGF0YSk7CiAJZWZ4X2ZpbmlfaW8oZWZ4KTsKICBmYWlsMjoKIAllZnhfZmluaV9zdHJ1Y3QoZWZ4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMKQEAgLTAsMCAmIzQzOzEsMTA1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHMKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjUsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2N4bC9jeGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3hsL3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0X2RyaXZlci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VmeF9jeGwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUJU1pfMjU2TQomIzQzOwomIzQzO2ludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGVmeF9uaWMgKmVmeCA9ICZhbXA7cHJvYmVfZGF0YS0mZ3Q7ZWZ4OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGVmeC0mZ3Q7cGNpX2RldjsKJiM0MzsJc3RydWN0IHJhbmdlIGN4bF9waW9fcmFuZ2U7CiYjNDM7CXN0cnVjdCBlZnhfY3hsICpjeGw7CiYjNDM7CXUxNiBkdnNlYzsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBJcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBhbmQgdXNpbmcgQ1hMPyAqLwomIzQzOwlpZiAoIXBjaWVfaXNfY3hsKHBjaV9kZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWR2c2VjID0gcGNpX2ZpbmRfZHZzZWNfY2FwYWJpbGl0eShwY2lfZGV2LCBQQ0lfVkVORE9SX0lEX0NYTCwKJiM0MzsJCQkJCSAgUENJX0RWU0VDX0NYTF9ERVZJQ0UpOwomIzQzOwlpZiAoIWR2c2VjKSB7CiYjNDM7CQlwY2lfaW5mbyhwY2lfZGV2LCAmIzM0O0NYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGNpX2RiZyhwY2lfZGV2LCAmIzM0O0NYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IGZvdW5kXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBhIGN4bF9kZXZfc3RhdGUgZW1iZWRkZWQgaW4gdGhlIGN4bCBzdHJ1Y3QgdXNpbmcgY3hsIGNvcmUgYXBpCiYjNDM7CSAqIHNwZWNpZnlpbmcgbm8gbWJveCBhdmFpbGFibGUuCiYjNDM7CSAqLwomIzQzOwljeGwgPSBkZXZtX2N4bF9kZXZfc3RhdGVfY3JlYXRlKCZhbXA7cGNpX2Rldi0mZ3Q7ZGV2LCBDWExfREVWVFlQRV9ERVZNRU0sCiYjNDM7CQkJCQlwY2lfZ2V0X2RzbihwY2lfZGV2KSwgZHZzZWMsCiYjNDM7CQkJCQlzdHJ1Y3QgZWZ4X2N4bCwgY3hsZHMsIGZhbHNlKTsKJiM0MzsKJiM0MzsJaWYgKCFjeGwpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmMgPSBjeGxfcGNpX3NldHVwX3JlZ3MocGNpX2RldiwgQ1hMX1JFR0xPQ19SQklfQ09NUE9ORU5ULAomIzQzOwkJCQkmYW1wO2N4bC0mZ3Q7Y3hsZHMucmVnX21hcCk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJcGNpX2VycihwY2lfZGV2LCAmIzM0O05vIGNvbXBvbmVudCByZWdpc3RlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWN4bC0mZ3Q7Y3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLmhkbV9kZWNvZGVyLnZhbGlkKSB7CiYjNDM7CQlwY2lfZXJyKHBjaV9kZXYsICYjMzQ7RXhwZWN0ZWQgSERNIGNvbXBvbmVudCByZWdpc3RlciBub3QgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY3hsLSZndDtjeGxkcy5yZWdfbWFwLmNvbXBvbmVudF9tYXAucmFzLnZhbGlkKSB7CiYjNDM7CQlwY2lfZXJyKHBjaV9kZXYsICYjMzQ7RXhwZWN0ZWQgUkFTIGNvbXBvbmVudCByZWdpc3RlciBub3QgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNldCBtZWRpYSByZWFkeSBleHBsaWNpdGx5IGFzIHRoZXJlIGFyZSBuZWl0aGVyIG1haWxib3ggZm9yIGNoZWNraW5nCiYjNDM7CSAqIHRoaXMgc3RhdGUgbm9yIHRoZSBDWEwgcmVnaXN0ZXIgaW52b2x2ZWQsIGJvdGggbm90IG1hbmRhdG9yeSBmb3IKJiM0MzsJICogdHlwZTIuCiYjNDM7CSAqLwomIzQzOwljeGwtJmd0O2N4bGRzLm1lZGlhX3JlYWR5ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGN4bF9zZXRfY2FwYWNpdHkoJmFtcDtjeGwtJmd0O2N4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7CiYjNDM7CQlwY2lfZXJyKHBjaV9kZXYsICYjMzQ7ZHBhIGNhcGFjaXR5IHNldHVwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3hsLSZndDtjeGxtZCA9IGRldm1fY3hsX3Byb2JlX21lbSgmYW1wO2N4bC0mZ3Q7Y3hsZHMsICZhbXA7Y3hsX3Bpb19yYW5nZSk7CiYjNDM7CWlmIChJU19FUlIoY3hsLSZndDtjeGxtZCkpIHsKJiM0MzsJCXBjaV9lcnIocGNpX2RldiwgJiMzNDtDWEwgYWNjZWwgbWVtZGV2IGNyZWF0aW9uIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY3hsLSZndDtjeGxtZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3hsLSZndDtjdHBpb19jeGwgPSBpb3JlbWFwX3djKGN4bF9waW9fcmFuZ2Uuc3RhcnQsCiYjNDM7CQkJCSAgICByYW5nZV9sZW4oJmFtcDtjeGxfcGlvX3JhbmdlKSk7CiYjNDM7CWlmICghY3hsLSZndDtjdHBpb19jeGwpIHsKJiM0MzsJCXBjaV9lcnIocGNpX2RldiwgJiMzNDtDWEwgaW9yZW1hcCByZWdpb24gKCVwcmEpIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJJmFtcDtjeGxfcGlvX3JhbmdlKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByb2JlX2RhdGEtJmd0O2N4bF9waW9faW5pdGlhbGlzZWQgPSB0cnVlOwomIzQzOwlwcm9iZV9kYXRhLSZndDtjeGwgPSBjeGw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpCiYjNDM7ewomIzQzOwlpZiAoIXByb2JlX2RhdGEtJmd0O2N4bCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaW91bm1hcChwcm9iZV9kYXRhLSZndDtjeGwtJmd0O2N0cGlvX2N4bCk7CiYjNDM7fQomIzQzOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtDWEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uM2UyNzA1Y2IwNjNmNmEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oCkBAIC0wLDAgJiM0MzsxLDMyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiYjNDM7ICogRHJpdmVyIGZvciBBTUQgbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAomIzQzOyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAomIzQzOyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgRUZYX0NYTF9ICiYjNDM7I2RlZmluZSBFRlhfQ1hMX0gKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1NGQ19DWEwKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3hsL2N4bC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBlZnhfcHJvYmVfZGF0YTsKJiM0MzsKJiM0MztzdHJ1Y3QgZWZ4X2N4bCB7CiYjNDM7CXN0cnVjdCBjeGxfZGV2X3N0YXRlIGN4bGRzOwomIzQzOwlzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQ7CiYjNDM7CXZvaWQgX19pb21lbSAqY3RwaW9fY3hsOwomIzQzO307CiYjNDM7CiYjNDM7aW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpOwomIzQzO3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKSB7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9CiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCBiOThjMjU5ZjY3MmRiNS4uMzk2NGIyYzU2NjA5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMTE5NywxNCAmIzQzOzExOTcsMjQgQEAgc3RydWN0IGVmeF9uaWMgewogCWF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7CiB9OwogCiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMCiYjNDM7c3RydWN0IGVmeF9jeGw7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAtIFN0YXRlIGFmdGVyIGhhcmR3YXJlIHByb2JlCiAgKiBAcGNpX2RldjogVGhlIFBDSSBkZXZpY2UKICAqIEBlZng6IEVmeCBOSUMgZGV0YWlscwomIzQzOyAqIEBjeGw6IGRldGFpbHMgb2YgcmVsYXRlZCBjeGwgb2JqZWN0cwomIzQzOyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS4KICAqLwogc3RydWN0IGVmeF9wcm9iZV9kYXRhIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAlzdHJ1Y3QgZWZ4X25pYyBlZng7CiYjNDM7I2lmZGVmIENPTkZJR19TRkNfQ1hMCiYjNDM7CXN0cnVjdCBlZnhfY3hsICpjeGw7CiYjNDM7CWJvb2wgY3hsX3Bpb19pbml0aWFsaXNlZDsKJiM0MzsjZW5kaWYKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVmeF9uaWMgKmVmeF9uZXRkZXZfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oCmluZGV4IGVjM2IyZGY0M2I2OGQ5Li43NDgwZjk5OTVkZmI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaApAQCAtMTUyLDYgJiM0MzsxNTIsOCBAQCBlbnVtIHsKICAqCSVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSkKICAqIEBkYXRhcGF0aF9jYXBzMjogRnVydGhlciBDYXBhYmlsaXRpZXMgb2YgZGF0YXBhdGggZmlybXdhcmUgKEZMQUdTMiBmaWVsZCBvZgogICogJU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKQomIzQzOyAqIEBkYXRhcGF0aF9jYXBzMzogRnVydGhlciBDYXBhYmlsaXRpZXMgb2YgZGF0YXBhdGggZmlybXdhcmUgKEZMQUdTMyBmaWVsZCBvZgomIzQzOyAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSkKICAqIEByeF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFJ4RFBDUFUKICAqIEB0eF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFR4RFBDUFUKICAqIEBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc6IEZsYWc6IHZzd2l0Y2hpbmcgaGFzIHlldCB0byBiZSBzZXR1cCBhZnRlciBNQyByZWJvb3QKQEAgLTE4Nyw2ICYjNDM7MTg5LDcgQEAgc3RydWN0IGVmeF9lZjEwX25pY19kYXRhIHsKIAlib29sIG11c3RfY2hlY2tfZGF0YXBhdGhfY2FwczsKIAl1MzIgZGF0YXBhdGhfY2FwczsKIAl1MzIgZGF0YXBhdGhfY2FwczI7CiYjNDM7CXUzMiBkYXRhcGF0aF9jYXBzMzsKIAl1bnNpZ25lZCBpbnQgcnhfZHBjcHVfZndfaWQ7CiAJdW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkOwogCWJvb2wgbXVzdF9wcm9iZV92c3dpdGNoaW5nOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaAppbmRleCAwMTZjNzRmYjc0N2NmNi4uODAyYjE0M2RlODNkYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3hsL2N4bC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvY3hsL2N4bC5oCkBAIC0yMjYsNCAmIzQzOzIyNiw2IEBAIHN0cnVjdCBjeGxfZGV2X3N0YXRlICpfZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIHN0cnVjdCBjeGxfbWVtZGV2ICpkZXZtX2N4bF9wcm9iZV9tZW0oc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLAogCQkJCSAgICAgIHN0cnVjdCByYW5nZSAqcmFuZ2UpOwomIzQzOwomIzQzO2ludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KTsKICNlbmRpZiAvKiBfX0NYTF9DWExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZTAwMDAwMTU4NzFhMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvY3hsL3BjaS5oCkBAIC0wLDAgJiM0MzsxLDIyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qIENvcHlyaWdodChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19DWExfQ1hMX1BDSV9IX18KJiM0MzsjZGVmaW5lIF9fQ1hMX0NYTF9QQ0lfSF9fCiYjNDM7CiYjNDM7LyogUmVnaXN0ZXIgQmxvY2sgSWRlbnRpZmllciAoUkJJKSAqLwomIzQzO2VudW0gY3hsX3JlZ2xvY190eXBlIHsKJiM0MzsJQ1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLAomIzQzOwlDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsCiYjNDM7CUNYTF9SRUdMT0NfUkJJX1ZJUlQsCiYjNDM7CUNYTF9SRUdMT0NfUkJJX01FTURFViwKJiM0MzsJQ1hMX1JFR0xPQ19SQklfUE1VLAomIzQzOwlDWExfUkVHTE9DX1JCSV9UWVBFUwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGN4bF9yZWdpc3Rlcl9tYXA7CiYjNDM7c3RydWN0IHBjaV9kZXY7CiYjNDM7CiYjNDM7aW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSwKJiM0MzsJCSAgICAgICBzdHJ1Y3QgY3hsX3JlZ2lzdGVyX21hcCAqbWFwKTsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA4NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgU0ZDOTEwMCB3aXRoIENYTCBTdXBwb3J0KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgQ1hMIHN1cHBvcnQgdG8gdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMCBuZXR3b3JrIGRyaXZlciwgaW50cm9kdWNpbmcgYENPTkZJR19TRkNfQ1hMYC4gSXQgbW9kaWZpZXMgc29tZSBjb3JlIENYTCBmaWxlcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGV4cG9ydGluZyBzb21lIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuIGZ1enogdGhpcz8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZS4KClRoZSBTRkMgZHJpdmVyIGlzIGEgUENJIG5ldHdvcmsgZHJpdmVyLiBQQ0kgZHJpdmVycyAqc2hvdWxkKiBiZSBmdXp6YWJsZSwgcmlnaHQ/IFN5emthbGxlciBjYW4gZG8gcHNldWRvLVBDSSBkZXZpY2VzIG9yIFZGSU8gaWYgaXQmIzM5O3Mgc3VwcG9ydGVkLiBCdXQgSSByZW1lbWJlciB0aGVyZSYjMzk7cyBubyBtYWdpYyAmIzM0O2dlbmVyaWMmIzM0OyBQQ0kgZnV6emVyIHRoYXQgKmp1c3Qgd29ya3MqIHVubGVzcyBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQuIEl0JiMzOTtzIHVzdWFsbHkgZGVwZW5kZW50IG9uIHNwZWNpYWwgc3VwcG9ydCBvciBpZiBpdCYjMzk7cyBVU0Igb3IgdmlydHVhbC4gVGhlIHByb21wdCByZW1pbmRzIG1lIG9mIHRoZSBsaW1pdGF0aW9uczogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGVtdWxhdGUgdGhlIFNGQzkxMDA/IE5vLCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIFFFTVUgaGFuZGxlcyB0aGUgdXN1YWwgc3VzcGVjdHMgYnV0IG5vdCB0aGUgU0ZDOTEwMCwgc28gYGVmeF9wY2lfcHJvYmVgIGlzbiYjMzk7dCBnb2luZyB0byBiZSBjYWxsZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBTbyB0aGF0IG1lYW5zIG5vIHByb2JlLCBubyBmdXp6LgoKSSYjMzk7bSByYWNraW5nIG15IGJyYWluLiBTeXprYWxsZXIuLi4gZG9lcyBpdCBoYXZlIHNvbWUgbWFnaWMgYHN5el9wY2lfZGV2aWNlYCBmdW5jdGlvbiB0aGF0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2U/IEkga25vdyBhYm91dCBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgZm9yIFBDSSBkZXZpY2VzPyBEb2VzIGl0IHVzZSBgdmhjaWAgZm9yIFBDST8gT3IsIERvZXMgc3l6a2FsbGVyIGhhdmUgYSBnZW5lcmFsIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsIHRoYXQgY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzPyBObyEgV2FpdCwgYWN0dWFsbHksIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHVzZXMgYHZmaW9gIG9yIHJlbGllcyBvbiBRRU1VLCBzbyB0aGF0JiMzOTtzIHRoZSBvbmx5IHJlYWwgb3B0aW9uLiBObywgU3l6a2FsbGVyIGRvZXMgaGF2ZSBhIGB2aGNpYCBmb3IgVVNCLCBidXQgdGhhdCB3b24mIzM5O3Qgd29yayBoZXJlLgoKTGV0IG1lIHNlZSBpZiBJIGNhbiBmaW5kIHNvbWUgUENJIGVtdWxhdGlvbiB3aXRoaW4gU3l6a2FsbGVyLiBJdCBsb29rcyBsaWtlIGl0IGRvZXMgaGF2ZSBzdHVmZiBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgLiBPaCwgd2FpdCwgZGlkIHRoZXkgcmVjZW50bHkgYWRkIHNvbWV0aGluZyB3aXRoIGB2ZmlvYCBvciBhIGR1bW15IFBDSSBjb250cm9sbGVyPyBObywgU3l6a2FsbGVyIHN0aWxsIHVzZXMgYHFlbXVgIHdpdGggdGhlIHN0YW5kYXJkIGRldmljZXMuCgpUaGlzIGRyaXZlciBpc24mIzM5O3QgcmVhY2hhYmxlIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGF0IG1ha2VzIGZ1enppbmcgYSB3YXN0ZSBvZiB0aW1lLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcm9iZSBgc2ZjYCB0byBldmVuIHN0YXJ0LiBJcyB0aGVyZSBhIHZpcnR1YWwgZGV2aWNlIGZvciB0aGlzPyBObywgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIEkgd291bGQgY2hlY2sgc3l6a2FsbGVyIGZvciBgc2ZjYCBidXQgSSBkb24mIzM5O3QgaGF2ZSB0aGF0IHNvdXJjZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlLiBOb3JtYWxseSBQQ0kgZHJpdmVycyByZXF1aXJlIGEgbWF0Y2hpbmcgdmVuZG9yL2RldmljZSBJRCBmcm9tIGEgcmVhbCBQQ0kgZGV2aWNlLiBXaXRob3V0IFFFTVUgZW11bGF0aW9uLCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLgoKT2theSwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRoaW5nOiBpcyB0aGVyZSAqYW55KiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFNGQyBpbiB0aGUga2VybmVsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NGQzkxMDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6MjA6XHR0cmlzdGF0ZSBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAvRUYxMDAtZmFtaWx5IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNy1cdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgMTAvNDAtZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcyBiYXNlZCBvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6Mjg6XHQgIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IGNvbnRyb2xsZXJzLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MzU9Y29uZmlnIFNGQ19NVERcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjM2Olx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IE1URCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0zNy1cdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBNVEQgXHUwMDI2XHUwMDI2ICEoU0ZDPXkgXHUwMDI2XHUwMDI2IE1URD1tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTQ0PWNvbmZpZyBTRkNfTUNESV9NT05cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjQ1Olx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IGh3bW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTQ2LVx0ZGVwZW5kcyBvbiBTRkMgXHUwMDI2XHUwMDI2IEhXTU9OIFx1MDAyNlx1MDAyNiAhKFNGQz15IFx1MDAyNlx1MDAyNiBIV01PTj1tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTUxPWNvbmZpZyBTRkNfU1JJT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjUyOlx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IFNSLUlPViBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy01My1cdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBQQ0lfSU9WXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9NjA9Y29uZmlnIFNGQ19NQ0RJX0xPR0dJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjYxOlx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IE1DREkgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy02Mi1cdGRlcGVuZHMgb24gU0ZDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9Njk9Y29uZmlnIFNGQ19DWExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjcwOlx0Ym9vbCBcJiMzNDtTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IENYTCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gU0ZDIFx1MDAyNlx1MDAyNiBDWExfQlVTIFx1MDAzZT0gU0ZDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oPTI2PWVudW0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaC0xMjQtLyogTWF4aW11bSBudW1iZXIgb2YgVFggUElPIGJ1ZmZlcnMgd2UgbWF5IGFsbG9jYXRlIHRvIGEgZnVuY3Rpb24uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmg6MTI1OiAqIFRoaXMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgb24gZWFjaCBTRkM5MTAwLWZhbWlseVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oLTEyNi0gKiBjb250cm9sbGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzgyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRUZYIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU29sYXJmbGFyZSBTRkM5MTAwL0VGMTAwLWZhbWlseSBkcml2ZXIsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgcHJpbWFyeSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSYjMzk7cyBubyBrZXJuZWwtbGV2ZWwgZW11bGF0aW9uIG9mIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCBRRU1VIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBpdHMgb3duLiBUaGlzIG1lYW5zIHRoZSBgZWZ4X3BjaV9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoZSBkcml2ZXIsIHdpbGwgbmV2ZXIgZ2V0IHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoYXQgbXVjaCBpcyBvYnZpb3VzLgoKQnV0IHdhaXQsIGhvbGQgb24uIFRoZSBwYXRjaCBtZW50aW9ucyBDWEwgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgU0ZDIGRyaXZlci4gTm93LCAqdGhhdCogY29tcGxpY2F0ZXMgdGhpbmdzLiBEb2VzIFFFTVUgZXZlbiBlbXVsYXRlIENYTD8gWWVzLCBpdCBkb2VzISBRRU1VIGhhcyBhZGRlZCBzb21lIENYTCBlbXVsYXRpb24sIGZvY3VzaW5nIG9uLCBmb3IgaW5zdGFuY2UsIENYTCB0eXBlIDMgZGV2aWNlcy4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBhIFNvbGFyZmxhcmUgTklDICp3aXRoKiBDWEw/IEFuZCB0aGUgYW5zd2VyLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXMgbm8uIFNvLCB0aGUgb3JpZ2luYWwgcHJvYmxlbSByZW1haW5zOyB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGlzbiYjMzk7dCBnZXR0aW5nIGNhbGxlZC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIERvZXMgc3l6a2FsbGVyIG9mZmVyIHNvbWUgc29ydCBvZiBtYWdpYz8gTWF5YmUgaXQgaGFzIGEgYHN5el9wY2lfZGV2aWNlYCBvciBzaW1pbGFyPyBEb2VzIHRoYXQgZ2l2ZSB1cyBhbiBhbHRlcm5hdGl2ZSByb3V0ZSBpbj8gQWgsIG5vLCBpdCYjMzk7cyBub3QgdGhhdCBzaW1wbGUuIFN5emthbGxlciBkb2VzbiYjMzk7dCBwcm92aWRlIGEgd2F5IHRvIGZ1enogZW50aXJlbHkgYXJiaXRyYXJ5IFBDSSBkcml2ZXJzIHVubGVzcyB0aGV5IGhhdmUgYXNzb2NpYXRlZCB2aXJ0dWFsIGRldmljZXMuIEV4YW1wbGVzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWAsIGB2a21zYCwgb3IgYHNuZC1kdW1teWAsIG9yIGlmIGl0IGNhbiBpbmplY3QgZGV2aWNlcyBpbnRvIHRoZSBzeXN0ZW0uCgpBaGEhIFdhaXQsIG15IG1lbW9yeSBzZXJ2ZXMgbWUgd2VsbC4gVGhlcmUgKmlzKiBhIFBDSSBmdXp6aW5nIHN1YnN5c3RlbSBpbiBzeXprYWxsZXIuIEkmIzM5O3ZlIHNlZW4gaXQhIFN5emthbGxlciBoYXMgdGhlIGBzeXpfcGNpX2RldmljZWAgbWVjaGFuaXNtISBUaGF0IGFsbG93cyBzeXprYWxsZXIgdG8gYWN0dWFsbHkgZW11bGF0ZSBQQ0kgZGV2aWNlcyEgTm93LCB0aGlzIGlzIHByb21pc2luZy4gV2UgbWlnaHQgaGF2ZSBhIHdheSBpbiBhZnRlciBhbGwuIFJpZ2h0LCBzbyBub3cgdGhlIGtleSBxdWVzdGlvbjogRG9lcyBgc3l6X3BjaV9kZXZpY2VgIGV4aXN0IGluIHRoZSBrZXJuZWw/IFRpbWUgdG8gZ28gaHVudGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9wY2lfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gU0ZDIERldmljZSBFbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGBzZmNgIGRldmljZSB0aHJvdWdoIHN5emthbGxlci4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgc3l6X3BjaV9kZXZpY2VgLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoYXQmIzM5O3Mgbm90IGFjdHVhbGx5IGluIHRoZSBrZXJuZWwgaXRzZWxmOyBpdCYjMzk7cyBhIHN5emthbGxlciBjb25zdHJ1Y3QuIEFuZCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZSBhcmJpdHJhcnkgUENJIGRldmljZXMgd2l0aGluIHRoZSBrZXJuZWwgc3BhY2UsIGl0IHVzZXMgUUVNVSBvciByZWxpZXMgb24gZXhpc3Rpbmcga2VybmVsIG1vZHVsZXMuIFNvLCBpZiB0aGVyZSBpc24mIzM5O3QgYSBrZXJuZWwgbW9kdWxlIHRvIHN0YW5kIGluIGZvciB0aGUgU0ZDIGRldmljZSwgSSYjMzk7bSBvdXQgb2YgbHVjay4gSXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBkaXJlY3RseS4KCkFscmlnaHQsIGEgbmV3IHBsYW4uIEkgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGludGVyYWN0IHdpdGggYGVmeF9jeGxfaW5pdGAgb3IgYGN4bF9zZXRfY2FwYWNpdHlgLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCBgY3hsX3NldF9jYXBhY2l0eWAgaXMgZXhwb3J0ZWQsIGFuZCBgZWZ4X2N4bF9pbml0YCBtYWtlcyB1c2Ugb2YgaXQuIFRoYXTigJlzIHByb21pc2luZy4gTG9va2luZyBmdXJ0aGVyLCBgZWZ4X2N4bF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgZWZ4X3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGBzZmNgIGRyaXZlci4gU28sIEkgaGF2ZSBhIHBhdGggaGVyZSEgTm93IEkgbmVlZCB0byBjaGVjayB0aGUgUENJIElEcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBzZmNgIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZnhfcGNpX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYz0xMDAxPXN0YXRpYyB2b2lkIGVmeF9wcm9iZV92cGRfc3RyaW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDM0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEwMzU6c3RhdGljIGludCBlZnhfcGNpX3Byb2JlX21haW4oc3RydWN0IGVmeF9uaWMgKmVmeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDM2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTA4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxMDg2OnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKHN0cnVjdCBlZnhfbmljICplZngpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTA4Ny17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTA4OC1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gZWZ4LVx1MDAzZW5ldF9kZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTA4OTpcdGludCByYyA9IGVmeF9wY2lfcHJvYmVfbWFpbihlZngpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEwOTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTExNTItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTE1MzpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTE1NC1cdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjA3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEyMDg6XHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMDktXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTIxMy1cdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEyMTQ6XHRcdHJjID0gZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKGVmeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTIxNS1cdFx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMjMtXHRcdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjEyMjQ6XHRcdFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjI1LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTE0MDg9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xNDEwLVx0LmlkX3RhYmxlXHQ9IGVmeF9wY2lfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMTpcdC5wcm9iZVx0XHQ9IGVmeF9wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTQxMi1cdC5yZW1vdmVcdFx0PSBlZnhfcGNpX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9ODk2PXN0YXRpYyB2b2lkIGVmeF9wcm9iZV92cGRfc3RyaW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy05MjktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6OTMwOnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9tYWluKHN0cnVjdCBlZnhfbmljICplZngpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTMxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjk4MTpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTk4Mi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgzLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBlZngtXHUwMDNlbmV0X2RldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo5ODQ6XHRpbnQgcmMgPSBlZnhfcGNpX3Byb2JlX21haW4oZWZ4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy05ODUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwNDEtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6MTA0MjpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA0My1cdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwNzY6XHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwNzctXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA4MS1cdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwODI6XHRcdHJjID0gZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKGVmeCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA4My1cdFx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwOTEtXHRcdFx0ZWZ4LVx1MDAzZXJlc2V0X3BlbmRpbmcgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwOTI6XHRcdFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDkzLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEyNzM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc1LVx0LmlkX3RhYmxlXHQ9IGVmeF9wY2lfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6MTI3NjpcdC5wcm9iZVx0XHQ9IGVmeF9wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTI3Ny1cdC5yZW1vdmVcdFx0PSBlZnhfcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFNGQyBEcml2ZXIgYW5kIEV4cGxvcmluZyBDWEwgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBTeXprYWxsZXIgY2FuJiMzOTt0IGRpcmVjdGx5IHRhcmdldCB0aGUgYHNmY2AgZHJpdmVyLiBUaGUgZnJ1c3RyYXRpbmcgdGhpbmcgaXMsIGl0IG5lZWRzIHRoYXQgc3BlY2lmaWMgUENJIGhhcmR3YXJlLCBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgZ29vZCBlbXVsYXRpb24uIEJ1dCBob2xkIG9uLi4uIGxldCYjMzk7cyBzaGlmdCBnZWFycy4gV2hhdCBhYm91dCBleHBsb3JpbmcgcG90ZW50aWFsIGVudHJ5IHBvaW50cyB3aXRoaW4gdGhlIENYTCBzdWJzeXN0ZW0/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBjeGxfc2V0X2NhcGFjaXR5YCBhbmQgYGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvYC4gQXJlIHRoZXkgcmVhY2hhYmxlIGFuZCB3b3J0aCBpbnZlc3RpZ2F0aW5nPwoKYGN4bF9zZXRfY2FwYWNpdHlgLCBhcyBJIHJlY2FsbCwgaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGRpdGlvbiwgcmVzaWRpbmcgaW4gYGRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS4gVGhlIGNyaXRpY2FsIHN0ZXAgbm93IGlzIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSWYgd2UgY2FuIHJlYWNoIHRoYXQsIGl0IG1pZ2h0IGJlIGEgbmV3IHBsYWNlIHRvIGF0dGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hsX3NldF9jYXBhY2l0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTY0ND1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY0Ny0vKipcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjQ4OiAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDktICpcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1Mi0gKi9cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjUzOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KVxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NTQte1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYxLX1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjYyOkVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9zZXRfY2FwYWNpdHksIFwmIzM0O0NYTFwmIzM0Oyk7XG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY2My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jPTE3PWludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jOjcyOlx0aWYgKGN4bF9zZXRfY2FwYWNpdHkoXHUwMDI2Y3hsLVx1MDAzZWN4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jLTczLVx0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O2RwYSBjYXBhY2l0eSBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmluY2x1ZGUvY3hsL2N4bC5oPTIyNz1zdHJ1Y3QgY3hsX21lbWRldiAqZGV2bV9jeGxfcHJvYmVfbWVtKHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyxcbi0tXG5pbmNsdWRlL2N4bC9jeGwuaC0yMjktXG5pbmNsdWRlL2N4bC9jeGwuaDoyMzA6aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xuaW5jbHVkZS9jeGwvY3hsLmgtMjMxLSNlbmRpZiAvKiBfX0NYTF9DWExfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTeW1ib2wgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGFydGljdWxhciBzeW1ib2wsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgaXQmIzM5O3Mgb25seSBiZWluZyB1c2VkIHdpdGhpbiBgZWZ4X2N4bC5jYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCB3aGljaCBnZW5lcmFsbHkgc2ltcGxpZmllcyB0aGluZ3MsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gT25lIHRoaW5nIHRoYXQgYWx3YXlzIHNwcmluZ3MgdG8gbWluZCBpbiB0aGVzZSBraW5kcyBvZiBpbnZlc3RpZ2F0aW9ucyBpcyB0byBiZSBleGhhdXN0aXZlIGluIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCB2ZXJpZmljYXRpb24uCgpIb3dldmVyLCBhIG5hZ2dpbmcgcXVlc3Rpb24gaXMgYWxyZWFkeSBidWJibGluZyB1cDogd2hhdCBhYm91dCBgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm9gPyBXaGlsZSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQgKmlzbiYjMzk7dCogdXNlZCB0aGVyZSwgdGhpcyBmdW5jdGlvbiYjMzk7cyBzY29wZSwgb3Igc2ltaWxhcml0eSwgaGFzIGNhdXNlZCBtZSB0byBwYXVzZSwgYW5kIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUuIEV2ZW4gaWYgdGhlIHN5bWJvbCBpc24mIzM5O3QgZGlyZWN0bHkgKnVzZWQqIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB0aGVyZSBjb3VsZCBiZSBzdWJ0bGUgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZyBhdCBmaXJzdCBnbGFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oPTEwND1zdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZTtcbmRyaXZlcnMvY3hsL2NvcmUvY29yZS5oOjEwNTppbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcyk7XG5kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaC0xMDYtaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpO1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jPTExNDE9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9nZXRfZXZlbnRfcmVjb3JkcywgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTQzLS8qKlxuZHJpdmVycy9jeGwvY29yZS9tYm94LmM6MTE0NDogKiBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyAtIEdldCBwYXJ0aXRpb24gaW5mb1xuZHJpdmVycy9jeGwvY29yZS9tYm94LmMtMTE0NS0gKiBAbWRzOiBUaGUgZHJpdmVyIGRhdGEgZm9yIHRoZSBvcGVyYXRpb25cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTU0LSAqL1xuZHJpdmVycy9jeGwvY29yZS9tYm94LmM6MTE1NTppbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jLTExNTYte1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM9NjEyPWludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjMxLVxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYzo2MzI6XHRyYyA9IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKG1kcyk7XG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTYzMy1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgV29ydGhpbmVzcyBvZiBhIENYTCBDb3JlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm9gIGlzIHVzZWQgaW4gYGN4bF9tZW1fZHBhX2ZldGNoYCwgd2hpY2ggdGhlIENYTCBjb3JlIGV4cG9ydHMsIGFuZCBJIHNlZSB0aGF0IGBjeGxfbWVtX2RwYV9mZXRjaGAgd2FzIG1vdmVkIOKAkyBpdCBsb29rcyBsaWtlIGl0IHdlbnQgZnJvbSBgbWJveC5jYCB0byBgbWVtZGV2LmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhhdCBkaWZmLCBzaGFsbCB3ZT8KCkFscmlnaHQsIHNvIHRoZSBmaWxlcyBJIHNlZSBhcmU6CgoqICAgSW4gYGRyaXZlcnMvY3hsL2NvcmUvbWJveC5jYCwgYGN4bF9tZW1fZHBhX2ZldGNoYCBhbmQgYGFkZF9wYXJ0YCB3ZXJlIHJlbW92ZWQuCiogICBBbmQgaW4gYGRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNgLCB0aGV5JiMzOTt2ZSBiZWVuIGFkZGVkLgoKU28gdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIG1vdmUgb2YgYGN4bF9tZW1fZHBhX2ZldGNoYCwgYW5kIHRoZSBhc3NvY2lhdGVkIGBhZGRfcGFydGAgZnVuY3Rpb24sIGZyb20gYG1ib3guY2AgdG8gYG1lbWRldi5jYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSByZWZhY3RvcmluZzsgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBmdW5kYW1lbnRhbGx5IGFsdGVyIHRoZSBDWEwgY29yZSYjMzk7cyBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiByZWFzb24gZm9yIHRoZSBtb3ZlIGlzIHRvIGFsbG93IGBjeGxfc2V0X2NhcGFjaXR5YCB0byB1c2UgYGFkZF9wYXJ0YCwgd2hpY2ggaXMgbm93IHN0YXRpYyB3aXRoaW4gYG1lbWRldi5jYC4KCkFoYSwgYGN4bF9zZXRfY2FwYWNpdHlgICpkb2VzKiB1c2UgYGFkZF9wYXJ0YC4gU28gaXQgc2VlbXMgdGhlIGNvcmUgYWRkZWQgZnVuY3Rpb25hbGl0eSBpcyBgY3hsX3NldF9jYXBhY2l0eWAgYW5kIGFsc28gYGVmeF9jeGxfaW5pdGAgaW4gdGhlIGBzZmNgIGRyaXZlci4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgYHNmY2AgZHJpdmVyLCBhcyBJIHJlY2FsbCwgaXMgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkuIFRoZXJlJiMzOTtzIG5vIGVmZmVjdGl2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yICp0aGF0KiEgQW5kIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsgU2luY2UgdGhlIGBzZmNgIGRyaXZlciBpcyB0aWVkIHRvIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNoYW5nZXMgaW4gdGhlIENYTCBjb3JlIGFyZSBlc3NlbnRpYWxseSByZWZhY3RvcmluZywgd2l0aCB0aGUgYGN4bF9tZW1fZHBhX2ZldGNoYCBhbmQgYGFkZF9wYXJ0YCBtb3ZlbWVudCwgYW5kIHRoZW4gYWRkaW5nIGBjeGxfc2V0X2NhcGFjaXR5YCB3aGljaCAqb25seSogaXMgY2FsbGVkIGJ5IHRoYXQgYHNmY2AgZHJpdmVyLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGBzZmNgIGRyaXZlciwgd2hpY2ggKm9ubHkqIHdvcmtzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGlzIGlzIGVzc2VudGlhbGx5IHVuLWZ1enphYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayByZWFsIHF1aWNrIGlmIGBjeGxfc2V0X2NhcGFjaXR5YCBpcyBjYWxsZWQgYW55d2hlcmUgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hsX3NldF9jYXBhY2l0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTY0ND1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXCYjMzQ7Q1hMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY0Ny0vKipcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjQ4OiAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDktICpcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1Mi0gKi9cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjUzOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KVxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NTQte1xuLS1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYxLX1cbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjYyOkVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9zZXRfY2FwYWNpdHksIFwmIzM0O0NYTFwmIzM0Oyk7XG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY2My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jPTE3PWludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jOjcyOlx0aWYgKGN4bF9zZXRfY2FwYWNpdHkoXHUwMDI2Y3hsLVx1MDAzZWN4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jLTczLVx0XHRwY2lfZXJyKHBjaV9kZXYsIFwmIzM0O2RwYSBjYXBhY2l0eSBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmluY2x1ZGUvY3hsL2N4bC5oPTIyNz1zdHJ1Y3QgY3hsX21lbWRldiAqZGV2bV9jeGxfcHJvYmVfbWVtKHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyxcbi0tXG5pbmNsdWRlL2N4bC9jeGwuaC0yMjktXG5pbmNsdWRlL2N4bC9jeGwuaDoyMzA6aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xuaW5jbHVkZS9jeGwvY3hsLmgtMjMxLSNlbmRpZiAvKiBfX0NYTF9DWExfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTY1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBDWEwgRW11bGF0aW9uIGluIHRoZSBzZmMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGNhbGwgaW4gYGVmeF9jeGwuY2AsIGFuZCBJIGtub3cgdGhhdCB0aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgYHNmY2AgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGNvdWxkIHdlIHBvdGVudGlhbGx5IHByb2JlIG9yIGludGVyYWN0IHdpdGggdGhlIGBzZmNgIGRyaXZlciB1c2luZyBzb21lIGZvcm0gb2YgZ2VuZXJpYyBDWEwgZW11bGF0aW9uPyBJdCYjMzk7cyBhIGxvbmcgc2hvdCwgYnV0IHdvcnRoIGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0aWVzLgoKVGhlIGBzZmNgIGRyaXZlciwgYXMgSSByZWNhbGwsIHRpZXMgaXRzZWxmIHRvIHNwZWNpZmljIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMuIFRoaXMgbWVhbnMgYSBkaXJlY3QsIHVubWVkaWF0ZWQgZW11bGF0aW9uIG1pZ2h0IGJlIHRyaWNreS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgUENJIElEIHRhYmxlLCBgZWZ4X3BjaV90YWJsZWAsIHdoaWNoIHNob3VsZCByZXNpZGUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY2AuIFNlZWluZyB0aGlzIHRhYmxlIHdpbGwgY29uZmlybSB0aGUgUENJIElEcyBhbmQgdGhlIGxldmVsIG9mIGRpcmVjdCBpbnRlcmFjdGlvbiB0aGF0IGlzIHBvc3NpYmxlLiBJdCB3aWxsIGhlbHAgbWUgZXZhbHVhdGUgd2hldGhlciB0aGUgQ1hMIGludGVyYWN0aW9uIGlzIHNvbGVseSBkZXBlbmRlbnQgb24gUENJIElEcyBvciBpZiB0aGVyZSBhcmUgb3RoZXIgYWNjZXNzIG1ldGhvZHMuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIGFzc2Vzc2luZyB0aGUgZmVhc2liaWxpdHkgb2YgYW55IGVtdWxhdGlvbiBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZ4X3BjaV90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM9ODYzPXN0YXRpYyB2b2lkIGVmeF91bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy04ODUtLyogUENJIGRldmljZSBJRCB0YWJsZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZ4X3BjaV90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTg4Ny1cdHtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU09MQVJGTEFSRSwgMHgwOTAzKSwgIC8qIFNGQzkxMjAgUEYgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM9MTQwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWZ4X3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTQwOS1cdC5uYW1lXHRcdD0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMDpcdC5pZF90YWJsZVx0PSBlZnhfcGNpX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTE0MTEtXHQucHJvYmVcdFx0PSBlZnhfcGNpX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYz0xNDc4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQ3OTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZWZ4X3BjaV90YWJsZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTc4Mz1zdGF0aWMgdm9pZCBlZnhfdW5yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGVmeF9uaWMgKmVmeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtODA0LS8qIFBDSSBkZXZpY2UgSUQgdGFibGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo4MDU6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVmeF9wY2lfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy04MDYtXHR7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NPTEFSRkxBUkUsIDB4MDgwMyksXHQvKiBTRkM5MDIwICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEyNzM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEyNzQtXHQubmFtZVx0XHQ9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEyNzU6XHQuaWRfdGFibGVcdD0gZWZ4X3BjaV90YWJsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc2LVx0LnByb2JlXHRcdD0gZWZ4X3BjaV9wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9MTM0OT1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEzNTA6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGVmeF9wY2lfdGFibGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5NwoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBTb2xhcmZsYXJlLVNwZWNpZmljIEhhcmR3YXJlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBjbGVhci4gVGhlIGNvZGUgYmVpbmcgaW50cm9kdWNlZCBoZXJlIGlzIGFsbCB0aWVkIGRpcmVjdGx5IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAgbmV0d29yayBkcml2ZXIuIEkgcmVtZW1iZXIgdGhvc2UgUENJIElEcywgYFBDSV9WRU5ET1JfSURfU09MQVJGTEFSRSwgMHgwOTAzYCwgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gdGhlaXIgaGFyZHdhcmUuIEFuZCBRRU1VLCB0aGUgZW52aXJvbm1lbnQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBmb3IgZnV6emluZywgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0LiBUaGVyZSYjMzk7cyBubyBnZW5lcmljIFBDSSBkZXZpY2UgZW11bGF0b3IgaW4gc3l6a2FsbGVyIHRvIGp1c3Qgd2hpcCB1cCBhIG1vY2sgb2YgdGhhdCBoYXJkd2FyZSBlaXRoZXIuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBkcml2ZXIgKnJlcXVpcmVzKiBhY3R1YWwgcGh5c2ljYWwgU29sYXJmbGFyZSBoYXJkd2FyZSwgdGhlIG5ldyBDWEwgc3VwcG9ydCBjb2RlLCB3aGljaCB0aGlzIHBhdGNoIGludHJvZHVjZXMsIGlzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAuIEl0IGRvZXNuJiMzOTt0IG1hdHRlciB0aGF0IHNvbWUgb2YgdGhlIGNoYW5nZXMgYXJlIGp1c3QgcmVmYWN0b3JpbmcgaW4gdGhlIENYTCBjb3JlLCBvciB0aGF0IHRoZXkgYXJlIGdlbmVyYWwsIHRoaXMgQ1hMIGNvcmUgcmVmYWN0b3JpbmcgaXMgbm90IHRyaWdnZXJlZCwgYWNjZXNzaWJsZSBvciByZWFjaGVkIHdpdGhvdXQgdGhlIFNGQyBkcml2ZXIgZmlyc3QuCgpUaGlzIGNvbmZpcm1zIHdoYXQgSSBleHBlY3RlZDsgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsgY2F0ZWdvcnkuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgb25lLiBXb3J0aEZ1enppbmc9ZmFsc2UgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDWEwgc3VwcG9ydCB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBuZXR3b3JrIGRyaXZlciAoc2ZjKSBhbmQgaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgQ1hMIGNvcmUgZm9yIGl0LiBUaGUgc2ZjIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTb2xhcmZsYXJlIFBDSSBoYXJkd2FyZSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDWEwgc3VwcG9ydCB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBuZXR3b3JrIGRyaXZlciAoc2ZjKSBhbmQgaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgQ1hMIGNvcmUgZm9yIGl0LiBUaGUgc2ZjIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTb2xhcmZsYXJlIFBDSSBoYXJkd2FyZSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQyOjUzLjQ3MjQwNzAyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjM3MTY0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0Mjo1My40NzI0MTc3MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjc4MzcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFhYTE0MTZkOTQ4MGUxNDI1ZTQ4N2NhMzBmNWIyOTYzNzRhMWQ2MjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxNjo0Mjo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXFxuaW5kZXggMDc1NTVhZTYzODU5NDAuLmY3Y2ViYjAyNjU1MjM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXFxuKysrIGIvZHJpdmVycy9jeGwvY29yZS9jb3JlLmhcXG5AQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkcixcXG4gc3RydWN0IGRlbnRyeSAqY3hsX2RlYnVnZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpkaXIpO1xcbiBpbnQgY3hsX2RwYV9zZXRfcGFydChzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkLFxcbiBcXHRcXHQgICAgIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpO1xcbitzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZTtcXG4raW50IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMpO1xcbiBpbnQgY3hsX2RwYV9hbGxvYyhzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkLCB1NjQgc2l6ZSk7XFxuIGludCBjeGxfZHBhX2ZyZWUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7XFxuIHJlc291cmNlX3NpemVfdCBjeGxfZHBhX3NpemUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jIGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcXG5pbmRleCA3YzZjNWI3NDUwYTU0YS4uOTdiMWU2MWFkMDE4NzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcXG4rKysgYi9kcml2ZXJzL2N4bC9jb3JlL21ib3guY1xcbkBAIC0xMTUyLDcgKzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcXFwiQ1hMXFxcIik7XFxuICAqXFxuICAqIFNlZSBDWEwgQDguMi45LjUuMi4xIEdldCBQYXJ0aXRpb24gSW5mb1xcbiAgKi9cXG4tc3RhdGljIGludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKVxcbitpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcXG4ge1xcbiBcXHRzdHJ1Y3QgY3hsX21haWxib3ggKmN4bF9tYm94ID0gXFx1MDAyNm1kcy1cXHUwMDNlY3hsZHMuY3hsX21ib3g7XFxuIFxcdHN0cnVjdCBjeGxfbWJveF9nZXRfcGFydGl0aW9uX2luZm8gcGk7XFxuQEAgLTEzMDgsNTUgKzEzMDgsNiBAQCBpbnQgY3hsX21lbV9zYW5pdGl6ZShzdHJ1Y3QgY3hsX21lbWRldiAqY3hsbWQsIHUxNiBjbWQpXFxuIFxcdHJldHVybiAtRUJVU1k7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXFxuLXtcXG4tXFx0aW50IGkgPSBpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zO1xcbi1cXG4tXFx0aWYgKHNpemUgPT0gMClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aW5mby1cXHUwMDNlcGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHtcXG4tXFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuLVxcdFxcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxcbi1cXHR9O1xcbi1cXHRpbmZvLVxcdTAwM2VwYXJ0W2ldLm1vZGUgPSBtb2RlO1xcbi1cXHRpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zKys7XFxuLX1cXG4tXFxuLWludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKVxcbi17XFxuLVxcdHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyA9IFxcdTAwMjZtZHMtXFx1MDAzZWN4bGRzO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy1cXHUwMDNlZGV2O1xcbi1cXHRpbnQgcmM7XFxuLVxcbi1cXHRpZiAoIWN4bGRzLVxcdTAwM2VtZWRpYV9yZWFkeSkge1xcbi1cXHRcXHRpbmZvLVxcdTAwM2VzaXplID0gMDtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGluZm8tXFx1MDAzZXNpemUgPSBtZHMtXFx1MDAzZXRvdGFsX2J5dGVzO1xcbi1cXG4tXFx0aWYgKG1kcy1cXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcXG4tXFx0XFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTtcXG4tXFx0XFx0YWRkX3BhcnQoaW5mbywgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLFxcbi1cXHRcXHRcXHQgbWRzLVxcdTAwM2VwZXJzaXN0ZW50X29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9QTUVNKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcXG4tXFx0aWYgKHJjKSB7XFxuLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IHBhcnRpdGlvbiBpbmZvcm1hdGlvblxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiByYztcXG4tXFx0fVxcbi1cXG4tXFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xcbi1cXHRhZGRfcGFydChpbmZvLCBtZHMtXFx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVxcdTAwM2VhY3RpdmVfcGVyc2lzdGVudF9ieXRlcyxcXG4tXFx0XFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcXFwiQ1hMXFxcIik7XFxuLVxcbiBpbnQgY3hsX2dldF9kaXJ0eV9jb3VudChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCB1MzIgKmNvdW50KVxcbiB7XFxuIFxcdHN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSBcXHUwMDI2bWRzLVxcdTAwM2VjeGxkcy5jeGxfbWJveDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcXG5pbmRleCAzM2EzZDJlN2IxM2FmOS4uMmU0NTdiMWViYzdkZmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcXG5AQCAtNTk0LDYgKzU5NCw3MyBAQCBib29sIGlzX2N4bF9tZW1kZXYoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsIFxcXCJDWExcXFwiKTtcXG4gXFxuK3N0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXFxuK3tcXG4rXFx0aW50IGkgPSBpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zO1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlcGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHtcXG4rXFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuK1xcdFxcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxcbitcXHR9O1xcbitcXHRpbmZvLVxcdTAwM2VwYXJ0W2ldLm1vZGUgPSBtb2RlO1xcbitcXHRpbmZvLVxcdTAwM2Vucl9wYXJ0aXRpb25zKys7XFxuK31cXG4rXFxuK2ludCBjeGxfbWVtX2RwYV9mZXRjaChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCBzdHJ1Y3QgY3hsX2RwYV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyA9IFxcdTAwMjZtZHMtXFx1MDAzZWN4bGRzO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWN4bGRzLVxcdTAwM2VtZWRpYV9yZWFkeSkge1xcbitcXHRcXHRpbmZvLVxcdTAwM2VzaXplID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNpemUgPSBtZHMtXFx1MDAzZXRvdGFsX2J5dGVzO1xcbitcXG4rXFx0aWYgKG1kcy1cXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcXG4rXFx0XFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTtcXG4rXFx0XFx0YWRkX3BhcnQoaW5mbywgbWRzLVxcdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLFxcbitcXHRcXHRcXHQgbWRzLVxcdTAwM2VwZXJzaXN0ZW50X29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9QTUVNKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IHBhcnRpdGlvbiBpbmZvcm1hdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVxcdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xcbitcXHRhZGRfcGFydChpbmZvLCBtZHMtXFx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVxcdTAwM2VhY3RpdmVfcGVyc2lzdGVudF9ieXRlcyxcXG4rXFx0XFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcXFwiQ1hMXFxcIik7XFxuK1xcbitcXG4rLyoqXFxuKyAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxcbisgKlxcbisgKiBAY3hsZHM6IHBvaW50ZXIgdG8gY3hsX2Rldl9zdGF0ZVxcbisgKiBAY2FwYWNpdHk6IGRldmljZSB2b2xhdGlsZSBtZW1vcnkgc2l6ZVxcbisgKi9cXG4raW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpXFxuK3tcXG4rXFx0c3RydWN0IGN4bF9kcGFfaW5mbyByYW5nZV9pbmZvID0ge1xcbitcXHRcXHQuc2l6ZSA9IGNhcGFjaXR5LFxcbitcXHR9O1xcbitcXG4rXFx0YWRkX3BhcnQoXFx1MDAyNnJhbmdlX2luZm8sIDAsIGNhcGFjaXR5LCBDWExfUEFSVE1PREVfUkFNKTtcXG4rXFx0cmV0dXJuIGN4bF9kcGFfc2V0dXAoY3hsZHMsIFxcdTAwMjZyYW5nZV9pbmZvKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfc2V0X2NhcGFjaXR5LCBcXFwiQ1hMXFxcIik7XFxuK1xcbiAvKipcXG4gICogc2V0X2V4Y2x1c2l2ZV9jeGxfY29tbWFuZHMoKSAtIGF0b21pY2FsbHkgZGlzYWJsZSB1c2VyIGN4bCBjb21tYW5kc1xcbiAgKiBAbWRzOiBUaGUgZGV2aWNlIHN0YXRlIHRvIG9wZXJhdGUgb25cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9wY2kuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmNcXG5pbmRleCBlNDMzOGZkN2UwMWI0Ny4uOWQ4MDdjMWEwMDJjYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9wY2kuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1kb2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9wY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Flci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hscGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGxtZW0uaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9wb3J0LmMgYi9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xcbmluZGV4IDEyMTVlZTRmNDAzNTFiLi5jYjYzM2UxOTE1MWI1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lkci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hsL2VpbmouaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9wY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2N4bG1lbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hscGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGwuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9yZWdzLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xcbmluZGV4IDkzNzEwY2Y0ZjBhNjk3Li4yMGMyZDlmYmNmZTdkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jXFxuQEAgLTQsNiArNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3hsL3BjaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3hsbWVtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGxwY2kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3BtdS5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jeGxwY2kuaCBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oXFxuaW5kZXggYjgyNmViNTNjZjdiYWMuLjExMGVjOWM0NGYwOWYxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3hsL2N4bHBjaS5oXFxuKysrIGIvZHJpdmVycy9jeGwvY3hscGNpLmhcXG5AQCAtMTMsMTYgKzEzLDYgQEBcXG4gICovXFxuICNkZWZpbmUgQ1hMX1BDSV9ERUZBVUxUX01BWF9WRUNUT1JTIDE2XFxuIFxcbi0vKiBSZWdpc3RlciBCbG9jayBJZGVudGlmaWVyIChSQkkpICovXFxuLWVudW0gY3hsX3JlZ2xvY190eXBlIHtcXG4tXFx0Q1hMX1JFR0xPQ19SQklfRU1QVFkgPSAwLFxcbi1cXHRDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXFxuLVxcdENYTF9SRUdMT0NfUkJJX1ZJUlQsXFxuLVxcdENYTF9SRUdMT0NfUkJJX01FTURFVixcXG4tXFx0Q1hMX1JFR0xPQ19SQklfUE1VLFxcbi1cXHRDWExfUkVHTE9DX1JCSV9UWVBFU1xcbi19O1xcbi1cXG4gLypcXG4gICogVGFibGUgQWNjZXNzIERPRSwgQ0RBVCBSZWFkIEVudHJ5IFJlc3BvbnNlXFxuICAqXFxuQEAgLTExMiw2ICsxMDIsNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9jeGxfcG9ydF9yYXNfc2V0dXAoc3RydWN0IGN4bF9wb3J0ICpwb3J0KVxcbiB9XFxuICNlbmRpZlxcbiBcXG4taW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwICptYXApO1xcbiAjZW5kaWYgLyogX19DWExfUENJX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9wY2kuYyBiL2RyaXZlcnMvY3hsL3BjaS5jXFxuaW5kZXggMjY3YzY3OWIwYjNjMjAuLmJiODkyZGJmZGQ2ZDZmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3hsL3BjaS5jXFxuKysrIGIvZHJpdmVycy9jeGwvcGNpLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NjeGwvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjeGwvbWFpbGJveC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiY3hsbWVtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJjeGxwY2kuaFxcXCJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xcbmluZGV4IGM0YzQzNDM0ZjMxNDM0Li45NzlmMjgwMWUyYThlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnXFxuQEAgLTY2LDYgKzY2LDE1IEBAIGNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXFxuIFxcdCAgRHJpdmVyLUludGVyZmFjZSkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcywgYWxsb3dpbmcgZGVidWdnaW5nIG9mXFxuIFxcdCAgZHJpdmVyL2Zpcm13YXJlIGludGVyYWN0aW9uLiAgVGhlIHRyYWNpbmcgaXMgYWN0dWFsbHkgZW5hYmxlZCBieVxcbiBcXHQgIGEgc3lzZnMgZmlsZSAnbWNkaV9sb2dnaW5nJyB1bmRlciB0aGUgUENJIGRldmljZS5cXG4rY29uZmlnIFNGQ19DWExcXG4rXFx0Ym9vbCBcXFwiU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBDWEwgc3VwcG9ydFxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBTRkMgXFx1MDAyNlxcdTAwMjYgQ1hMX0JVUyBcXHUwMDNlPSBTRkNcXG4rXFx0ZGVmYXVsdCBTRkNcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgZW5hYmxlcyBTRkMgQ1hMIHN1cHBvcnQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmluZyBDWEwgZm9yXFxuK1xcdCAgdXNpbmcgQ1RQSU8gd2l0aCBDWEwubWVtLiBUaGUgU0ZDIGRldmljZSB3aXRoIENYTCBzdXBwb3J0IGFuZFxcbitcXHQgIHdpdGggYSBDWEwtYXdhcmUgZmlybXdhcmUgY2FuIGJlIHVzZWQgZm9yIG1pbmltaXppbmcgbGF0ZW5jaWVzXFxuK1xcdCAgd2hlbiBzZW5kaW5nIHRocm91Z2ggQ1RQSU8uXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vS2NvbmZpZ1xcXCJcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvS2NvbmZpZ1xcXCJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlXFxuaW5kZXggZDk5MDM5ZWM0NjhkNjcuLmJiMGYxODkxY2RlNjUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxcbkBAIC0xMyw2ICsxMyw3IEBAIHNmYy0kKENPTkZJR19TRkNfU1JJT1YpXFx0Kz0gc3Jpb3YubyBlZjEwX3NyaW92Lm8gZWYxMDBfc3Jpb3YubyBlZjEwMF9yZXAubyBcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZS5vIHRjLm8gdGNfYmluZGluZ3MubyB0Y19jb3VudGVycy5vIFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNfZW5jYXBfYWN0aW9ucy5vIHRjX2Nvbm50cmFjay5vXFxuIFxcbitzZmMtJChDT05GSUdfU0ZDX0NYTClcXHQrPSBlZnhfY3hsLm9cXG4gb2JqLSQoQ09ORklHX1NGQylcXHQrPSBzZmMub1xcbiBcXG4gb2JqLSQoQ09ORklHX1NGQ19GQUxDT04pICs9IGZhbGNvbi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmNcXG5pbmRleCA3ZTA0ZjExNWJiYWFhZi4uNzNiYzA2NDkyOWY2MzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdWRwX3R1bm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiZWZ4X2N4bC5oXFxcIlxcbiBcXG4gLyogSGFyZHdhcmUgY29udHJvbCBmb3IgRUYxMCBhcmNoaXRlY3R1cmUgaW5jbHVkaW5nICdIdW50aW5ndG9uJy4gKi9cXG4gXFxuQEAgLTEwNiw3ICsxMDcsNyBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2dldF92Zl9pbmRleChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbiBcXG4gc3RhdGljIGludCBlZnhfZWYxMF9pbml0X2RhdGFwYXRoX2NhcHMoc3RydWN0IGVmeF9uaWMgKmVmeClcXG4ge1xcbi1cXHRNQ0RJX0RFQ0xBUkVfQlVGKG91dGJ1ZiwgTUNfQ01EX0dFVF9DQVBBQklMSVRJRVNfVjRfT1VUX0xFTik7XFxuK1xcdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfTEVOKTtcXG4gXFx0c3RydWN0IGVmeF9lZjEwX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC1cXHUwMDNlbmljX2RhdGE7XFxuIFxcdHNpemVfdCBvdXRsZW47XFxuIFxcdGludCByYztcXG5AQCAtMTc3LDYgKzE3OCwxMiBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbiBcXHRcXHRcXHQgIGVmeC1cXHUwMDNlbnVtX21hY19zdGF0cyk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChvdXRsZW4gXFx1MDAzYyBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfTEVOKVxcbitcXHRcXHRuaWNfZGF0YS1cXHUwMDNlZGF0YXBhdGhfY2FwczMgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5pY19kYXRhLVxcdTAwM2VkYXRhcGF0aF9jYXBzMyA9IE1DRElfRFdPUkQob3V0YnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBHRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9GTEFHUzMpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTExNDAsNiArMTE0Nyw5IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbiBcXHR1bnNpZ25lZCBpbnQgY2hhbm5lbF92aXMsIHBpb193cml0ZV92aV9iYXNlLCBtYXhfdmlzO1xcbiBcXHRzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LVxcdTAwM2VuaWNfZGF0YTtcXG4gXFx0dW5zaWduZWQgaW50IHVjX21lbV9tYXBfc2l6ZSwgd2NfbWVtX21hcF9zaXplO1xcbisjaWZkZWYgQ09ORklHX1NGQ19DWExcXG4rXFx0c3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhO1xcbisjZW5kaWZcXG4gXFx0dm9pZCBfX2lvbWVtICptZW1iYXNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC0xMjYzLDggKzEyNzMsMjMgQEAgc3RhdGljIGludCBlZnhfZWYxMF9kaW1lbnNpb25fcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpXFxuIFxcdGlvdW5tYXAoZWZ4LVxcdTAwM2VtZW1iYXNlKTtcXG4gXFx0ZWZ4LVxcdTAwM2VtZW1iYXNlID0gbWVtYmFzZTtcXG4gXFxuLVxcdC8qIFNldCB1cCB0aGUgV0MgbWFwcGluZyBpZiBuZWVkZWQgKi9cXG4tXFx0aWYgKHdjX21lbV9tYXBfc2l6ZSkge1xcbitcXHRpZiAoIXdjX21lbV9tYXBfc2l6ZSlcXG4rXFx0XFx0Z290byBza2lwX3BpbztcXG4rXFxuK1xcdC8qIFNldCB1cCB0aGUgV0MgbWFwcGluZyAqL1xcbitcXG4rI2lmZGVmIENPTkZJR19TRkNfQ1hMXFxuK1xcdHByb2JlX2RhdGEgPSBjb250YWluZXJfb2YoZWZ4LCBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEsIGVmeCk7XFxuK1xcdGlmICgobmljX2RhdGEtXFx1MDAzZWRhdGFwYXRoX2NhcHMzIFxcdTAwMjZcXG4rXFx0ICAgICgxIFxcdTAwM2NcXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9DWExfQ09ORklHX0VOQUJMRV9MQk4pKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcHJvYmVfZGF0YS1cXHUwMDNlY3hsX3Bpb19pbml0aWFsaXNlZCkge1xcbitcXHRcXHQvKiBVc2luZyBQSU8gdGhyb3VnaCBDWEwgbWFwcGluZyAqL1xcbitcXHRcXHRuaWNfZGF0YS1cXHUwMDNlcGlvX3dyaXRlX2Jhc2UgPSBwcm9iZV9kYXRhLVxcdTAwM2VjeGwtXFx1MDAzZWN0cGlvX2N4bDtcXG4rXFx0XFx0bmljX2RhdGEtXFx1MDAzZXBpb193cml0ZV92aV9iYXNlID0gcGlvX3dyaXRlX3ZpX2Jhc2U7XFxuK1xcdH0gZWxzZVxcbisjZW5kaWZcXG4rXFx0e1xcbitcXHRcXHQvKiBVc2luZyBsZWdhY3kgUElPIEJBUiBtYXBwaW5nICovXFxuIFxcdFxcdG5pY19kYXRhLVxcdTAwM2V3Y19tZW1iYXNlID0gaW9yZW1hcF93YyhlZngtXFx1MDAzZW1lbWJhc2VfcGh5cyArXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgdWNfbWVtX21hcF9zaXplLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHdjX21lbV9tYXBfc2l6ZSk7XFxuQEAgLTEyNzksMTIgKzEzMDQsMTQgQEAgc3RhdGljIGludCBlZnhfZWYxMF9kaW1lbnNpb25fcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpXFxuIFxcdFxcdFxcdG5pY19kYXRhLVxcdTAwM2V3Y19tZW1iYXNlICtcXG4gXFx0XFx0XFx0KHBpb193cml0ZV92aV9iYXNlICogZWZ4LVxcdTAwM2V2aV9zdHJpZGUgKyBFUl9EWl9UWF9QSU9CVUYgLVxcbiBcXHRcXHRcXHQgdWNfbWVtX21hcF9zaXplKTtcXG4tXFxuLVxcdFxcdHJjID0gZWZ4X2VmMTBfbGlua19waW9idWZzKGVmeCk7XFxuLVxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0ZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0gZWZ4X2VmMTBfbGlua19waW9idWZzKGVmeCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0ZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7XFxuK1xcbitza2lwX3BpbzpcXG4rXFxuIFxcdG5ldGlmX2RiZyhlZngsIHByb2JlLCBlZngtXFx1MDAzZW5ldF9kZXYsXFxuIFxcdFxcdCAgXFxcIm1lbW9yeSBCQVIgYXQgJXBhICh2aXJ0dWFsICVwKyV4IFVDLCAlcCsleCBXQylcXFxcblxcXCIsXFxuIFxcdFxcdCAgXFx1MDAyNmVmeC1cXHUwMDNlbWVtYmFzZV9waHlzLCBlZngtXFx1MDAzZW1lbWJhc2UsIHVjX21lbV9tYXBfc2l6ZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jXFxuaW5kZXggOGYxMzZhMTFkMzk2OGEuLjM4MDZjZDNkZDdmNDg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xcbkBAIC0zNCw2ICszNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3Jpb3YuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVmeF9kZXZsaW5rLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlZnhfY3hsLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwibWNkaV9wb3J0X2NvbW1vbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibWNkaV9wY29sLmhcXFwiXFxuQEAgLTk4MSwxMiArOTgyLDE1IEBAIHN0YXRpYyB2b2lkIGVmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KVxcbiBcXHRlZnhfcGNpX3JlbW92ZV9tYWluKGVmeCk7XFxuIFxcbiBcXHRlZnhfZmluaV9pbyhlZngpO1xcbitcXG4rXFx0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcXG4rXFx0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xcbitcXG4gXFx0cGNpX2RiZyhlZngtXFx1MDAzZXBjaV9kZXYsIFxcXCJzaHV0ZG93biBzdWNjZXNzZnVsXFxcXG5cXFwiKTtcXG4gXFxuIFxcdGVmeF9maW5pX2RldmxpbmtfYW5kX3VubG9jayhlZngpO1xcbiBcXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcXG4gXFx0ZnJlZV9uZXRkZXYoZWZ4LVxcdTAwM2VuZXRfZGV2KTtcXG4tXFx0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcXG4gXFx0a2ZyZWUocHJvYmVfZGF0YSk7XFxuIH07XFxuIFxcbkBAIC0xMTkwLDYgKzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZmFpbDI7XFxuIFxcbitcXHQvKiBBIHN1Y2Nlc3NmdWwgY3hsIGluaXRpYWxpemF0aW9uIGltcGxpZXMgYSBDWEwgcmVnaW9uIGNyZWF0ZWQgdG8gYmVcXG4rXFx0ICogdXNlZCBmb3IgUElPIGJ1ZmZlcnMuIElmIHRoZXJlIGlzIG5vIENYTCBzdXBwb3J0IGxlZ2FjeSBQSU8gYnVmZmVyc1xcbitcXHQgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTFxcbitcXHQgKiBzdXBwb3J0IGFuZCB0aGUgY3hsIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzLlxcbitcXHQgKi9cXG4rXFx0cmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJDWEwgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggZXJyb3IgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0Z290byBmYWlsMztcXG4rXFx0fVxcbitcXG4gXFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG4gXFx0aWYgKHJjKSB7XFxuIFxcdFxcdC8qIE9uIGZhaWx1cmUsIHJldHJ5IG9uY2UgaW1tZWRpYXRlbHkuXFxuQEAgLTEyMjgsNiArMTI0Myw3IEBAIHN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldixcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiAgZmFpbDM6XFxuK1xcdGVmeF9jeGxfZXhpdChwcm9iZV9kYXRhKTtcXG4gXFx0ZWZ4X2ZpbmlfaW8oZWZ4KTtcXG4gIGZhaWwyOlxcbiBcXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jXFxuQEAgLTAsMCArMSwxMDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbisgKlxcbisgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHNcXG4rICogQ29weXJpZ2h0IChDKSAyMDI1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9jeGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcIm5ldF9kcml2ZXIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVmeF9jeGwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgRUZYX0NUUElPX0JVRkZFUl9TSVpFXFx0U1pfMjU2TVxcbitcXG4raW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGVmeF9uaWMgKmVmeCA9IFxcdTAwMjZwcm9iZV9kYXRhLVxcdTAwM2VlZng7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gZWZ4LVxcdTAwM2VwY2lfZGV2O1xcbitcXHRzdHJ1Y3QgcmFuZ2UgY3hsX3Bpb19yYW5nZTtcXG4rXFx0c3RydWN0IGVmeF9jeGwgKmN4bDtcXG4rXFx0dTE2IGR2c2VjO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBJcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBhbmQgdXNpbmcgQ1hMPyAqL1xcbitcXHRpZiAoIXBjaWVfaXNfY3hsKHBjaV9kZXYpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGR2c2VjID0gcGNpX2ZpbmRfZHZzZWNfY2FwYWJpbGl0eShwY2lfZGV2LCBQQ0lfVkVORE9SX0lEX0NYTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBQQ0lfRFZTRUNfQ1hMX0RFVklDRSk7XFxuK1xcdGlmICghZHZzZWMpIHtcXG4rXFx0XFx0cGNpX2luZm8ocGNpX2RldiwgXFxcIkNYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRwY2lfZGJnKHBjaV9kZXYsIFxcXCJDWExfRFZTRUNfUENJRV9ERVZJQ0UgY2FwYWJpbGl0eSBmb3VuZFxcXFxuXFxcIik7XFxuK1xcbitcXHQvKiBDcmVhdGUgYSBjeGxfZGV2X3N0YXRlIGVtYmVkZGVkIGluIHRoZSBjeGwgc3RydWN0IHVzaW5nIGN4bCBjb3JlIGFwaVxcbitcXHQgKiBzcGVjaWZ5aW5nIG5vIG1ib3ggYXZhaWxhYmxlLlxcbitcXHQgKi9cXG4rXFx0Y3hsID0gZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShcXHUwMDI2cGNpX2Rldi1cXHUwMDNlZGV2LCBDWExfREVWVFlQRV9ERVZNRU0sXFxuK1xcdFxcdFxcdFxcdFxcdHBjaV9nZXRfZHNuKHBjaV9kZXYpLCBkdnNlYyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGVmeF9jeGwsIGN4bGRzLCBmYWxzZSk7XFxuK1xcbitcXHRpZiAoIWN4bClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyYyA9IGN4bF9wY2lfc2V0dXBfcmVncyhwY2lfZGV2LCBDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZjeGwtXFx1MDAzZWN4bGRzLnJlZ19tYXApO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cGNpX2VycihwY2lfZGV2LCBcXFwiTm8gY29tcG9uZW50IHJlZ2lzdGVyc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjeGwtXFx1MDAzZWN4bGRzLnJlZ19tYXAuY29tcG9uZW50X21hcC5oZG1fZGVjb2Rlci52YWxpZCkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJFeHBlY3RlZCBIRE0gY29tcG9uZW50IHJlZ2lzdGVyIG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWN4bC1cXHUwMDNlY3hsZHMucmVnX21hcC5jb21wb25lbnRfbWFwLnJhcy52YWxpZCkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJFeHBlY3RlZCBSQVMgY29tcG9uZW50IHJlZ2lzdGVyIG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZXQgbWVkaWEgcmVhZHkgZXhwbGljaXRseSBhcyB0aGVyZSBhcmUgbmVpdGhlciBtYWlsYm94IGZvciBjaGVja2luZ1xcbitcXHQgKiB0aGlzIHN0YXRlIG5vciB0aGUgQ1hMIHJlZ2lzdGVyIGludm9sdmVkLCBib3RoIG5vdCBtYW5kYXRvcnkgZm9yXFxuK1xcdCAqIHR5cGUyLlxcbitcXHQgKi9cXG4rXFx0Y3hsLVxcdTAwM2VjeGxkcy5tZWRpYV9yZWFkeSA9IHRydWU7XFxuK1xcbitcXHRpZiAoY3hsX3NldF9jYXBhY2l0eShcXHUwMDI2Y3hsLVxcdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJkcGEgY2FwYWNpdHkgc2V0dXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdGN4bC1cXHUwMDNlY3hsbWQgPSBkZXZtX2N4bF9wcm9iZV9tZW0oXFx1MDAyNmN4bC1cXHUwMDNlY3hsZHMsIFxcdTAwMjZjeGxfcGlvX3JhbmdlKTtcXG4rXFx0aWYgKElTX0VSUihjeGwtXFx1MDAzZWN4bG1kKSkge1xcbitcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJDWEwgYWNjZWwgbWVtZGV2IGNyZWF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGN4bC1cXHUwMDNlY3hsbWQpO1xcbitcXHR9XFxuK1xcbitcXHRjeGwtXFx1MDAzZWN0cGlvX2N4bCA9IGlvcmVtYXBfd2MoY3hsX3Bpb19yYW5nZS5zdGFydCxcXG4rXFx0XFx0XFx0XFx0ICAgIHJhbmdlX2xlbihcXHUwMDI2Y3hsX3Bpb19yYW5nZSkpO1xcbitcXHRpZiAoIWN4bC1cXHUwMDNlY3RwaW9fY3hsKSB7XFxuK1xcdFxcdHBjaV9lcnIocGNpX2RldiwgXFxcIkNYTCBpb3JlbWFwIHJlZ2lvbiAoJXByYSkgZmFpbGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHUwMDI2Y3hsX3Bpb19yYW5nZSk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRwcm9iZV9kYXRhLVxcdTAwM2VjeGxfcGlvX2luaXRpYWxpc2VkID0gdHJ1ZTtcXG4rXFx0cHJvYmVfZGF0YS1cXHUwMDNlY3hsID0gY3hsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcXG4re1xcbitcXHRpZiAoIXByb2JlX2RhdGEtXFx1MDAzZWN4bClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW91bm1hcChwcm9iZV9kYXRhLVxcdTAwM2VjeGwtXFx1MDAzZWN0cGlvX2N4bCk7XFxuK31cXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkNYTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlMjcwNWNiMDYzZjZhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmhcXG5AQCAtMCwwICsxLDMyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4rICogRHJpdmVyIGZvciBBTUQgbmV0d29yayBjb250cm9sbGVycyBhbmQgYm9hcmRzXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxcbisgKlxcbisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxcbisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWRcXG4rICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBFRlhfQ1hMX0hcXG4rI2RlZmluZSBFRlhfQ1hMX0hcXG4rXFxuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2N4bC9jeGwuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBlZnhfcHJvYmVfZGF0YTtcXG4rXFxuK3N0cnVjdCBlZnhfY3hsIHtcXG4rXFx0c3RydWN0IGN4bF9kZXZfc3RhdGUgY3hsZHM7XFxuK1xcdHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZDtcXG4rXFx0dm9pZCBfX2lvbWVtICpjdHBpb19jeGw7XFxuK307XFxuK1xcbitpbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XFxuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHsgcmV0dXJuIDA7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9XFxuKyNlbmRpZlxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcXG5pbmRleCBiOThjMjU5ZjY3MmRiNS4uMzk2NGIyYzU2NjA5YzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcXG5AQCAtMTE5NywxNCArMTE5NywyNCBAQCBzdHJ1Y3QgZWZ4X25pYyB7XFxuIFxcdGF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7XFxuIH07XFxuIFxcbisjaWZkZWYgQ09ORklHX1NGQ19DWExcXG4rc3RydWN0IGVmeF9jeGw7XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAtIFN0YXRlIGFmdGVyIGhhcmR3YXJlIHByb2JlXFxuICAqIEBwY2lfZGV2OiBUaGUgUENJIGRldmljZVxcbiAgKiBAZWZ4OiBFZnggTklDIGRldGFpbHNcXG4rICogQGN4bDogZGV0YWlscyBvZiByZWxhdGVkIGN4bCBvYmplY3RzXFxuKyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS5cXG4gICovXFxuIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSB7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xcbiBcXHRzdHJ1Y3QgZWZ4X25pYyBlZng7XFxuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxcbitcXHRzdHJ1Y3QgZWZ4X2N4bCAqY3hsO1xcbitcXHRib29sIGN4bF9waW9faW5pdGlhbGlzZWQ7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZWZ4X25pYyAqZWZ4X25ldGRldl9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaFxcbmluZGV4IGVjM2IyZGY0M2I2OGQ5Li43NDgwZjk5OTVkZmI4ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcXG5AQCAtMTUyLDYgKzE1Miw4IEBAIGVudW0ge1xcbiAgKlxcdCVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcXG4gICogQGRhdGFwYXRoX2NhcHMyOiBGdXJ0aGVyIENhcGFiaWxpdGllcyBvZiBkYXRhcGF0aCBmaXJtd2FyZSAoRkxBR1MyIGZpZWxkIG9mXFxuICAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcXG4rICogQGRhdGFwYXRoX2NhcHMzOiBGdXJ0aGVyIENhcGFiaWxpdGllcyBvZiBkYXRhcGF0aCBmaXJtd2FyZSAoRkxBR1MzIGZpZWxkIG9mXFxuKyAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcXG4gICogQHJ4X2RwY3B1X2Z3X2lkOiBGaXJtd2FyZSBJRCBvZiB0aGUgUnhEUENQVVxcbiAgKiBAdHhfZHBjcHVfZndfaWQ6IEZpcm13YXJlIElEIG9mIHRoZSBUeERQQ1BVXFxuICAqIEBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc6IEZsYWc6IHZzd2l0Y2hpbmcgaGFzIHlldCB0byBiZSBzZXR1cCBhZnRlciBNQyByZWJvb3RcXG5AQCAtMTg3LDYgKzE4OSw3IEBAIHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSB7XFxuIFxcdGJvb2wgbXVzdF9jaGVja19kYXRhcGF0aF9jYXBzO1xcbiBcXHR1MzIgZGF0YXBhdGhfY2FwcztcXG4gXFx0dTMyIGRhdGFwYXRoX2NhcHMyO1xcbitcXHR1MzIgZGF0YXBhdGhfY2FwczM7XFxuIFxcdHVuc2lnbmVkIGludCByeF9kcGNwdV9md19pZDtcXG4gXFx0dW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkO1xcbiBcXHRib29sIG11c3RfcHJvYmVfdnN3aXRjaGluZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaFxcbmluZGV4IDAxNmM3NGZiNzQ3Y2Y2Li44MDJiMTQzZGU4M2RiNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2N4bC9jeGwuaFxcbisrKyBiL2luY2x1ZGUvY3hsL2N4bC5oXFxuQEAgLTIyNiw0ICsyMjYsNiBAQCBzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqX2Rldm1fY3hsX2Rldl9zdGF0ZV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXG4gc3RydWN0IGN4bF9tZW1kZXYgKmRldm1fY3hsX3Byb2JlX21lbShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByYW5nZSAqcmFuZ2UpO1xcbitcXG4raW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xcbiAjZW5kaWYgLyogX19DWExfQ1hMX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2UwMDAwMDE1ODcxYTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9jeGwvcGNpLmhcXG5AQCAtMCwwICsxLDIyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuK1xcbisjaWZuZGVmIF9fQ1hMX0NYTF9QQ0lfSF9fXFxuKyNkZWZpbmUgX19DWExfQ1hMX1BDSV9IX19cXG4rXFxuKy8qIFJlZ2lzdGVyIEJsb2NrIElkZW50aWZpZXIgKFJCSSkgKi9cXG4rZW51bSBjeGxfcmVnbG9jX3R5cGUge1xcbitcXHRDWExfUkVHTE9DX1JCSV9FTVBUWSA9IDAsXFxuK1xcdENYTF9SRUdMT0NfUkJJX0NPTVBPTkVOVCxcXG4rXFx0Q1hMX1JFR0xPQ19SQklfVklSVCxcXG4rXFx0Q1hMX1JFR0xPQ19SQklfTUVNREVWLFxcbitcXHRDWExfUkVHTE9DX1JCSV9QTVUsXFxuK1xcdENYTF9SRUdMT0NfUkJJX1RZUEVTXFxuK307XFxuK1xcbitzdHJ1Y3QgY3hsX3JlZ2lzdGVyX21hcDtcXG4rc3RydWN0IHBjaV9kZXY7XFxuK1xcbitpbnQgY3hsX3BjaV9zZXR1cF9yZWdzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIGN4bF9yZWdsb2NfdHlwZSB0eXBlLFxcbitcXHRcXHQgICAgICAgc3RydWN0IGN4bF9yZWdpc3Rlcl9tYXAgKm1hcCk7XFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0Mjo1NC4zODA0NTg5NTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzI5MTAwMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhYTE0MTZkOTQ4MGUxNDI1ZTQ4N2NhMzBmNWIyOTYzNzRhMWQ2MjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDE2OjQyOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9jb3JlLmggYi9kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaFxuaW5kZXggMDc1NTVhZTYzODU5NDAuLmY3Y2ViYjAyNjU1MjM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9jb3JlLmhcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvY29yZS5oXG5AQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgX19pb21lbSAqZGV2bV9jeGxfaW9tYXBfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3QgYWRkcixcbiBzdHJ1Y3QgZGVudHJ5ICpjeGxfZGVidWdmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKmRpcik7XG4gaW50IGN4bF9kcGFfc2V0X3BhcnQoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCxcbiBcdFx0ICAgICBlbnVtIGN4bF9wYXJ0aXRpb25fbW9kZSBtb2RlKTtcbitzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZTtcbitpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcyk7XG4gaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpO1xuIGludCBjeGxfZHBhX2ZyZWUoc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCk7XG4gcmVzb3VyY2Vfc2l6ZV90IGN4bF9kcGFfc2l6ZShzdHJ1Y3QgY3hsX2VuZHBvaW50X2RlY29kZXIgKmN4bGVkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL21ib3guYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWJveC5jXG5pbmRleCA3YzZjNWI3NDUwYTU0YS4uOTdiMWU2MWFkMDE4NzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL21ib3guY1xuKysrIGIvZHJpdmVycy9jeGwvY29yZS9tYm94LmNcbkBAIC0xMTUyLDcgKzExNTIsNyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcIkNYTFwiKTtcbiAgKlxuICAqIFNlZSBDWEwgQDguMi45LjUuMi4xIEdldCBQYXJ0aXRpb24gSW5mb1xuICAqL1xuLXN0YXRpYyBpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbitpbnQgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8oc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcylcbiB7XG4gXHRzdHJ1Y3QgY3hsX21haWxib3ggKmN4bF9tYm94ID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzLmN4bF9tYm94O1xuIFx0c3RydWN0IGN4bF9tYm94X2dldF9wYXJ0aXRpb25faW5mbyBwaTtcbkBAIC0xMzA4LDU1ICsxMzA4LDYgQEAgaW50IGN4bF9tZW1fc2FuaXRpemUoc3RydWN0IGN4bF9tZW1kZXYgKmN4bG1kLCB1MTYgY21kKVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWRkX3BhcnQoc3RydWN0IGN4bF9kcGFfaW5mbyAqaW5mbywgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgZW51bSBjeGxfcGFydGl0aW9uX21vZGUgbW9kZSlcbi17XG4tXHRpbnQgaSA9IGluZm8tXHUwMDNlbnJfcGFydGl0aW9ucztcbi1cbi1cdGlmIChzaXplID09IDApXG4tXHRcdHJldHVybjtcbi1cbi1cdGluZm8tXHUwMDNlcGFydFtpXS5yYW5nZSA9IChzdHJ1Y3QgcmFuZ2UpIHtcbi1cdFx0LnN0YXJ0ID0gc3RhcnQsXG4tXHRcdC5lbmQgPSBzdGFydCArIHNpemUgLSAxLFxuLVx0fTtcbi1cdGluZm8tXHUwMDNlcGFydFtpXS5tb2RlID0gbW9kZTtcbi1cdGluZm8tXHUwMDNlbnJfcGFydGl0aW9ucysrO1xuLX1cbi1cbi1pbnQgY3hsX21lbV9kcGFfZmV0Y2goc3RydWN0IGN4bF9tZW1kZXZfc3RhdGUgKm1kcywgc3RydWN0IGN4bF9kcGFfaW5mbyAqaW5mbylcbi17XG4tXHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMgPSBcdTAwMjZtZHMtXHUwMDNlY3hsZHM7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjeGxkcy1cdTAwM2VkZXY7XG4tXHRpbnQgcmM7XG4tXG4tXHRpZiAoIWN4bGRzLVx1MDAzZW1lZGlhX3JlYWR5KSB7XG4tXHRcdGluZm8tXHUwMDNlc2l6ZSA9IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0aW5mby1cdTAwM2VzaXplID0gbWRzLVx1MDAzZXRvdGFsX2J5dGVzO1xuLVxuLVx0aWYgKG1kcy1cdTAwM2VwYXJ0aXRpb25fYWxpZ25fYnl0ZXMgPT0gMCkge1xuLVx0XHRhZGRfcGFydChpbmZvLCAwLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1JBTSk7XG4tXHRcdGFkZF9wYXJ0KGluZm8sIG1kcy1cdTAwM2V2b2xhdGlsZV9vbmx5X2J5dGVzLFxuLVx0XHRcdCBtZHMtXHUwMDNlcGVyc2lzdGVudF9vbmx5X2J5dGVzLCBDWExfUEFSVE1PREVfUE1FTSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmMgPSBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhtZHMpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBxdWVyeSBwYXJ0aXRpb24gaW5mb3JtYXRpb25cXG5cIik7XG4tXHRcdHJldHVybiByYztcbi1cdH1cbi1cbi1cdGFkZF9wYXJ0KGluZm8sIDAsIG1kcy1cdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuLVx0YWRkX3BhcnQoaW5mbywgbWRzLVx1MDAzZWFjdGl2ZV92b2xhdGlsZV9ieXRlcywgbWRzLVx1MDAzZWFjdGl2ZV9wZXJzaXN0ZW50X2J5dGVzLFxuLVx0XHQgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLUVYUE9SVF9TWU1CT0xfTlNfR1BMKGN4bF9tZW1fZHBhX2ZldGNoLCBcIkNYTFwiKTtcbi1cbiBpbnQgY3hsX2dldF9kaXJ0eV9jb3VudChzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzLCB1MzIgKmNvdW50KVxuIHtcbiBcdHN0cnVjdCBjeGxfbWFpbGJveCAqY3hsX21ib3ggPSBcdTAwMjZtZHMtXHUwMDNlY3hsZHMuY3hsX21ib3g7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcbmluZGV4IDMzYTNkMmU3YjEzYWY5Li4yZTQ1N2IxZWJjN2RmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmNcbkBAIC01OTQsNiArNTk0LDczIEBAIGJvb2wgaXNfY3hsX21lbWRldihjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGlzX2N4bF9tZW1kZXYsIFwiQ1hMXCIpO1xuIFxuK3N0YXRpYyB2b2lkIGFkZF9wYXJ0KHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8sIHU2NCBzdGFydCwgdTY0IHNpemUsIGVudW0gY3hsX3BhcnRpdGlvbl9tb2RlIG1vZGUpXG4re1xuK1x0aW50IGkgPSBpbmZvLVx1MDAzZW5yX3BhcnRpdGlvbnM7XG4rXG4rXHRpZiAoc2l6ZSA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpbmZvLVx1MDAzZXBhcnRbaV0ucmFuZ2UgPSAoc3RydWN0IHJhbmdlKSB7XG4rXHRcdC5zdGFydCA9IHN0YXJ0LFxuK1x0XHQuZW5kID0gc3RhcnQgKyBzaXplIC0gMSxcbitcdH07XG4rXHRpbmZvLVx1MDAzZXBhcnRbaV0ubW9kZSA9IG1vZGU7XG4rXHRpbmZvLVx1MDAzZW5yX3BhcnRpdGlvbnMrKztcbit9XG4rXG4raW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzID0gXHUwMDI2bWRzLVx1MDAzZWN4bGRzO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY3hsZHMtXHUwMDNlZGV2O1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKCFjeGxkcy1cdTAwM2VtZWRpYV9yZWFkeSkge1xuK1x0XHRpbmZvLVx1MDAzZXNpemUgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGluZm8tXHUwMDNlc2l6ZSA9IG1kcy1cdTAwM2V0b3RhbF9ieXRlcztcbitcbitcdGlmIChtZHMtXHUwMDNlcGFydGl0aW9uX2FsaWduX2J5dGVzID09IDApIHtcbitcdFx0YWRkX3BhcnQoaW5mbywgMCwgbWRzLVx1MDAzZXZvbGF0aWxlX29ubHlfYnl0ZXMsIENYTF9QQVJUTU9ERV9SQU0pO1xuK1x0XHRhZGRfcGFydChpbmZvLCBtZHMtXHUwMDNldm9sYXRpbGVfb25seV9ieXRlcyxcbitcdFx0XHQgbWRzLVx1MDAzZXBlcnNpc3RlbnRfb25seV9ieXRlcywgQ1hMX1BBUlRNT0RFX1BNRU0pO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJjID0gY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8obWRzKTtcbitcdGlmIChyYykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gcXVlcnkgcGFydGl0aW9uIGluZm9ybWF0aW9uXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRhZGRfcGFydChpbmZvLCAwLCBtZHMtXHUwMDNlYWN0aXZlX3ZvbGF0aWxlX2J5dGVzLCBDWExfUEFSVE1PREVfUkFNKTtcbitcdGFkZF9wYXJ0KGluZm8sIG1kcy1cdTAwM2VhY3RpdmVfdm9sYXRpbGVfYnl0ZXMsIG1kcy1cdTAwM2VhY3RpdmVfcGVyc2lzdGVudF9ieXRlcyxcbitcdFx0IENYTF9QQVJUTU9ERV9QTUVNKTtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXCJDWExcIik7XG4rXG4rXG4rLyoqXG4rICogY3hsX3NldF9jYXBhY2l0eTogaW5pdGlhbGl6ZSBkcGEgYnkgYSBkcml2ZXIgd2l0aG91dCBhIG1haWxib3guXG4rICpcbisgKiBAY3hsZHM6IHBvaW50ZXIgdG8gY3hsX2Rldl9zdGF0ZVxuKyAqIEBjYXBhY2l0eTogZGV2aWNlIHZvbGF0aWxlIG1lbW9yeSBzaXplXG4rICovXG4raW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpXG4re1xuK1x0c3RydWN0IGN4bF9kcGFfaW5mbyByYW5nZV9pbmZvID0ge1xuK1x0XHQuc2l6ZSA9IGNhcGFjaXR5LFxuK1x0fTtcbitcbitcdGFkZF9wYXJ0KFx1MDAyNnJhbmdlX2luZm8sIDAsIGNhcGFjaXR5LCBDWExfUEFSVE1PREVfUkFNKTtcbitcdHJldHVybiBjeGxfZHBhX3NldHVwKGN4bGRzLCBcdTAwMjZyYW5nZV9pbmZvKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgXCJDWExcIik7XG4rXG4gLyoqXG4gICogc2V0X2V4Y2x1c2l2ZV9jeGxfY29tbWFuZHMoKSAtIGF0b21pY2FsbHkgZGlzYWJsZSB1c2VyIGN4bCBjb21tYW5kc1xuICAqIEBtZHM6IFRoZSBkZXZpY2Ugc3RhdGUgdG8gb3BlcmF0ZSBvblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3hsL2NvcmUvcGNpLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5pbmRleCBlNDMzOGZkN2UwMWI0Ny4uOWQ4MDdjMWEwMDJjYTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG4rKysgYi9kcml2ZXJzL2N4bC9jb3JlL3BjaS5jXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktZG9lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjeGwvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bHBjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYyBiL2RyaXZlcnMvY3hsL2NvcmUvcG9ydC5jXG5pbmRleCAxMjE1ZWU0ZjQwMzUxYi4uY2I2MzNlMTkxNTFiNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2N4bC9jb3JlL3BvcnQuY1xuKysrIGIvZHJpdmVycy9jeGwvY29yZS9wb3J0LmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWRyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGwvZWluai5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxwY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2N4bC5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY29yZS9yZWdzLmMgYi9kcml2ZXJzL2N4bC9jb3JlL3JlZ3MuY1xuaW5kZXggOTM3MTBjZjRmMGE2OTcuLjIwYzJkOWZiY2ZlN2RmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY29yZS9yZWdzLmNcbisrKyBiL2RyaXZlcnMvY3hsL2NvcmUvcmVncy5jXG5AQCAtNCw2ICs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjeGxwY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3BtdS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvY3hscGNpLmggYi9kcml2ZXJzL2N4bC9jeGxwY2kuaFxuaW5kZXggYjgyNmViNTNjZjdiYWMuLjExMGVjOWM0NGYwOWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvY3hscGNpLmhcbisrKyBiL2RyaXZlcnMvY3hsL2N4bHBjaS5oXG5AQCAtMTMsMTYgKzEzLDYgQEBcbiAgKi9cbiAjZGVmaW5lIENYTF9QQ0lfREVGQVVMVF9NQVhfVkVDVE9SUyAxNlxuIFxuLS8qIFJlZ2lzdGVyIEJsb2NrIElkZW50aWZpZXIgKFJCSSkgKi9cbi1lbnVtIGN4bF9yZWdsb2NfdHlwZSB7XG4tXHRDWExfUkVHTE9DX1JCSV9FTVBUWSA9IDAsXG4tXHRDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXG4tXHRDWExfUkVHTE9DX1JCSV9WSVJULFxuLVx0Q1hMX1JFR0xPQ19SQklfTUVNREVWLFxuLVx0Q1hMX1JFR0xPQ19SQklfUE1VLFxuLVx0Q1hMX1JFR0xPQ19SQklfVFlQRVNcbi19O1xuLVxuIC8qXG4gICogVGFibGUgQWNjZXNzIERPRSwgQ0RBVCBSZWFkIEVudHJ5IFJlc3BvbnNlXG4gICpcbkBAIC0xMTIsNiArMTAyLDQgQEAgc3RhdGljIGlubGluZSB2b2lkIGRldm1fY3hsX3BvcnRfcmFzX3NldHVwKHN0cnVjdCBjeGxfcG9ydCAqcG9ydClcbiB9XG4gI2VuZGlmXG4gXG4taW50IGN4bF9wY2lfc2V0dXBfcmVncyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBjeGxfcmVnbG9jX3R5cGUgdHlwZSxcbi1cdFx0ICAgICAgIHN0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwICptYXApO1xuICNlbmRpZiAvKiBfX0NYTF9QQ0lfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jeGwvcGNpLmMgYi9kcml2ZXJzL2N4bC9wY2kuY1xuaW5kZXggMjY3YzY3OWIwYjNjMjAuLmJiODkyZGJmZGQ2ZDZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jeGwvcGNpLmNcbisrKyBiL2RyaXZlcnMvY3hsL3BjaS5jXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3hsL21haWxib3guaFx1MDAzZVxuICNpbmNsdWRlIFwiY3hsbWVtLmhcIlxuICNpbmNsdWRlIFwiY3hscGNpLmhcIlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWdcbmluZGV4IGM0YzQzNDM0ZjMxNDM0Li45NzlmMjgwMWUyYThlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZ1xuQEAgLTY2LDYgKzY2LDE1IEBAIGNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXG4gXHQgIERyaXZlci1JbnRlcmZhY2UpIGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFsbG93aW5nIGRlYnVnZ2luZyBvZlxuIFx0ICBkcml2ZXIvZmlybXdhcmUgaW50ZXJhY3Rpb24uICBUaGUgdHJhY2luZyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5XG4gXHQgIGEgc3lzZnMgZmlsZSAnbWNkaV9sb2dnaW5nJyB1bmRlciB0aGUgUENJIGRldmljZS5cbitjb25maWcgU0ZDX0NYTFxuK1x0Ym9vbCBcIlNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgQ1hMIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBTRkMgXHUwMDI2XHUwMDI2IENYTF9CVVMgXHUwMDNlPSBTRkNcbitcdGRlZmF1bHQgU0ZDXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBTRkMgQ1hMIHN1cHBvcnQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmluZyBDWEwgZm9yXG4rXHQgIHVzaW5nIENUUElPIHdpdGggQ1hMLm1lbS4gVGhlIFNGQyBkZXZpY2Ugd2l0aCBDWEwgc3VwcG9ydCBhbmRcbitcdCAgd2l0aCBhIENYTC1hd2FyZSBmaXJtd2FyZSBjYW4gYmUgdXNlZCBmb3IgbWluaW1pemluZyBsYXRlbmNpZXNcbitcdCAgd2hlbiBzZW5kaW5nIHRocm91Z2ggQ1RQSU8uXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvS2NvbmZpZ1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlXG5pbmRleCBkOTkwMzllYzQ2OGQ2Ny4uYmIwZjE4OTFjZGU2NTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZVxuQEAgLTEzLDYgKzEzLDcgQEAgc2ZjLSQoQ09ORklHX1NGQ19TUklPVilcdCs9IHNyaW92Lm8gZWYxMF9zcmlvdi5vIGVmMTAwX3NyaW92Lm8gZWYxMDBfcmVwLm8gXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWUubyB0Yy5vIHRjX2JpbmRpbmdzLm8gdGNfY291bnRlcnMubyBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjX2VuY2FwX2FjdGlvbnMubyB0Y19jb25udHJhY2sub1xuIFxuK3NmYy0kKENPTkZJR19TRkNfQ1hMKVx0Kz0gZWZ4X2N4bC5vXG4gb2JqLSQoQ09ORklHX1NGQylcdCs9IHNmYy5vXG4gXG4gb2JqLSQoQ09ORklHX1NGQ19GQUxDT04pICs9IGZhbGNvbi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xuaW5kZXggN2UwNGYxMTViYmFhYWYuLjczYmMwNjQ5MjlmNjM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC91ZHBfdHVubmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcImVmeF9jeGwuaFwiXG4gXG4gLyogSGFyZHdhcmUgY29udHJvbCBmb3IgRUYxMCBhcmNoaXRlY3R1cmUgaW5jbHVkaW5nICdIdW50aW5ndG9uJy4gKi9cbiBcbkBAIC0xMDYsNyArMTA3LDcgQEAgc3RhdGljIGludCBlZnhfZWYxMF9nZXRfdmZfaW5kZXgoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcbiBzdGF0aWMgaW50IGVmeF9lZjEwX2luaXRfZGF0YXBhdGhfY2FwcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIHtcbi1cdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WNF9PVVRfTEVOKTtcbitcdE1DRElfREVDTEFSRV9CVUYob3V0YnVmLCBNQ19DTURfR0VUX0NBUEFCSUxJVElFU19WN19PVVRfTEVOKTtcbiBcdHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtXHUwMDNlbmljX2RhdGE7XG4gXHRzaXplX3Qgb3V0bGVuO1xuIFx0aW50IHJjO1xuQEAgLTE3Nyw2ICsxNzgsMTIgQEAgc3RhdGljIGludCBlZnhfZWYxMF9pbml0X2RhdGFwYXRoX2NhcHMoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcdFx0XHQgIGVmeC1cdTAwM2VudW1fbWFjX3N0YXRzKTtcbiBcdH1cbiBcbitcdGlmIChvdXRsZW4gXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9MRU4pXG4rXHRcdG5pY19kYXRhLVx1MDAzZWRhdGFwYXRoX2NhcHMzID0gMDtcbitcdGVsc2VcbitcdFx0bmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgPSBNQ0RJX0RXT1JEKG91dGJ1ZixcbitcdFx0XHRcdFx0XHQgICAgICBHRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9GTEFHUzMpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTExNDAsNiArMTE0Nyw5IEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0dW5zaWduZWQgaW50IGNoYW5uZWxfdmlzLCBwaW9fd3JpdGVfdmlfYmFzZSwgbWF4X3ZpcztcbiBcdHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtXHUwMDNlbmljX2RhdGE7XG4gXHR1bnNpZ25lZCBpbnQgdWNfbWVtX21hcF9zaXplLCB3Y19tZW1fbWFwX3NpemU7XG4rI2lmZGVmIENPTkZJR19TRkNfQ1hMXG4rXHRzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGE7XG4rI2VuZGlmXG4gXHR2b2lkIF9faW9tZW0gKm1lbWJhc2U7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMTI2Myw4ICsxMjczLDIzIEBAIHN0YXRpYyBpbnQgZWZ4X2VmMTBfZGltZW5zaW9uX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuIFx0aW91bm1hcChlZngtXHUwMDNlbWVtYmFzZSk7XG4gXHRlZngtXHUwMDNlbWVtYmFzZSA9IG1lbWJhc2U7XG4gXG4tXHQvKiBTZXQgdXAgdGhlIFdDIG1hcHBpbmcgaWYgbmVlZGVkICovXG4tXHRpZiAod2NfbWVtX21hcF9zaXplKSB7XG4rXHRpZiAoIXdjX21lbV9tYXBfc2l6ZSlcbitcdFx0Z290byBza2lwX3BpbztcbitcbitcdC8qIFNldCB1cCB0aGUgV0MgbWFwcGluZyAqL1xuK1xuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuK1x0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcbitcdGlmICgobmljX2RhdGEtXHUwMDNlZGF0YXBhdGhfY2FwczMgXHUwMDI2XG4rXHQgICAgKDEgXHUwMDNjXHUwMDNjIE1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTX1Y3X09VVF9DWExfQ09ORklHX0VOQUJMRV9MQk4pKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9iZV9kYXRhLVx1MDAzZWN4bF9waW9faW5pdGlhbGlzZWQpIHtcbitcdFx0LyogVXNpbmcgUElPIHRocm91Z2ggQ1hMIG1hcHBpbmcgKi9cbitcdFx0bmljX2RhdGEtXHUwMDNlcGlvX3dyaXRlX2Jhc2UgPSBwcm9iZV9kYXRhLVx1MDAzZWN4bC1cdTAwM2VjdHBpb19jeGw7XG4rXHRcdG5pY19kYXRhLVx1MDAzZXBpb193cml0ZV92aV9iYXNlID0gcGlvX3dyaXRlX3ZpX2Jhc2U7XG4rXHR9IGVsc2VcbisjZW5kaWZcbitcdHtcbitcdFx0LyogVXNpbmcgbGVnYWN5IFBJTyBCQVIgbWFwcGluZyAqL1xuIFx0XHRuaWNfZGF0YS1cdTAwM2V3Y19tZW1iYXNlID0gaW9yZW1hcF93YyhlZngtXHUwMDNlbWVtYmFzZV9waHlzICtcbiBcdFx0XHRcdFx0XHQgIHVjX21lbV9tYXBfc2l6ZSxcbiBcdFx0XHRcdFx0XHQgIHdjX21lbV9tYXBfc2l6ZSk7XG5AQCAtMTI3OSwxMiArMTMwNCwxNCBAQCBzdGF0aWMgaW50IGVmeF9lZjEwX2RpbWVuc2lvbl9yZXNvdXJjZXMoc3RydWN0IGVmeF9uaWMgKmVmeClcbiBcdFx0XHRuaWNfZGF0YS1cdTAwM2V3Y19tZW1iYXNlICtcbiBcdFx0XHQocGlvX3dyaXRlX3ZpX2Jhc2UgKiBlZngtXHUwMDNldmlfc3RyaWRlICsgRVJfRFpfVFhfUElPQlVGIC1cbiBcdFx0XHQgdWNfbWVtX21hcF9zaXplKTtcbi1cbi1cdFx0cmMgPSBlZnhfZWYxMF9saW5rX3Bpb2J1ZnMoZWZ4KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdGVmeF9lZjEwX2ZyZWVfcGlvYnVmcyhlZngpO1xuIFx0fVxuIFxuK1x0cmMgPSBlZnhfZWYxMF9saW5rX3Bpb2J1ZnMoZWZ4KTtcbitcdGlmIChyYylcbitcdFx0ZWZ4X2VmMTBfZnJlZV9waW9idWZzKGVmeCk7XG4rXG4rc2tpcF9waW86XG4rXG4gXHRuZXRpZl9kYmcoZWZ4LCBwcm9iZSwgZWZ4LVx1MDAzZW5ldF9kZXYsXG4gXHRcdCAgXCJtZW1vcnkgQkFSIGF0ICVwYSAodmlydHVhbCAlcCsleCBVQywgJXArJXggV0MpXFxuXCIsXG4gXHRcdCAgXHUwMDI2ZWZ4LVx1MDAzZW1lbWJhc2VfcGh5cywgZWZ4LVx1MDAzZW1lbWJhc2UsIHVjX21lbV9tYXBfc2l6ZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmNcbmluZGV4IDhmMTM2YTExZDM5NjhhLi4zODA2Y2QzZGQ3ZjQ4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFwic2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJzcmlvdi5oXCJcbiAjaW5jbHVkZSBcImVmeF9kZXZsaW5rLmhcIlxuKyNpbmNsdWRlIFwiZWZ4X2N4bC5oXCJcbiBcbiAjaW5jbHVkZSBcIm1jZGlfcG9ydF9jb21tb24uaFwiXG4gI2luY2x1ZGUgXCJtY2RpX3Bjb2wuaFwiXG5AQCAtOTgxLDEyICs5ODIsMTUgQEAgc3RhdGljIHZvaWQgZWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXG4gXHRlZnhfcGNpX3JlbW92ZV9tYWluKGVmeCk7XG4gXG4gXHRlZnhfZmluaV9pbyhlZngpO1xuK1xuK1x0cHJvYmVfZGF0YSA9IGNvbnRhaW5lcl9vZihlZngsIHN0cnVjdCBlZnhfcHJvYmVfZGF0YSwgZWZ4KTtcbitcdGVmeF9jeGxfZXhpdChwcm9iZV9kYXRhKTtcbitcbiBcdHBjaV9kYmcoZWZ4LVx1MDAzZXBjaV9kZXYsIFwic2h1dGRvd24gc3VjY2Vzc2Z1bFxcblwiKTtcbiBcbiBcdGVmeF9maW5pX2RldmxpbmtfYW5kX3VubG9jayhlZngpO1xuIFx0ZWZ4X2Zpbmlfc3RydWN0KGVmeCk7XG4gXHRmcmVlX25ldGRldihlZngtXHUwMDNlbmV0X2Rldik7XG4tXHRwcm9iZV9kYXRhID0gY29udGFpbmVyX29mKGVmeCwgc3RydWN0IGVmeF9wcm9iZV9kYXRhLCBlZngpO1xuIFx0a2ZyZWUocHJvYmVfZGF0YSk7XG4gfTtcbiBcbkBAIC0xMTkwLDYgKzExOTQsMTcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGZhaWwyO1xuIFxuK1x0LyogQSBzdWNjZXNzZnVsIGN4bCBpbml0aWFsaXphdGlvbiBpbXBsaWVzIGEgQ1hMIHJlZ2lvbiBjcmVhdGVkIHRvIGJlXG4rXHQgKiB1c2VkIGZvciBQSU8gYnVmZmVycy4gSWYgdGhlcmUgaXMgbm8gQ1hMIHN1cHBvcnQgbGVnYWN5IFBJTyBidWZmZXJzXG4rXHQgKiBkZWZpbmVkIGF0IHNwZWNpZmljIFBDSSBCQVIgcmVnaW9ucyB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlzIENYTFxuK1x0ICogc3VwcG9ydCBhbmQgdGhlIGN4bCBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGRyaXZlciBwcm9iZSBmYWlscy5cbitcdCAqL1xuK1x0cmMgPSBlZnhfY3hsX2luaXQocHJvYmVfZGF0YSk7XG4rXHRpZiAocmMpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkNYTCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZFxcblwiLCByYyk7XG4rXHRcdGdvdG8gZmFpbDM7XG4rXHR9XG4rXG4gXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xuIFx0aWYgKHJjKSB7XG4gXHRcdC8qIE9uIGZhaWx1cmUsIHJldHJ5IG9uY2UgaW1tZWRpYXRlbHkuXG5AQCAtMTIyOCw2ICsxMjQzLDcgQEAgc3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxuIFx0cmV0dXJuIDA7XG4gXG4gIGZhaWwzOlxuK1x0ZWZ4X2N4bF9leGl0KHByb2JlX2RhdGEpO1xuIFx0ZWZ4X2ZpbmlfaW8oZWZ4KTtcbiAgZmFpbDI6XG4gXHRlZnhfZmluaV9zdHJ1Y3QoZWZ4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDhkNzQwNGNkN2FhZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuY1xuQEAgLTAsMCArMSwxMDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKlxuKyAqIERyaXZlciBmb3IgQU1EIG5ldHdvcmsgY29udHJvbGxlcnMgYW5kIGJvYXJkc1xuKyAqIENvcHlyaWdodCAoQykgMjAyNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjY3hsL2N4bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjY3hsL3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXCJuZXRfZHJpdmVyLmhcIlxuKyNpbmNsdWRlIFwiZWZ4X2N4bC5oXCJcbitcbisjZGVmaW5lIEVGWF9DVFBJT19CVUZGRVJfU0laRVx0U1pfMjU2TVxuK1xuK2ludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxuK3tcbitcdHN0cnVjdCBlZnhfbmljICplZnggPSBcdTAwMjZwcm9iZV9kYXRhLVx1MDAzZWVmeDtcbitcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gZWZ4LVx1MDAzZXBjaV9kZXY7XG4rXHRzdHJ1Y3QgcmFuZ2UgY3hsX3Bpb19yYW5nZTtcbitcdHN0cnVjdCBlZnhfY3hsICpjeGw7XG4rXHR1MTYgZHZzZWM7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBJcyB0aGUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBhbmQgdXNpbmcgQ1hMPyAqL1xuK1x0aWYgKCFwY2llX2lzX2N4bChwY2lfZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkdnNlYyA9IHBjaV9maW5kX2R2c2VjX2NhcGFiaWxpdHkocGNpX2RldiwgUENJX1ZFTkRPUl9JRF9DWEwsXG4rXHRcdFx0XHRcdCAgUENJX0RWU0VDX0NYTF9ERVZJQ0UpO1xuK1x0aWYgKCFkdnNlYykge1xuK1x0XHRwY2lfaW5mbyhwY2lfZGV2LCBcIkNYTF9EVlNFQ19QQ0lFX0RFVklDRSBjYXBhYmlsaXR5IG5vdCBmb3VuZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRwY2lfZGJnKHBjaV9kZXYsIFwiQ1hMX0RWU0VDX1BDSUVfREVWSUNFIGNhcGFiaWxpdHkgZm91bmRcXG5cIik7XG4rXG4rXHQvKiBDcmVhdGUgYSBjeGxfZGV2X3N0YXRlIGVtYmVkZGVkIGluIHRoZSBjeGwgc3RydWN0IHVzaW5nIGN4bCBjb3JlIGFwaVxuK1x0ICogc3BlY2lmeWluZyBubyBtYm94IGF2YWlsYWJsZS5cbitcdCAqL1xuK1x0Y3hsID0gZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShcdTAwMjZwY2lfZGV2LVx1MDAzZWRldiwgQ1hMX0RFVlRZUEVfREVWTUVNLFxuK1x0XHRcdFx0XHRwY2lfZ2V0X2RzbihwY2lfZGV2KSwgZHZzZWMsXG4rXHRcdFx0XHRcdHN0cnVjdCBlZnhfY3hsLCBjeGxkcywgZmFsc2UpO1xuK1xuK1x0aWYgKCFjeGwpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmMgPSBjeGxfcGNpX3NldHVwX3JlZ3MocGNpX2RldiwgQ1hMX1JFR0xPQ19SQklfQ09NUE9ORU5ULFxuK1x0XHRcdFx0XHUwMDI2Y3hsLVx1MDAzZWN4bGRzLnJlZ19tYXApO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHBjaV9lcnIocGNpX2RldiwgXCJObyBjb21wb25lbnQgcmVnaXN0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRpZiAoIWN4bC1cdTAwM2VjeGxkcy5yZWdfbWFwLmNvbXBvbmVudF9tYXAuaGRtX2RlY29kZXIudmFsaWQpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkV4cGVjdGVkIEhETSBjb21wb25lbnQgcmVnaXN0ZXIgbm90IGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdGlmICghY3hsLVx1MDAzZWN4bGRzLnJlZ19tYXAuY29tcG9uZW50X21hcC5yYXMudmFsaWQpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkV4cGVjdGVkIFJBUyBjb21wb25lbnQgcmVnaXN0ZXIgbm90IGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdC8qIFNldCBtZWRpYSByZWFkeSBleHBsaWNpdGx5IGFzIHRoZXJlIGFyZSBuZWl0aGVyIG1haWxib3ggZm9yIGNoZWNraW5nXG4rXHQgKiB0aGlzIHN0YXRlIG5vciB0aGUgQ1hMIHJlZ2lzdGVyIGludm9sdmVkLCBib3RoIG5vdCBtYW5kYXRvcnkgZm9yXG4rXHQgKiB0eXBlMi5cbitcdCAqL1xuK1x0Y3hsLVx1MDAzZWN4bGRzLm1lZGlhX3JlYWR5ID0gdHJ1ZTtcbitcbitcdGlmIChjeGxfc2V0X2NhcGFjaXR5KFx1MDAyNmN4bC1cdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xuK1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwiZHBhIGNhcGFjaXR5IHNldHVwIGZhaWxlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRjeGwtXHUwMDNlY3hsbWQgPSBkZXZtX2N4bF9wcm9iZV9tZW0oXHUwMDI2Y3hsLVx1MDAzZWN4bGRzLCBcdTAwMjZjeGxfcGlvX3JhbmdlKTtcbitcdGlmIChJU19FUlIoY3hsLVx1MDAzZWN4bG1kKSkge1xuK1x0XHRwY2lfZXJyKHBjaV9kZXYsIFwiQ1hMIGFjY2VsIG1lbWRldiBjcmVhdGlvbiBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiBQVFJfRVJSKGN4bC1cdTAwM2VjeGxtZCk7XG4rXHR9XG4rXG4rXHRjeGwtXHUwMDNlY3RwaW9fY3hsID0gaW9yZW1hcF93YyhjeGxfcGlvX3JhbmdlLnN0YXJ0LFxuK1x0XHRcdFx0ICAgIHJhbmdlX2xlbihcdTAwMjZjeGxfcGlvX3JhbmdlKSk7XG4rXHRpZiAoIWN4bC1cdTAwM2VjdHBpb19jeGwpIHtcbitcdFx0cGNpX2VycihwY2lfZGV2LCBcIkNYTCBpb3JlbWFwIHJlZ2lvbiAoJXByYSkgZmFpbGVkXFxuXCIsXG4rXHRcdFx0XHUwMDI2Y3hsX3Bpb19yYW5nZSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cHJvYmVfZGF0YS1cdTAwM2VjeGxfcGlvX2luaXRpYWxpc2VkID0gdHJ1ZTtcbitcdHByb2JlX2RhdGEtXHUwMDNlY3hsID0gY3hsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcbit7XG4rXHRpZiAoIXByb2JlX2RhdGEtXHUwMDNlY3hsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpb3VubWFwKHByb2JlX2RhdGEtXHUwMDNlY3hsLVx1MDAzZWN0cGlvX2N4bCk7XG4rfVxuK1xuK01PRFVMRV9JTVBPUlRfTlMoXCJDWExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2UyNzA1Y2IwNjNmNmFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmhcbkBAIC0wLDAgKzEsMzIgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKiBEcml2ZXIgZm9yIEFNRCBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBib2FyZHNcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cbisgKlxuKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkXG4rICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuXG4rICovXG4rXG4rI2lmbmRlZiBFRlhfQ1hMX0hcbisjZGVmaW5lIEVGWF9DWExfSFxuK1xuKyNpZmRlZiBDT05GSUdfU0ZDX0NYTFxuK1xuKyNpbmNsdWRlIFx1MDAzY2N4bC9jeGwuaFx1MDAzZVxuK1xuK3N0cnVjdCBlZnhfcHJvYmVfZGF0YTtcbitcbitzdHJ1Y3QgZWZ4X2N4bCB7XG4rXHRzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSBjeGxkcztcbitcdHN0cnVjdCBjeGxfbWVtZGV2ICpjeGxtZDtcbitcdHZvaWQgX19pb21lbSAqY3RwaW9fY3hsO1xuK307XG4rXG4raW50IGVmeF9jeGxfaW5pdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpO1xuK3ZvaWQgZWZ4X2N4bF9leGl0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKSB7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVmeF9jeGxfZXhpdChzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgKnByb2JlX2RhdGEpIHt9XG4rI2VuZGlmXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcbmluZGV4IGI5OGMyNTlmNjcyZGI1Li4zOTY0YjJjNTY2MDljNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uZXRfZHJpdmVyLmhcbkBAIC0xMTk3LDE0ICsxMTk3LDI0IEBAIHN0cnVjdCBlZnhfbmljIHtcbiBcdGF0b21pY190IG5fcnhfbm9za2JfZHJvcHM7XG4gfTtcbiBcbisjaWZkZWYgQ09ORklHX1NGQ19DWExcbitzdHJ1Y3QgZWZ4X2N4bDtcbisjZW5kaWZcbitcbiAvKipcbiAgKiBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEgLSBTdGF0ZSBhZnRlciBoYXJkd2FyZSBwcm9iZVxuICAqIEBwY2lfZGV2OiBUaGUgUENJIGRldmljZVxuICAqIEBlZng6IEVmeCBOSUMgZGV0YWlsc1xuKyAqIEBjeGw6IGRldGFpbHMgb2YgcmVsYXRlZCBjeGwgb2JqZWN0c1xuKyAqIEBjeGxfcGlvX2luaXRpYWxpc2VkOiBjeGwgaW5pdGlhbGl6YXRpb24gb3V0Y29tZS5cbiAgKi9cbiBzdHJ1Y3QgZWZ4X3Byb2JlX2RhdGEge1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgZWZ4X25pYyBlZng7XG4rI2lmZGVmIENPTkZJR19TRkNfQ1hMXG4rXHRzdHJ1Y3QgZWZ4X2N4bCAqY3hsO1xuK1x0Ym9vbCBjeGxfcGlvX2luaXRpYWxpc2VkO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZWZ4X25pYyAqZWZ4X25ldGRldl9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oXG5pbmRleCBlYzNiMmRmNDNiNjhkOS4uNzQ4MGY5OTk1ZGZiOGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaFxuQEAgLTE1Miw2ICsxNTIsOCBAQCBlbnVtIHtcbiAgKlx0JU1DX0NNRF9HRVRfQ0FQQUJJTElUSUVTIHJlc3BvbnNlKVxuICAqIEBkYXRhcGF0aF9jYXBzMjogRnVydGhlciBDYXBhYmlsaXRpZXMgb2YgZGF0YXBhdGggZmlybXdhcmUgKEZMQUdTMiBmaWVsZCBvZlxuICAqICVNQ19DTURfR0VUX0NBUEFCSUxJVElFUyByZXNwb25zZSlcbisgKiBAZGF0YXBhdGhfY2FwczM6IEZ1cnRoZXIgQ2FwYWJpbGl0aWVzIG9mIGRhdGFwYXRoIGZpcm13YXJlIChGTEFHUzMgZmllbGQgb2ZcbisgKiAlTUNfQ01EX0dFVF9DQVBBQklMSVRJRVMgcmVzcG9uc2UpXG4gICogQHJ4X2RwY3B1X2Z3X2lkOiBGaXJtd2FyZSBJRCBvZiB0aGUgUnhEUENQVVxuICAqIEB0eF9kcGNwdV9md19pZDogRmlybXdhcmUgSUQgb2YgdGhlIFR4RFBDUFVcbiAgKiBAbXVzdF9wcm9iZV92c3dpdGNoaW5nOiBGbGFnOiB2c3dpdGNoaW5nIGhhcyB5ZXQgdG8gYmUgc2V0dXAgYWZ0ZXIgTUMgcmVib290XG5AQCAtMTg3LDYgKzE4OSw3IEBAIHN0cnVjdCBlZnhfZWYxMF9uaWNfZGF0YSB7XG4gXHRib29sIG11c3RfY2hlY2tfZGF0YXBhdGhfY2FwcztcbiBcdHUzMiBkYXRhcGF0aF9jYXBzO1xuIFx0dTMyIGRhdGFwYXRoX2NhcHMyO1xuK1x0dTMyIGRhdGFwYXRoX2NhcHMzO1xuIFx0dW5zaWduZWQgaW50IHJ4X2RwY3B1X2Z3X2lkO1xuIFx0dW5zaWduZWQgaW50IHR4X2RwY3B1X2Z3X2lkO1xuIFx0Ym9vbCBtdXN0X3Byb2JlX3Zzd2l0Y2hpbmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jeGwvY3hsLmggYi9pbmNsdWRlL2N4bC9jeGwuaFxuaW5kZXggMDE2Yzc0ZmI3NDdjZjYuLjgwMmIxNDNkZTgzZGI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9jeGwvY3hsLmhcbisrKyBiL2luY2x1ZGUvY3hsL2N4bC5oXG5AQCAtMjI2LDQgKzIyNiw2IEBAIHN0cnVjdCBjeGxfZGV2X3N0YXRlICpfZGV2bV9jeGxfZGV2X3N0YXRlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gc3RydWN0IGN4bF9tZW1kZXYgKmRldm1fY3hsX3Byb2JlX21lbShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgcmFuZ2UgKnJhbmdlKTtcbitcbitpbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSk7XG4gI2VuZGlmIC8qIF9fQ1hMX0NYTF9IX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2N4bC9wY2kuaCBiL2luY2x1ZGUvY3hsL3BjaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlMDAwMDAxNTg3MWEyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2N4bC9wY2kuaFxuQEAgLTAsMCArMSwyMiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbitcbisjaWZuZGVmIF9fQ1hMX0NYTF9QQ0lfSF9fXG4rI2RlZmluZSBfX0NYTF9DWExfUENJX0hfX1xuK1xuKy8qIFJlZ2lzdGVyIEJsb2NrIElkZW50aWZpZXIgKFJCSSkgKi9cbitlbnVtIGN4bF9yZWdsb2NfdHlwZSB7XG4rXHRDWExfUkVHTE9DX1JCSV9FTVBUWSA9IDAsXG4rXHRDWExfUkVHTE9DX1JCSV9DT01QT05FTlQsXG4rXHRDWExfUkVHTE9DX1JCSV9WSVJULFxuK1x0Q1hMX1JFR0xPQ19SQklfTUVNREVWLFxuK1x0Q1hMX1JFR0xPQ19SQklfUE1VLFxuK1x0Q1hMX1JFR0xPQ19SQklfVFlQRVNcbit9O1xuK1xuK3N0cnVjdCBjeGxfcmVnaXN0ZXJfbWFwO1xuK3N0cnVjdCBwY2lfZGV2O1xuK1xuK2ludCBjeGxfcGNpX3NldHVwX3JlZ3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gY3hsX3JlZ2xvY190eXBlIHR5cGUsXG4rXHRcdCAgICAgICBzdHJ1Y3QgY3hsX3JlZ2lzdGVyX21hcCAqbWFwKTtcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQyOjU0LjM4MDQ2MjczNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODExOTAwNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFNGQzkxMDAgd2l0aCBDWEwgU3VwcG9ydCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBDWEwgc3VwcG9ydCB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwIG5ldHdvcmsgZHJpdmVyLCBpbnRyb2R1Y2luZyBgQ09ORklHX1NGQ19DWExgLiBJdCBtb2RpZmllcyBzb21lIGNvcmUgQ1hMIGZpbGVzLCB3aGljaCBpcyBpbnRlcmVzdGluZywgZXhwb3J0aW5nIHNvbWUgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gZnV6eiB0aGlzPyBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFjaGFibGUuXG5cblRoZSBTRkMgZHJpdmVyIGlzIGEgUENJIG5ldHdvcmsgZHJpdmVyLiBQQ0kgZHJpdmVycyAqc2hvdWxkKiBiZSBmdXp6YWJsZSwgcmlnaHQ/IFN5emthbGxlciBjYW4gZG8gcHNldWRvLVBDSSBkZXZpY2VzIG9yIFZGSU8gaWYgaXQncyBzdXBwb3J0ZWQuIEJ1dCBJIHJlbWVtYmVyIHRoZXJlJ3Mgbm8gbWFnaWMgXCJnZW5lcmljXCIgUENJIGZ1enplciB0aGF0ICpqdXN0IHdvcmtzKiB1bmxlc3Mgc3BlY2lmaWNhbGx5IHRhcmdldGVkLiBJdCdzIHVzdWFsbHkgZGVwZW5kZW50IG9uIHNwZWNpYWwgc3VwcG9ydCBvciBpZiBpdCdzIFVTQiBvciB2aXJ0dWFsLiBUaGUgcHJvbXB0IHJlbWluZHMgbWUgb2YgdGhlIGxpbWl0YXRpb25zOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIi5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIHRoZSBTRkM5MTAwPyBObywgdGhhdCdzIGEgZGVhZCBlbmQuIFFFTVUgaGFuZGxlcyB0aGUgdXN1YWwgc3VzcGVjdHMgYnV0IG5vdCB0aGUgU0ZDOTEwMCwgc28gYGVmeF9wY2lfcHJvYmVgIGlzbid0IGdvaW5nIHRvIGJlIGNhbGxlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFNvIHRoYXQgbWVhbnMgbm8gcHJvYmUsIG5vIGZ1enouXG5cbkknbSByYWNraW5nIG15IGJyYWluLiBTeXprYWxsZXIuLi4gZG9lcyBpdCBoYXZlIHNvbWUgbWFnaWMgYHN5el9wY2lfZGV2aWNlYCBmdW5jdGlvbiB0aGF0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2U/IEkga25vdyBhYm91dCBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgZm9yIFBDSSBkZXZpY2VzPyBEb2VzIGl0IHVzZSBgdmhjaWAgZm9yIFBDST8gT3IsIERvZXMgc3l6a2FsbGVyIGhhdmUgYSBnZW5lcmFsIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsIHRoYXQgY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzPyBObyEgV2FpdCwgYWN0dWFsbHksIEkgcmVjYWxsIHRoYXQgc3l6a2FsbGVyIHVzZXMgYHZmaW9gIG9yIHJlbGllcyBvbiBRRU1VLCBzbyB0aGF0J3MgdGhlIG9ubHkgcmVhbCBvcHRpb24uIE5vLCBTeXprYWxsZXIgZG9lcyBoYXZlIGEgYHZoY2lgIGZvciBVU0IsIGJ1dCB0aGF0IHdvbid0IHdvcmsgaGVyZS5cblxuTGV0IG1lIHNlZSBpZiBJIGNhbiBmaW5kIHNvbWUgUENJIGVtdWxhdGlvbiB3aXRoaW4gU3l6a2FsbGVyLiBJdCBsb29rcyBsaWtlIGl0IGRvZXMgaGF2ZSBzdHVmZiBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgLiBPaCwgd2FpdCwgZGlkIHRoZXkgcmVjZW50bHkgYWRkIHNvbWV0aGluZyB3aXRoIGB2ZmlvYCBvciBhIGR1bW15IFBDSSBjb250cm9sbGVyPyBObywgU3l6a2FsbGVyIHN0aWxsIHVzZXMgYHFlbXVgIHdpdGggdGhlIHN0YW5kYXJkIGRldmljZXMuXG5cblRoaXMgZHJpdmVyIGlzbid0IHJlYWNoYWJsZSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCB0aGF0IG1ha2VzIGZ1enppbmcgYSB3YXN0ZSBvZiB0aW1lLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcm9iZSBgc2ZjYCB0byBldmVuIHN0YXJ0LiBJcyB0aGVyZSBhIHZpcnR1YWwgZGV2aWNlIGZvciB0aGlzPyBObywgdGhhdCdzIG5vdCB0aGUgY2FzZS4gSSB3b3VsZCBjaGVjayBzeXprYWxsZXIgZm9yIGBzZmNgIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBzb3VyY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlLiBOb3JtYWxseSBQQ0kgZHJpdmVycyByZXF1aXJlIGEgbWF0Y2hpbmcgdmVuZG9yL2RldmljZSBJRCBmcm9tIGEgcmVhbCBQQ0kgZGV2aWNlLiBXaXRob3V0IFFFTVUgZW11bGF0aW9uLCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLlxuXG5Pa2F5LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGhpbmc6IGlzIHRoZXJlICphbnkqIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgU0ZDIGluIHRoZSBrZXJuZWw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6MDcuMTkyMzcyMzk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mzc5MjkwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0ZDOTEwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjIwOlxcdHRyaXN0YXRlIFxcXCJTb2xhcmZsYXJlIFNGQzkxMDAvRUYxMDAtZmFtaWx5IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI3LVxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgMTAvNDAtZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcyBiYXNlZCBvblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI4OlxcdCAgdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgY29udHJvbGxlcnMuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz0zNT1jb25maWcgU0ZDX01URFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjM2OlxcdGJvb2wgXFxcIlNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkgTVREIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMzctXFx0ZGVwZW5kcyBvbiBTRkMgXFx1MDAyNlxcdTAwMjYgTVREIFxcdTAwMjZcXHUwMDI2ICEoU0ZDPXkgXFx1MDAyNlxcdTAwMjYgTVREPW0pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz00ND1jb25maWcgU0ZDX01DRElfTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6NDU6XFx0Ym9vbCBcXFwiU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBod21vbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTQ2LVxcdGRlcGVuZHMgb24gU0ZDIFxcdTAwMjZcXHUwMDI2IEhXTU9OIFxcdTAwMjZcXHUwMDI2ICEoU0ZDPXkgXFx1MDAyNlxcdTAwMjYgSFdNT049bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTUxPWNvbmZpZyBTRkNfU1JJT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzo1MjpcXHRib29sIFxcXCJTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IFNSLUlPViBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTUzLVxcdGRlcGVuZHMgb24gU0ZDIFxcdTAwMjZcXHUwMDI2IFBDSV9JT1ZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTYwPWNvbmZpZyBTRkNfTUNESV9MT0dHSU5HXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc6NjE6XFx0Ym9vbCBcXFwiU29sYXJmbGFyZSBTRkM5MTAwLWZhbWlseSBNQ0RJIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy02Mi1cXHRkZXBlbmRzIG9uIFNGQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9Njk9Y29uZmlnIFNGQ19DWExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzo3MDpcXHRib29sIFxcXCJTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IENYTCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gU0ZDIFxcdTAwMjZcXHUwMDI2IENYTF9CVVMgXFx1MDAzZT0gU0ZDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmg9MjY9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbmljLmgtMTI0LS8qIE1heGltdW0gbnVtYmVyIG9mIFRYIFBJTyBidWZmZXJzIHdlIG1heSBhbGxvY2F0ZSB0byBhIGZ1bmN0aW9uLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9uaWMuaDoxMjU6ICogVGhpcyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVycyBvbiBlYWNoIFNGQzkxMDAtZmFtaWx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL25pYy5oLTEyNi0gKiBjb250cm9sbGVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0MzoxMi4xMzAzMTMzMDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk3NzYwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZYIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNvbGFyZmxhcmUgU0ZDOTEwMC9FRjEwMC1mYW1pbHkgZHJpdmVyLCBhbmQgaXQncyBjbGVhciB0aGUgcHJpbWFyeSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSdzIG5vIGtlcm5lbC1sZXZlbCBlbXVsYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIFFFTVUgZG9lc24ndCBzZWVtIHRvIGhhdmUgaXRzIG93bi4gVGhpcyBtZWFucyB0aGUgYGVmeF9wY2lfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLCB3aWxsIG5ldmVyIGdldCB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGF0IG11Y2ggaXMgb2J2aW91cy5cblxuQnV0IHdhaXQsIGhvbGQgb24uIFRoZSBwYXRjaCBtZW50aW9ucyBDWEwgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgU0ZDIGRyaXZlci4gTm93LCAqdGhhdCogY29tcGxpY2F0ZXMgdGhpbmdzLiBEb2VzIFFFTVUgZXZlbiBlbXVsYXRlIENYTD8gWWVzLCBpdCBkb2VzISBRRU1VIGhhcyBhZGRlZCBzb21lIENYTCBlbXVsYXRpb24sIGZvY3VzaW5nIG9uLCBmb3IgaW5zdGFuY2UsIENYTCB0eXBlIDMgZGV2aWNlcy4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBhIFNvbGFyZmxhcmUgTklDICp3aXRoKiBDWEw/IEFuZCB0aGUgYW5zd2VyLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXMgbm8uIFNvLCB0aGUgb3JpZ2luYWwgcHJvYmxlbSByZW1haW5zOyB0aGUgZHJpdmVyJ3MgcHJvYmUgaXNuJ3QgZ2V0dGluZyBjYWxsZWQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjay4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZSBzb3J0IG9mIG1hZ2ljPyBNYXliZSBpdCBoYXMgYSBgc3l6X3BjaV9kZXZpY2VgIG9yIHNpbWlsYXI/IERvZXMgdGhhdCBnaXZlIHVzIGFuIGFsdGVybmF0aXZlIHJvdXRlIGluPyBBaCwgbm8sIGl0J3Mgbm90IHRoYXQgc2ltcGxlLiBTeXprYWxsZXIgZG9lc24ndCBwcm92aWRlIGEgd2F5IHRvIGZ1enogZW50aXJlbHkgYXJiaXRyYXJ5IFBDSSBkcml2ZXJzIHVubGVzcyB0aGV5IGhhdmUgYXNzb2NpYXRlZCB2aXJ0dWFsIGRldmljZXMuIEV4YW1wbGVzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWAsIGB2a21zYCwgb3IgYHNuZC1kdW1teWAsIG9yIGlmIGl0IGNhbiBpbmplY3QgZGV2aWNlcyBpbnRvIHRoZSBzeXN0ZW0uXG5cbkFoYSEgV2FpdCwgbXkgbWVtb3J5IHNlcnZlcyBtZSB3ZWxsLiBUaGVyZSAqaXMqIGEgUENJIGZ1enppbmcgc3Vic3lzdGVtIGluIHN5emthbGxlci4gSSd2ZSBzZWVuIGl0ISBTeXprYWxsZXIgaGFzIHRoZSBgc3l6X3BjaV9kZXZpY2VgIG1lY2hhbmlzbSEgVGhhdCBhbGxvd3Mgc3l6a2FsbGVyIHRvIGFjdHVhbGx5IGVtdWxhdGUgUENJIGRldmljZXMhIE5vdywgdGhpcyBpcyBwcm9taXNpbmcuIFdlIG1pZ2h0IGhhdmUgYSB3YXkgaW4gYWZ0ZXIgYWxsLiBSaWdodCwgc28gbm93IHRoZSBrZXkgcXVlc3Rpb246IERvZXMgYHN5el9wY2lfZGV2aWNlYCBleGlzdCBpbiB0aGUga2VybmVsPyBUaW1lIHRvIGdvIGh1bnRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzgyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQzOjE4LjUyODA3NzY2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1MTQ1ODEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfcGNpX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQzOjIxLjE2MzIzNzc2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzEwMjU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIFNGQyBEZXZpY2UgRW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoaXMgYHNmY2AgZGV2aWNlIHRocm91Z2ggc3l6a2FsbGVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBzeXpfcGNpX2RldmljZWAsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCdzIG5vdCBhY3R1YWxseSBpbiB0aGUga2VybmVsIGl0c2VsZjsgaXQncyBhIHN5emthbGxlciBjb25zdHJ1Y3QuIEFuZCBzeXprYWxsZXIgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIGFyYml0cmFyeSBQQ0kgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBzcGFjZSwgaXQgdXNlcyBRRU1VIG9yIHJlbGllcyBvbiBleGlzdGluZyBrZXJuZWwgbW9kdWxlcy4gU28sIGlmIHRoZXJlIGlzbid0IGEga2VybmVsIG1vZHVsZSB0byBzdGFuZCBpbiBmb3IgdGhlIFNGQyBkZXZpY2UsIEknbSBvdXQgb2YgbHVjay4gSXQncyBub3QgcmVhY2hhYmxlIGRpcmVjdGx5LlxuXG5BbHJpZ2h0LCBhIG5ldyBwbGFuLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBpbnRlcmFjdCB3aXRoIGBlZnhfY3hsX2luaXRgIG9yIGBjeGxfc2V0X2NhcGFjaXR5YC4gTGV0J3Mgc2VlLi4uIEFoLCBgY3hsX3NldF9jYXBhY2l0eWAgaXMgZXhwb3J0ZWQsIGFuZCBgZWZ4X2N4bF9pbml0YCBtYWtlcyB1c2Ugb2YgaXQuIFRoYXTigJlzIHByb21pc2luZy4gTG9va2luZyBmdXJ0aGVyLCBgZWZ4X2N4bF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgZWZ4X3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGBzZmNgIGRyaXZlci4gU28sIEkgaGF2ZSBhIHBhdGggaGVyZSEgTm93IEkgbmVlZCB0byBjaGVjayB0aGUgUENJIElEcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBzZmNgIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6MjYuMjM0MjY4NTM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjM3OTY4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWZ4X3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTEwMDE9c3RhdGljIHZvaWQgZWZ4X3Byb2JlX3ZwZF9zdHJpbmdzKHN0cnVjdCBlZnhfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTAzNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTAzNTpzdGF0aWMgaW50IGVmeF9wY2lfcHJvYmVfbWFpbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxMDg2OnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9wb3N0X2lvKHN0cnVjdCBlZnhfbmljICplZngpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEwODcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDg4LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gZWZ4LVxcdTAwM2VuZXRfZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxMDg5OlxcdGludCByYyA9IGVmeF9wY2lfcHJvYmVfbWFpbihlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMDkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTExNTItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjExNTM6c3RhdGljIGludCBlZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMTU0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50cnkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMtMTIwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTIwODpcXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjA5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMTMtXFx0XFx0ZWZ4LVxcdTAwM2VyZXNldF9wZW5kaW5nID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTIxNDpcXHRcXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjE1LVxcdFxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTEyMjMtXFx0XFx0XFx0ZWZ4LVxcdTAwM2VyZXNldF9wZW5kaW5nID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTIyNDpcXHRcXHRcXHRyYyA9IGVmeF9wY2lfcHJvYmVfcG9zdF9pbyhlZngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xMjI1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYz0xNDA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlZnhfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xNDEwLVxcdC5pZF90YWJsZVxcdD0gZWZ4X3BjaV90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMTpcXHQucHJvYmVcXHRcXHQ9IGVmeF9wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTE0MTItXFx0LnJlbW92ZVxcdFxcdD0gZWZ4X3BjaV9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9ODk2PXN0YXRpYyB2b2lkIGVmeF9wcm9iZV92cGRfc3RyaW5ncyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTkyOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6OTMwOnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZV9tYWluKHN0cnVjdCBlZnhfbmljICplZngpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTkzMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo5ODE6c3RhdGljIGludCBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oc3RydWN0IGVmeF9uaWMgKmVmeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtOTgzLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gZWZ4LVxcdTAwM2VuZXRfZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzo5ODQ6XFx0aW50IHJjID0gZWZ4X3BjaV9wcm9iZV9tYWluKGVmeCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTk4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDQxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzoxMDQyOnN0YXRpYyBpbnQgZWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA0My1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEwNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwNzY6XFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA3Ny1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDgxLVxcdFxcdGVmeC1cXHUwMDNlcmVzZXRfcGVuZGluZyA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwODI6XFx0XFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA4My1cXHRcXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMDkxLVxcdFxcdFxcdGVmeC1cXHUwMDNlcmVzZXRfcGVuZGluZyA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEwOTI6XFx0XFx0XFx0cmMgPSBlZnhfcGNpX3Byb2JlX3Bvc3RfaW8oZWZ4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTA5My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM9MTI3Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWZ4X3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtMTI3NS1cXHQuaWRfdGFibGVcXHQ9IGVmeF9wY2lfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jOjEyNzY6XFx0LnByb2JlXFx0XFx0PSBlZnhfcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc3LVxcdC5yZW1vdmVcXHRcXHQ9IGVmeF9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0MzoyOS4yNTgwODI1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mjc5Njc3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgU0ZDIERyaXZlciBhbmQgRXhwbG9yaW5nIENYTCBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gU3l6a2FsbGVyIGNhbid0IGRpcmVjdGx5IHRhcmdldCB0aGUgYHNmY2AgZHJpdmVyLiBUaGUgZnJ1c3RyYXRpbmcgdGhpbmcgaXMsIGl0IG5lZWRzIHRoYXQgc3BlY2lmaWMgUENJIGhhcmR3YXJlLCBhbmQgd2UgZG9uJ3QgaGF2ZSBnb29kIGVtdWxhdGlvbi4gQnV0IGhvbGQgb24uLi4gbGV0J3Mgc2hpZnQgZ2VhcnMuIFdoYXQgYWJvdXQgZXhwbG9yaW5nIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBDWEwgc3Vic3lzdGVtPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBjeGxfc2V0X2NhcGFjaXR5YCBhbmQgYGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvYC4gQXJlIHRoZXkgcmVhY2hhYmxlIGFuZCB3b3J0aCBpbnZlc3RpZ2F0aW5nP1xuXG5gY3hsX3NldF9jYXBhY2l0eWAsIGFzIEkgcmVjYWxsLCBpcyBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZGl0aW9uLCByZXNpZGluZyBpbiBgZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuY2AuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHVzYWdlLiBUaGUgY3JpdGljYWwgc3RlcCBub3cgaXMgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgYW5kIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIElmIHdlIGNhbiByZWFjaCB0aGF0LCBpdCBtaWdodCBiZSBhIG5ldyBwbGFjZSB0byBhdHRhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODA1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6MzMuODg2MDU0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MDM3ODcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGxfc2V0X2NhcGFjaXR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTY0ND1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2RwYV9mZXRjaCwgXFxcIkNYTFxcXCIpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDctLyoqXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYzo2NDg6ICogY3hsX3NldF9jYXBhY2l0eTogaW5pdGlhbGl6ZSBkcGEgYnkgYSBkcml2ZXIgd2l0aG91dCBhIG1haWxib3guXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NDktICpcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjUyLSAqL1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjUzOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjU0LXtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYxLX1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jOjY2MjpFWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfc2V0X2NhcGFjaXR5LCBcXFwiQ1hMXFxcIik7XFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02NjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jPTE3PWludCBlZnhfY3hsX2luaXQoc3RydWN0IGVmeF9wcm9iZV9kYXRhICpwcm9iZV9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYy03MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4X2N4bC5jOjcyOlxcdGlmIChjeGxfc2V0X2NhcGFjaXR5KFxcdTAwMjZjeGwtXFx1MDAzZWN4bGRzLCBFRlhfQ1RQSU9fQlVGRkVSX1NJWkUpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYy03My1cXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJkcGEgY2FwYWNpdHkgc2V0dXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4tLVxcbmluY2x1ZGUvY3hsL2N4bC5oPTIyNz1zdHJ1Y3QgY3hsX21lbWRldiAqZGV2bV9jeGxfcHJvYmVfbWVtKHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcyxcXG4tLVxcbmluY2x1ZGUvY3hsL2N4bC5oLTIyOS1cXG5pbmNsdWRlL2N4bC9jeGwuaDoyMzA6aW50IGN4bF9zZXRfY2FwYWNpdHkoc3RydWN0IGN4bF9kZXZfc3RhdGUgKmN4bGRzLCB1NjQgY2FwYWNpdHkpO1xcbmluY2x1ZGUvY3hsL2N4bC5oLTIzMS0jZW5kaWYgLyogX19DWExfQ1hMX0hfXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0MzozOC42NTY0NDUwNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4ODgzNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTeW1ib2wgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgc3ltYm9sLCBhbmQgbXkgaW5pdGlhbCBzY2FuIHN1Z2dlc3RzIGl0J3Mgb25seSBiZWluZyB1c2VkIHdpdGhpbiBgZWZ4X2N4bC5jYC4gVGhhdCdzIGEgcHJldHR5IGxpbWl0ZWQgc2NvcGUsIHdoaWNoIGdlbmVyYWxseSBzaW1wbGlmaWVzIHRoaW5ncywgYnV0IEkgbmVlZCB0byBiZSBwcmVjaXNlLiBPbmUgdGhpbmcgdGhhdCBhbHdheXMgc3ByaW5ncyB0byBtaW5kIGluIHRoZXNlIGtpbmRzIG9mIGludmVzdGlnYXRpb25zIGlzIHRvIGJlIGV4aGF1c3RpdmUgaW4gY3Jvc3MtcmVmZXJlbmNpbmcgYW5kIHZlcmlmaWNhdGlvbi5cblxuSG93ZXZlciwgYSBuYWdnaW5nIHF1ZXN0aW9uIGlzIGFscmVhZHkgYnViYmxpbmcgdXA6IHdoYXQgYWJvdXQgYGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvYD8gV2hpbGUgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0ICppc24ndCogdXNlZCB0aGVyZSwgdGhpcyBmdW5jdGlvbidzIHNjb3BlLCBvciBzaW1pbGFyaXR5LCBoYXMgY2F1c2VkIG1lIHRvIHBhdXNlLCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZS4gRXZlbiBpZiB0aGUgc3ltYm9sIGlzbid0IGRpcmVjdGx5ICp1c2VkKiB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUgY291bGQgYmUgc3VidGxlIGluZGlyZWN0IGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZyBhdCBmaXJzdCBnbGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6NDEuODQ1MjgzOTg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg0OTYzMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2N4bC9jb3JlL2NvcmUuaD0xMDQ9c3RydWN0IGN4bF9tZW1kZXZfc3RhdGU7XFxuZHJpdmVycy9jeGwvY29yZS9jb3JlLmg6MTA1OmludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKTtcXG5kcml2ZXJzL2N4bC9jb3JlL2NvcmUuaC0xMDYtaW50IGN4bF9kcGFfYWxsb2Moc3RydWN0IGN4bF9lbmRwb2ludF9kZWNvZGVyICpjeGxlZCwgdTY0IHNpemUpO1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tYm94LmM9MTE0MT1FWFBPUlRfU1lNQk9MX05TX0dQTChjeGxfbWVtX2dldF9ldmVudF9yZWNvcmRzLCBcXFwiQ1hMXFxcIik7XFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTQzLS8qKlxcbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jOjExNDQ6ICogY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm8gLSBHZXQgcGFydGl0aW9uIGluZm9cXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYy0xMTQ1LSAqIEBtZHM6IFRoZSBkcml2ZXIgZGF0YSBmb3IgdGhlIG9wZXJhdGlvblxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tYm94LmMtMTE1NC0gKi9cXG5kcml2ZXJzL2N4bC9jb3JlL21ib3guYzoxMTU1OmludCBjeGxfbWVtX2dldF9wYXJ0aXRpb25faW5mbyhzdHJ1Y3QgY3hsX21lbWRldl9zdGF0ZSAqbWRzKVxcbmRyaXZlcnMvY3hsL2NvcmUvbWJveC5jLTExNTYte1xcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYz02MTI9aW50IGN4bF9tZW1fZHBhX2ZldGNoKHN0cnVjdCBjeGxfbWVtZGV2X3N0YXRlICptZHMsIHN0cnVjdCBjeGxfZHBhX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTYzMS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jOjYzMjpcXHRyYyA9IGN4bF9tZW1fZ2V0X3BhcnRpdGlvbl9pbmZvKG1kcyk7XFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy02MzMtXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQzOjQ0LjczMDI2MzIyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQ5MTkwNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBXb3J0aGluZXNzIG9mIGEgQ1hMIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY3hsX21lbV9nZXRfcGFydGl0aW9uX2luZm9gIGlzIHVzZWQgaW4gYGN4bF9tZW1fZHBhX2ZldGNoYCwgd2hpY2ggdGhlIENYTCBjb3JlIGV4cG9ydHMsIGFuZCBJIHNlZSB0aGF0IGBjeGxfbWVtX2RwYV9mZXRjaGAgd2FzIG1vdmVkIOKAkyBpdCBsb29rcyBsaWtlIGl0IHdlbnQgZnJvbSBgbWJveC5jYCB0byBgbWVtZGV2LmNgLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGF0IGRpZmYsIHNoYWxsIHdlP1xuXG5BbHJpZ2h0LCBzbyB0aGUgZmlsZXMgSSBzZWUgYXJlOlxuXG4qICAgSW4gYGRyaXZlcnMvY3hsL2NvcmUvbWJveC5jYCwgYGN4bF9tZW1fZHBhX2ZldGNoYCBhbmQgYGFkZF9wYXJ0YCB3ZXJlIHJlbW92ZWQuXG4qICAgQW5kIGluIGBkcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jYCwgdGhleSd2ZSBiZWVuIGFkZGVkLlxuXG5TbyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNvZGUgbW92ZSBvZiBgY3hsX21lbV9kcGFfZmV0Y2hgLCBhbmQgdGhlIGFzc29jaWF0ZWQgYGFkZF9wYXJ0YCBmdW5jdGlvbiwgZnJvbSBgbWJveC5jYCB0byBgbWVtZGV2LmNgLiBUaGlzIGFwcGVhcnMgdG8gYmUgcHJpbWFyaWx5IHJlZmFjdG9yaW5nOyBpdCBkb2Vzbid0IHNlZW0gdG8gZnVuZGFtZW50YWxseSBhbHRlciB0aGUgQ1hMIGNvcmUncyBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiByZWFzb24gZm9yIHRoZSBtb3ZlIGlzIHRvIGFsbG93IGBjeGxfc2V0X2NhcGFjaXR5YCB0byB1c2UgYGFkZF9wYXJ0YCwgd2hpY2ggaXMgbm93IHN0YXRpYyB3aXRoaW4gYG1lbWRldi5jYC5cblxuQWhhLCBgY3hsX3NldF9jYXBhY2l0eWAgKmRvZXMqIHVzZSBgYWRkX3BhcnRgLiBTbyBpdCBzZWVtcyB0aGUgY29yZSBhZGRlZCBmdW5jdGlvbmFsaXR5IGlzIGBjeGxfc2V0X2NhcGFjaXR5YCBhbmQgYWxzbyBgZWZ4X2N4bF9pbml0YCBpbiB0aGUgYHNmY2AgZHJpdmVyLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgYHNmY2AgZHJpdmVyLCBhcyBJIHJlY2FsbCwgaXMgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFNvbGFyZmxhcmUgU0ZDOTEwMC1mYW1pbHkuIFRoZXJlJ3Mgbm8gZWZmZWN0aXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgKnRoYXQqISBBbmQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBTaW5jZSB0aGUgYHNmY2AgZHJpdmVyIGlzIHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIGluIHRoZSBDWEwgY29yZSBhcmUgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcsIHdpdGggdGhlIGBjeGxfbWVtX2RwYV9mZXRjaGAgYW5kIGBhZGRfcGFydGAgbW92ZW1lbnQsIGFuZCB0aGVuIGFkZGluZyBgY3hsX3NldF9jYXBhY2l0eWAgd2hpY2ggKm9ubHkqIGlzIGNhbGxlZCBieSB0aGF0IGBzZmNgIGRyaXZlci5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGBzZmNgIGRyaXZlciwgd2hpY2ggKm9ubHkqIHdvcmtzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGlzIGlzIGVzc2VudGlhbGx5IHVuLWZ1enphYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgaWYgYGN4bF9zZXRfY2FwYWNpdHlgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM5OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0Mzo1My4yNzk0NTgzNTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDMwNTQ3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hsX3NldF9jYXBhY2l0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYz02NDQ9RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX21lbV9kcGFfZmV0Y2gsIFxcXCJDWExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjQ3LS8qKlxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6NjQ4OiAqIGN4bF9zZXRfY2FwYWNpdHk6IGluaXRpYWxpemUgZHBhIGJ5IGEgZHJpdmVyIHdpdGhvdXQgYSBtYWlsYm94LlxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjQ5LSAqXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1Mi0gKi9cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jOjY1MzppbnQgY3hsX3NldF9jYXBhY2l0eShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsIHU2NCBjYXBhY2l0eSlcXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY1NC17XFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jLTY2MS19XFxuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYzo2NjI6RVhQT1JUX1NZTUJPTF9OU19HUEwoY3hsX3NldF9jYXBhY2l0eSwgXFxcIkNYTFxcXCIpO1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtNjYzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYz0xNz1pbnQgZWZ4X2N4bF9pbml0KHN0cnVjdCBlZnhfcHJvYmVfZGF0YSAqcHJvYmVfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeF9jeGwuYzo3MjpcXHRpZiAoY3hsX3NldF9jYXBhY2l0eShcXHUwMDI2Y3hsLVxcdTAwM2VjeGxkcywgRUZYX0NUUElPX0JVRkZFUl9TSVpFKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnhfY3hsLmMtNzMtXFx0XFx0cGNpX2VycihwY2lfZGV2LCBcXFwiZHBhIGNhcGFjaXR5IHNldHVwIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5pbmNsdWRlL2N4bC9jeGwuaD0yMjc9c3RydWN0IGN4bF9tZW1kZXYgKmRldm1fY3hsX3Byb2JlX21lbShzdHJ1Y3QgY3hsX2Rldl9zdGF0ZSAqY3hsZHMsXFxuLS1cXG5pbmNsdWRlL2N4bC9jeGwuaC0yMjktXFxuaW5jbHVkZS9jeGwvY3hsLmg6MjMwOmludCBjeGxfc2V0X2NhcGFjaXR5KHN0cnVjdCBjeGxfZGV2X3N0YXRlICpjeGxkcywgdTY0IGNhcGFjaXR5KTtcXG5pbmNsdWRlL2N4bC9jeGwuaC0yMzEtI2VuZGlmIC8qIF9fQ1hMX0NYTF9IX18gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDM6NTYuNzgyNTI0MDgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjYyMTgxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIENYTCBFbXVsYXRpb24gaW4gdGhlIHNmYyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGNhbGwgaW4gYGVmeF9jeGwuY2AsIGFuZCBJIGtub3cgdGhhdCB0aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgYHNmY2AgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGNvdWxkIHdlIHBvdGVudGlhbGx5IHByb2JlIG9yIGludGVyYWN0IHdpdGggdGhlIGBzZmNgIGRyaXZlciB1c2luZyBzb21lIGZvcm0gb2YgZ2VuZXJpYyBDWEwgZW11bGF0aW9uPyBJdCdzIGEgbG9uZyBzaG90LCBidXQgd29ydGggY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXRpZXMuXG5cblRoZSBgc2ZjYCBkcml2ZXIsIGFzIEkgcmVjYWxsLCB0aWVzIGl0c2VsZiB0byBzcGVjaWZpYyBQQ0kgdmVuZG9yIGFuZCBkZXZpY2UgSURzLiBUaGlzIG1lYW5zIGEgZGlyZWN0LCB1bm1lZGlhdGVkIGVtdWxhdGlvbiBtaWdodCBiZSB0cmlja3kuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIFBDSSBJRCB0YWJsZSwgYGVmeF9wY2lfdGFibGVgLCB3aGljaCBzaG91bGQgcmVzaWRlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmNgLiBTZWVpbmcgdGhpcyB0YWJsZSB3aWxsIGNvbmZpcm0gdGhlIFBDSSBJRHMgYW5kIHRoZSBsZXZlbCBvZiBkaXJlY3QgaW50ZXJhY3Rpb24gdGhhdCBpcyBwb3NzaWJsZS4gSXQgd2lsbCBoZWxwIG1lIGV2YWx1YXRlIHdoZXRoZXIgdGhlIENYTCBpbnRlcmFjdGlvbiBpcyBzb2xlbHkgZGVwZW5kZW50IG9uIFBDSSBJRHMgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGFjY2VzcyBtZXRob2RzLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCBpbiBhc3Nlc3NpbmcgdGhlIGZlYXNpYmlsaXR5IG9mIGFueSBlbXVsYXRpb24gYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTY1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjQ0OjAxLjI0ODc0NzMyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NDQ1NDczMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZnhfcGNpX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM9ODYzPXN0YXRpYyB2b2lkIGVmeF91bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTg4NS0vKiBQQ0kgZGV2aWNlIElEIHRhYmxlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZ4X3BjaV90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy04ODctXFx0e1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TT0xBUkZMQVJFLCAweDA5MDMpLCAgLyogU0ZDOTEyMCBQRiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTE0MDg9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYy0xNDA5LVxcdC5uYW1lXFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmM6MTQxMDpcXHQuaWRfdGFibGVcXHQ9IGVmeF9wY2lfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jLTE0MTEtXFx0LnByb2JlXFx0XFx0PSBlZnhfcGNpX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jPTE0Nzg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYzoxNDc5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBlZnhfcGNpX3RhYmxlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYz03ODM9c3RhdGljIHZvaWQgZWZ4X3VucmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBlZnhfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmMtODA0LS8qIFBDSSBkZXZpY2UgSUQgdGFibGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6ODA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlZnhfcGNpX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTgwNi1cXHR7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NPTEFSRkxBUkUsIDB4MDgwMyksXFx0LyogU0ZDOTAyMCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEyNzM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVmeF9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYy0xMjc0LVxcdC5uYW1lXFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZWZ4LmM6MTI3NTpcXHQuaWRfdGFibGVcXHQ9IGVmeF9wY2lfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jLTEyNzYtXFx0LnByb2JlXFx0XFx0PSBlZnhfcGNpX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2VmeC5jPTEzNDk9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9lZnguYzoxMzUwOk1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBlZnhfcGNpX3RhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6NDQ6MDQuMTAzMjE5OTc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDYyODE4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBTb2xhcmZsYXJlLVNwZWNpZmljIEhhcmR3YXJlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBwcmV0dHkgY2xlYXIuIFRoZSBjb2RlIGJlaW5nIGludHJvZHVjZWQgaGVyZSBpcyBhbGwgdGllZCBkaXJlY3RseSB0byB0aGUgU29sYXJmbGFyZSBTRkM5MTAwIG5ldHdvcmsgZHJpdmVyLiBJIHJlbWVtYmVyIHRob3NlIFBDSSBJRHMsIGBQQ0lfVkVORE9SX0lEX1NPTEFSRkxBUkUsIDB4MDkwM2AsIHRoZXkncmUgc3BlY2lmaWMgdG8gdGhlaXIgaGFyZHdhcmUuIEFuZCBRRU1VLCB0aGUgZW52aXJvbm1lbnQgd2UncmUgd29ya2luZyB3aXRoIGZvciBmdXp6aW5nLCBkb2Vzbid0IGVtdWxhdGUgdGhhdC4gVGhlcmUncyBubyBnZW5lcmljIFBDSSBkZXZpY2UgZW11bGF0b3IgaW4gc3l6a2FsbGVyIHRvIGp1c3Qgd2hpcCB1cCBhIG1vY2sgb2YgdGhhdCBoYXJkd2FyZSBlaXRoZXIuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIGRyaXZlciAqcmVxdWlyZXMqIGFjdHVhbCBwaHlzaWNhbCBTb2xhcmZsYXJlIGhhcmR3YXJlLCB0aGUgbmV3IENYTCBzdXBwb3J0IGNvZGUsIHdoaWNoIHRoaXMgcGF0Y2ggaW50cm9kdWNlcywgaXMgc2ltcGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgUUVNVSBzZXR1cC4gSXQgZG9lc24ndCBtYXR0ZXIgdGhhdCBzb21lIG9mIHRoZSBjaGFuZ2VzIGFyZSBqdXN0IHJlZmFjdG9yaW5nIGluIHRoZSBDWEwgY29yZSwgb3IgdGhhdCB0aGV5IGFyZSBnZW5lcmFsLCB0aGlzIENYTCBjb3JlIHJlZmFjdG9yaW5nIGlzIG5vdCB0cmlnZ2VyZWQsIGFjY2Vzc2libGUgb3IgcmVhY2hlZCB3aXRob3V0IHRoZSBTRkMgZHJpdmVyIGZpcnN0LlxuXG5UaGlzIGNvbmZpcm1zIHdoYXQgSSBleHBlY3RlZDsgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXCIgY2F0ZWdvcnkuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMgb25lLiBXb3J0aEZ1enppbmc9ZmFsc2UgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjk3LCJPdXRwdXRUb2tlbnMiOjExMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjo0NDoxMC4xMDk1MDU1NjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENYTCBzdXBwb3J0IHRvIHRoZSBTb2xhcmZsYXJlIFNGQzkxMDAtZmFtaWx5IG5ldHdvcmsgZHJpdmVyIChzZmMpIGFuZCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGluIHRoZSBDWEwgY29yZSBmb3IgaXQuIFRoZSBzZmMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNvbGFyZmxhcmUgUENJIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw79w[1] Phase: Running StartedAt: 2026-07-01 16:44:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw79w[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 16:44:21 +0000 UTC FinishedAt: 2026-07-01 16:44:44 +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,}