Name: series-workflowchctb Phase: Failed StartedAt: 2026-08-03 18:34:13 +0000 UTC FinishedAt: 2026-08-03 18:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchctb[0] Phase: Succeeded StartedAt: 2026-08-03 18:34:13 +0000 UTC FinishedAt: 2026-08-03 18:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchctb[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 18:34:13 +0000 UTC FinishedAt: 2026-08-03 18:37:24 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkgdG8gYWRkIFBUUCBjbG9jayBzdXBwb3J0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgSTJDL1NQSS4gRHVyaW5nIHByb2JlLCBpdCByZWFkcyBhIGhhcmR3YXJlIGNoaXAgSUQgYW5kIGZhaWxzIGlmIGl0IGRvZXNuJiMzOTt0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NWJjOWRmOWQ0N2QyYjMyYzg5NDU1MjY5YjkzYmI1MzhmYTlmZTFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxODozNjowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uNzk4NzRhOWZkYjQ5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcbiAgKlxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3Jcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4mIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICYjNDM7MjM1LDMxMSBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXG4mIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcbiYjNDM7ICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gSWYgdGhlIHRpY2sgY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsXG4mIzQzOyAqIG5vcm1hbGl6ZXMgYnkgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzXG4mIzQzOyAqIHRoZSByZXN1bHQgYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRvbyBjbG9zZSB0byB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQuIElmIHRoZSAxIEh6IHRpY2tcbiYjNDM7XHQgKiBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcywgbm9ybWFsaXplIGJ5IHRoZSBlbGFwc2VkIHRpY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuJiM0MztcdGlmICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSB7XG4mIzQzO1x0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTtcbiYjNDM7XHRcdHRzX25leHQudHZfc2VjJiM0MzsmIzQzOztcbiYjNDM7XHR9IGVsc2UgaWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHR0c19uZXh0LnR2X3NlYyAtPSBkaWZmLnR2X3NlYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuJiM0MztcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4mIzQzO1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKVxuJiM0MzsgKlxuJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbiYjNDM7e1xuJiM0MztcdHM2NCB0aWVfZGF0YTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKGRlbHRhX25zIFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcdTAwM2U9IE5TRUNfUEVSX1NFQykpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4mIzQzO1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4mIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4mIzQzO3tcbiYjNDM7XHR1OCBjdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuJiM0MztcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4mIzQzO1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbiYjNDM7XHRpZiAodG9kX3N0ZXApXG4mIzQzO1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgJiM0Mzs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuJiM0MztcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDdmNWFmYWFhZTYzNDIuLjhhOGMyN2EwNmFjOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XG4gXHRcdGlmIChyYykge1xuQEAgLTEwMzMsNiAmIzQzOzEwMzgsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTYzLDYgJiM0Mzs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29ya1xuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXG4mIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4mIzQzO1x0dTE2XHRcdFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuIFx0dThcdFx0XHRwaGFzZV9hdmdfZmFjdG9yO1xuIFx0Ym9vbFx0XHRcdGZyZXFfbW9uaXRvcjtcbiB9O1xuQEAgLTMwOCw2ICYjNDM7MzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKHpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKGluZGV4KSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjVlMjk0ZjE5MDUwNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM2OSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4mIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovXG4mIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuJiM0MztcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiAgKlxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XG4gICpcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbi1cdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXG4mIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbiYjNDM7ICpcbiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxuJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4mIzQzOyAqXG4mIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuJiM0MztcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbiYjNDM7XHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4mIzQzO1x0czMyIHN0ZXBfY3ljbGVzO1xuJiM0MztcdHUzMiBzeW50aF9mcmVxO1xuJiM0MztcdGludCByYztcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuJiM0MztcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbiYjNDM7XHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuJiM0MztcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBvdXRfaWQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbiYjNDM7XHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbiYjNDM7XHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4mIzQzO1x0ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXG4mIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4ge1xuLVx0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuJiM0MztcdGludCByYztcbiBcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0a2ZyZWUoemxkcGxsKTtcbiYjNDM7XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbiYjNDM7XHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuJiM0MztcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4mIzQzO1x0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4mIzQzO1x0XHRzMzIgcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4mIzQzO1x0XHR0cy50dl9uc2VjID0gMDtcbiYjNDM7XHRcdGRlbHRhID0gcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbiYjNDM7XHRcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4mIzQzO1x0XHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcbiYjNDM7XHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuJiM0MztcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbiYjNDM7XHRcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbiYjNDM7XHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbiYjNDM7XHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxuJiM0MztcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4mIzQzO1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbiYjNDM7XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHM2NCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4mIzQzO1x0ICovXG4mIzQzO1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4mIzQzO1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVElFLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzMzJcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuJiM0MztcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4mIzQzO1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuJiM0MztcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4mIzQzO1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuJiM0MztcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbiYjNDM7XHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbiYjNDM7XHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4mIzQzO1x0XHQgXCYjMzQ7emwzMDczeC1kcGxsJXVcJiMzNDssIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICYjNDM7MjcyNCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsZHBsbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbiYjNDM7ICovXG4mIzQzO3ZvaWRcbiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZSh6bGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDI4LDYgJiM0MzsyNzk2LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0MSw3ICYjNDM7MjgxNiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4mIzQzO1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gXG5AQCAtMjIsNiAmIzQzOzIzLDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgJiM0MzszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgJiM0MzsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHRcdDhcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuJiM0MztcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpIHRvIGFkZCBQVFAgY2xvY2sgc3VwcG9ydC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyBvdmVyIEkyQy9TUEkuIER1cmluZyBwcm9iZSwgaXQgcmVhZHMgYSBoYXJkd2FyZSBjaGlwIElEIGFuZCBmYWlscyBpZiBpdCBkb2VzbiYjMzk7dCBtYXRjaCBrbm93biB2YWx1ZXMuIFNpbmNlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbmV3bHkgYWRkZWQgUFRQIGNsb2NrIG9wZXJhdGlvbnMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjViYzlkZjlkNDdkMmIzMmM4OTQ1NTI2OWI5M2JiNTM4ZmE5ZmUxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTg6MzY6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwppbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2Li43OTg3NGE5ZmRiNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQogICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yCiAgKgotICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgotICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuCiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCiYjNDM7ICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwpAQCAtMjM0LDYgJiM0MzsyMzUsMzExIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwKIAlyZXR1cm4gJmFtcDt6bGRldi0mZ3Q7Y2hhbltpbmRleF07CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLAomIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0aW1lb3V0OwomIzQzOwl1OCB0b2RfY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCAmYW1wO3RvZF9jdHJsKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCSAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZQomIzQzOyAqCiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0CiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kCiYjNDM7ICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQlaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnQKJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHQKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXUzMiBuc2VjOwomIzQzOwl1NjQgc2VjOwomIzQzOwl1OCBjbWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG5leHRfaHopCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjsKJiM0MzsJZWxzZQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCAmYW1wO3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksICZhbXA7bnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJdHMtJmd0O3R2X3NlYyA9IHNlYzsKJiM0MzsJdHMtJmd0O3R2X25zZWMgPSBuc2VjOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB0czogdGltZSB0byBzZXQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsCiYjNDM7CQkJCSAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogSWYgbGVzcyB0aGFuIDIwIG1zIHJlbWFpbnMsIHdhaXRzIGZvciB0aGUgcm9sbG92ZXIgYW5kIGluY3JlbWVudHMgdGhlCiYjNDM7ICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gSWYgdGhlIHRpY2sgY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsCiYjNDM7ICogbm9ybWFsaXplcyBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMKJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6IHRpY2sgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgJmFtcDt0c19jdXIsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIElmIHRvbyBjbG9zZSB0byB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQuIElmIHRoZSAxIEh6IHRpY2sKJiM0MzsJICogY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsIG5vcm1hbGl6ZSBieSB0aGUgZWxhcHNlZCB0aWNrcy4KJiM0MzsJICovCiYjNDM7CWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwlpZiAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjICZsdDsgdGhyZXNob2xkX25zKSB7CiYjNDM7CQlmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTsKJiM0MzsJCXRzX25leHQudHZfc2VjJiM0MzsmIzQzOzsKJiM0MzsJfSBlbHNlIGlmIChkaWZmLnR2X3NlYyAmbHQ7IDApIHsKJiM0MzsJCXRzX25leHQudHZfc2VjIC09IGRpZmYudHZfc2VjOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJemxkZXYtJmd0O2NoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKQomIzQzOyAqCiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhCiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucykKJiM0Mzt7CiYjNDM7CXM2NCB0aWVfZGF0YTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihkZWx0YV9ucyAmbHQ7PSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zICZndDs9IE5TRUNfUEVSX1NFQykpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCkBAIC01LDEwICYjNDM7NSwxMiBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogCiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wOwogc3RydWN0IHpsMzA3M3hfZGV2OwogCiAvKioKQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCwKIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTsKJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjAwLDYgJiM0MzsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZQomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKgomIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fAomIzQzOwkJemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5CiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKaW5kZXggN2Y1YWZhYWFlNjM0Mi4uOGE4YzI3YTA2YWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwpAQCAtNTEwLDYgJiM0Mzs1MTAsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlpbnQgcmM7CiAJdTggaTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDt6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9SRUZTOyBpJiM0MzsmIzQzOykgewogCQlyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTsKIAkJaWYgKHJjKSB7CkBAIC0xMDMzLDYgJiM0MzsxMDM4LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCSAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LgogCSAqLwogCXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKIAkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAppbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCkBAIC0yNiw2ICYjNDM7MjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDsKICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VUwkJKDMwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMJKDMwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTCSgzMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKIAogZW51bSB6bDMwNzN4X2ZsYWdzIHsKIAlaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULApAQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVycwogICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mbwogICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnMKJiM0MzsgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9ucwomIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zCiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50cwogICogQG91dDogYXJyYXkgb2Ygb3V0cyYjMzk7IGludmFyaWFudHMKICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50cwpAQCAtNjMsNiAmIzQzOzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmsKICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrCiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2UKJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpCiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3IKICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWQKICAqLwpAQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHsKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKIAljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8JKmluZm87CiAJc3RydWN0IG11dGV4CQkJbXVsdGlvcF9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQl0aWVfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJcGhhc2Vfc3RlcF9sb2NrOwogCiAJLyogSW52YXJpYW50cyAqLwogCXN0cnVjdCB6bDMwNzN4X3JlZglyZWZbWkwzMDczWF9OVU1fUkVGU107CkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCiAJLyogUGVyLWNoaXAgcGFyYW1ldGVycyAqLwogCXU2NAkJCWNsb2NrX2lkOwomIzQzOwl1MTYJCQlvdXRfc3RlcF90aW1lX21hc2s7CiAJdTgJCQlwaGFzZV9hdmdfZmFjdG9yOwogCWJvb2wJCQlmcmVxX21vbml0b3I7CiB9OwpAQCAtMzA4LDYgJiM0MzszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAJcmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgJmFtcDsmYW1wOyB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFzawomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBpbmRleDogb3V0cHV0IGluZGV4CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gISEoemxkZXYtJmd0O291dF9zdGVwX3RpbWVfbWFzayAmYW1wOyBCSVQoaW5kZXgpKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5CiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCAwNDg4YWU2YWM0ODZjLi41ZTI5NGYxOTA1MDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcHJpbnRmLmgmZ3Q7CiAKQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM2OSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7CiB9CiAKJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqLwomIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKCTEwMDAwMDAwCiYjNDM7CiAvKioKLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWUKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwogICoKLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgZmFsc2UsIHRzLCBzdHMpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldAogICoKLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXN0cnVjdCB6bDMwNzN4X2RwbGwgKgotemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiAKLQl6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTsKLQlpZiAoIXpsZHBsbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKLQl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwotCXpsZHBsbC0mZ3Q7aWQgPSBjaDsKLQltdXRleF9pbml0KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCAqdHMpOwomIzQzO30KIAotCXJldHVybiB6bGRwbGw7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLAomIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSkKJiM0MzsgKgomIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGgKJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHMKJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy4KJiM0MzsgKgomIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW4KJiM0MzsgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0cwomIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmcKJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0QKJiM0MzsgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZQomIzQzOyAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi8KJiM0MzsJCWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCQlmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTsKJiM0MzsKJiM0MzsJCWlmICghc3ludGhfbWFza1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqLwomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLAomIzQzOwkJCQkJICAgICAhdG9kX3N0ZXBwZWQpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJaWYgKHRvZF9zdGVwcGVkKSB7CiYjNDM7CQkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwkJdG9kX3N0ZXBwZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlCiYjNDM7CSAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghdG9kX3N0ZXBwZWQpIHsKJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIDAsCiYjNDM7CQkJCQkgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQotICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKICAqCi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoJmd0Oz0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvcgomIzQzOyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksCiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLgomIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXZvaWQKLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKLQlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJYm9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiYjNDM7CWludCByYzsKIAotCW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCWtmcmVlKHpsZHBsbCk7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqLwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pICZhbXA7JmFtcDsKJiM0MzsJICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kCiYjNDM7CSAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtCiYjNDM7CSAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGVsdGEgJmd0Oz0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhICZsdDs9IC1OU0VDX1BFUl9TRUMpIHsKJiM0MzsJCXMzMiByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQl0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCAmYW1wO3JlbWFpbmRlcik7CiYjNDM7CQl0cy50dl9uc2VjID0gMDsKJiM0MzsJCWRlbHRhID0gcmVtYWluZGVyOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwgdHMpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCS8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovCiYjNDM7CQlpZiAoIWRlbHRhKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2UKJiM0MzsJCSAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZwomIzQzOwkJICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlzZWNfYWRqdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovCiYjNDM7CWlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHsKJiM0MzsJCXJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrCiYjNDM7CSAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVybgomIzQzOwkgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZAomIzQzOwkgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdAomIzQzOwkgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHNlY19hZGp1c3RlZCkgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KQomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCwgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlzNjQgb2Zmc2V0OwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNgomIzQzOwkgKgomIzQzOwkgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1CiYjNDM7CSAqLwomIzQzOwlvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpCiYjNDM7CQlyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDsKJiM0MzsJaWYgKG9mZnNldCA9PSBjaGFuLSZndDtkZl9vZmZzZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBvZmZzZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yCiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2VzbiYjMzk7dCBzdXBwb3J0IFRJRSwgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgczMyCiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKQomIzQzO3sKJiM0MzsJLyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIVwomIzQzOwkgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiBOU0VDX1BFUl9TRUMgLSAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7emwzMDczeC1kcGxsJXUmIzM0OywgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTIzOTgsNiAmIzQzOzI3MjQsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQyOCw2ICYjNDM7Mjc5NiwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDEsNyAmIzQzOzI4MTYsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyMyw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQAogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01ECQkJR0VOTUFTSygyLCAwKQogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JCQk0CiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMCQkJWkxfUkVHKDUsIDB4MzAsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QCQkJR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUgkJCTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0sJCVpMX1JFRyg1LCAweDMxLCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaCTEKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQJCTgKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaCTkKJiM0MzsKICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMCQkJWkxfUkVHKDUsIDB4NTAsIDEpCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1IJCUdFTk1BU0soNywgNCkKQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhCiYjNDM7ICoKJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsCiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KQkJCQkJXApAQCAtMjAyLDYgJiM0MzsyMTksMjQgQEAKIAkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KQogI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOCVM2NF9NSU4KIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNAkJCVpMX1JFRyg3LCAweDBDLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNAkJCVpMX1JFRyg3LCAweDEyLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzQJCQlaTF9SRUcoNywgMHgxOCwgNCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBACiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTAkJR0VOTUFTSyg2LCA0KQogCiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLCQlaTF9SRUcoOSwgMHgzNiwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMCQlaTF9SRUcoOSwgMHgzOCwgMSkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTAkJR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUAlCSVQoMykKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORQkwCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUCTEKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRAkyCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFCTMKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIJCVpMX1JFRyg5LCAweDM5LCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0sJCVpMX1JFRyg5LCAweDNhLCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEJCVpMX1JFRyg5LCAweDNjLCA0KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQXp1cml0ZSBEUExMIERyaXZlcjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYGRyaXZlcnMvZHBsbC96bDMwNzN4L2ApLiBJdCBsb29rcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIGNvbnNpZGVyIGZ1enppbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggdGhlIGVmZm9ydD8KCkkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgYSBEUExMIGRyaXZlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgSTJDIG9yIFNQSSwgYW5kIHN1cmUgZW5vdWdoLCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGNvbmZpcm0gdGhhdC4gVGhhdCYjMzk7cyBnb29kLCBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3IgZW11bGF0aW9uIG9yIGF0IGxlYXN0IGFjY2VzcyB3aXRoaW4gUUVNVS4gTm93IHRoZSBxdWVzdGlvbiBpcywgKmNhbiogc3l6a2FsbGVyIHJlYWNoIGl0PwoKU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogSTJDIGFuZCBTUEkgZGV2aWNlcy4gSSBrbm93IGl0IGNhbiBpbmplY3QgZGV2aWNlcyB2aWEgc3lzZnMsIHVzZSB2aXJ0dWFsIGJ1c2VzLCBvciBqdXN0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggYC9kZXYvaTJjLVhgIG9yIGAvZGV2L3NwaVhgLiBCdXQgd2FpdCwgdGhpcyBpcyBhICprZXJuZWwgZHJpdmVyKiwgc28gY2FuIHN5emthbGxlciByZWFjaCBpdCAqYWZ0ZXIqIGl0JiMzOTtzIGxvYWRlZD8gU3l6a2FsbGVyIGhhcyBzb21lIHN1cHBvcnQgZm9yIEkyQy9TUEkgZGV2aWNlIGluc3RhbnRpYXRpb24gYWxyZWFkeSBpZiBpdCBrbm93cyBob3csIG9yIGlmIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGRlc2NyaXB0aW9ucy4KCkJ1dCBoYW5nIG9uLCB0aGVyZSYjMzk7cyBhIGNvbnN0cmFpbnQ6IHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIC4uLiBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFRoaXMgaXMgSTJDL1NQSSwgbm90IFBDSWUsIHNvIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4gVXN1YWxseSwgSTJDL1NQSSBkcml2ZXJzIGFyZSBmaW5lIGFzIGxvbmcgYXMgdGhleSYjMzk7cmUgaW4gdGhlIGRldmljZSB0cmVlIG9yIGNhbiBiZSBjcmVhdGVkIHRocm91Z2ggc3lzZnMuIFN5emthbGxlciBldmVuIHVzZXMgYG5ld19kZXZpY2VgIHRvIHByb2JlIEkyQyBkZXZpY2VzIQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzeXprYWxsZXIgY2FuIHByb2JlIHRoaXMgZHJpdmVyLiBUaGUgZHJpdmVyIHVzZXMgcmVnbWFwIG92ZXIgSTJDL1NQSSBzbyBsZXQmIzM5O3MgY2hlY2sgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AgaW4gdGhlIGtlcm5lbCB0byBjb25maXJtLiBJIHRoaW5rIGl0IGxvb2tzIHByb21pc2luZywgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZGlyZWN0b3J5IHRvIGNoZWNrIGlmIHRoaXMgaXMgZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDQ4NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNTpcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTE3PWNvbmZpZyBaTDMwNzNYX0kyQ1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyNzpcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mjk9Y29uZmlnIFpMMzA3M1hfU1BJXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zOC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM5Olx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtMi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1pMMzA3M1gpXHRcdCYjNDM7PSB6bDMwNzN4Lm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjQ6emwzMDczeC1vYmpzXHRcdFx0Oj0gY2hhbi5vIGNvcmUubyBkZXZsaW5rLm8gZHBsbC5vXHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGZsYXNoLm8gZncubyBvdXQubyBwcm9wLm8gcmVmLm8gc3ludGgub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1pMMzA3M1hfSTJDKVx0JiM0Mzs9IHpsMzA3M3hfaTJjLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjg6emwzMDczeF9pMmMtb2Jqc1x0XHQ6PSBpMmMub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtOS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aTDMwNzNYX1NQSSlcdCYjNDM7PSB6bDMwNzN4X3NwaS5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMTp6bDMwNzN4X3NwaS1vYmpzXHRcdDo9IHNwaS5vXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUgLSB1cGRhdGUgRFBMTCBjaGFubmVsIHN0YXR1cyBmcm9tIEhXXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMy1cdHU2NCB2YWw7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PTl9TVEFUVVMoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3LVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb25fc3RhdHVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzE6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfUkVGU0VMX1NUQVRVUyhpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzItXHRcdFx0ICAgICBcdTAwMjZjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOC1cdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5Olx0aWYgKCF6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNoYW4pKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA6XHRcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxLVx0XHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00Ni1cdFx0XHRcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyLVx0XHRcdCAgICAgIFpMX0RQTExfREZfUkVBRF9TRU0gfCBaTF9EUExMX0RGX1JFQURfUkVGX09GU1QpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3LVx0XHRcdFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MjpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzI6ICogemwzMDczeF9jaGFuX25jb19tb2RlX3NldCAtIHN3aXRjaCBEUExMIGNoYW5uZWwgdG8gTkNPIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODM6aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODQte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjg1Olx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg2LVx0dTggcHJldl9tb2RlLCBkZl9yZWFkO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04OS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5MDpcdHByZXZfbW9kZSA9IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05MS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTYtXHRpZiAocHJldl9tb2RlID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9GUkVFUlVOKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTc6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5OTpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAwLVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAxLVx0XHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMDI6XHRcdFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAzLVx0XHRcdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIwLVx0XHQgIEZJRUxEX1BSRVAoWkxfRFBMTF9ERl9SRUFEX0NNRCwgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTIxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSwgZGZfcmVhZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMxOlx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMjpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMy1cdFx0XHQgICAgICBjaGFuLVx1MDAzZW1vZGVfcmVmc2VsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzQtXHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzU6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNi1cdFx0cmV0dXJuIHJjO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDctXHQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDg6XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ5LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjI6ICogemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoIC0gZmV0Y2ggRFBMTCBjaGFubmVsIHN0YXRlIGZyb20gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MTppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Mi17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTczOlx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NC1cdGludCByYywgaTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTc2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLCBcdTAwMjZjaGFuLVx1MDAzZWN0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4MDpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTgxLVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4NS1cdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtEUExMJXUgbW9kZTogJXUsIHJlZjogJXVcXG5cJiMzNDssIGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4NjpcdFx0emwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pLCB6bDMwNzN4X2NoYW5fcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4ODpcdHJjID0gemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSh6bGRldiwgaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTk2Olx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTctXHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjAwLVx0XHRcJiMzNDtEUExMJXUgbG9ja19zdGF0ZTogJXUsIGhvOiAldSwgc2VsX3N0YXRlOiAldSwgc2VsX3JlZjogJXVcXG5cJiMzNDssXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAxOlx0XHRpbmRleCwgemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMjpcdFx0emwzMDczeF9jaGFuX2lzX2hvX3JlYWR5KGNoYW4pID8gMSA6IDAsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAzOlx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDQ6XHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA1LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDgtXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDk6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjEwLVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoYW4tXHUwMDNlcmVmX3ByaW8pOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIxNjpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxNy1cdFx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2VyZWZfcHJpb1tpXSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyNS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjY6ICogemwzMDczeF9jaGFuX3N0YXRlX2dldCAtIGdldCBjdXJyZW50IERQTEwgY2hhbm5lbCBzdGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyNzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjI4LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGdldCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMxLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjpjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMzLVx0XHRcdFx0XHRcdCAgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzOC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzk6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0MDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDEtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQ3LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI0OS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1My1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTQ6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjU1LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNjYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjY3Olx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI2OC1cdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc0OiAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3Ni0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODQtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjg1OnN0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg2LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyODc6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4OC1cdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjkxLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MjogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OC0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5OTogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDMtXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzE2LVx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMTc6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxOC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzIxLVx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMyNjpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzMxOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNS1cdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQ2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0NzogKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0ODogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDktICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzUxLSAqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzUyOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzUzLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NTppbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTYtXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2MC1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzYxOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2NC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjU6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjk6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Mi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNzM6XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzQtXHRcdFx0XHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc3LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3ODogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3OTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODAtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg5LSAqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzkwOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkxLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5MzppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LVx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAwLVx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDAxOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNS1cdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDY6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQyNjpcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI3LX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI5LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzMDogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzE6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDMyLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzNy0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mzg6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzOS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDI6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0My1cdGlmICghcmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0OS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTA6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1MTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTItICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ2MDppbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2MS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3MC1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDcxOlx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDcyLVx0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDgwOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgxLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg0Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0ODg6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDg5LVx0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5Mi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTM6ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTQ6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk1LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MDU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNi1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNC1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxNTpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNi1cdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTIwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUyMTpcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMi1cdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI2Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyOS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzA6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0MDpcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQxLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDYtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gc2V0IHN0YXRlIGZvclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTUtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU2OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NzpcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1OC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU5Olx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjAtXHRpbnQgcmMsIGk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2Ny1cdGlmIChkY2hhbi1cdTAwM2VjdHJsICE9IGNoYW4tXHUwMDNlY3RybCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2ODpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjktXHRcdFx0XHQgICAgICBjaGFuLVx1MDAzZWN0cmwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzUtXHRpZiAoZGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwgIT0gY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3NjpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc3LVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5MS1cdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGludG8gbWFpbGJveCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU5MjpcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTMtXHRcdFx0ICAgWkxfUkVHX0RQTExfTUJfTUFTSywgQklUKGluZGV4KSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5OS1cdFx0aWYgKGRjaGFuLVx1MDAzZXJlZl9wcmlvW2ldICE9IGNoYW4tXHUwMDNlcmVmX3ByaW9baV0pIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDA6XHRcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMS1cdFx0XHRcdFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwOC1cdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDk6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fV1IsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEwLVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xMz1zdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOC0gKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjI1OnN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI2LVx0c3RydWN0X2dyb3VwKGNmZyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMzctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzk6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQwLVx0XHRcdFx0XHRcdCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDI6XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDQ6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ1OmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00Ni1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ5LVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTE6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTItXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01NC1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU1OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ni1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTU3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU4OmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjA6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjM6ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY0LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9Njg9c3RhdGljIGlubGluZSBzNjRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo2OTp6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTcwLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzQtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NzU6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc2LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04MS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg1LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjg2OiAqIHpsMzA3M3hfY2hhbl9yZWZfZ2V0IC0gZ2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTAtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTE6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTkyLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTYtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTc6ICogemwzMDczeF9jaGFuX21vZGVfc2V0IC0gc2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG1vZGUpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAyLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwNzogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTAtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTExOnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fcmVmX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTEyLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTE2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExNzogKiB6bDMwNzN4X2NoYW5fcmVmX3ByaW9fZ2V0IC0gZ2V0IHJlZmVyZW5jZSBwcmlvcml0eVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTEyMz1zdGF0aWMgaW5saW5lIHU4XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI0OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEyNS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMzU6ICogemwzMDczeF9jaGFuX3JlZl9wcmlvX3NldCAtIHNldCByZWZlcmVuY2UgcHJpb3JpdHlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMzYtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNDA9c3RhdGljIGlubGluZSB2b2lkXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQxOnpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmLCB1OCBwcmlvKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE0Mi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNTI6ICogemwzMDczeF9jaGFuX3JlZl9pc19zZWxlY3RhYmxlIC0gY2hlY2sgaWYgcmVmZXJlbmNlIGlzIHNlbGVjdGFibGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNTMtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNTg9c3RhdGljIGlubGluZSBib29sXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTU5OnpsMzA3M3hfY2hhbl9yZWZfaXNfc2VsZWN0YWJsZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYwLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjE6XHRyZXR1cm4gemwzMDczeF9jaGFuX3JlZl9wcmlvX2dldChjaGFuLCByZWYpICE9IFpMX0RQTExfUkVGX1BSSU9fTk9ORTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjItfVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjQtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTY1OiAqIHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldCAtIGdldCBEUExMIGNoYW5uZWwgbG9jayBzdGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2OS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzEte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzUtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTc2OiAqIHpsMzA3M3hfY2hhbl9pc19sb2NrZWQgLSBjaGVjayBpZiBjaGFubmVsIGlzIGxvY2tlZCB0byBhIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE3Ny0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4MC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODE6c3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9pc19sb2NrZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODIte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE4MzpcdHU4IGxvY2tfc3RhdGUgPSB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg0LVx0cmV0dXJuIGxvY2tfc3RhdGUgPT0gWkxfRFBMTF9NT05fU1RBVFVTX1NUQVRFX0xPQ0s7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4Ny0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODg6ICogemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byAtIGNoZWNrIGlmIGNoYW5uZWwgaXMgaW4gYXV0b21hdGljIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODktICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOTItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTkzOnN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk0LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxOTU6XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9BVVRPO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5Ni19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5OC0vKipcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCwgUFRQLCBhbmQgU3luY0UgZGV2aWNlcy4gSXQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIGlzIHRoaXMgdGhpbmcgZW11bGF0ZWQgaW4gUUVNVT8gQnV0IG5vLCBpdCYjMzk7cyBhIGRlZGljYXRlZCBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRldmljZSwgbm90IHNvbWV0aGluZyBnZW5lcmljLiBIbW0sIGJ1dCBpdCYjMzk7cyBhbiBJMkMgb3IgU1BJIGRldmljZSwgcmlnaHQ/CgpOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGNhbiBTeXprYWxsZXIsIG15IGZhdm9yaXRlIGZ1enppbmcgdG9vbCwgZXZlbiAqaGFuZGxlKiBJMkMgb3IgU1BJIGRldmljZXM/IFRoZSBnb29kIG5ld3MgaXMsIHllcywgaXQgY2FuISBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBpbmplY3RpbmcgSTJDL1NQSSBkZXZpY2VzIGlmIGl0IGtub3dzIHRoZSBzcGVjaWZpY3MsIG9yIGV2ZW4ganVzdCBvcGVuaW5nIGAvZGV2L2kyYy1YYCBhbmQgdGFsa2luZyB0byB0aGUgYnVzLgoKSG93ZXZlciwgYSBjcml0aWNhbCBwb2ludCBjb21lcyB0byBtaW5kOiBpZiB0aGUgZHJpdmVyIGlzbiYjMzk7dCBsb2FkZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBTeXprYWxsZXIgY2FuJiMzOTt0IGZ1enogaXQuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIFN5emthbGxlciBsb2FkIHRoZSBkcml2ZXI/IEl0IGFwcGVhcnMgU3l6a2FsbGVyICpjYW4qIGxvYWQgdGhlIGRyaXZlciBpZiBpdCYjMzk7cyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHVzaW5nIGBDT05GSUdfWkwzMDczWF9JMkM9eWAsIHdoaWNoIGxvb2tzIGxpa2UgYW4gb3B0aW9uIGhlcmUuIFRoZW4gU3l6a2FsbGVyIGNhbiB0cnkgdG8gaW5zdGFudGlhdGUgaXQgdmlhIHN5c2ZzIGBuZXdfZGV2aWNlYCBmb3IgSTJDLgoKV2FpdCBhIHNlY29uZC4gVGhlIG9yaWdpbmFsIHByb21wdCB0YWxrcyBhYm91dCAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgbmVlZGluZyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBUaGlzIGlzICpub3QqIGEgUENJZSBjYXJkOyBpdCYjMzk7cyBJMkMvU1BJLCBzbyBpdCYjMzk7cyBhIGRpZmZlcmVudCB1c2UgY2FzZS4KCk9rYXksIGlzIGl0ICp3b3J0aCogZnV6emluZz8gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBJMkMgZGV2aWNlLCBhbmQgU3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSBpdCB1c2luZyBgZWNobyB6bDMwNzN4ICZndDsgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAsIHRoZSBhbnN3ZXIgaXMgcHJvYmFibHkgeWVzLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGlmIHRoaXMgZHJpdmVyIGhhcyBhbiBJMkMgSUQgdGFibGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gY29uZmlybSBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IGluc3RhbnRpYXRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2kyY19kZXZpY2VfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMxXCYjMzQ7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxMzAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkyQyBEZXZpY2UgUHJvYmUgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGRldmljZSBoYXMgYW4gSTJDIElEIHRhYmxlLCB3aGljaCBpcyBnb29kLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGluc3RhbnRpYXRpb24gdXNpbmcgYG5ld19kZXZpY2VgLiBUaGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHByb2JlIGZ1bmN0aW9uIGl0c2VsZi4gRG9lcyB0aGUgcHJvYmUgYWN0dWFsbHkgaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmU/IFNwZWNpZmljYWxseSwgZG9lcyBpdCByZWFkIGFueSByZWdpc3RlcnMgb3IgZXhjaGFuZ2UgYW55IGRhdGEgb24gdGhlIGJ1cz8gTXkgbWFpbiBjb25jZXJuIGlzLCBpZiBpdCBkb2VzLCB3aWxsIGl0IGZhaWwgZ3JhY2VmdWxseSBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaXNuJiMzOTt0IHJlY2VpdmVkPyBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSB1bmV4cGVjdGVkIGhhbmdzIG9yIGVycm9ycyBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBwcm9jZXNzIGNhbiBjb250aW51ZSwgc28gSSBiZXR0ZXIgY2hlY2sgdGhlIGB6bDMwNzN4X2kyY19wcm9iZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoxMTpzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Mi1cdH0sXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTQtXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY3MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFpMMzA3M3ggUHJvYmUgRnVuY3Rpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBjb25uZWN0aW9uIHByb2Nlc3MsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9kZXZfcHJvYmVgIGZ1bmN0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBJMkMgdmVyc2lvbiBpcyB0aGUgbW9zdCBnZW5lcmljLCBhcyBJMkMgcHJvdmlkZXMgdGhlIGxlYXN0IG92ZXJoZWFkIHRvIHRoZSBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgZXhwZWN0IGB6bDMwNzN4X2Rldl9wcm9iZWAgdG8gYmUgdGhlIGFjdHVhbCBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgZGV2aWNlLCBhbmQgcG90ZW50aWFsbHkgdGhlIHBsYWNlIHdoZXJlIG90aGVyIG1ldGhvZHMgb2YgY29ubmVjdGlvbiBhcmUgc3VwcG9ydGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHdoYXQgcmVzb3VyY2VzIGFyZSByZXF1ZXN0ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgaW5pdGlhbGx5LiBUaGUgbmFtaW5nIHN1Z2dlc3RzIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgd2l0aCB0aGUgSTJDLXNwZWNpZmljIHByb2JlIGhhbmRsaW5nIGJ1cyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGBkZXZfcHJvYmVgIHRha2luZyBjYXJlIG9mIHRoZSBhY3R1YWwgZGV2aWNlIHNldHVwLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBwYXR0ZXJuIG9mIHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgYW5kIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbi4gQXJlIHRoZXkgdXNpbmcgdGhlIERldmljZSBUcmVlIG9yIGRpcmVjdCBib2FyZCBkZWZpbml0aW9ucyBmb3IgY29uZmlndXJhdGlvbj8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2sgbWVjaGFuaXNtcz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBgemwzMDczeF9kZXZfcHJvYmVgIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGxpa2UgY2xvY2sgY29uZmlndXJhdGlvbiBhbmQgZGF0YSBwYXRoIHNldHVwLCBiZWdpbnMuIFRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGxpZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDExOlx0c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuICAxMjpcdHtcbiAgMTM6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4gIDE0Olx0XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2O1xuICAxNTpcdFxuICAxNjpcdFx0emxkZXYgPSB6bDMwNzN4X2Rldm1fYWxsb2MoZGV2KTtcbiAgMTc6XHRcdGlmIChJU19FUlIoemxkZXYpKVxuICAxODpcdFx0XHRyZXR1cm4gUFRSX0VSUih6bGRldik7XG4gIDE5Olx0XG4gIDIwOlx0XHR6bGRldi1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNnpsMzA3M3hfcmVnbWFwX2NvbmZpZyk7XG4gIDIxOlx0XHRpZiAoSVNfRVJSKHpsZGV2LVx1MDAzZXJlZ21hcCkpXG4gIDIyOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih6bGRldi1cdTAwM2VyZWdtYXApLFxuICAyMzpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXG5cJiMzNDspO1xuICAyNDpcdFxuICAyNTpcdFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcbiAgMjY6XHR9XG4gIDI3Olx0XG4gIDI4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XG4gIDI5Olx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczMVwmIzM0OyB9LFxuICAzMDpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzJcJiMzNDsgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MjYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgcHJvZmVzc2lvbmFsJiMzOTtzIHBlcnNwZWN0aXZlOgoKKip6bDMwNzN4X2Rldl9wcm9iZTogRGVjb25zdHJ1Y3RpbmcgdGhlIERldmljZSBQcm9iZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIG1lbnRpb24gb2YgYHpsMzA3M3hfZGV2X3Byb2JlYCwgbXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSBhcm91bmQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHByb2JpbmcgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBhbmQgY29uZmlndXJlIGEgZGV2aWNlLCBsaWtlbHkgYSBaTDMwNzN4IHNlcmllcyBkZXZpY2UuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBwcm9iZSBzZXF1ZW5jZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgcmVnaXN0ZXIgaW50ZXJyb2dhdGlvbiwgcG90ZW50aWFsIHBvd2VyLW9uIHNlcXVlbmNpbmcsIGFuZCBmaW5hbGx5LCByZWdpc3RyYXRpb24gd2l0aCB0aGUgc3lzdGVtLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4gV2hhdCBhcmUgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIHJlc3BvbnNlcyBkdXJpbmcgdGhpcyBwcm9iZT8gQXJlIHRoZXJlIGtub3duIGlzc3VlcyB3aXRoIHBvd2VyLXVwIHRpbWluZyBvciByZWdpc3RlciBhY2Nlc3Mgb24gdGhpcyBwYXJ0aWN1bGFyIHBsYXRmb3JtPyBJcyB0aGVyZSBhbnkgZG9jdW1lbnRhdGlvbiByZWFkaWx5IGF2YWlsYWJsZSBmb3IgdGhlIFpMMzA3M3ggc2VyaWVzIG9yIHJlbGV2YW50IGFzc29jaWF0ZWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zPyBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgSTJDIG9yIFNQSSBjb21tdW5pY2F0aW9uIHRoYXQmIzM5O3MgbGlrZWx5IGludm9sdmVkLCBhbmQgbWVudGFsbHkgdmVyaWZ5aW5nIHRoYXQgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBpcyByb2J1c3QuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHByb2JlJiMzOTtzIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gV2hhdCBlcnJvcnMgY291bGQgaXQgcmV0dXJuPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIGlmIHRoaXMgcHJvYmUgZG9lc24mIzM5O3Qgc3VjY2VlZD8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBlcnJvcnM/IEFuZCBJJiMzOTttIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBpdCByZXBvcnRzIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzLCBzbyBkZWJ1Z2dpbmcgaXMgZWFzeS4gV2UmIzM5O2QgaGF0ZSB0byBiZSBzY3JhdGNoaW5nIG91ciBoZWFkcyBkb3duIHRoZSBsaW5lLiBJJiMzOTttIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXM7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlIG1vZHVsZXMgb3IgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgcHJvYmUgY2FuIHJ1biBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgY2xvY2sgY29uZmlndXJhdGlvbj8gRG9lcyB0aGlzIHByb2JlIGFkZHJlc3MgYW55IGNsb2NrLXJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gdGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgdGhlIGRldmljZSYjMzk7cyBmdW5jdGlvbmFsaXR5PwoKRmluYWxseSwgbXkgdGhvdWdodHMgYXJlIG9uIHNjYWxhYmlsaXR5IGFuZCByb2J1c3RuZXNzLiBIb3cgaXMgdGhpcyBwcm9iZSBkZXNpZ25lZCB0byBoYW5kbGUgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBjb25maWd1cmF0aW9ucyBvZiB0aGUgWkwzMDczeCBkZXZpY2U/IFdpbGwgdGhpcyBkZXZpY2Ugd29yayByZWxpYWJseSB3aXRoIHRoZSBwcm9kdWN0IGFzIGl0IGV4aXN0cz8gRG9lcyBpdCBpbmNsdWRlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIHRvIHByb3RlY3QgdGhlIHN5c3RlbSBmcm9tIHVucHJlZGljdGFibGUgaGFyZHdhcmUgYmVoYXZpb3I/CgpJbiBzaG9ydCwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSBkaXNzZWN0aW5nIHRoZSBgemwzMDczeF9kZXZfcHJvYmVgIGZ1bmN0aW9uIGZyb20gYSBzeXN0ZW0tbGV2ZWwgcGVyc3BlY3RpdmUsIHNlZWtpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgaXRzIHBvdGVudGlhbCBwaXRmYWxscywgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfZGV2X3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MzA9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzctLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc4OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3OS0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4NTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODYte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDY1LX1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDY2OkVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDY3LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xMDY9c3RydWN0IHpsMzA3M3hfZGV2ICp6bDMwNzN4X2Rldm1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxMDc6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwOC1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyNTpcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNi19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jLTI0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY4NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgemwzMDczeF9kZXZfcHJvYmVgLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHpsMzA3M3hfZGV2X3Byb2JlYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhIGB6bDMwNzN4YCBkZXZpY2UsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSBvZi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0JiMzOTtzIGJlZW4gcGx1Z2dlZCBpbiBvciBpcyBvdGhlcndpc2UgYmVjb21pbmcgYXZhaWxhYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2guIEFueSB1bnVzdWFsIGFwcHJvYWNoZXMgaGVyZSB3b3VsZCBiZSBpbnRlcmVzdGluZy4KKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGFwcHJvYWNoIGFuZCBhbnkgcG90ZW50aWFsIGZvciByb2J1c3RuZXNzIGlzc3Vlcy4KKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgdGltaW5nIGNvbnN0cmFpbnRzLgoqICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSYjMzk7bGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUga2VybmVsLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGFueSBjdXN0b20gY2FsbGJhY2tzIG9yIHN0cnVjdHVyZXM/IEFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVyYWN0aW9ucyB3aWxsIGJlIG9mIGludGVyZXN0LgoqICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhvcm91Z2ggZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLgoqICAgKipDb25jdXJyZW5jeSoqOiBJJiMzOTtsbCBhbHNvIGdsYW5jZSB0byBzZWUgaWYgYW55dGhpbmcgaGVyZSBpcyBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW5jeSBpc3N1ZXMgYXMgSSBrbm93IGhhcmR3YXJlIHByb2JpbmcgY2FuIG9mdGVuIGhhdmUgc2hhcmVkIHJlc291cmNlcy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJiMzOTtyZSBleHBlY3RpbmcsIGFuZCB0aGVuIGdldHRpbmcgaXQgcmVhZHkgdG8gYmUgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBkb25lIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4NTpcdGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIDk4NjpcdHtcbiA5ODc6XHRcdHUxNiBpZCwgcmV2aXNpb24sIGZ3X3ZlcjtcbiA5ODg6XHRcdHVuc2lnbmVkIGludCBpO1xuIDk4OTpcdFx0dTMyIGNmZ192ZXI7XG4gOTkwOlx0XHRpbnQgcmM7XG4gOTkxOlx0XG4gOTkyOlx0XHQvKiBSZWFkIGNoaXAgSUQgKi9cbiA5OTM6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG4gOTk0Olx0XHRpZiAocmMpXG4gOTk1Olx0XHRcdHJldHVybiByYztcbiA5OTY6XHRcbiA5OTc6XHRcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbiA5OTg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcyk7IGkmIzQzOyYjNDM7KSB7XG4gOTk5Olx0XHRcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxuMTAwMDpcdFx0XHRcdGJyZWFrO1xuMTAwMTpcdFx0fVxuMTAwMjpcdFxuMTAwMzpcdFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbjEwMDQ6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCAtRU5PREVWLFxuMTAwNTpcdFx0XHRcdFx0ICAgICBcJiMzNDtVbmtub3duIGNoaXAgSUQ6IDB4JTA0eFxcblwmIzM0OywgaWQpO1xuMTAwNjpcdFxuMTAwNzpcdFx0emxkZXYtXHUwMDNlaW5mbyA9IFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XG4xMDA4Olx0XG4xMDA5Olx0XHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbjEwMTA6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcdTAwMjZyZXZpc2lvbik7XG4xMDExOlx0XHRpZiAocmMpXG4xMDEyOlx0XHRcdHJldHVybiByYztcbjEwMTM6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXHUwMDI2ZndfdmVyKTtcbjEwMTQ6XHRcdGlmIChyYylcbjEwMTU6XHRcdFx0cmV0dXJuIHJjO1xuMTAxNjpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFx1MDAyNmNmZ192ZXIpO1xuMTAxNzpcdFx0aWYgKHJjKVxuMTAxODpcdFx0XHRyZXR1cm4gcmM7XG4xMDE5Olx0XG4xMDIwOlx0XHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcblwmIzM0OywgaWQsXG4xMDIxOlx0XHRcdHJldmlzaW9uLCBmd192ZXIpO1xuMTAyMjpcdFx0ZGV2X2RiZyh6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0N1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxuXCYjMzQ7LFxuMTAyMzpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygzMSwgMjQpLCBjZmdfdmVyKSxcbjEwMjQ6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMjMsIDE2KSwgY2ZnX3ZlciksXG4xMDI1Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXG4xMDI2Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCBjZmdfdmVyKSk7XG4xMDI3Olx0XG4xMDI4Olx0XHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxuMTAyOTpcdFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXG4xMDMwOlx0XHQgKiB1c2luZyBkZXZsaW5rLlxuMTAzMTpcdFx0ICovXG4xMDMyOlx0XHR6bGRldi1cdTAwM2VjbG9ja19pZCA9IGdldF9yYW5kb21fdTY0KCk7XG4xMDMzOlx0XG4xMDM0Olx0XHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXG4xMDM1Olx0XHR6bGRldi1cdTAwM2VwaGFzZV9hdmdfZmFjdG9yID0gMjtcbjEwMzY6XHRcbjEwMzc6XHRcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xuMTAzODpcdFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4xMDM5Olx0XHQgKi9cbjEwNDA6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbjEwNDE6XHRcdGlmIChyYylcbjEwNDI6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNDM6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA0NDpcdFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuMTA0NTpcdFx0aWYgKHJjKVxuMTA0NjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTA0NzpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4xMDQ4Olx0XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbjEwNDk6XHRcdGlmIChyYylcbjEwNTA6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNTE6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA1MjpcdFxuMTA1MzpcdFx0LyogUmVnaXN0ZXIgRFBMTCBjaGFubmVscyAqL1xuMTA1NDpcdFx0cmMgPSB6bDMwNzN4X2Rldm1fZHBsbF9pbml0KHpsZGV2KTtcbjEwNTU6XHRcdGlmIChyYylcbjEwNTY6XHRcdFx0cmV0dXJuIHJjO1xuMTA1NzpcdFxuMTA1ODpcdFx0LyogUmVnaXN0ZXIgdGhlIGRldmxpbmsgaW5zdGFuY2UgYW5kIHBhcmFtZXRlcnMgKi9cbjEwNTk6XHRcdHJjID0gemwzMDczeF9kZXZsaW5rX3JlZ2lzdGVyKHpsZGV2KTtcbjEwNjA6XHRcdGlmIChyYylcbjEwNjE6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNjI6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldmxpbmsgaW5zdGFuY2VcXG5cJiMzNDspO1xuMTA2MzpcdFxuMTA2NDpcdFx0cmV0dXJuIDA7XG4xMDY1Olx0fVxuMTA2NjpcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbjEwNjc6XHRcbjEwNjg6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0l2YW4gVmVjZXJhIFx1MDAzY2l2ZWNlcmFAcmVkaGF0LmNvbVx1MDAzZVwmIzM0Oyk7XG4xMDY5Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXCYjMzQ7KTtcbjEwNzA6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGZvciB0aGUgTWljcm9jaGlwIFpMMzA3M3ggRFBMTC9QVFAvU3luY0UgZGV2aWNlLCBhbmQgdGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBwcm9iZSBmdW5jdGlvbi4gSXQgc3RhcnRzIHdpdGggYSBzaW1wbGUgYHpsMzA3M3hfcmVhZF91MTZgIGNhbGwgdG8gZ2V0IHRoZSBkZXZpY2UgSUQgdmlhIEkyQy4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gSWYgdGhhdCByZWFkIGZhaWxzLCBvciBpZiB0aGUgSUQgZG9lc24mIzM5O3QgbWF0Y2ggYSBrbm93biB2YWx1ZSwgdGhlIHByb2JlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FTk9ERVZgLiAKCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGVtdWxhdGUgdGhpcz8gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIFN5emthbGxlciBoYXMgYSBzcGVjaWZpYyBlbXVsYXRpb24gZm9yIHRoZSBaTDMwNzN4LCB3aGljaCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBrbm93IFN5emthbGxlciAqY2FuKiBpbmplY3QgSTJDIGRldmljZXMsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIHNhbWUgYXMgaGF2aW5nIGEgcHJvcGVyIGVtdWxhdG9yIHdpdGggYSBkZWZpbmVkIHJlZ2lzdGVyIG1hcC4gSXQgKm1pZ2h0KiBpbnRlcmNlcHQgdGhlIEkyQyByZWFkcyB3aXRoIHNvbWUga2luZCBvZiBmYXVsdCBpbmplY3Rpb24sIG9yIG1heWJlIGEgbW9jaywgYnV0IEkgZG9uJiMzOTt0IHRoaW5rIFN5emthbGxlciBoYXMgYSBnZW5lcmljIEkyQyBtb2NrIHRoYXQgY2FuIHJlcGx5IHdpdGggYXJiaXRyYXJ5IGRhdGEgdW5sZXNzIGl0JiMzOTtzIHVzaW5nIGEgdmlydHVhbCBJMkMgYnVzIHRoYXQgaXQgY29udHJvbHMuIEkgcmVtZW1iZXIgdGhhdCBTeXprYWxsZXIgdXNlcyBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYW5kIGB2a21zYCBmb3IgRFJNIGV0YywgZG9lcyBpdCBoYXZlIGEgdmlydHVhbCBJMkMgYnVzPwoKVGhlcmUmIzM5O3MgYGkyYy1zdHViYCwgYnV0IFN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdXNlIGl0IHRvIG1vY2sgYXJiaXRyYXJ5IGRldmljZXMgd2l0aCBzcGVjaWZpYyByZWdpc3RlciBtYXBzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHN5emxhbmcgZGVzY3JpcHRpb24gZm9yIGl0LiBJIHJlbWVtYmVyIHRoZXJlIHVzZWQgdG8gYmUgYSBgc3l6X2kyY19zZXR1cGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBuby4KCklmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgganVzdCBhbiBJMkMgZGV2aWNlIGRyaXZlciBhbmQgdGhlcmUmIzM5O3Mgbm8gcmVhbCBoYXJkd2FyZSwgdGhlIHByb2JlIHdpbGwgZmFpbC4gVGhlIEkyQyByZWFkIHdpbGwgZmFpbCBvciByZXR1cm4gZ2FyYmFnZS4gVGhhdCBtZWFucyB0aGUgZHJpdmVyIHdvbiYjMzk7dCBiZSBpbnN0YW50aWF0ZWQsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgbmV3IFBUUCBjbG9jayBjb2RlIGxpa2UgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYW4gZXh0cmVtZWx5IHNwZWNpZmljIGVtdWxhdG9yLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHJpZ2h0IGFib3V0IHRoaXMuIEFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgYXJlIHRoaW5ncyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZS4gSXQgZG9lcyBleHBsaWNpdGx5IGNhbGwgb3V0IHRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGV4YWN0bHkgdGhpcyBzY2VuYXJpby4KClRoaXMgZHJpdmVyIHRhcmdldHMgdGhlIFpMMzA3M3gsIGEgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlLiBJdCB1c2VzIEkyQyBvciBTUEkuIEluIFFFTVUsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIGRldmljZSBtb2RlbCBmb3IgdGhlIFpMMzA3M3ggKHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseeKAlGl0JiMzOTtzIGEgdGVsZWNvbSB0aW1pbmcgY2hpcCEpLCB0aGUgSTJDIG9yIFNQSSByZWFkcyB3aWxsIGFsd2F5cyBmYWlsIG9yIHRpbWUgb3V0LiBFdmVuIGlmIFN5emthbGxlciBjcmVhdGVzIGFuIEkyQyBkZXZpY2UgdmlhIHN5c2ZzLCB0aGUgSTJDIHRyYW5zZmVycyB3aWxsIGdvIHRvIGEgZHVtbXkgYnVzIChsaWtlIGBpMmMtc3R1YmAgb3Igc29tZXRoaW5nIHNpbWlsYXIpIHdoaWNoIGhhcyBubyBzdWNoIGRldmljZSBhdHRhY2hlZC4gVGhlIEkyQyBjb250cm9sbGVyIHdpbGwgTkFDSywgdGhlIHJlYWQgd2lsbCBmYWlsLCBhbmQgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwgcmV0dXJuIGFuIGVycm9yLgoKU3BlY2lmaWNhbGx5LCB0aGUgZmFpbHVyZSB3aWxsIGhhcHBlbiBpbiBgemwzMDczeF9kZXZfcHJvYmVgIGR1cmluZyB0aGUgYHpsMzA3M3hfcmVhZF91MTZgIGNhbGwsIG9yIGV2ZW4gaWYgdGhlIHJlYWQgc29tZWhvdyByZXR1cm5zIGdhcmJhZ2UsIGl0IHdpbGwgZmFpbCBhdCB0aGUgY2hpcCBJRCBjaGVjay4gVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgU3l6a2FsbGVyIGNhbm5vdCBieXBhc3MgdGhpcyBoYXJkd2FyZSBjaGVjayB3aXRob3V0IGFuIGV4cGxpY2l0IGVtdWxhdG9yLCB3aGljaCBtZWFucyB0aGUgd2hvbGUgZHJpdmVyLCBpbmNsdWRpbmcgdGhvc2UgUFRQIGZ1bmN0aW9ucywgaXMgaW5hY2Nlc3NpYmxlLiBJdCBtYWtlcyBzZW5zZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMgZm9yIEkyQy4gQW5kIGZpbmFsbHksIGxldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY5MgoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA3OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgdGhlICYjMzQ7c3lzLyYjMzQ7IGRpcmVjdG9yeSBzZWFyY2ggeWllbGRlZCBubyByZXN1bHRzLCBidXQgdGhlIHByb21wdCBmbGFnZ2VkIHRoYXQgYXMgZXhwZWN0ZWQsIHNheWluZyB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGluc3RlYWQsIHRob3VnaCBJIGRvbiYjMzk7dCBzZWUgYHN5ei1ncmVwcGVyYCBpbiBteSB0b29sIGxpc3QuIEJ1dCB3YWl0LCBJIGRvbiYjMzk7dCAqbmVlZCogdGhvc2UgdG9vbHMsIGJlY2F1c2UgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9yIGEgc3RhbmRhcmQga2VybmVsIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgaGFyZHdhcmUgY2hpcC4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHJlcXVpcmVzIEkyQy9TUEkgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgY3JpdGljYWxseSwgdGhlcmUmIzM5O3MgYSBzdHJpY3QgY2hpcCBJRCBjaGVjayBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHJlYWNoaW5nIHRoZSBQVFAgY2xvY2sgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBpcyBzaW1wbHkgaW1wb3NzaWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvLCB0aGF0JiMzOTtzIGl0OiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2suIElzIHRoZXJlIHNvbWUga2luZCBvZiB2aXJ0dWFsIG9yIG1vY2sgZHJpdmVyIHRoYXQgY291bGQgYmUgdXNlZD8gTm9wZS4gQW55IG90aGVyIGVudHJ5IHBvaW50PyBMZXQmIzM5O3Mgc2VlLi4uIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gLiBUaGUgZnVuY3Rpb25zIGFkZGVkIGFyZSBhbGwgcmVsYXRlZCB0byB0aW1lIG9mIGRheSAoVE9EKSwgbGlrZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCwgZXRjLiBUaGVzZSBUT0QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdGhpbmdzIGxpa2UgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAgLSB0aW1lIGFkanVzdG1lbnQsIGV0Yy4gVGhhdCBtZWFucyB0aGVzZSBhcmUgUFRQIGNsb2NrIGNhbGxiYWNrcy4gV2hpY2ggaXMgcmVnaXN0ZXJlZCBpbiBgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcmAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYHpsMzA3M3hfZHBsbF9yZWdpc3RlcmAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGB6bDMwNzN4X2Rldm1fZHBsbF9pbml0YCwgd2hpY2ggaW4gdHVybiwgaXMgZnJvbSBgemwzMDczeF9kZXZfcHJvYmVgLiBUaGUgcHJvYmxlbSBpcyBgemwzMDczeF9kZXZfcHJvYmVgIGZhaWxzIGVhcmx5IHdoZW4gcmVhZGluZyB0aGUgY2hpcCBJRC4gU28sIG5vbmUgb2YgdGhpcyBpcyByZWFjaGFibGUuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRldmljZXMgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBJMkMvU1BJIGhhcmR3YXJlLiBJdCBoYXMgYSBjaGlwIElEIGNoZWNrIGluIGBwcm9iZWAgdGhhdCYjMzk7cyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cyBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgLi4uIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFBlcmZlY3QgbWF0Y2guIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uY2x1c2lvbi4KCk9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkgdG8gYWRkIFBUUCBjbG9jayBzdXBwb3J0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgSTJDL1NQSS4gRHVyaW5nIHByb2JlLCBpdCByZWFkcyBhIGhhcmR3YXJlIGNoaXAgSUQgYW5kIGZhaWxzIGlmIGl0IGRvZXNuJiMzOTt0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkgdG8gYWRkIFBUUCBjbG9jayBzdXBwb3J0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgSTJDL1NQSS4gRHVyaW5nIHByb2JlLCBpdCByZWFkcyBhIGhhcmR3YXJlIGNoaXAgSUQgYW5kIGZhaWxzIGlmIGl0IGRvZXNuJiMzOTt0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjowMy4yMzg3MzMwOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg0MDg4MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KSB0byBhZGQgUFRQIGNsb2NrIHN1cHBvcnQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBJMkMvU1BJLiBEdXJpbmcgcHJvYmUsIGl0IHJlYWRzIGEgaGFyZHdhcmUgY2hpcCBJRCBhbmQgZmFpbHMgaWYgaXQgZG9lc24ndCBtYXRjaCBrbm93biB2YWx1ZXMuIFNpbmNlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbmV3bHkgYWRkZWQgUFRQIGNsb2NrIG9wZXJhdGlvbnMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjowMy4yMzg3NDE5NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzkwNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1YmM5ZGY5ZDQ3ZDJiMzJjODk0NTUyNjliOTNiYjUzOGZhOWZlMWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxODozNjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG5AQCAtMiw3ICsyLDcgQEBcXG4gXFxuIGNvbmZpZyBaTDMwNzNYXFxuIFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4tXFx0ZGVwZW5kcyBvbiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IERQTExcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIFxcdHNlbGVjdCBSRUdNQVBcXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxcbiBcXG4gY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxcbiBcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSSBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjc5ODc0YTlmZGI0OTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMTYyLDggKzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxcbiAgKlxcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXFxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxcbisgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcXG4rICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbkBAIC0yMzQsNiArMjM1LDMxMSBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuIFxcdHJldHVybiBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICpcXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHRpbWVvdXQ7XFxuK1xcdHU4IHRvZF9jdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcXHUwMDI2dG9kX2N0cmwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG4rXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XFxuK1xcbitcXHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcXG4rICpcXG4rICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXFxuK3tcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHUzMiBuc2VjO1xcbitcXHR1NjQgc2VjO1xcbitcXHR1OCBjbWQ7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmIChuZXh0X2h6KVxcbitcXHRcXHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcXHUwMDI2c2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXFx1MDAyNm5zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHRzLVxcdTAwM2V0dl9zZWMgPSBzZWM7XFxuK1xcdHRzLVxcdTAwM2V0dl9uc2VjID0gbnNlYztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEB0czogdGltZSB0byBzZXRcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcXG4rXFx0XFx0XFx0XFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcXG4rICpcXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBJZiB0aGUgdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyxcXG4rICogbm9ybWFsaXplcyBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcXG4rICogdGhlIHJlc3VsdCBiYWNrLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBSZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6IHRpY2sgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcXHUwMDI2dHNfbmV4dCwgTlVMTCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcXHUwMDI2dHNfY3VyLCBOVUxMKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBJZiB0b28gY2xvc2UgdG8gdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0LiBJZiB0aGUgMSBIeiB0aWNrXFxuK1xcdCAqIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzLCBub3JtYWxpemUgYnkgdGhlIGVsYXBzZWQgdGlja3MuXFxuK1xcdCAqL1xcbitcXHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcXG4rXFx0aWYgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzYyB0aHJlc2hvbGRfbnMpIHtcXG4rXFx0XFx0ZnNsZWVwKCh1bnNpZ25lZCBsb25nKWRpZmYudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMgKyAxKTtcXG4rXFx0XFx0dHNfbmV4dC50dl9zZWMrKztcXG4rXFx0fSBlbHNlIGlmIChkaWZmLnR2X3NlYyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0dHNfbmV4dC50dl9zZWMgLT0gZGlmZi50dl9zZWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xcbitcXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xcbitcXHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXFx1MDAyNnRzX25leHQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKFdBUk5fT04oZGVsdGFfbnMgXFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcXHUwMDNlPSBOU0VDX1BFUl9TRUMpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cXG4rXFx0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcXG4rICpcXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHQgICAgYm9vbCB0b2Rfc3RlcClcXG4re1xcbitcXHR1OCBjdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbitcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XFxuK1xcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XFxuK1xcdGlmICh0b2Rfc3RlcClcXG4rXFx0XFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbkBAIC01LDEwICs1LDEyIEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0ZGRlZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInJlZ3MuaFxcXCJcXG4gXFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcXG4gc3RydWN0IHpsMzA3M3hfZGV2O1xcbiBcXG4gLyoqXFxuQEAgLTQyLDYgKzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xcbitcXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbisgKlxcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuK3tcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcXG4rXFx0XFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuaW5kZXggN2Y1YWZhYWFlNjM0Mi4uOGE4YzI3YTA2YWM5ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5AQCAtNTEwLDYgKzUxMCwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRpbnQgcmM7XFxuIFxcdHU4IGk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZ6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XFxuIFxcdFxcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xcbiBcXHRcXHRpZiAocmMpIHtcXG5AQCAtMTAzMyw2ICsxMDM4LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXFxuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXFxuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXFxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXFxuICAqL1xcbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cXG4gXFx0dTY0XFx0XFx0XFx0Y2xvY2tfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdG91dF9zdGVwX3RpbWVfbWFzaztcXG4gXFx0dThcXHRcXHRcXHRwaGFzZV9hdmdfZmFjdG9yO1xcbiBcXHRib29sXFx0XFx0XFx0ZnJlcV9tb25pdG9yO1xcbiB9O1xcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcXHUwMDI2XFx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbit7XFxuK1xcdHJldHVybiAhISh6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKGluZGV4KSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uNWUyOTRmMTkwNTA1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtMjI3NSw0NSArMjI3NywzNjkgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxcbisgKlxcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXFxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXFxuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXFxuKyAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgczY0IGRlbHRhKVxcbit7XFxuK1xcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XFxuK1xcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcXG4rXFx0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xcbitcXHRzMzIgc3RlcF9jeWNsZXM7XFxuK1xcdHUzMiBzeW50aF9mcmVxO1xcbitcXHRpbnQgcmM7XFxuK1xcdHU4IGk7XFxuK1xcbitcXHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucywgbGlzdCkge1xcbitcXHRcXHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xcbitcXG4rXFx0XFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4rXFxuK1xcdFxcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xcbitcXHRcXHRpZiAoc3ludGhfaWQgXFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IG91dF9pZCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XFxuK1xcdFxcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcXG4rXFx0XFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cXHUwMDNlaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xcbitcXG4rXFx0XFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXFxuK1xcdFxcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0XFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XFxuK1xcbitcXHRcXHRpZiAoIXN5bnRoX21hc2tbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXFxuK1xcdFxcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICF0b2Rfc3RlcHBlZCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRpZiAodG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHRcXHR0b2Rfc3RlcHBlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXFxuK1xcdCAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuICAqXFxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxcbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuLXZvaWRcXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcXG4ge1xcbi1cXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcXG4rXFx0aW50IHJjO1xcbiBcXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0a2ZyZWUoemxkcGxsKTtcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4rXFxuK1xcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcXG4rXFx0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cXG4rXFx0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cXG4rXFx0ICovXFxuK1xcdGlmIChkZWx0YSBcXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xcbitcXHRcXHRzMzIgcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXFx1MDAyNnJlbWFpbmRlcik7XFxuK1xcdFxcdHRzLnR2X25zZWMgPSAwO1xcbitcXHRcXHRkZWx0YSA9IHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIHRzKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXFxuK1xcdFxcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xcbitcXHRcXHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xcbitcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xcbitcXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cXG4rXFx0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcXG4rXFx0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcXG4rXFx0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc2VjX2FkanVzdGVkKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzNjQgb2Zmc2V0O1xcbitcXG4rXFx0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcXG4rXFx0ICpcXG4rXFx0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxcbitcXHQgKi9cXG4rXFx0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XFxuK1xcdGlmIChvZmZzZXQgPT0gY2hhbi1cXHUwMDNlZGZfb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgb2Zmc2V0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXFxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2Vzbid0IHN1cHBvcnQgVElFLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzMzJcXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxcbit7XFxuK1xcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xcbitcXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rXFx0Lm1heF9hZGpcXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcXG4rXFx0LmdldHRpbWV4NjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcXG4rXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuK1xcdC5hZGp0aW1lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXFxuK1xcdC5hZGpmaW5lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXFxuK1xcdC5hZGpwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcXG4rXFx0LmdldG1heHBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcXG4rXFxuK1xcdHNucHJpbnRmKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSksXFxuK1xcdFxcdCBcXFwiemwzMDczeC1kcGxsJXVcXFwiLCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2emxkcGxsLVxcdTAwM2VwdHBfaW5mbywgemxkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xcbitcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xcbitcXHR9XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXFx1MDAzZXB0cF9jbG9jaykpIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTIzOTgsNiArMjcyNCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICpcXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKi9cXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcbitcXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4rXFx0aWYgKCF6bGRwbGwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4rXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFxuK1xcdHJldHVybiB6bGRwbGw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqXFxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqL1xcbit2b2lkXFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGtmcmVlKHpsZHBsbCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXFxuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbkBAIC0yNDI4LDYgKzI3OTYsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI0NDEsNyArMjgxNiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHZvaWRcXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB7XFxuLVxcdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cXG4rXFx0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5AQCAtNSw2ICs1LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kcGxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG5AQCAtMjIsNiArMjMsOCBAQFxcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXFxuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXFxuICAqL1xcbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFxuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdGVudW0gZHBsbF90eXBlXFx0XFx0XFx0dHlwZTtcXG4gXFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXFx0XFx0bG9ja19zdGF0dXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwaW5zO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cXHRcXHRwdHBfaW5mbztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja1xcdFxcdCpwdHBfY2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbkBAIC0xNzksNiArMTc5LDIwIEBAXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXFx0XFx0NFxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDMwLCAxKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlxcdFxcdFxcdDRcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1xcdFxcdFpMX1JFRyg1LCAweDMxLCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsMjMgQEBcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFxcdFxcdEdFTk1BU0soNiwgNClcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDM2LCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjAzLjcxMzU3OTc4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY5MzY2MDI4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpIHRvIGFkZCBQVFAgY2xvY2sgc3VwcG9ydC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyBvdmVyIEkyQy9TUEkuIER1cmluZyBwcm9iZSwgaXQgcmVhZHMgYSBoYXJkd2FyZSBjaGlwIElEIGFuZCBmYWlscyBpZiBpdCBkb2Vzbid0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1YmM5ZGY5ZDQ3ZDJiMzJjODk0NTUyNjliOTNiYjUzOGZhOWZlMWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE4OjM2OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCIgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbitcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjc5ODc0YTlmZGI0OTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTE2Miw4ICsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4gICpcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4rICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4rICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG5AQCAtMjM0LDYgKzIzNSwzMTEgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKlxuKyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBJZiB0aGUgdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyxcbisgKiBub3JtYWxpemVzIGJ5IHRoZSBudW1iZXIgb2YgZWxhcHNlZCB0aWNrcy4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYztcbitcbitcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSWYgdG9vIGNsb3NlIHRvIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dC4gSWYgdGhlIDEgSHogdGlja1xuK1x0ICogY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsIG5vcm1hbGl6ZSBieSB0aGUgZWxhcHNlZCB0aWNrcy5cbitcdCAqL1xuK1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRpZiAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNjIHRocmVzaG9sZF9ucykge1xuK1x0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xuK1x0XHR0c19uZXh0LnR2X3NlYysrO1xuK1x0fSBlbHNlIGlmIChkaWZmLnR2X3NlYyBcdTAwM2MgMCkge1xuK1x0XHR0c19uZXh0LnR2X3NlYyAtPSBkaWZmLnR2X3NlYztcbitcdH1cbitcbitcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuK1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbitcdGlmICghdGltZXNwZWM2NF92YWxpZChcdTAwMjZ0c19uZXh0KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbitcdGlmICghcmMpXG4rXHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiArLTFzKVxuKyAqXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuK3tcbitcdHM2NCB0aWVfZGF0YTtcbitcdGludCByYztcbitcbitcdGlmIChXQVJOX09OKGRlbHRhX25zIFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcdTAwM2U9IE5TRUNfUEVSX1NFQykpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4rXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuKyAqXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4rXHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4re1xuK1x0dTggY3RybDtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbitcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbitcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4rXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4rXHRpZiAodG9kX3N0ZXApXG4rXHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyZWdzLmhcIlxuIFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiArMjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuKyAqXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbit7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuK1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDdmNWFmYWFhZTYzNDIuLjhhOGMyN2EwNmFjOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTUxMCw2ICs1MTAsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4rXHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDMzLDYgKzEwMzgsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiArNzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbitcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuK3tcbitcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uNWUyOTRmMTkwNTA1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMjc1LDQ1ICsyMjc3LDM2OSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuK1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuK31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbisgKlxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbisgKlxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZVxuKyAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbitcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbit7XG4rXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4rXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4rXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4rXHRzMzIgc3RlcF9jeWNsZXM7XG4rXHR1MzIgc3ludGhfZnJlcTtcbitcdGludCByYztcbitcdHU4IGk7XG4rXG4rXHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4rXG4rXHRcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXG4rXHRcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbitcdFx0aWYgKHN5bnRoX2lkIFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XG4rXHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCIsXG4rXHRcdFx0XHQgb3V0X2lkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbitcdH1cbitcbitcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcbitcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4rXHRcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxuK1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4rXG4rXHRcdC8qIFJlbWVtYmVyIGxvd2VzdC1JRCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbitcdCAqL1xuK1x0aWYgKCF0b2Rfc3RlcHBlZCkge1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbitcdFx0XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuICAqXG4tICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuK1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbitcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4rXHQgKi9cbitcdGlmIChkZWx0YSBcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcbitcdFx0czMyIHJlbWFpbmRlcjtcbitcbitcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbitcdFx0dHMudHZfbnNlYyA9IDA7XG4rXHRcdGRlbHRhID0gcmVtYWluZGVyO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIHRzKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbitcdFx0aWYgKCFkZWx0YSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcbitcdFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXG4rXHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuK1x0XHQgKi9cbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuK1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuK1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbitcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuK1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbitcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4rXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRzNjQgb2Zmc2V0O1xuK1xuK1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XG4rXHQgKlxuK1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4rXHQgKi9cbitcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4rXHRcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xuK1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuKyAqXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2Vzbid0IHN1cHBvcnQgVElFLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcbitcdGlmICghZGVsdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbit9XG4rXG4rc3RhdGljIHMzMlxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcbit7XG4rXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcbitcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuK1x0ICovXG4rXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4rXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbitcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbitcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbitcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4rXHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4rXHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4rXHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbitcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuK307XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuK1xuK1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4rXHRcdCBcInpsMzA3M3gtZHBsbCV1XCIsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXG4rXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2emxkcGxsLVx1MDAzZXB0cF9pbmZvLCB6bGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4rXHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcblwiLFxuK1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XG4rXHR9XG4rXG4rXHR6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKi9cbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuK1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yMzk4LDYgKzI3MjQsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKi9cbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1xuK1x0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4rXHRpZiAoIXpsZHBsbClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4rXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbitcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1xuK1x0cmV0dXJuIHpsZHBsbDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICpcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqL1xuK3ZvaWRcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwiKTtcbitcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0a2ZyZWUoemxkcGxsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MjgsNiArMjc5NiwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4rXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbitcdGlmIChyYykge1xuK1x0XHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0MSw3ICsyODE2LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbitcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNvcmUuaFwiXG4gXG5AQCAtMjIsNiArMjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHgzMCwgMSlcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdFx0OFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcdDlcbitcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbisgKlxuKyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgKzIxOSwyNCBAQFxuIFx0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlx0UzY0X01JTlxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcdFx0XHRaTF9SRUcoNywgMHgwQywgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XHRcdFx0WkxfUkVHKDcsIDB4MTIsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcdFx0XHRaTF9SRUcoNywgMHgxOCwgNClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0yMjEsNiArMjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjAzLjcxMzU4MTU3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNzI0NTM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQXp1cml0ZSBEUExMIERyaXZlcjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKGBkcml2ZXJzL2RwbGwvemwzMDczeC9gKS4gSXQgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBjb25zaWRlciBmdXp6aW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQ/XG5cbkknbSB0aGlua2luZywgdGhpcyBpcyBhIERQTEwgZHJpdmVyLCBzbyBpdCdzIHByb2JhYmx5IEkyQyBvciBTUEksIGFuZCBzdXJlIGVub3VnaCwgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBjb25maXJtIHRoYXQuIFRoYXQncyBnb29kLCBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3IgZW11bGF0aW9uIG9yIGF0IGxlYXN0IGFjY2VzcyB3aXRoaW4gUUVNVS4gTm93IHRoZSBxdWVzdGlvbiBpcywgKmNhbiogc3l6a2FsbGVyIHJlYWNoIGl0P1xuXG5TeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZnV6eiBJMkMgYW5kIFNQSSBkZXZpY2VzLiBJIGtub3cgaXQgY2FuIGluamVjdCBkZXZpY2VzIHZpYSBzeXNmcywgdXNlIHZpcnR1YWwgYnVzZXMsIG9yIGp1c3QgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCBgL2Rldi9pMmMtWGAgb3IgYC9kZXYvc3BpWGAuIEJ1dCB3YWl0LCB0aGlzIGlzIGEgKmtlcm5lbCBkcml2ZXIqLCBzbyBjYW4gc3l6a2FsbGVyIHJlYWNoIGl0ICphZnRlciogaXQncyBsb2FkZWQ/IFN5emthbGxlciBoYXMgc29tZSBzdXBwb3J0IGZvciBJMkMvU1BJIGRldmljZSBpbnN0YW50aWF0aW9uIGFscmVhZHkgaWYgaXQga25vd3MgaG93LCBvciBpZiBpdCdzIHBhcnQgb2YgdGhlIGRlc2NyaXB0aW9ucy5cblxuQnV0IGhhbmcgb24sIHRoZXJlJ3MgYSBjb25zdHJhaW50OiB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiAuLi4gUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBUaGlzIGlzIEkyQy9TUEksIG5vdCBQQ0llLCBzbyB0aGF0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0uIFRoYXQncyBhIGh1Z2UgcmVsaWVmLiBVc3VhbGx5LCBJMkMvU1BJIGRyaXZlcnMgYXJlIGZpbmUgYXMgbG9uZyBhcyB0aGV5J3JlIGluIHRoZSBkZXZpY2UgdHJlZSBvciBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIHN5c2ZzLiBTeXprYWxsZXIgZXZlbiB1c2VzIGBuZXdfZGV2aWNlYCB0byBwcm9iZSBJMkMgZGV2aWNlcyFcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzeXprYWxsZXIgY2FuIHByb2JlIHRoaXMgZHJpdmVyLiBUaGUgZHJpdmVyIHVzZXMgcmVnbWFwIG92ZXIgSTJDL1NQSSBzbyBsZXQncyBjaGVjayBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBpbiB0aGUga2VybmVsIHRvIGNvbmZpcm0uIEkgdGhpbmsgaXQgbG9va3MgcHJvbWlzaW5nLCBzbyBsZXQncyBkaWcgaW50byB0aGF0IGRpcmVjdG9yeSB0byBjaGVjayBpZiB0aGlzIGlzIGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjEyLjg4NjAzNzYzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4NDAxNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA0NDg3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTQtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNTpcXHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTE3PWNvbmZpZyBaTDMwNzNYX0kyQ1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yNi1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjc6XFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTI5PWNvbmZpZyBaTDMwNzNYX1NQSVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zOC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzk6XFx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1pMMzA3M1gpXFx0XFx0Kz0gemwzMDczeC5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6NDp6bDMwNzN4LW9ianNcXHRcXHRcXHQ6PSBjaGFuLm8gY29yZS5vIGRldmxpbmsubyBkcGxsLm9cXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBmbGFzaC5vIGZ3Lm8gb3V0Lm8gcHJvcC5vIHJlZi5vIHN5bnRoLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS02LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1pMMzA3M1hfSTJDKVxcdCs9IHpsMzA3M3hfaTJjLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo4OnpsMzA3M3hfaTJjLW9ianNcXHRcXHQ6PSBpMmMub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1pMMzA3M1hfU1BJKVxcdCs9IHpsMzA3M3hfc3BpLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMTp6bDMwNzN4X3NwaS1vYmpzXFx0XFx0Oj0gc3BpLm9cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMy0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTQ6ICogemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSAtIHVwZGF0ZSBEUExMIGNoYW5uZWwgc3RhdHVzIGZyb20gSFdcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNi0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDppbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjEte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMtXFx0dTY0IHZhbDtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PTl9TVEFUVVMoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNy1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2Vtb25fc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzE6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRlNFTF9TVEFUVVMoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2VyZWZzZWxfc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOC1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzk6XFx0aWYgKCF6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNoYW4pKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwOlxcdFxcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MS1cXHRcXHRcXHRjaGFuLVxcdTAwM2VkZl9vZmZzZXQgPSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYtXFx0XFx0XFx0XFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Mi1cXHRcXHRcXHQgICAgICBaTF9EUExMX0RGX1JFQURfU0VNIHwgWkxfRFBMTF9ERl9SRUFEX1JFRl9PRlNUKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTY6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3LVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjI6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoaW5kZXgpLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTcxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MjogKiB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0IC0gc3dpdGNoIERQTEwgY2hhbm5lbCB0byBOQ08gbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTc0LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODItICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjgzOmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04NC17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjg1OlxcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04Ni1cXHR1OCBwcmV2X21vZGUsIGRmX3JlYWQ7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjkwOlxcdHByZXZfbW9kZSA9IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTEtXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTYtXFx0aWYgKHByZXZfbW9kZSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfRlJFRVJVTikge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5NzpcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX05DTyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTk4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5OTpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAwLVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAxLVxcdFxcdGlmIChyYykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMDI6XFx0XFx0XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMy1cXHRcXHRcXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIwLVxcdFxcdCAgRklFTERfUFJFUChaTF9EUExMX0RGX1JFQURfQ01ELCBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTIxOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksIGRmX3JlYWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMjItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMxOlxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMyOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzMtXFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzQtXFx0aWYgKHJjKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzNTpcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgcHJldl9tb2RlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTM2LVxcdFxcdHJldHVybiByYztcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDctXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0ODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDktXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTYxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjI6ICogemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoIC0gZmV0Y2ggRFBMTCBjaGFubmVsIHN0YXRlIGZyb20gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTY0LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3MC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTcxOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Mi17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MzpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc0LVxcdGludCByYywgaTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLCBcXHUwMDI2Y2hhbi1cXHUwMDNlY3RybCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Ny1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc5LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODA6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTgxLVxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODUtXFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiRFBMTCV1IG1vZGU6ICV1LCByZWY6ICV1XFxcXG5cXFwiLCBpbmRleCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTg2OlxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSwgemwzMDczeF9jaGFuX3JlZl9nZXQoY2hhbikpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4ODpcXHRyYyA9IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoemxkZXYsIGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTUtXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE5NjpcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTctXFx0XFx0Y2hhbi1cXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDAtXFx0XFx0XFxcIkRQTEwldSBsb2NrX3N0YXRlOiAldSwgaG86ICV1LCBzZWxfc3RhdGU6ICV1LCBzZWxfcmVmOiAldVxcXFxuXFxcIixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAxOlxcdFxcdGluZGV4LCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY2hhbiksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMjpcXHRcXHR6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkoY2hhbikgPyAxIDogMCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAzOlxcdFxcdHpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDQ6XFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA1LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwOC1cXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA5OlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjEwLVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxNS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjaGFuLVxcdTAwM2VyZWZfcHJpbyk7IGkrKykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMTY6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlcmVmX3ByaW9baV0pO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyNS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI2OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQgLSBnZXQgY3VycmVudCBEUExMIGNoYW5uZWwgc3RhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI3OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjI4LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGdldCBzdGF0ZSBmb3JcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzEtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjpjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMy1cXHRcXHRcXHRcXHRcXHRcXHQgIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzOC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjM5OiAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjQwOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDEtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDkte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjU0OlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFxcdTAwMjZ0b2RfY3RybCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1NS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjY2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNjc6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNjgtXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjczLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNzQ6ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODQtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NTpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODYte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyODc6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg4LVxcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTEtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MjogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjkzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTQtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTgtICpcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk5OiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAxLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAzLVxcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzE2LVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMxNzpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTgtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMS1cXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzIzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMyNjpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzMxOlxcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNS1cXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0NzogKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNDg6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM0OS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1MS0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTI6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzUzLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTQtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NTppbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU2LVxcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2MC1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjE6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzYyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2NTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY2LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2OTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzcwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzItXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3MzpcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc0LVxcdFxcdFxcdFxcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc4OiAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3OTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgwLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg5LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5MDogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOTEtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5Mi0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzkzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDAtXFx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwMTpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDUtXFx0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDY6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MjY6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI3LX1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MjktLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzMDogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDMxOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MzItICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MzctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzODppbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDI6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQzLVxcdGlmICghcmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQ5LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTA6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTE6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1Mi0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1OS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2MS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDcwLVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ3MTpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDcyLVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4MDpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgxLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4NDpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODUtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg4OlxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDg5LVxcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5Mi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDkzOiAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5NDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk1LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTA0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MDU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MDYtXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNC1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE1OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTYtXFx0XFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTIxOlxcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjItXFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUyNjpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyOS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTMwOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM5LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NDA6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQxLX1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0Ni0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBzZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTU1LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTY6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NzpcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTgte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTk6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjAtXFx0aW50IHJjLCBpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2Ny1cXHRpZiAoZGNoYW4tXFx1MDAzZWN0cmwgIT0gY2hhbi1cXHUwMDNlY3RybCkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Njg6XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY5LVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZWN0cmwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3NS1cXHRpZiAoZGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsICE9IGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3NjpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc3LVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTEtXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gaW50byBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU5MjpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5My1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTktXFx0XFx0aWYgKGRjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSAhPSBjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDA6XFx0XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjA4LVxcdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjA5OlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9XUixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEwLVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTEzPXN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgtICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoyNTpzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMjYtXFx0c3RydWN0X2dyb3VwKGNmZyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0zNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM5OmNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDAtXFx0XFx0XFx0XFx0XFx0XFx0IHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQyOlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDQ6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDktXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ni1cXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTg6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC02MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYzOiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTY4PXN0YXRpYyBpbmxpbmUgczY0XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjY5OnpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTcwLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03NC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NzU6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjgwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTgxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODY6ICogemwzMDczeF9jaGFuX3JlZl9nZXQgLSBnZXQgbWFudWFsbHkgc2VsZWN0ZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05MC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTE6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk3OiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTAxOnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAyLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwNzogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTIte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExNi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTE3OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTIzPXN0YXRpYyBpbmxpbmUgdThcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI0OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM1OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNi0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNDE6emwzMDczeF9jaGFuX3JlZl9wcmlvX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYsIHU4IHByaW8pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE0Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNTI6ICogemwzMDczeF9jaGFuX3JlZl9pc19zZWxlY3RhYmxlIC0gY2hlY2sgaWYgcmVmZXJlbmNlIGlzIHNlbGVjdGFibGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUzLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNTg9c3RhdGljIGlubGluZSBib29sXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE1OTp6bDMwNzN4X2NoYW5fcmVmX2lzX3NlbGVjdGFibGUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjE6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY2hhbiwgcmVmKSAhPSBaTF9EUExMX1JFRl9QUklPX05PTkU7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Mi19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY0LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjU6ICogemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBsb2NrIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTcxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzUtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3NjogKiB6bDMwNzN4X2NoYW5faXNfbG9ja2VkIC0gY2hlY2sgaWYgY2hhbm5lbCBpcyBsb2NrZWQgdG8gYSByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTc3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE4MTpzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX2lzX2xvY2tlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODM6XFx0dTggbG9ja19zdGF0ZSA9IHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg0LVxcdHJldHVybiBsb2NrX3N0YXRlID09IFpMX0RQTExfTU9OX1NUQVRVU19TVEFURV9MT0NLO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTg4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8gLSBjaGVjayBpZiBjaGFubmVsIGlzIGluIGF1dG9tYXRpYyBtb2RlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4OS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxOTM6c3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTk1OlxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX0FVVE87XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5Ni19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk4LS8qKlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjoxMi45ODg4ODM0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MDgzODExOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCwgUFRQLCBhbmQgU3luY0UgZGV2aWNlcy4gSXQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIGlzIHRoaXMgdGhpbmcgZW11bGF0ZWQgaW4gUUVNVT8gQnV0IG5vLCBpdCdzIGEgZGVkaWNhdGVkIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZGV2aWNlLCBub3Qgc29tZXRoaW5nIGdlbmVyaWMuIEhtbSwgYnV0IGl0J3MgYW4gSTJDIG9yIFNQSSBkZXZpY2UsIHJpZ2h0P1xuXG5Ob3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGNhbiBTeXprYWxsZXIsIG15IGZhdm9yaXRlIGZ1enppbmcgdG9vbCwgZXZlbiAqaGFuZGxlKiBJMkMgb3IgU1BJIGRldmljZXM/IFRoZSBnb29kIG5ld3MgaXMsIHllcywgaXQgY2FuISBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBpbmplY3RpbmcgSTJDL1NQSSBkZXZpY2VzIGlmIGl0IGtub3dzIHRoZSBzcGVjaWZpY3MsIG9yIGV2ZW4ganVzdCBvcGVuaW5nIGAvZGV2L2kyYy1YYCBhbmQgdGFsa2luZyB0byB0aGUgYnVzLlxuXG5Ib3dldmVyLCBhIGNyaXRpY2FsIHBvaW50IGNvbWVzIHRvIG1pbmQ6IGlmIHRoZSBkcml2ZXIgaXNuJ3QgbG9hZGVkIGluIHRoZSBmaXJzdCBwbGFjZSwgU3l6a2FsbGVyIGNhbid0IGZ1enogaXQuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIFN5emthbGxlciBsb2FkIHRoZSBkcml2ZXI/IEl0IGFwcGVhcnMgU3l6a2FsbGVyICpjYW4qIGxvYWQgdGhlIGRyaXZlciBpZiBpdCdzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCwgdXNpbmcgYENPTkZJR19aTDMwNzNYX0kyQz15YCwgd2hpY2ggbG9va3MgbGlrZSBhbiBvcHRpb24gaGVyZS4gVGhlbiBTeXprYWxsZXIgY2FuIHRyeSB0byBpbnN0YW50aWF0ZSBpdCB2aWEgc3lzZnMgYG5ld19kZXZpY2VgIGZvciBJMkMuXG5cbldhaXQgYSBzZWNvbmQuIFRoZSBvcmlnaW5hbCBwcm9tcHQgdGFsa3MgYWJvdXQgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIG5lZWRpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gVGhpcyBpcyAqbm90KiBhIFBDSWUgY2FyZDsgaXQncyBJMkMvU1BJLCBzbyBpdCdzIGEgZGlmZmVyZW50IHVzZSBjYXNlLlxuXG5Pa2F5LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEdpdmVuIHRoYXQgaXQncyBhbiBJMkMgZGV2aWNlLCBhbmQgU3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSBpdCB1c2luZyBgZWNobyB6bDMwNzN4IFx1MDAzZSAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCwgdGhlIGFuc3dlciBpcyBwcm9iYWJseSB5ZXMuXG5cbkxldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGlmIHRoaXMgZHJpdmVyIGhhcyBhbiBJMkMgSUQgdGFibGUuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCB0byBjb25maXJtIFN5emthbGxlciBjYW4gYWN0dWFsbHkgaW5zdGFudGlhdGUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjIxLjg5NzI2NjU0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQwMTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpMmNfZGV2aWNlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cXHR7IC5uYW1lID0gXFxcInpsMzA3MzFcXFwiIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjIxLjk5MTY3Mjg2MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzQ3MzYyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJMkMgRGV2aWNlIFByb2JlIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGRldmljZSBoYXMgYW4gSTJDIElEIHRhYmxlLCB3aGljaCBpcyBnb29kLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGluc3RhbnRpYXRpb24gdXNpbmcgYG5ld19kZXZpY2VgLiBUaGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbi4gTm93IEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJvYmUgZnVuY3Rpb24gaXRzZWxmLiBEb2VzIHRoZSBwcm9iZSBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIHRoZSBoYXJkd2FyZT8gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IHJlYWQgYW55IHJlZ2lzdGVycyBvciBleGNoYW5nZSBhbnkgZGF0YSBvbiB0aGUgYnVzPyBNeSBtYWluIGNvbmNlcm4gaXMsIGlmIGl0IGRvZXMsIHdpbGwgaXQgZmFpbCBncmFjZWZ1bGx5IGlmIHRoZSBleHBlY3RlZCByZXNwb25zZSBpc24ndCByZWNlaXZlZD8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgdW5leHBlY3RlZCBoYW5ncyBvciBlcnJvcnMgZHVyaW5nIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgcHJvY2VzcyBjYW4gY29udGludWUsIHNvIEkgYmV0dGVyIGNoZWNrIHRoZSBgemwzMDczeF9pMmNfcHJvYmVgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDEzMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjI2LjA2NjQxMjY1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2MzE1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9pMmNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTEwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjExOnN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTItXFx0fSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NC1cXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MzY6MjYuMTgwMDUwMjIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUxNzgwNDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgWkwzMDczeCBQcm9iZSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY29ubmVjdGlvbiBwcm9jZXNzLCBzbyBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB6bDMwNzN4X2kyY19wcm9iZWAgYW5kIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb25zLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgSTJDIHZlcnNpb24gaXMgdGhlIG1vc3QgZ2VuZXJpYywgYXMgSTJDIHByb3ZpZGVzIHRoZSBsZWFzdCBvdmVyaGVhZCB0byB0aGUgc3lzdGVtLiBGcm9tIHRoZXJlLCBJIGV4cGVjdCBgemwzMDczeF9kZXZfcHJvYmVgIHRvIGJlIHRoZSBhY3R1YWwgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGRldmljZSwgYW5kIHBvdGVudGlhbGx5IHRoZSBwbGFjZSB3aGVyZSBvdGhlciBtZXRob2RzIG9mIGNvbm5lY3Rpb24gYXJlIHN1cHBvcnRlZC4gTGV0J3Mgc2VlIGhvdyB0aGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHdoYXQgcmVzb3VyY2VzIGFyZSByZXF1ZXN0ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgaW5pdGlhbGx5LiBUaGUgbmFtaW5nIHN1Z2dlc3RzIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgd2l0aCB0aGUgSTJDLXNwZWNpZmljIHByb2JlIGhhbmRsaW5nIGJ1cyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGBkZXZfcHJvYmVgIHRha2luZyBjYXJlIG9mIHRoZSBhY3R1YWwgZGV2aWNlIHNldHVwLiBJJ20gbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHBhdHRlcm4gb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGlkZW50aWZpY2F0aW9uLCBhbmQgcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBBcmUgdGhleSB1c2luZyB0aGUgRGV2aWNlIFRyZWUgb3IgZGlyZWN0IGJvYXJkIGRlZmluaXRpb25zIGZvciBjb25maWd1cmF0aW9uPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIGFuZCBmYWxsYmFjayBtZWNoYW5pc21zPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgYHpsMzA3M3hfZGV2X3Byb2JlYCBpcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGEgcGF0aCBzZXR1cCwgYmVnaW5zLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY3MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjMyLjY5Nzg1Njc1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMTpcXHRzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuICAxMjpcXHR7XFxuICAxMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuICAxNDpcXHRcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2O1xcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHR6bGRldiA9IHpsMzA3M3hfZGV2bV9hbGxvYyhkZXYpO1xcbiAgMTc6XFx0XFx0aWYgKElTX0VSUih6bGRldikpXFxuICAxODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih6bGRldik7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdHpsZGV2LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFxcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xcbiAgMjE6XFx0XFx0aWYgKElTX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSlcXG4gIDIyOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSxcXG4gIDIzOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcXFxuXFxcIik7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xcbiAgMjk6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMxXFxcIiB9LFxcbiAgMzA6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMyXFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjozMi42OTc5MTk0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxMjQyODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwncyBwZXJzcGVjdGl2ZTpcblxuKip6bDMwNzN4X2Rldl9wcm9iZTogRGVjb25zdHJ1Y3RpbmcgdGhlIERldmljZSBQcm9iZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBtZW50aW9uIG9mIGB6bDMwNzN4X2Rldl9wcm9iZWAsIG15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgYXJvdW5kIGRyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBwcm9iaW5nIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgYW5kIGNvbmZpZ3VyZSBhIGRldmljZSwgbGlrZWx5IGEgWkwzMDczeCBzZXJpZXMgZGV2aWNlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgcHJvYmUgc2VxdWVuY2U6IHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIHJlZ2lzdGVyIGludGVycm9nYXRpb24sIHBvdGVudGlhbCBwb3dlci1vbiBzZXF1ZW5jaW5nLCBhbmQgZmluYWxseSwgcmVnaXN0cmF0aW9uIHdpdGggdGhlIHN5c3RlbS5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLiBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgcmVzcG9uc2VzIGR1cmluZyB0aGlzIHByb2JlPyBBcmUgdGhlcmUga25vd24gaXNzdWVzIHdpdGggcG93ZXItdXAgdGltaW5nIG9yIHJlZ2lzdGVyIGFjY2VzcyBvbiB0aGlzIHBhcnRpY3VsYXIgcGxhdGZvcm0/IElzIHRoZXJlIGFueSBkb2N1bWVudGF0aW9uIHJlYWRpbHkgYXZhaWxhYmxlIGZvciB0aGUgWkwzMDczeCBzZXJpZXMgb3IgcmVsZXZhbnQgYXNzb2NpYXRlZCBkZXZpY2UgY29uZmlndXJhdGlvbnM/IEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBJMkMgb3IgU1BJIGNvbW11bmljYXRpb24gdGhhdCdzIGxpa2VseSBpbnZvbHZlZCwgYW5kIG1lbnRhbGx5IHZlcmlmeWluZyB0aGF0IHRoZSBidXMgaW5pdGlhbGl6YXRpb24gaXMgcm9idXN0LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcHJvYmUncyBzdWNjZXNzIG9yIGZhaWx1cmUuIFdoYXQgZXJyb3JzIGNvdWxkIGl0IHJldHVybj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpZiB0aGlzIHByb2JlIGRvZXNuJ3Qgc3VjY2VlZD8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBlcnJvcnM/IEFuZCBJJ20gY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGl0IHJlcG9ydHMgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMsIHNvIGRlYnVnZ2luZyBpcyBlYXN5LiBXZSdkIGhhdGUgdG8gYmUgc2NyYXRjaGluZyBvdXIgaGVhZHMgZG93biB0aGUgbGluZS4gSSdtIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXM7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlIG1vZHVsZXMgb3IgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgcHJvYmUgY2FuIHJ1biBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgY2xvY2sgY29uZmlndXJhdGlvbj8gRG9lcyB0aGlzIHByb2JlIGFkZHJlc3MgYW55IGNsb2NrLXJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gdGhhdCdzIGNyaXRpY2FsIGZvciB0aGUgZGV2aWNlJ3MgZnVuY3Rpb25hbGl0eT9cblxuRmluYWxseSwgbXkgdGhvdWdodHMgYXJlIG9uIHNjYWxhYmlsaXR5IGFuZCByb2J1c3RuZXNzLiBIb3cgaXMgdGhpcyBwcm9iZSBkZXNpZ25lZCB0byBoYW5kbGUgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBjb25maWd1cmF0aW9ucyBvZiB0aGUgWkwzMDczeCBkZXZpY2U/IFdpbGwgdGhpcyBkZXZpY2Ugd29yayByZWxpYWJseSB3aXRoIHRoZSBwcm9kdWN0IGFzIGl0IGV4aXN0cz8gRG9lcyBpdCBpbmNsdWRlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIHRvIHByb3RlY3QgdGhlIHN5c3RlbSBmcm9tIHVucHJlZGljdGFibGUgaGFyZHdhcmUgYmVoYXZpb3I/XG5cbkluIHNob3J0LCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRpc3NlY3RpbmcgdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb24gZnJvbSBhIHN5c3RlbS1sZXZlbCBwZXJzcGVjdGl2ZSwgc2Vla2luZyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCBpdHMgcG90ZW50aWFsIHBpdGZhbGxzLCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MjYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjM5LjAxMDM1MjEzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NzQyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9kZXZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MzA9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc4OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzktICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODU6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4Ni17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2NS19XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwNjY6RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwNjctXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA2PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjEwNzppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwOC1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjI1OlxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjM5LjA5MzAzMDYzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY2MDExOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHpsMzA3M3hfZGV2X3Byb2JlYCwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB3ZSdyZSBsb29raW5nIGF0IGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoYXQgbWVhbnMgd2UncmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIGEgYHpsMzA3M3hgIGRldmljZSwgd2hpY2ggSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YuIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0J3MgYmVlbiBwbHVnZ2VkIGluIG9yIGlzIG90aGVyd2lzZSBiZWNvbWluZyBhdmFpbGFibGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUncyBhIG1vcmUgZ2VuZXJpYyBhcHByb2FjaC4gQW55IHVudXN1YWwgYXBwcm9hY2hlcyBoZXJlIHdvdWxkIGJlIGludGVyZXN0aW5nLlxuKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEknbSBrZWVuIHRvIHNlZSB0aGUgYXBwcm9hY2ggYW5kIGFueSBwb3RlbnRpYWwgZm9yIHJvYnVzdG5lc3MgaXNzdWVzLlxuKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCB0aW1pbmcgY29uc3RyYWludHMuXG4qICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSdsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwuIElzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBkZXZpY2UgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3Mgb3Igc3RydWN0dXJlcz8gQW55IGN1c3RvbSBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb25zIHdpbGwgYmUgb2YgaW50ZXJlc3QuXG4qICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSdtIGV4cGVjdGluZyB0aG9yb3VnaCBlcnJvciBoYW5kbGluZywgZXNwZWNpYWxseSB3aGVuIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUuXG4qICAgKipDb25jdXJyZW5jeSoqOiBJJ2xsIGFsc28gZ2xhbmNlIHRvIHNlZSBpZiBhbnl0aGluZyBoZXJlIGlzIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBhcyBJIGtub3cgaGFyZHdhcmUgcHJvYmluZyBjYW4gb2Z0ZW4gaGF2ZSBzaGFyZWQgcmVzb3VyY2VzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJ3JlIGV4cGVjdGluZywgYW5kIHRoZW4gZ2V0dGluZyBpdCByZWFkeSB0byBiZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhleSd2ZSBkb25lIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjQ0LjU1OTA0NzUyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODU6XFx0aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIDk4NjpcXHR7XFxuIDk4NzpcXHRcXHR1MTYgaWQsIHJldmlzaW9uLCBmd192ZXI7XFxuIDk4ODpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gOTg5OlxcdFxcdHUzMiBjZmdfdmVyO1xcbiA5OTA6XFx0XFx0aW50IHJjO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHQvKiBSZWFkIGNoaXAgSUQgKi9cXG4gOTkzOlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbiA5OTQ6XFx0XFx0aWYgKHJjKVxcbiA5OTU6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA5OTY6XFx0XFxuIDk5NzpcXHRcXHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXFxuIDk5ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSsrKSB7XFxuIDk5OTpcXHRcXHRcXHRpZiAoemwzMDczeF9jaGlwX2lkc1tpXS5pZCA9PSBpZClcXG4xMDAwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEwMDE6XFx0XFx0fVxcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRpZiAoaSA9PSBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpKVxcbjEwMDQ6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4xMDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlVua25vd24gY2hpcCBJRDogMHglMDR4XFxcXG5cXFwiLCBpZCk7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHpsZGV2LVxcdTAwM2VpbmZvID0gXFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdC8qIFJlYWQgcmV2aXNpb24sIGZpcm13YXJlIHZlcnNpb24gYW5kIGN1c3RvbSBjb25maWcgdmVyc2lvbiAqL1xcbjEwMTA6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuMTAxMTpcXHRcXHRpZiAocmMpXFxuMTAxMjpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAxMzpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFxcdTAwMjZmd192ZXIpO1xcbjEwMTQ6XFx0XFx0aWYgKHJjKVxcbjEwMTU6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMTY6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFxcdTAwMjZjZmdfdmVyKTtcXG4xMDE3OlxcdFxcdGlmIChyYylcXG4xMDE4OlxcdFxcdFxcdHJldHVybiByYztcXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiQ2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcXFxuXFxcIiwgaWQsXFxuMTAyMTpcXHRcXHRcXHRyZXZpc2lvbiwgZndfdmVyKTtcXG4xMDIyOlxcdFxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkN1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxcXG5cXFwiLFxcbjEwMjM6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMzEsIDI0KSwgY2ZnX3ZlciksXFxuMTAyNDpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCBjZmdfdmVyKSxcXG4xMDI1OlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXFxuMTAyNjpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgY2ZnX3ZlcikpO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxcbjEwMjk6XFx0XFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXFxuMTAzMDpcXHRcXHQgKiB1c2luZyBkZXZsaW5rLlxcbjEwMzE6XFx0XFx0ICovXFxuMTAzMjpcXHRcXHR6bGRldi1cXHUwMDNlY2xvY2tfaWQgPSBnZXRfcmFuZG9tX3U2NCgpO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXFxuMTAzNTpcXHRcXHR6bGRldi1cXHUwMDNlcGhhc2VfYXZnX2ZhY3RvciA9IDI7XFxuMTAzNjpcXHRcXG4xMDM3OlxcdFxcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xcbjEwMzg6XFx0XFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXFxuMTAzOTpcXHRcXHQgKi9cXG4xMDQwOlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4xMDQxOlxcdFxcdGlmIChyYylcXG4xMDQyOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNDM6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNDQ6XFx0XFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbjEwNDU6XFx0XFx0aWYgKHJjKVxcbjEwNDY6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA0NzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuMTA0ODpcXHRcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4xMDQ5OlxcdFxcdGlmIChyYylcXG4xMDUwOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNTE6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHQvKiBSZWdpc3RlciBEUExMIGNoYW5uZWxzICovXFxuMTA1NDpcXHRcXHRyYyA9IHpsMzA3M3hfZGV2bV9kcGxsX2luaXQoemxkZXYpO1xcbjEwNTU6XFx0XFx0aWYgKHJjKVxcbjEwNTY6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHQvKiBSZWdpc3RlciB0aGUgZGV2bGluayBpbnN0YW5jZSBhbmQgcGFyYW1ldGVycyAqL1xcbjEwNTk6XFx0XFx0cmMgPSB6bDMwNzN4X2RldmxpbmtfcmVnaXN0ZXIoemxkZXYpO1xcbjEwNjA6XFx0XFx0aWYgKHJjKVxcbjEwNjE6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA2MjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bGluayBpbnN0YW5jZVxcXFxuXFxcIik7XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdHJldHVybiAwO1xcbjEwNjU6XFx0fVxcbjEwNjY6XFx0RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuMTA2NzpcXHRcXG4xMDY4OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkl2YW4gVmVjZXJhIFxcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuMTA2OTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXFxcIik7XFxuMTA3MDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjQ0LjU1OTI1NTI4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDYwMjA4NzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBmb3IgdGhlIE1pY3JvY2hpcCBaTDMwNzN4IERQTEwvUFRQL1N5bmNFIGRldmljZSwgYW5kIHRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgcHJvYmUgZnVuY3Rpb24uIEl0IHN0YXJ0cyB3aXRoIGEgc2ltcGxlIGB6bDMwNzN4X3JlYWRfdTE2YCBjYWxsIHRvIGdldCB0aGUgZGV2aWNlIElEIHZpYSBJMkMuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gSWYgdGhhdCByZWFkIGZhaWxzLCBvciBpZiB0aGUgSUQgZG9lc24ndCBtYXRjaCBhIGtub3duIHZhbHVlLCB0aGUgcHJvYmUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVOT0RFVmAuIFxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIFN5emthbGxlciBlbXVsYXRlIHRoaXM/IEl0IGRvZXNuJ3QgbG9vayBsaWtlIFN5emthbGxlciBoYXMgYSBzcGVjaWZpYyBlbXVsYXRpb24gZm9yIHRoZSBaTDMwNzN4LCB3aGljaCBtYWtlcyBzZW5zZTsgaXQncyBhIHNwZWNpYWxpemVkIHBpZWNlIG9mIGhhcmR3YXJlLiBJIGtub3cgU3l6a2FsbGVyICpjYW4qIGluamVjdCBJMkMgZGV2aWNlcywgYnV0IGl0J3Mgbm90IHRoZSBzYW1lIGFzIGhhdmluZyBhIHByb3BlciBlbXVsYXRvciB3aXRoIGEgZGVmaW5lZCByZWdpc3RlciBtYXAuIEl0ICptaWdodCogaW50ZXJjZXB0IHRoZSBJMkMgcmVhZHMgd2l0aCBzb21lIGtpbmQgb2YgZmF1bHQgaW5qZWN0aW9uLCBvciBtYXliZSBhIG1vY2ssIGJ1dCBJIGRvbid0IHRoaW5rIFN5emthbGxlciBoYXMgYSBnZW5lcmljIEkyQyBtb2NrIHRoYXQgY2FuIHJlcGx5IHdpdGggYXJiaXRyYXJ5IGRhdGEgdW5sZXNzIGl0J3MgdXNpbmcgYSB2aXJ0dWFsIEkyQyBidXMgdGhhdCBpdCBjb250cm9scy4gSSByZW1lbWJlciB0aGF0IFN5emthbGxlciB1c2VzIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBhbmQgYHZrbXNgIGZvciBEUk0gZXRjLCBkb2VzIGl0IGhhdmUgYSB2aXJ0dWFsIEkyQyBidXM/XG5cblRoZXJlJ3MgYGkyYy1zdHViYCwgYnV0IFN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSB1c2UgaXQgdG8gbW9jayBhcmJpdHJhcnkgZGV2aWNlcyB3aXRoIHNwZWNpZmljIHJlZ2lzdGVyIG1hcHMgdW5sZXNzIHRoZXJlJ3MgYSBzeXpsYW5nIGRlc2NyaXB0aW9uIGZvciBpdC4gSSByZW1lbWJlciB0aGVyZSB1c2VkIHRvIGJlIGEgYHN5el9pMmNfc2V0dXBgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgbm8uXG5cbklmIHdlJ3JlIGRlYWxpbmcgd2l0aCBqdXN0IGFuIEkyQyBkZXZpY2UgZHJpdmVyIGFuZCB0aGVyZSdzIG5vIHJlYWwgaGFyZHdhcmUsIHRoZSBwcm9iZSB3aWxsIGZhaWwuIFRoZSBJMkMgcmVhZCB3aWxsIGZhaWwgb3IgcmV0dXJuIGdhcmJhZ2UuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciB3b24ndCBiZSBpbnN0YW50aWF0ZWQsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgbmV3IFBUUCBjbG9jayBjb2RlIGxpa2UgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYW4gZXh0cmVtZWx5IHNwZWNpZmljIGVtdWxhdG9yLlxuXG5MZXQncyBtYWtlIHN1cmUgSSdtIHJpZ2h0IGFib3V0IHRoaXMuIEFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgYXJlIHRoaW5ncyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZS4gSXQgZG9lcyBleHBsaWNpdGx5IGNhbGwgb3V0IHRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgZXhhY3RseSB0aGlzIHNjZW5hcmlvLlxuXG5UaGlzIGRyaXZlciB0YXJnZXRzIHRoZSBaTDMwNzN4LCBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZS4gSXQgdXNlcyBJMkMgb3IgU1BJLiBJbiBRRU1VLCB1bmxlc3MgdGhlcmUncyBzb21lIGRldmljZSBtb2RlbCBmb3IgdGhlIFpMMzA3M3ggKHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseeKAlGl0J3MgYSB0ZWxlY29tIHRpbWluZyBjaGlwISksIHRoZSBJMkMgb3IgU1BJIHJlYWRzIHdpbGwgYWx3YXlzIGZhaWwgb3IgdGltZSBvdXQuIEV2ZW4gaWYgU3l6a2FsbGVyIGNyZWF0ZXMgYW4gSTJDIGRldmljZSB2aWEgc3lzZnMsIHRoZSBJMkMgdHJhbnNmZXJzIHdpbGwgZ28gdG8gYSBkdW1teSBidXMgKGxpa2UgYGkyYy1zdHViYCBvciBzb21ldGhpbmcgc2ltaWxhcikgd2hpY2ggaGFzIG5vIHN1Y2ggZGV2aWNlIGF0dGFjaGVkLiBUaGUgSTJDIGNvbnRyb2xsZXIgd2lsbCBOQUNLLCB0aGUgcmVhZCB3aWxsIGZhaWwsIGFuZCBgemwzMDczeF9yZWFkX3UxNmAgd2lsbCByZXR1cm4gYW4gZXJyb3IuXG5cblNwZWNpZmljYWxseSwgdGhlIGZhaWx1cmUgd2lsbCBoYXBwZW4gaW4gYHpsMzA3M3hfZGV2X3Byb2JlYCBkdXJpbmcgdGhlIGB6bDMwNzN4X3JlYWRfdTE2YCBjYWxsLCBvciBldmVuIGlmIHRoZSByZWFkIHNvbWVob3cgcmV0dXJucyBnYXJiYWdlLCBpdCB3aWxsIGZhaWwgYXQgdGhlIGNoaXAgSUQgY2hlY2suIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IFN5emthbGxlciBjYW5ub3QgYnlwYXNzIHRoaXMgaGFyZHdhcmUgY2hlY2sgd2l0aG91dCBhbiBleHBsaWNpdCBlbXVsYXRvciwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIGRyaXZlciwgaW5jbHVkaW5nIHRob3NlIFBUUCBmdW5jdGlvbnMsIGlzIGluYWNjZXNzaWJsZS4gSXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzIGZvciBJMkMuIEFuZCBmaW5hbGx5LCBsZXQncyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODEwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MzY6NTkuMTYxMzQ1Njc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgwMzI2OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MzY6NTkuNTg5Mzg1NDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDkwMTkzNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGUgXCJzeXMvXCIgZGlyZWN0b3J5IHNlYXJjaCB5aWVsZGVkIG5vIHJlc3VsdHMsIGJ1dCB0aGUgcHJvbXB0IGZsYWdnZWQgdGhhdCBhcyBleHBlY3RlZCwgc2F5aW5nIHRvIHVzZSBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAgaW5zdGVhZCwgdGhvdWdoIEkgZG9uJ3Qgc2VlIGBzeXotZ3JlcHBlcmAgaW4gbXkgdG9vbCBsaXN0LiBCdXQgd2FpdCwgSSBkb24ndCAqbmVlZCogdGhvc2UgdG9vbHMsIGJlY2F1c2UgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9yIGEgc3RhbmRhcmQga2VybmVsIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgaGFyZHdhcmUgY2hpcC5cblxuR2l2ZW4gdGhhdCBpdCdzIGhhcmR3YXJlLXNwZWNpZmljIGFuZCByZXF1aXJlcyBJMkMvU1BJIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgY3JpdGljYWxseSwgdGhlcmUncyBhIHN0cmljdCBjaGlwIElEIGNoZWNrIGluIHRoZSBwcm9iZSBmdW5jdGlvbi4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgcmVhY2hpbmcgdGhlIFBUUCBjbG9jayBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGlzIHNpbXBseSBpbXBvc3NpYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU28sIHRoYXQncyBpdDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2suIElzIHRoZXJlIHNvbWUga2luZCBvZiB2aXJ0dWFsIG9yIG1vY2sgZHJpdmVyIHRoYXQgY291bGQgYmUgdXNlZD8gTm9wZS4gQW55IG90aGVyIGVudHJ5IHBvaW50PyBMZXQncyBzZWUuLi4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AuIFRoZSBmdW5jdGlvbnMgYWRkZWQgYXJlIGFsbCByZWxhdGVkIHRvIHRpbWUgb2YgZGF5IChUT0QpLCBsaWtlIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRgLCBldGMuIFRoZXNlIFRPRCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGluZ3MgbGlrZSBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCAtIHRpbWUgYWRqdXN0bWVudCwgZXRjLiBUaGF0IG1lYW5zIHRoZXNlIGFyZSBQVFAgY2xvY2sgY2FsbGJhY2tzLiBXaGljaCBpcyByZWdpc3RlcmVkIGluIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgemwzMDczeF9kcGxsX3JlZ2lzdGVyYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYHpsMzA3M3hfZGV2bV9kcGxsX2luaXRgLCB3aGljaCBpbiB0dXJuLCBpcyBmcm9tIGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoZSBwcm9ibGVtIGlzIGB6bDMwNzN4X2Rldl9wcm9iZWAgZmFpbHMgZWFybHkgd2hlbiByZWFkaW5nIHRoZSBjaGlwIElELiBTbywgbm9uZSBvZiB0aGlzIGlzIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZGV2aWNlcyB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEkyQy9TUEkgaGFyZHdhcmUuIEl0IGhhcyBhIGNoaXAgSUQgY2hlY2sgaW4gYHByb2JlYCB0aGF0J3Mgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHJlbmRlcmluZyB0aGUgbW9kaWZpZWQgY29kZSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBwcm9tcHQgcmVxdWlyZW1lbnRzIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAuLi4gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgUGVyZmVjdCBtYXRjaC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uXG5cbk9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY5MiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6Mzc6MTMuMDc5NTgxOTAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KSB0byBhZGQgUFRQIGNsb2NrIHN1cHBvcnQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBJMkMvU1BJLiBEdXJpbmcgcHJvYmUsIGl0IHJlYWRzIGEgaGFyZHdhcmUgY2hpcCBJRCBhbmQgZmFpbHMgaWYgaXQgZG9lc24ndCBtYXRjaCBrbm93biB2YWx1ZXMuIFNpbmNlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbmV3bHkgYWRkZWQgUFRQIGNsb2NrIG9wZXJhdGlvbnMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpIHRvIGFkZCBQVFAgY2xvY2sgc3VwcG9ydC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyBvdmVyIEkyQy9TUEkuIER1cmluZyBwcm9iZSwgaXQgcmVhZHMgYSBoYXJkd2FyZSBjaGlwIElEIGFuZCBmYWlscyBpZiBpdCBkb2Vzbid0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowchctb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 18:34:13 +0000 UTC FinishedAt: 2026-08-03 18:37:14 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkgdG8gYWRkIFBUUCBjbG9jayBzdXBwb3J0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgSTJDL1NQSS4gRHVyaW5nIHByb2JlLCBpdCByZWFkcyBhIGhhcmR3YXJlIGNoaXAgSUQgYW5kIGZhaWxzIGlmIGl0IGRvZXNuJiMzOTt0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NWJjOWRmOWQ0N2QyYjMyYzg5NDU1MjY5YjkzYmI1MzhmYTlmZTFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxODozNjowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4mIzQzO1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uNzk4NzRhOWZkYjQ5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcbiAgKlxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3Jcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4mIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICYjNDM7MjM1LDMxMSBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXG4mIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcbiYjNDM7ICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gSWYgdGhlIHRpY2sgY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsXG4mIzQzOyAqIG5vcm1hbGl6ZXMgYnkgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzXG4mIzQzOyAqIHRoZSByZXN1bHQgYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRvbyBjbG9zZSB0byB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQuIElmIHRoZSAxIEh6IHRpY2tcbiYjNDM7XHQgKiBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcywgbm9ybWFsaXplIGJ5IHRoZSBlbGFwc2VkIHRpY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuJiM0MztcdGlmICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSB7XG4mIzQzO1x0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTtcbiYjNDM7XHRcdHRzX25leHQudHZfc2VjJiM0MzsmIzQzOztcbiYjNDM7XHR9IGVsc2UgaWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHR0c19uZXh0LnR2X3NlYyAtPSBkaWZmLnR2X3NlYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuJiM0MztcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4mIzQzO1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKVxuJiM0MzsgKlxuJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbiYjNDM7e1xuJiM0MztcdHM2NCB0aWVfZGF0YTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKGRlbHRhX25zIFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcdTAwM2U9IE5TRUNfUEVSX1NFQykpXG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4mIzQzO1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4mIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4mIzQzO3tcbiYjNDM7XHR1OCBjdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuJiM0MztcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4mIzQzO1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbiYjNDM7XHRpZiAodG9kX3N0ZXApXG4mIzQzO1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuQEAgLTUsMTAgJiM0Mzs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIFxuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuJiM0MztcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDdmNWFmYWFhZTYzNDIuLjhhOGMyN2EwNmFjOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRpbnQgcmM7XG4gXHR1OCBpO1xuIFxuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XG4gXHRcdGlmIChyYykge1xuQEAgLTEwMzMsNiAmIzQzOzEwMzgsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTYzLDYgJiM0Mzs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29ya1xuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXG4mIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFxuIFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xuIFx0dTY0XHRcdFx0Y2xvY2tfaWQ7XG4mIzQzO1x0dTE2XHRcdFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuIFx0dThcdFx0XHRwaGFzZV9hdmdfZmFjdG9yO1xuIFx0Ym9vbFx0XHRcdGZyZXFfbW9uaXRvcjtcbiB9O1xuQEAgLTMwOCw2ICYjNDM7MzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKHpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKGluZGV4KSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnlcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjVlMjk0ZjE5MDUwNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM2OSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4mIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovXG4mIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuJiM0MztcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiAgKlxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XG4gICpcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbi1cdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXG4mIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbiYjNDM7ICpcbiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxuJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4mIzQzOyAqXG4mIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuJiM0MztcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbiYjNDM7XHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4mIzQzO1x0czMyIHN0ZXBfY3ljbGVzO1xuJiM0MztcdHUzMiBzeW50aF9mcmVxO1xuJiM0MztcdGludCByYztcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuJiM0MztcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbiYjNDM7XHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuJiM0MztcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBvdXRfaWQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbiYjNDM7XHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbiYjNDM7XHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4mIzQzO1x0ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4mIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXG4mIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuJiM0MzsgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXG4ge1xuLVx0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuJiM0MztcdGludCByYztcbiBcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0a2ZyZWUoemxkcGxsKTtcbiYjNDM7XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbiYjNDM7XHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuJiM0MztcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4mIzQzO1x0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4mIzQzO1x0XHRzMzIgcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4mIzQzO1x0XHR0cy50dl9uc2VjID0gMDtcbiYjNDM7XHRcdGRlbHRhID0gcmVtYWluZGVyO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbiYjNDM7XHRcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4mIzQzO1x0XHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcbiYjNDM7XHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuJiM0MztcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbiYjNDM7XHRcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbiYjNDM7XHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbiYjNDM7XHQgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZFxuJiM0MztcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4mIzQzO1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbiYjNDM7XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHM2NCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4mIzQzO1x0ICovXG4mIzQzO1x0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XG4mIzQzO1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3JcbiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVElFLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzMzJcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xuJiM0MztcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4mIzQzO1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuJiM0MztcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4mIzQzO1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuJiM0MztcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbiYjNDM7XHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbiYjNDM7XHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4mIzQzO1x0XHQgXCYjMzQ7emwzMDczeC1kcGxsJXVcJiMzNDssIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICYjNDM7MjcyNCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsZHBsbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbiYjNDM7ICovXG4mIzQzO3ZvaWRcbiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZSh6bGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDI4LDYgJiM0MzsyNzk2LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiYjNDM7XHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0MSw3ICYjNDM7MjgxNiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4mIzQzO1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gXG5AQCAtMjIsNiAmIzQzOzIzLDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgJiM0MzszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgJiM0MzsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHRcdDhcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuJiM0MztcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpIHRvIGFkZCBQVFAgY2xvY2sgc3VwcG9ydC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyBvdmVyIEkyQy9TUEkuIER1cmluZyBwcm9iZSwgaXQgcmVhZHMgYSBoYXJkd2FyZSBjaGlwIElEIGFuZCBmYWlscyBpZiBpdCBkb2VzbiYjMzk7dCBtYXRjaCBrbm93biB2YWx1ZXMuIFNpbmNlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbmV3bHkgYWRkZWQgUFRQIGNsb2NrIG9wZXJhdGlvbnMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjViYzlkZjlkNDdkMmIzMmM4OTQ1NTI2OWI5M2JiNTM4ZmE5ZmUxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTg6MzY6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwppbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2Li43OTg3NGE5ZmRiNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0xNjIsOCAmIzQzOzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQogICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yCiAgKgotICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgotICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuCiYjNDM7ICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCiYjNDM7ICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwpAQCAtMjM0LDYgJiM0MzsyMzUsMzExIEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwKIAlyZXR1cm4gJmFtcDt6bGRldi0mZ3Q7Y2hhbltpbmRleF07CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLAomIzQzOyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0aW1lb3V0OwomIzQzOwl1OCB0b2RfY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCAmYW1wO3RvZF9jdHJsKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJdGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCSAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZQomIzQzOyAqCiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0CiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kCiYjNDM7ICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQlaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnQKJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHQKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXUzMiBuc2VjOwomIzQzOwl1NjQgc2VjOwomIzQzOwl1OCBjbWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG5leHRfaHopCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjsKJiM0MzsJZWxzZQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCAmYW1wO3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksICZhbXA7bnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJdHMtJmd0O3R2X3NlYyA9IHNlYzsKJiM0MzsJdHMtJmd0O3R2X25zZWMgPSBuc2VjOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB0czogdGltZSB0byBzZXQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsCiYjNDM7CQkJCSAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogSWYgbGVzcyB0aGFuIDIwIG1zIHJlbWFpbnMsIHdhaXRzIGZvciB0aGUgcm9sbG92ZXIgYW5kIGluY3JlbWVudHMgdGhlCiYjNDM7ICogbmV4dC1IeiBzZWNvbmRzIGJ5IG9uZS4gSWYgdGhlIHRpY2sgY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsCiYjNDM7ICogbm9ybWFsaXplcyBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMKJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6IHRpY2sgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgJmFtcDt0c19jdXIsIE5VTEwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIElmIHRvbyBjbG9zZSB0byB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQuIElmIHRoZSAxIEh6IHRpY2sKJiM0MzsJICogY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsIG5vcm1hbGl6ZSBieSB0aGUgZWxhcHNlZCB0aWNrcy4KJiM0MzsJICovCiYjNDM7CWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwlpZiAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjICZsdDsgdGhyZXNob2xkX25zKSB7CiYjNDM7CQlmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTsKJiM0MzsJCXRzX25leHQudHZfc2VjJiM0MzsmIzQzOzsKJiM0MzsJfSBlbHNlIGlmIChkaWZmLnR2X3NlYyAmbHQ7IDApIHsKJiM0MzsJCXRzX25leHQudHZfc2VjIC09IGRpZmYudHZfc2VjOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJemxkZXYtJmd0O2NoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKQomIzQzOyAqCiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhCiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucykKJiM0Mzt7CiYjNDM7CXM2NCB0aWVfZGF0YTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihkZWx0YV9ucyAmbHQ7PSAtTlNFQ19QRVJfU0VDIHx8IGRlbHRhX25zICZndDs9IE5TRUNfUEVSX1NFQykpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCkBAIC01LDEwICYjNDM7NSwxMiBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogCiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wOwogc3RydWN0IHpsMzA3M3hfZGV2OwogCiAvKioKQEAgLTQyLDYgJiM0Mzs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCwKIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTsKIAomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTsKJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjAwLDYgJiM0MzsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZQomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKgomIzQzOyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fAomIzQzOwkJemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5CiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKaW5kZXggN2Y1YWZhYWFlNjM0Mi4uOGE4YzI3YTA2YWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwpAQCAtNTEwLDYgJiM0Mzs1MTAsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlpbnQgcmM7CiAJdTggaTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDt6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9SRUZTOyBpJiM0MzsmIzQzOykgewogCQlyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTsKIAkJaWYgKHJjKSB7CkBAIC0xMDMzLDYgJiM0MzsxMDM4LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCSAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LgogCSAqLwogCXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKIAkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAppbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCkBAIC0yNiw2ICYjNDM7MjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDsKICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VUwkJKDMwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMJKDMwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTCSgzMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKIAogZW51bSB6bDMwNzN4X2ZsYWdzIHsKIAlaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULApAQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVycwogICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mbwogICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnMKJiM0MzsgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9ucwomIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zCiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50cwogICogQG91dDogYXJyYXkgb2Ygb3V0cyYjMzk7IGludmFyaWFudHMKICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50cwpAQCAtNjMsNiAmIzQzOzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmsKICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrCiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2UKJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpCiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3IKICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWQKICAqLwpAQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHsKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKIAljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8JKmluZm87CiAJc3RydWN0IG11dGV4CQkJbXVsdGlvcF9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQl0aWVfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJcGhhc2Vfc3RlcF9sb2NrOwogCiAJLyogSW52YXJpYW50cyAqLwogCXN0cnVjdCB6bDMwNzN4X3JlZglyZWZbWkwzMDczWF9OVU1fUkVGU107CkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCiAJLyogUGVyLWNoaXAgcGFyYW1ldGVycyAqLwogCXU2NAkJCWNsb2NrX2lkOwomIzQzOwl1MTYJCQlvdXRfc3RlcF90aW1lX21hc2s7CiAJdTgJCQlwaGFzZV9hdmdfZmFjdG9yOwogCWJvb2wJCQlmcmVxX21vbml0b3I7CiB9OwpAQCAtMzA4LDYgJiM0MzszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAJcmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgJmFtcDsmYW1wOyB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFzawomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBpbmRleDogb3V0cHV0IGluZGV4CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gISEoemxkZXYtJmd0O291dF9zdGVwX3RpbWVfbWFzayAmYW1wOyBCSVQoaW5kZXgpKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5CiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCAwNDg4YWU2YWM0ODZjLi41ZTI5NGYxOTA1MDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcHJpbnRmLmgmZ3Q7CiAKQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM2OSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7CiB9CiAKJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqLwomIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKCTEwMDAwMDAwCiYjNDM7CiAvKioKLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWUKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwogICoKLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgZmFsc2UsIHRzLCBzdHMpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldAogICoKLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXN0cnVjdCB6bDMwNzN4X2RwbGwgKgotemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiAKLQl6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTsKLQlpZiAoIXpsZHBsbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKLQl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwotCXpsZHBsbC0mZ3Q7aWQgPSBjaDsKLQltdXRleF9pbml0KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCAqdHMpOwomIzQzO30KIAotCXJldHVybiB6bGRwbGw7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLAomIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSkKJiM0MzsgKgomIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGgKJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHMKJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy4KJiM0MzsgKgomIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW4KJiM0MzsgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0cwomIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmcKJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0QKJiM0MzsgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZQomIzQzOyAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi8KJiM0MzsJCWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCQlmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTsKJiM0MzsKJiM0MzsJCWlmICghc3ludGhfbWFza1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqLwomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLAomIzQzOwkJCQkJICAgICAhdG9kX3N0ZXBwZWQpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJaWYgKHRvZF9zdGVwcGVkKSB7CiYjNDM7CQkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwkJdG9kX3N0ZXBwZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlCiYjNDM7CSAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghdG9kX3N0ZXBwZWQpIHsKJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIDAsCiYjNDM7CQkJCQkgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQotICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKICAqCi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoJmd0Oz0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvcgomIzQzOyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksCiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLgomIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXZvaWQKLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKLQlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJYm9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiYjNDM7CWludCByYzsKIAotCW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCWtmcmVlKHpsZHBsbCk7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqLwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pICZhbXA7JmFtcDsKJiM0MzsJICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kCiYjNDM7CSAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtCiYjNDM7CSAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGVsdGEgJmd0Oz0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhICZsdDs9IC1OU0VDX1BFUl9TRUMpIHsKJiM0MzsJCXMzMiByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQl0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCAmYW1wO3JlbWFpbmRlcik7CiYjNDM7CQl0cy50dl9uc2VjID0gMDsKJiM0MzsJCWRlbHRhID0gcmVtYWluZGVyOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwgdHMpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCS8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovCiYjNDM7CQlpZiAoIWRlbHRhKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2UKJiM0MzsJCSAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZwomIzQzOwkJICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlzZWNfYWRqdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovCiYjNDM7CWlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHsKJiM0MzsJCXJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrCiYjNDM7CSAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVybgomIzQzOwkgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZAomIzQzOwkgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdAomIzQzOwkgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHNlY19hZGp1c3RlZCkgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KQomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCwgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlzNjQgb2Zmc2V0OwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IHNjYWxlZF9wcG0gdG8gZGZfb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzOgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNgomIzQzOwkgKgomIzQzOwkgKiBTaW1wbGlmeSB0byBhdm9pZCBvdmVyZmxvdzoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1CiYjNDM7CSAqLwomIzQzOwlvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpCiYjNDM7CQlyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDsKJiM0MzsJaWYgKG9mZnNldCA9PSBjaGFuLSZndDtkZl9vZmZzZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBvZmZzZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yCiYjNDM7ICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2VzbiYjMzk7dCBzdXBwb3J0IFRJRSwgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgczMyCiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKQomIzQzO3sKJiM0MzsJLyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIVwomIzQzOwkgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiBOU0VDX1BFUl9TRUMgLSAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7emwzMDczeC1kcGxsJXUmIzM0OywgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTIzOTgsNiAmIzQzOzI3MjQsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQyOCw2ICYjNDM7Mjc5NiwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDEsNyAmIzQzOzI4MTYsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyMyw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQAogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01ECQkJR0VOTUFTSygyLCAwKQogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JCQk0CiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMCQkJWkxfUkVHKDUsIDB4MzAsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QCQkJR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUgkJCTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0sJCVpMX1JFRyg1LCAweDMxLCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaCTEKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQJCTgKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaCTkKJiM0MzsKICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMCQkJWkxfUkVHKDUsIDB4NTAsIDEpCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1IJCUdFTk1BU0soNywgNCkKQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhCiYjNDM7ICoKJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsCiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KQkJCQkJXApAQCAtMjAyLDYgJiM0MzsyMTksMjQgQEAKIAkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KQogI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOCVM2NF9NSU4KIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNAkJCVpMX1JFRyg3LCAweDBDLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNAkJCVpMX1JFRyg3LCAweDEyLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzQJCQlaTF9SRUcoNywgMHgxOCwgNCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMSw2ICYjNDM7MjU2LDIzIEBACiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTAkJR0VOTUFTSyg2LCA0KQogCiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLCQlaTF9SRUcoOSwgMHgzNiwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMCQlaTF9SRUcoOSwgMHgzOCwgMSkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTAkJR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUAlCSVQoMykKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORQkwCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUCTEKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRAkyCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFCTMKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIJCVpMX1JFRyg5LCAweDM5LCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0sJCVpMX1JFRyg5LCAweDNhLCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEJCVpMX1JFRyg5LCAweDNjLCA0KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQXp1cml0ZSBEUExMIERyaXZlcjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYGRyaXZlcnMvZHBsbC96bDMwNzN4L2ApLiBJdCBsb29rcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIGNvbnNpZGVyIGZ1enppbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggdGhlIGVmZm9ydD8KCkkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgYSBEUExMIGRyaXZlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgSTJDIG9yIFNQSSwgYW5kIHN1cmUgZW5vdWdoLCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGNvbmZpcm0gdGhhdC4gVGhhdCYjMzk7cyBnb29kLCBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3IgZW11bGF0aW9uIG9yIGF0IGxlYXN0IGFjY2VzcyB3aXRoaW4gUUVNVS4gTm93IHRoZSBxdWVzdGlvbiBpcywgKmNhbiogc3l6a2FsbGVyIHJlYWNoIGl0PwoKU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogSTJDIGFuZCBTUEkgZGV2aWNlcy4gSSBrbm93IGl0IGNhbiBpbmplY3QgZGV2aWNlcyB2aWEgc3lzZnMsIHVzZSB2aXJ0dWFsIGJ1c2VzLCBvciBqdXN0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggYC9kZXYvaTJjLVhgIG9yIGAvZGV2L3NwaVhgLiBCdXQgd2FpdCwgdGhpcyBpcyBhICprZXJuZWwgZHJpdmVyKiwgc28gY2FuIHN5emthbGxlciByZWFjaCBpdCAqYWZ0ZXIqIGl0JiMzOTtzIGxvYWRlZD8gU3l6a2FsbGVyIGhhcyBzb21lIHN1cHBvcnQgZm9yIEkyQy9TUEkgZGV2aWNlIGluc3RhbnRpYXRpb24gYWxyZWFkeSBpZiBpdCBrbm93cyBob3csIG9yIGlmIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGRlc2NyaXB0aW9ucy4KCkJ1dCBoYW5nIG9uLCB0aGVyZSYjMzk7cyBhIGNvbnN0cmFpbnQ6IHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIC4uLiBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFRoaXMgaXMgSTJDL1NQSSwgbm90IFBDSWUsIHNvIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4gVXN1YWxseSwgSTJDL1NQSSBkcml2ZXJzIGFyZSBmaW5lIGFzIGxvbmcgYXMgdGhleSYjMzk7cmUgaW4gdGhlIGRldmljZSB0cmVlIG9yIGNhbiBiZSBjcmVhdGVkIHRocm91Z2ggc3lzZnMuIFN5emthbGxlciBldmVuIHVzZXMgYG5ld19kZXZpY2VgIHRvIHByb2JlIEkyQyBkZXZpY2VzIQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzeXprYWxsZXIgY2FuIHByb2JlIHRoaXMgZHJpdmVyLiBUaGUgZHJpdmVyIHVzZXMgcmVnbWFwIG92ZXIgSTJDL1NQSSBzbyBsZXQmIzM5O3MgY2hlY2sgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AgaW4gdGhlIGtlcm5lbCB0byBjb25maXJtLiBJIHRoaW5rIGl0IGxvb2tzIHByb21pc2luZywgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZGlyZWN0b3J5IHRvIGNoZWNrIGlmIHRoaXMgaXMgZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDQ4NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNTpcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTE3PWNvbmZpZyBaTDMwNzNYX0kyQ1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyNzpcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mjk9Y29uZmlnIFpMMzA3M1hfU1BJXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zOC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM5Olx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtMi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1pMMzA3M1gpXHRcdCYjNDM7PSB6bDMwNzN4Lm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjQ6emwzMDczeC1vYmpzXHRcdFx0Oj0gY2hhbi5vIGNvcmUubyBkZXZsaW5rLm8gZHBsbC5vXHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGZsYXNoLm8gZncubyBvdXQubyBwcm9wLm8gcmVmLm8gc3ludGgub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1pMMzA3M1hfSTJDKVx0JiM0Mzs9IHpsMzA3M3hfaTJjLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjg6emwzMDczeF9pMmMtb2Jqc1x0XHQ6PSBpMmMub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtOS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aTDMwNzNYX1NQSSlcdCYjNDM7PSB6bDMwNzN4X3NwaS5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMTp6bDMwNzN4X3NwaS1vYmpzXHRcdDo9IHNwaS5vXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUgLSB1cGRhdGUgRFBMTCBjaGFubmVsIHN0YXR1cyBmcm9tIEhXXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMy1cdHU2NCB2YWw7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PTl9TVEFUVVMoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3LVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb25fc3RhdHVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzE6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfUkVGU0VMX1NUQVRVUyhpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzItXHRcdFx0ICAgICBcdTAwMjZjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOC1cdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5Olx0aWYgKCF6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNoYW4pKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA6XHRcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxLVx0XHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00Ni1cdFx0XHRcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyLVx0XHRcdCAgICAgIFpMX0RQTExfREZfUkVBRF9TRU0gfCBaTF9EUExMX0RGX1JFQURfUkVGX09GU1QpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3LVx0XHRcdFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MjpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzI6ICogemwzMDczeF9jaGFuX25jb19tb2RlX3NldCAtIHN3aXRjaCBEUExMIGNoYW5uZWwgdG8gTkNPIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODM6aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODQte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjg1Olx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg2LVx0dTggcHJldl9tb2RlLCBkZl9yZWFkO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04OS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5MDpcdHByZXZfbW9kZSA9IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05MS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTYtXHRpZiAocHJldl9tb2RlID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9GUkVFUlVOKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTc6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5OTpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAwLVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAxLVx0XHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMDI6XHRcdFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAzLVx0XHRcdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIwLVx0XHQgIEZJRUxEX1BSRVAoWkxfRFBMTF9ERl9SRUFEX0NNRCwgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTIxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSwgZGZfcmVhZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMxOlx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMjpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMy1cdFx0XHQgICAgICBjaGFuLVx1MDAzZW1vZGVfcmVmc2VsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzQtXHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzU6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNi1cdFx0cmV0dXJuIHJjO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDctXHQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDg6XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ5LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjI6ICogemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoIC0gZmV0Y2ggRFBMTCBjaGFubmVsIHN0YXRlIGZyb20gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MTppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Mi17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTczOlx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NC1cdGludCByYywgaTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTc2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLCBcdTAwMjZjaGFuLVx1MDAzZWN0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4MDpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTgxLVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4NS1cdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtEUExMJXUgbW9kZTogJXUsIHJlZjogJXVcXG5cJiMzNDssIGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4NjpcdFx0emwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pLCB6bDMwNzN4X2NoYW5fcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4ODpcdHJjID0gemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSh6bGRldiwgaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTk2Olx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTctXHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjAwLVx0XHRcJiMzNDtEUExMJXUgbG9ja19zdGF0ZTogJXUsIGhvOiAldSwgc2VsX3N0YXRlOiAldSwgc2VsX3JlZjogJXVcXG5cJiMzNDssXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAxOlx0XHRpbmRleCwgemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMjpcdFx0emwzMDczeF9jaGFuX2lzX2hvX3JlYWR5KGNoYW4pID8gMSA6IDAsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAzOlx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDQ6XHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA1LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDgtXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDk6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjEwLVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoYW4tXHUwMDNlcmVmX3ByaW8pOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIxNjpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxNy1cdFx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2VyZWZfcHJpb1tpXSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyNS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjY6ICogemwzMDczeF9jaGFuX3N0YXRlX2dldCAtIGdldCBjdXJyZW50IERQTEwgY2hhbm5lbCBzdGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyNzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjI4LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGdldCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMxLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjpjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMzLVx0XHRcdFx0XHRcdCAgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzOC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzk6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0MDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDEtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQ3LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI0OS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1My1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTQ6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjU1LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNjYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjY3Olx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI2OC1cdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc0OiAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3Ni0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODQtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjg1OnN0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg2LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyODc6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4OC1cdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjkxLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MjogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjk0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OC0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5OTogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDMtXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzE2LVx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMTc6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMxOC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzIxLVx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMyNjpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzMxOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNS1cdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQ2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0NzogKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0ODogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDktICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzUxLSAqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzUyOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzUzLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NTppbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTYtXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2MC1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzYxOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2NC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjU6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjk6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Mi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNzM6XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzQtXHRcdFx0XHQgICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc3LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3ODogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3OTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODAtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg5LSAqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzkwOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkxLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5MzppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LVx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAwLVx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDAxOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNS1cdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDY6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQyNjpcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI3LX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI5LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzMDogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzE6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDMyLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzNy0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mzg6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzOS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDI6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0My1cdGlmICghcmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0OS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTA6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1MTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTItICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ2MDppbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2MS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3MC1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDcxOlx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDcyLVx0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDgwOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgxLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg0Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0ODg6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDg5LVx0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5Mi0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTM6ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTQ6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk1LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MDU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNi1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNC1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxNTpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNi1cdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTIwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUyMTpcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMi1cdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI2Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyOS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzA6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0MDpcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQxLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDYtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gc2V0IHN0YXRlIGZvclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTUtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU2OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NzpcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1OC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU5Olx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjAtXHRpbnQgcmMsIGk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2Ny1cdGlmIChkY2hhbi1cdTAwM2VjdHJsICE9IGNoYW4tXHUwMDNlY3RybCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2ODpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjktXHRcdFx0XHQgICAgICBjaGFuLVx1MDAzZWN0cmwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzUtXHRpZiAoZGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwgIT0gY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3NjpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc3LVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5MS1cdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGludG8gbWFpbGJveCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU5MjpcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTMtXHRcdFx0ICAgWkxfUkVHX0RQTExfTUJfTUFTSywgQklUKGluZGV4KSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5OS1cdFx0aWYgKGRjaGFuLVx1MDAzZXJlZl9wcmlvW2ldICE9IGNoYW4tXHUwMDNlcmVmX3ByaW9baV0pIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDA6XHRcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMS1cdFx0XHRcdFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwOC1cdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDk6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fV1IsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEwLVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xMz1zdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOC0gKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjI1OnN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI2LVx0c3RydWN0X2dyb3VwKGNmZyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMzctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzk6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQwLVx0XHRcdFx0XHRcdCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDI6XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDQ6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ1OmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00Ni1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ5LVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTE6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTItXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01NC1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU1OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ni1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTU3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU4OmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjA6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjM6ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY0LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9Njg9c3RhdGljIGlubGluZSBzNjRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo2OTp6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTcwLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzQtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NzU6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc2LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04MS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg1LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjg2OiAqIHpsMzA3M3hfY2hhbl9yZWZfZ2V0IC0gZ2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTAtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTE6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTkyLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTYtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTc6ICogemwzMDczeF9jaGFuX21vZGVfc2V0IC0gc2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG1vZGUpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAyLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwNzogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTAtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTExOnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fcmVmX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTEyLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTE2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExNzogKiB6bDMwNzN4X2NoYW5fcmVmX3ByaW9fZ2V0IC0gZ2V0IHJlZmVyZW5jZSBwcmlvcml0eVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTEyMz1zdGF0aWMgaW5saW5lIHU4XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI0OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEyNS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMzU6ICogemwzMDczeF9jaGFuX3JlZl9wcmlvX3NldCAtIHNldCByZWZlcmVuY2UgcHJpb3JpdHlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMzYtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNDA9c3RhdGljIGlubGluZSB2b2lkXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQxOnpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmLCB1OCBwcmlvKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE0Mi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNTI6ICogemwzMDczeF9jaGFuX3JlZl9pc19zZWxlY3RhYmxlIC0gY2hlY2sgaWYgcmVmZXJlbmNlIGlzIHNlbGVjdGFibGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNTMtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNTg9c3RhdGljIGlubGluZSBib29sXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTU5OnpsMzA3M3hfY2hhbl9yZWZfaXNfc2VsZWN0YWJsZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYwLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjE6XHRyZXR1cm4gemwzMDczeF9jaGFuX3JlZl9wcmlvX2dldChjaGFuLCByZWYpICE9IFpMX0RQTExfUkVGX1BSSU9fTk9ORTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjItfVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjQtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTY1OiAqIHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldCAtIGdldCBEUExMIGNoYW5uZWwgbG9jayBzdGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2OS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzEte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzUtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTc2OiAqIHpsMzA3M3hfY2hhbl9pc19sb2NrZWQgLSBjaGVjayBpZiBjaGFubmVsIGlzIGxvY2tlZCB0byBhIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE3Ny0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4MC0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODE6c3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9pc19sb2NrZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODIte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE4MzpcdHU4IGxvY2tfc3RhdGUgPSB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg0LVx0cmV0dXJuIGxvY2tfc3RhdGUgPT0gWkxfRFBMTF9NT05fU1RBVFVTX1NUQVRFX0xPQ0s7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4Ny0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODg6ICogemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byAtIGNoZWNrIGlmIGNoYW5uZWwgaXMgaW4gYXV0b21hdGljIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODktICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOTItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTkzOnN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk0LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxOTU6XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9BVVRPO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5Ni19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5OC0vKipcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCwgUFRQLCBhbmQgU3luY0UgZGV2aWNlcy4gSXQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIGlzIHRoaXMgdGhpbmcgZW11bGF0ZWQgaW4gUUVNVT8gQnV0IG5vLCBpdCYjMzk7cyBhIGRlZGljYXRlZCBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRldmljZSwgbm90IHNvbWV0aGluZyBnZW5lcmljLiBIbW0sIGJ1dCBpdCYjMzk7cyBhbiBJMkMgb3IgU1BJIGRldmljZSwgcmlnaHQ/CgpOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGNhbiBTeXprYWxsZXIsIG15IGZhdm9yaXRlIGZ1enppbmcgdG9vbCwgZXZlbiAqaGFuZGxlKiBJMkMgb3IgU1BJIGRldmljZXM/IFRoZSBnb29kIG5ld3MgaXMsIHllcywgaXQgY2FuISBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBpbmplY3RpbmcgSTJDL1NQSSBkZXZpY2VzIGlmIGl0IGtub3dzIHRoZSBzcGVjaWZpY3MsIG9yIGV2ZW4ganVzdCBvcGVuaW5nIGAvZGV2L2kyYy1YYCBhbmQgdGFsa2luZyB0byB0aGUgYnVzLgoKSG93ZXZlciwgYSBjcml0aWNhbCBwb2ludCBjb21lcyB0byBtaW5kOiBpZiB0aGUgZHJpdmVyIGlzbiYjMzk7dCBsb2FkZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBTeXprYWxsZXIgY2FuJiMzOTt0IGZ1enogaXQuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIFN5emthbGxlciBsb2FkIHRoZSBkcml2ZXI/IEl0IGFwcGVhcnMgU3l6a2FsbGVyICpjYW4qIGxvYWQgdGhlIGRyaXZlciBpZiBpdCYjMzk7cyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHVzaW5nIGBDT05GSUdfWkwzMDczWF9JMkM9eWAsIHdoaWNoIGxvb2tzIGxpa2UgYW4gb3B0aW9uIGhlcmUuIFRoZW4gU3l6a2FsbGVyIGNhbiB0cnkgdG8gaW5zdGFudGlhdGUgaXQgdmlhIHN5c2ZzIGBuZXdfZGV2aWNlYCBmb3IgSTJDLgoKV2FpdCBhIHNlY29uZC4gVGhlIG9yaWdpbmFsIHByb21wdCB0YWxrcyBhYm91dCAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgbmVlZGluZyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBUaGlzIGlzICpub3QqIGEgUENJZSBjYXJkOyBpdCYjMzk7cyBJMkMvU1BJLCBzbyBpdCYjMzk7cyBhIGRpZmZlcmVudCB1c2UgY2FzZS4KCk9rYXksIGlzIGl0ICp3b3J0aCogZnV6emluZz8gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBJMkMgZGV2aWNlLCBhbmQgU3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSBpdCB1c2luZyBgZWNobyB6bDMwNzN4ICZndDsgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAsIHRoZSBhbnN3ZXIgaXMgcHJvYmFibHkgeWVzLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGlmIHRoaXMgZHJpdmVyIGhhcyBhbiBJMkMgSUQgdGFibGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gY29uZmlybSBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IGluc3RhbnRpYXRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2kyY19kZXZpY2VfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMxXCYjMzQ7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxMzAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkyQyBEZXZpY2UgUHJvYmUgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGRldmljZSBoYXMgYW4gSTJDIElEIHRhYmxlLCB3aGljaCBpcyBnb29kLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGluc3RhbnRpYXRpb24gdXNpbmcgYG5ld19kZXZpY2VgLiBUaGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHByb2JlIGZ1bmN0aW9uIGl0c2VsZi4gRG9lcyB0aGUgcHJvYmUgYWN0dWFsbHkgaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmU/IFNwZWNpZmljYWxseSwgZG9lcyBpdCByZWFkIGFueSByZWdpc3RlcnMgb3IgZXhjaGFuZ2UgYW55IGRhdGEgb24gdGhlIGJ1cz8gTXkgbWFpbiBjb25jZXJuIGlzLCBpZiBpdCBkb2VzLCB3aWxsIGl0IGZhaWwgZ3JhY2VmdWxseSBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaXNuJiMzOTt0IHJlY2VpdmVkPyBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSB1bmV4cGVjdGVkIGhhbmdzIG9yIGVycm9ycyBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBwcm9jZXNzIGNhbiBjb250aW51ZSwgc28gSSBiZXR0ZXIgY2hlY2sgdGhlIGB6bDMwNzN4X2kyY19wcm9iZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoxMTpzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Mi1cdH0sXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTQtXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY3MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFpMMzA3M3ggUHJvYmUgRnVuY3Rpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBjb25uZWN0aW9uIHByb2Nlc3MsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9kZXZfcHJvYmVgIGZ1bmN0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBJMkMgdmVyc2lvbiBpcyB0aGUgbW9zdCBnZW5lcmljLCBhcyBJMkMgcHJvdmlkZXMgdGhlIGxlYXN0IG92ZXJoZWFkIHRvIHRoZSBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgZXhwZWN0IGB6bDMwNzN4X2Rldl9wcm9iZWAgdG8gYmUgdGhlIGFjdHVhbCBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgZGV2aWNlLCBhbmQgcG90ZW50aWFsbHkgdGhlIHBsYWNlIHdoZXJlIG90aGVyIG1ldGhvZHMgb2YgY29ubmVjdGlvbiBhcmUgc3VwcG9ydGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHdoYXQgcmVzb3VyY2VzIGFyZSByZXF1ZXN0ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgaW5pdGlhbGx5LiBUaGUgbmFtaW5nIHN1Z2dlc3RzIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgd2l0aCB0aGUgSTJDLXNwZWNpZmljIHByb2JlIGhhbmRsaW5nIGJ1cyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGBkZXZfcHJvYmVgIHRha2luZyBjYXJlIG9mIHRoZSBhY3R1YWwgZGV2aWNlIHNldHVwLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBwYXR0ZXJuIG9mIHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgYW5kIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbi4gQXJlIHRoZXkgdXNpbmcgdGhlIERldmljZSBUcmVlIG9yIGRpcmVjdCBib2FyZCBkZWZpbml0aW9ucyBmb3IgY29uZmlndXJhdGlvbj8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2sgbWVjaGFuaXNtcz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBgemwzMDczeF9kZXZfcHJvYmVgIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGxpa2UgY2xvY2sgY29uZmlndXJhdGlvbiBhbmQgZGF0YSBwYXRoIHNldHVwLCBiZWdpbnMuIFRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGxpZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDExOlx0c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuICAxMjpcdHtcbiAgMTM6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4gIDE0Olx0XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2O1xuICAxNTpcdFxuICAxNjpcdFx0emxkZXYgPSB6bDMwNzN4X2Rldm1fYWxsb2MoZGV2KTtcbiAgMTc6XHRcdGlmIChJU19FUlIoemxkZXYpKVxuICAxODpcdFx0XHRyZXR1cm4gUFRSX0VSUih6bGRldik7XG4gIDE5Olx0XG4gIDIwOlx0XHR6bGRldi1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNnpsMzA3M3hfcmVnbWFwX2NvbmZpZyk7XG4gIDIxOlx0XHRpZiAoSVNfRVJSKHpsZGV2LVx1MDAzZXJlZ21hcCkpXG4gIDIyOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih6bGRldi1cdTAwM2VyZWdtYXApLFxuICAyMzpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXG5cJiMzNDspO1xuICAyNDpcdFxuICAyNTpcdFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcbiAgMjY6XHR9XG4gIDI3Olx0XG4gIDI4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XG4gIDI5Olx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczMVwmIzM0OyB9LFxuICAzMDpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzJcJiMzNDsgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MjYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgcHJvZmVzc2lvbmFsJiMzOTtzIHBlcnNwZWN0aXZlOgoKKip6bDMwNzN4X2Rldl9wcm9iZTogRGVjb25zdHJ1Y3RpbmcgdGhlIERldmljZSBQcm9iZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIG1lbnRpb24gb2YgYHpsMzA3M3hfZGV2X3Byb2JlYCwgbXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSBhcm91bmQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHByb2JpbmcgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBhbmQgY29uZmlndXJlIGEgZGV2aWNlLCBsaWtlbHkgYSBaTDMwNzN4IHNlcmllcyBkZXZpY2UuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBwcm9iZSBzZXF1ZW5jZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgcmVnaXN0ZXIgaW50ZXJyb2dhdGlvbiwgcG90ZW50aWFsIHBvd2VyLW9uIHNlcXVlbmNpbmcsIGFuZCBmaW5hbGx5LCByZWdpc3RyYXRpb24gd2l0aCB0aGUgc3lzdGVtLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4gV2hhdCBhcmUgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIHJlc3BvbnNlcyBkdXJpbmcgdGhpcyBwcm9iZT8gQXJlIHRoZXJlIGtub3duIGlzc3VlcyB3aXRoIHBvd2VyLXVwIHRpbWluZyBvciByZWdpc3RlciBhY2Nlc3Mgb24gdGhpcyBwYXJ0aWN1bGFyIHBsYXRmb3JtPyBJcyB0aGVyZSBhbnkgZG9jdW1lbnRhdGlvbiByZWFkaWx5IGF2YWlsYWJsZSBmb3IgdGhlIFpMMzA3M3ggc2VyaWVzIG9yIHJlbGV2YW50IGFzc29jaWF0ZWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zPyBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgSTJDIG9yIFNQSSBjb21tdW5pY2F0aW9uIHRoYXQmIzM5O3MgbGlrZWx5IGludm9sdmVkLCBhbmQgbWVudGFsbHkgdmVyaWZ5aW5nIHRoYXQgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBpcyByb2J1c3QuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHByb2JlJiMzOTtzIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gV2hhdCBlcnJvcnMgY291bGQgaXQgcmV0dXJuPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIGlmIHRoaXMgcHJvYmUgZG9lc24mIzM5O3Qgc3VjY2VlZD8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBlcnJvcnM/IEFuZCBJJiMzOTttIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBpdCByZXBvcnRzIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzLCBzbyBkZWJ1Z2dpbmcgaXMgZWFzeS4gV2UmIzM5O2QgaGF0ZSB0byBiZSBzY3JhdGNoaW5nIG91ciBoZWFkcyBkb3duIHRoZSBsaW5lLiBJJiMzOTttIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXM7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlIG1vZHVsZXMgb3IgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgcHJvYmUgY2FuIHJ1biBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgY2xvY2sgY29uZmlndXJhdGlvbj8gRG9lcyB0aGlzIHByb2JlIGFkZHJlc3MgYW55IGNsb2NrLXJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gdGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgdGhlIGRldmljZSYjMzk7cyBmdW5jdGlvbmFsaXR5PwoKRmluYWxseSwgbXkgdGhvdWdodHMgYXJlIG9uIHNjYWxhYmlsaXR5IGFuZCByb2J1c3RuZXNzLiBIb3cgaXMgdGhpcyBwcm9iZSBkZXNpZ25lZCB0byBoYW5kbGUgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBjb25maWd1cmF0aW9ucyBvZiB0aGUgWkwzMDczeCBkZXZpY2U/IFdpbGwgdGhpcyBkZXZpY2Ugd29yayByZWxpYWJseSB3aXRoIHRoZSBwcm9kdWN0IGFzIGl0IGV4aXN0cz8gRG9lcyBpdCBpbmNsdWRlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIHRvIHByb3RlY3QgdGhlIHN5c3RlbSBmcm9tIHVucHJlZGljdGFibGUgaGFyZHdhcmUgYmVoYXZpb3I/CgpJbiBzaG9ydCwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSBkaXNzZWN0aW5nIHRoZSBgemwzMDczeF9kZXZfcHJvYmVgIGZ1bmN0aW9uIGZyb20gYSBzeXN0ZW0tbGV2ZWwgcGVyc3BlY3RpdmUsIHNlZWtpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgaXRzIHBvdGVudGlhbCBwaXRmYWxscywgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfZGV2X3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MzA9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzctLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc4OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3OS0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg0LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4NTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODYte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDY1LX1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDY2OkVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDY3LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xMDY9c3RydWN0IHpsMzA3M3hfZGV2ICp6bDMwNzN4X2Rldm1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxMDc6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwOC1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyNTpcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNi19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jLTI0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY4NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgemwzMDczeF9kZXZfcHJvYmVgLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHpsMzA3M3hfZGV2X3Byb2JlYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhIGB6bDMwNzN4YCBkZXZpY2UsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSBvZi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0JiMzOTtzIGJlZW4gcGx1Z2dlZCBpbiBvciBpcyBvdGhlcndpc2UgYmVjb21pbmcgYXZhaWxhYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2guIEFueSB1bnVzdWFsIGFwcHJvYWNoZXMgaGVyZSB3b3VsZCBiZSBpbnRlcmVzdGluZy4KKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGFwcHJvYWNoIGFuZCBhbnkgcG90ZW50aWFsIGZvciByb2J1c3RuZXNzIGlzc3Vlcy4KKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgdGltaW5nIGNvbnN0cmFpbnRzLgoqICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSYjMzk7bGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUga2VybmVsLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGFueSBjdXN0b20gY2FsbGJhY2tzIG9yIHN0cnVjdHVyZXM/IEFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVyYWN0aW9ucyB3aWxsIGJlIG9mIGludGVyZXN0LgoqICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhvcm91Z2ggZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLgoqICAgKipDb25jdXJyZW5jeSoqOiBJJiMzOTtsbCBhbHNvIGdsYW5jZSB0byBzZWUgaWYgYW55dGhpbmcgaGVyZSBpcyBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW5jeSBpc3N1ZXMgYXMgSSBrbm93IGhhcmR3YXJlIHByb2JpbmcgY2FuIG9mdGVuIGhhdmUgc2hhcmVkIHJlc291cmNlcy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJiMzOTtyZSBleHBlY3RpbmcsIGFuZCB0aGVuIGdldHRpbmcgaXQgcmVhZHkgdG8gYmUgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBkb25lIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4NTpcdGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIDk4NjpcdHtcbiA5ODc6XHRcdHUxNiBpZCwgcmV2aXNpb24sIGZ3X3ZlcjtcbiA5ODg6XHRcdHVuc2lnbmVkIGludCBpO1xuIDk4OTpcdFx0dTMyIGNmZ192ZXI7XG4gOTkwOlx0XHRpbnQgcmM7XG4gOTkxOlx0XG4gOTkyOlx0XHQvKiBSZWFkIGNoaXAgSUQgKi9cbiA5OTM6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG4gOTk0Olx0XHRpZiAocmMpXG4gOTk1Olx0XHRcdHJldHVybiByYztcbiA5OTY6XHRcbiA5OTc6XHRcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbiA5OTg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcyk7IGkmIzQzOyYjNDM7KSB7XG4gOTk5Olx0XHRcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxuMTAwMDpcdFx0XHRcdGJyZWFrO1xuMTAwMTpcdFx0fVxuMTAwMjpcdFxuMTAwMzpcdFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbjEwMDQ6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCAtRU5PREVWLFxuMTAwNTpcdFx0XHRcdFx0ICAgICBcJiMzNDtVbmtub3duIGNoaXAgSUQ6IDB4JTA0eFxcblwmIzM0OywgaWQpO1xuMTAwNjpcdFxuMTAwNzpcdFx0emxkZXYtXHUwMDNlaW5mbyA9IFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XG4xMDA4Olx0XG4xMDA5Olx0XHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbjEwMTA6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcdTAwMjZyZXZpc2lvbik7XG4xMDExOlx0XHRpZiAocmMpXG4xMDEyOlx0XHRcdHJldHVybiByYztcbjEwMTM6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXHUwMDI2ZndfdmVyKTtcbjEwMTQ6XHRcdGlmIChyYylcbjEwMTU6XHRcdFx0cmV0dXJuIHJjO1xuMTAxNjpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFx1MDAyNmNmZ192ZXIpO1xuMTAxNzpcdFx0aWYgKHJjKVxuMTAxODpcdFx0XHRyZXR1cm4gcmM7XG4xMDE5Olx0XG4xMDIwOlx0XHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcblwmIzM0OywgaWQsXG4xMDIxOlx0XHRcdHJldmlzaW9uLCBmd192ZXIpO1xuMTAyMjpcdFx0ZGV2X2RiZyh6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0N1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxuXCYjMzQ7LFxuMTAyMzpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygzMSwgMjQpLCBjZmdfdmVyKSxcbjEwMjQ6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMjMsIDE2KSwgY2ZnX3ZlciksXG4xMDI1Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXG4xMDI2Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCBjZmdfdmVyKSk7XG4xMDI3Olx0XG4xMDI4Olx0XHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxuMTAyOTpcdFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXG4xMDMwOlx0XHQgKiB1c2luZyBkZXZsaW5rLlxuMTAzMTpcdFx0ICovXG4xMDMyOlx0XHR6bGRldi1cdTAwM2VjbG9ja19pZCA9IGdldF9yYW5kb21fdTY0KCk7XG4xMDMzOlx0XG4xMDM0Olx0XHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXG4xMDM1Olx0XHR6bGRldi1cdTAwM2VwaGFzZV9hdmdfZmFjdG9yID0gMjtcbjEwMzY6XHRcbjEwMzc6XHRcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xuMTAzODpcdFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4xMDM5Olx0XHQgKi9cbjEwNDA6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbjEwNDE6XHRcdGlmIChyYylcbjEwNDI6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNDM6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA0NDpcdFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuMTA0NTpcdFx0aWYgKHJjKVxuMTA0NjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTA0NzpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4xMDQ4Olx0XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbjEwNDk6XHRcdGlmIChyYylcbjEwNTA6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNTE6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA1MjpcdFxuMTA1MzpcdFx0LyogUmVnaXN0ZXIgRFBMTCBjaGFubmVscyAqL1xuMTA1NDpcdFx0cmMgPSB6bDMwNzN4X2Rldm1fZHBsbF9pbml0KHpsZGV2KTtcbjEwNTU6XHRcdGlmIChyYylcbjEwNTY6XHRcdFx0cmV0dXJuIHJjO1xuMTA1NzpcdFxuMTA1ODpcdFx0LyogUmVnaXN0ZXIgdGhlIGRldmxpbmsgaW5zdGFuY2UgYW5kIHBhcmFtZXRlcnMgKi9cbjEwNTk6XHRcdHJjID0gemwzMDczeF9kZXZsaW5rX3JlZ2lzdGVyKHpsZGV2KTtcbjEwNjA6XHRcdGlmIChyYylcbjEwNjE6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNjI6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldmxpbmsgaW5zdGFuY2VcXG5cJiMzNDspO1xuMTA2MzpcdFxuMTA2NDpcdFx0cmV0dXJuIDA7XG4xMDY1Olx0fVxuMTA2NjpcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbjEwNjc6XHRcbjEwNjg6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0l2YW4gVmVjZXJhIFx1MDAzY2l2ZWNlcmFAcmVkaGF0LmNvbVx1MDAzZVwmIzM0Oyk7XG4xMDY5Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXCYjMzQ7KTtcbjEwNzA6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGZvciB0aGUgTWljcm9jaGlwIFpMMzA3M3ggRFBMTC9QVFAvU3luY0UgZGV2aWNlLCBhbmQgdGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBwcm9iZSBmdW5jdGlvbi4gSXQgc3RhcnRzIHdpdGggYSBzaW1wbGUgYHpsMzA3M3hfcmVhZF91MTZgIGNhbGwgdG8gZ2V0IHRoZSBkZXZpY2UgSUQgdmlhIEkyQy4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gSWYgdGhhdCByZWFkIGZhaWxzLCBvciBpZiB0aGUgSUQgZG9lc24mIzM5O3QgbWF0Y2ggYSBrbm93biB2YWx1ZSwgdGhlIHByb2JlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FTk9ERVZgLiAKCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGVtdWxhdGUgdGhpcz8gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIFN5emthbGxlciBoYXMgYSBzcGVjaWZpYyBlbXVsYXRpb24gZm9yIHRoZSBaTDMwNzN4LCB3aGljaCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBrbm93IFN5emthbGxlciAqY2FuKiBpbmplY3QgSTJDIGRldmljZXMsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIHNhbWUgYXMgaGF2aW5nIGEgcHJvcGVyIGVtdWxhdG9yIHdpdGggYSBkZWZpbmVkIHJlZ2lzdGVyIG1hcC4gSXQgKm1pZ2h0KiBpbnRlcmNlcHQgdGhlIEkyQyByZWFkcyB3aXRoIHNvbWUga2luZCBvZiBmYXVsdCBpbmplY3Rpb24sIG9yIG1heWJlIGEgbW9jaywgYnV0IEkgZG9uJiMzOTt0IHRoaW5rIFN5emthbGxlciBoYXMgYSBnZW5lcmljIEkyQyBtb2NrIHRoYXQgY2FuIHJlcGx5IHdpdGggYXJiaXRyYXJ5IGRhdGEgdW5sZXNzIGl0JiMzOTtzIHVzaW5nIGEgdmlydHVhbCBJMkMgYnVzIHRoYXQgaXQgY29udHJvbHMuIEkgcmVtZW1iZXIgdGhhdCBTeXprYWxsZXIgdXNlcyBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYW5kIGB2a21zYCBmb3IgRFJNIGV0YywgZG9lcyBpdCBoYXZlIGEgdmlydHVhbCBJMkMgYnVzPwoKVGhlcmUmIzM5O3MgYGkyYy1zdHViYCwgYnV0IFN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdXNlIGl0IHRvIG1vY2sgYXJiaXRyYXJ5IGRldmljZXMgd2l0aCBzcGVjaWZpYyByZWdpc3RlciBtYXBzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHN5emxhbmcgZGVzY3JpcHRpb24gZm9yIGl0LiBJIHJlbWVtYmVyIHRoZXJlIHVzZWQgdG8gYmUgYSBgc3l6X2kyY19zZXR1cGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBuby4KCklmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgganVzdCBhbiBJMkMgZGV2aWNlIGRyaXZlciBhbmQgdGhlcmUmIzM5O3Mgbm8gcmVhbCBoYXJkd2FyZSwgdGhlIHByb2JlIHdpbGwgZmFpbC4gVGhlIEkyQyByZWFkIHdpbGwgZmFpbCBvciByZXR1cm4gZ2FyYmFnZS4gVGhhdCBtZWFucyB0aGUgZHJpdmVyIHdvbiYjMzk7dCBiZSBpbnN0YW50aWF0ZWQsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgbmV3IFBUUCBjbG9jayBjb2RlIGxpa2UgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYW4gZXh0cmVtZWx5IHNwZWNpZmljIGVtdWxhdG9yLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHJpZ2h0IGFib3V0IHRoaXMuIEFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgYXJlIHRoaW5ncyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZS4gSXQgZG9lcyBleHBsaWNpdGx5IGNhbGwgb3V0IHRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGV4YWN0bHkgdGhpcyBzY2VuYXJpby4KClRoaXMgZHJpdmVyIHRhcmdldHMgdGhlIFpMMzA3M3gsIGEgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlLiBJdCB1c2VzIEkyQyBvciBTUEkuIEluIFFFTVUsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIGRldmljZSBtb2RlbCBmb3IgdGhlIFpMMzA3M3ggKHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseeKAlGl0JiMzOTtzIGEgdGVsZWNvbSB0aW1pbmcgY2hpcCEpLCB0aGUgSTJDIG9yIFNQSSByZWFkcyB3aWxsIGFsd2F5cyBmYWlsIG9yIHRpbWUgb3V0LiBFdmVuIGlmIFN5emthbGxlciBjcmVhdGVzIGFuIEkyQyBkZXZpY2UgdmlhIHN5c2ZzLCB0aGUgSTJDIHRyYW5zZmVycyB3aWxsIGdvIHRvIGEgZHVtbXkgYnVzIChsaWtlIGBpMmMtc3R1YmAgb3Igc29tZXRoaW5nIHNpbWlsYXIpIHdoaWNoIGhhcyBubyBzdWNoIGRldmljZSBhdHRhY2hlZC4gVGhlIEkyQyBjb250cm9sbGVyIHdpbGwgTkFDSywgdGhlIHJlYWQgd2lsbCBmYWlsLCBhbmQgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwgcmV0dXJuIGFuIGVycm9yLgoKU3BlY2lmaWNhbGx5LCB0aGUgZmFpbHVyZSB3aWxsIGhhcHBlbiBpbiBgemwzMDczeF9kZXZfcHJvYmVgIGR1cmluZyB0aGUgYHpsMzA3M3hfcmVhZF91MTZgIGNhbGwsIG9yIGV2ZW4gaWYgdGhlIHJlYWQgc29tZWhvdyByZXR1cm5zIGdhcmJhZ2UsIGl0IHdpbGwgZmFpbCBhdCB0aGUgY2hpcCBJRCBjaGVjay4gVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgU3l6a2FsbGVyIGNhbm5vdCBieXBhc3MgdGhpcyBoYXJkd2FyZSBjaGVjayB3aXRob3V0IGFuIGV4cGxpY2l0IGVtdWxhdG9yLCB3aGljaCBtZWFucyB0aGUgd2hvbGUgZHJpdmVyLCBpbmNsdWRpbmcgdGhvc2UgUFRQIGZ1bmN0aW9ucywgaXMgaW5hY2Nlc3NpYmxlLiBJdCBtYWtlcyBzZW5zZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMgZm9yIEkyQy4gQW5kIGZpbmFsbHksIGxldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY5MgoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA3OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgdGhlICYjMzQ7c3lzLyYjMzQ7IGRpcmVjdG9yeSBzZWFyY2ggeWllbGRlZCBubyByZXN1bHRzLCBidXQgdGhlIHByb21wdCBmbGFnZ2VkIHRoYXQgYXMgZXhwZWN0ZWQsIHNheWluZyB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGluc3RlYWQsIHRob3VnaCBJIGRvbiYjMzk7dCBzZWUgYHN5ei1ncmVwcGVyYCBpbiBteSB0b29sIGxpc3QuIEJ1dCB3YWl0LCBJIGRvbiYjMzk7dCAqbmVlZCogdGhvc2UgdG9vbHMsIGJlY2F1c2UgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9yIGEgc3RhbmRhcmQga2VybmVsIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgaGFyZHdhcmUgY2hpcC4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHJlcXVpcmVzIEkyQy9TUEkgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgY3JpdGljYWxseSwgdGhlcmUmIzM5O3MgYSBzdHJpY3QgY2hpcCBJRCBjaGVjayBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHJlYWNoaW5nIHRoZSBQVFAgY2xvY2sgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBpcyBzaW1wbHkgaW1wb3NzaWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvLCB0aGF0JiMzOTtzIGl0OiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2suIElzIHRoZXJlIHNvbWUga2luZCBvZiB2aXJ0dWFsIG9yIG1vY2sgZHJpdmVyIHRoYXQgY291bGQgYmUgdXNlZD8gTm9wZS4gQW55IG90aGVyIGVudHJ5IHBvaW50PyBMZXQmIzM5O3Mgc2VlLi4uIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gLiBUaGUgZnVuY3Rpb25zIGFkZGVkIGFyZSBhbGwgcmVsYXRlZCB0byB0aW1lIG9mIGRheSAoVE9EKSwgbGlrZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0YCwgZXRjLiBUaGVzZSBUT0QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdGhpbmdzIGxpa2UgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAgLSB0aW1lIGFkanVzdG1lbnQsIGV0Yy4gVGhhdCBtZWFucyB0aGVzZSBhcmUgUFRQIGNsb2NrIGNhbGxiYWNrcy4gV2hpY2ggaXMgcmVnaXN0ZXJlZCBpbiBgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcmAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYHpsMzA3M3hfZHBsbF9yZWdpc3RlcmAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGB6bDMwNzN4X2Rldm1fZHBsbF9pbml0YCwgd2hpY2ggaW4gdHVybiwgaXMgZnJvbSBgemwzMDczeF9kZXZfcHJvYmVgLiBUaGUgcHJvYmxlbSBpcyBgemwzMDczeF9kZXZfcHJvYmVgIGZhaWxzIGVhcmx5IHdoZW4gcmVhZGluZyB0aGUgY2hpcCBJRC4gU28sIG5vbmUgb2YgdGhpcyBpcyByZWFjaGFibGUuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRldmljZXMgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBJMkMvU1BJIGhhcmR3YXJlLiBJdCBoYXMgYSBjaGlwIElEIGNoZWNrIGluIGBwcm9iZWAgdGhhdCYjMzk7cyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgcmVuZGVyaW5nIHRoZSBtb2RpZmllZCBjb2RlIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cyBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgLi4uIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFBlcmZlY3QgbWF0Y2guIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uY2x1c2lvbi4KCk9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkgdG8gYWRkIFBUUCBjbG9jayBzdXBwb3J0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgSTJDL1NQSS4gRHVyaW5nIHByb2JlLCBpdCByZWFkcyBhIGhhcmR3YXJlIGNoaXAgSUQgYW5kIGZhaWxzIGlmIGl0IGRvZXNuJiMzOTt0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkgdG8gYWRkIFBUUCBjbG9jayBzdXBwb3J0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgSTJDL1NQSS4gRHVyaW5nIHByb2JlLCBpdCByZWFkcyBhIGhhcmR3YXJlIGNoaXAgSUQgYW5kIGZhaWxzIGlmIGl0IGRvZXNuJiMzOTt0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjowMy4yMzg3MzMwOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg0MDg4MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KSB0byBhZGQgUFRQIGNsb2NrIHN1cHBvcnQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBJMkMvU1BJLiBEdXJpbmcgcHJvYmUsIGl0IHJlYWRzIGEgaGFyZHdhcmUgY2hpcCBJRCBhbmQgZmFpbHMgaWYgaXQgZG9lc24ndCBtYXRjaCBrbm93biB2YWx1ZXMuIFNpbmNlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbmV3bHkgYWRkZWQgUFRQIGNsb2NrIG9wZXJhdGlvbnMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjowMy4yMzg3NDE5NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzkwNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1YmM5ZGY5ZDQ3ZDJiMzJjODk0NTUyNjliOTNiYjUzOGZhOWZlMWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxODozNjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG5AQCAtMiw3ICsyLDcgQEBcXG4gXFxuIGNvbmZpZyBaTDMwNzNYXFxuIFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4tXFx0ZGVwZW5kcyBvbiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IERQTExcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIFxcdHNlbGVjdCBSRUdNQVBcXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxcbiBcXG4gY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxcbiBcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSSBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjc5ODc0YTlmZGI0OTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMTYyLDggKzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxcbiAgKlxcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXFxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxcbisgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcXG4rICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbkBAIC0yMzQsNiArMjM1LDMxMSBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuIFxcdHJldHVybiBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICpcXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHRpbWVvdXQ7XFxuK1xcdHU4IHRvZF9jdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcXHUwMDI2dG9kX2N0cmwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG4rXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XFxuK1xcbitcXHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcXG4rICpcXG4rICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXFxuK3tcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHUzMiBuc2VjO1xcbitcXHR1NjQgc2VjO1xcbitcXHR1OCBjbWQ7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmIChuZXh0X2h6KVxcbitcXHRcXHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcXHUwMDI2c2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXFx1MDAyNm5zZWMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHRzLVxcdTAwM2V0dl9zZWMgPSBzZWM7XFxuK1xcdHRzLVxcdTAwM2V0dl9uc2VjID0gbnNlYztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEB0czogdGltZSB0byBzZXRcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcXG4rXFx0XFx0XFx0XFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcXG4rICpcXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBJZiB0aGUgdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyxcXG4rICogbm9ybWFsaXplcyBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXNcXG4rICogdGhlIHJlc3VsdCBiYWNrLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBSZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6IHRpY2sgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcXHUwMDI2dHNfbmV4dCwgTlVMTCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcXHUwMDI2dHNfY3VyLCBOVUxMKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBJZiB0b28gY2xvc2UgdG8gdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0LiBJZiB0aGUgMSBIeiB0aWNrXFxuK1xcdCAqIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzLCBub3JtYWxpemUgYnkgdGhlIGVsYXBzZWQgdGlja3MuXFxuK1xcdCAqL1xcbitcXHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcXG4rXFx0aWYgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzYyB0aHJlc2hvbGRfbnMpIHtcXG4rXFx0XFx0ZnNsZWVwKCh1bnNpZ25lZCBsb25nKWRpZmYudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMgKyAxKTtcXG4rXFx0XFx0dHNfbmV4dC50dl9zZWMrKztcXG4rXFx0fSBlbHNlIGlmIChkaWZmLnR2X3NlYyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0dHNfbmV4dC50dl9zZWMgLT0gZGlmZi50dl9zZWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xcbitcXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xcbitcXHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXFx1MDAyNnRzX25leHQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKFdBUk5fT04oZGVsdGFfbnMgXFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcXHUwMDNlPSBOU0VDX1BFUl9TRUMpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cXG4rXFx0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcXG4rICpcXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHQgICAgYm9vbCB0b2Rfc3RlcClcXG4re1xcbitcXHR1OCBjdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdFxcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbitcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XFxuK1xcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuK1xcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XFxuK1xcdGlmICh0b2Rfc3RlcClcXG4rXFx0XFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbkBAIC01LDEwICs1LDEyIEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0ZGRlZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInJlZ3MuaFxcXCJcXG4gXFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcXG4gc3RydWN0IHpsMzA3M3hfZGV2O1xcbiBcXG4gLyoqXFxuQEAgLTQyLDYgKzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywgYm9vbCB0b2Rfc3RlcCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xcbitcXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuQEAgLTIwMCw2ICsyMTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbisgKlxcbisgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuK3tcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcXG4rXFx0XFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeSAtIGNoZWNrIGlmIGhvbGRvdmVyIGlzIHJlYWR5XFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuaW5kZXggN2Y1YWZhYWFlNjM0Mi4uOGE4YzI3YTA2YWM5ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5AQCAtNTEwLDYgKzUxMCwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRpbnQgcmM7XFxuIFxcdHU4IGk7XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZ6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XFxuIFxcdFxcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xcbiBcXHRcXHRpZiAocmMpIHtcXG5AQCAtMTAzMyw2ICsxMDM4LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5AQCAtMjYsNiArMjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDtcXG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxcbiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VU1xcdFxcdCgzMCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXFxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1xcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTXFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbiBcXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcXG4gXFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xcbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xcbisgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9uc1xcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXFxuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMnIGludmFyaWFudHNcXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXFxuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXFxuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxcbisgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpXFxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXFxuICAqL1xcbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFxuIFxcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cXG4gXFx0dTY0XFx0XFx0XFx0Y2xvY2tfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdG91dF9zdGVwX3RpbWVfbWFzaztcXG4gXFx0dThcXHRcXHRcXHRwaGFzZV9hdmdfZmFjdG9yO1xcbiBcXHRib29sXFx0XFx0XFx0ZnJlcV9tb25pdG9yO1xcbiB9O1xcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcXHUwMDI2XFx1MDAyNiB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGluZGV4OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbit7XFxuK1xcdHJldHVybiAhISh6bGRldi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKGluZGV4KSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uNWUyOTRmMTkwNTA1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtMjI3NSw0NSArMjI3NywzNjkgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcXG4gfVxcbiBcXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xcbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlxcdDEwMDAwMDAwXFxuK1xcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcXG4gICpcXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XFxuICAqXFxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuIFxcbi1cXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4tXFx0aWYgKCF6bGRwbGwpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbi1cXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgKnRzKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIHpsZHBsbDtcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXFxuKyAqXFxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXFxuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxcbisgKlxcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXFxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXFxuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXFxuKyAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgczY0IGRlbHRhKVxcbit7XFxuK1xcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XFxuK1xcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcXG4rXFx0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xcbitcXHRzMzIgc3RlcF9jeWNsZXM7XFxuK1xcdHUzMiBzeW50aF9mcmVxO1xcbitcXHRpbnQgcmM7XFxuK1xcdHU4IGk7XFxuK1xcbitcXHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucywgbGlzdCkge1xcbitcXHRcXHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xcbitcXG4rXFx0XFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4rXFxuK1xcdFxcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xcbitcXHRcXHRpZiAoc3ludGhfaWQgXFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IG91dF9pZCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XFxuK1xcdFxcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcXG4rXFx0XFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cXHUwMDNlaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xcbitcXG4rXFx0XFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXFxuK1xcdFxcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0XFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XFxuK1xcbitcXHRcXHRpZiAoIXN5bnRoX21hc2tbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXFxuK1xcdFxcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICF0b2Rfc3RlcHBlZCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRpZiAodG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHRcXHR0b2Rfc3RlcHBlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXFxuK1xcdCAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuICAqXFxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxcbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuLXZvaWRcXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcXG4ge1xcbi1cXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcXG4rXFx0aW50IHJjO1xcbiBcXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0a2ZyZWUoemxkcGxsKTtcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcXG4rXFxuK1xcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcXG4rXFx0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cXG4rXFx0ICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS5cXG4rXFx0ICovXFxuK1xcdGlmIChkZWx0YSBcXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXFx1MDAzYz0gLU5TRUNfUEVSX1NFQykge1xcbitcXHRcXHRzMzIgcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXFx1MDAyNnJlbWFpbmRlcik7XFxuK1xcdFxcdHRzLnR2X25zZWMgPSAwO1xcbitcXHRcXHRkZWx0YSA9IHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIHRzKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXFxuK1xcdFxcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xcbitcXHRcXHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xcbitcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xcbitcXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cXG4rXFx0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcXG4rXFx0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcXG4rXFx0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc2VjX2FkanVzdGVkKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzNjQgb2Zmc2V0O1xcbitcXG4rXFx0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcXG4rXFx0ICpcXG4rXFx0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxcbitcXHQgKi9cXG4rXFx0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XFxuK1xcdGlmIChvZmZzZXQgPT0gY2hhbi1cXHUwMDNlZGZfb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgb2Zmc2V0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXFxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2Vzbid0IHN1cHBvcnQgVElFLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzMzJcXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxcbit7XFxuK1xcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xcbitcXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rXFx0Lm1heF9hZGpcXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcXG4rXFx0LmdldHRpbWV4NjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcXG4rXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuK1xcdC5hZGp0aW1lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXFxuK1xcdC5hZGpmaW5lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXFxuK1xcdC5hZGpwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcXG4rXFx0LmdldG1heHBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcXG4rXFxuK1xcdHNucHJpbnRmKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubmFtZSksXFxuK1xcdFxcdCBcXFwiemwzMDczeC1kcGxsJXVcXFwiLCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2emxkcGxsLVxcdTAwM2VwdHBfaW5mbywgemxkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xcbitcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xcbitcXHR9XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICovXFxuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXFx1MDAzZXB0cF9jbG9jaykpIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTIzOTgsNiArMjcyNCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICpcXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKi9cXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXFxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XFxuK1xcbitcXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcXG4rXFx0aWYgKCF6bGRwbGwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4rXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFxuK1xcdHJldHVybiB6bGRwbGw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqXFxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqL1xcbit2b2lkXFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRXQVJOKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIFxcXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGtmcmVlKHpsZHBsbCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXFxuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbkBAIC0yNDI4LDYgKzI3OTYsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI0NDEsNyArMjgxNiw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHZvaWRcXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB7XFxuLVxcdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cXG4rXFx0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5AQCAtNSw2ICs1LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kcGxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG5AQCAtMjIsNiArMjMsOCBAQFxcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXFxuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXFxuICAqL1xcbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFxuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdGVudW0gZHBsbF90eXBlXFx0XFx0XFx0dHlwZTtcXG4gXFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXFx0XFx0bG9ja19zdGF0dXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwaW5zO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cXHRcXHRwdHBfaW5mbztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja1xcdFxcdCpwdHBfY2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbkBAIC0xNzksNiArMTc5LDIwIEBAXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXFx0XFx0NFxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDMwLCAxKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlxcdFxcdFxcdDRcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1xcdFxcdFpMX1JFRyg1LCAweDMxLCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsMjMgQEBcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFxcdFxcdEdFTk1BU0soNiwgNClcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDM2LCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjAzLjcxMzU3OTc4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY5MzY2MDI4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpIHRvIGFkZCBQVFAgY2xvY2sgc3VwcG9ydC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyBvdmVyIEkyQy9TUEkuIER1cmluZyBwcm9iZSwgaXQgcmVhZHMgYSBoYXJkd2FyZSBjaGlwIElEIGFuZCBmYWlscyBpZiBpdCBkb2Vzbid0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1YmM5ZGY5ZDQ3ZDJiMzJjODk0NTUyNjliOTNiYjUzOGZhOWZlMWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE4OjM2OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICsyLDcgQEBcbiBcbiBjb25maWcgWkwzMDczWFxuIFx0dHJpc3RhdGUgXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCIgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgRFBMTFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgUkVHTUFQXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbitcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCJTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCJcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjc5ODc0YTlmZGI0OTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTE2Miw4ICsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG4gICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXG4gICpcbi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4tICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSByYXcgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4rICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXG4rICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG5AQCAtMjM0LDYgKzIzNSwzMTEgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKlxuKyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBJZiB0aGUgdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyxcbisgKiBub3JtYWxpemVzIGJ5IHRoZSBudW1iZXIgb2YgZWxhcHNlZCB0aWNrcy4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYztcbitcbitcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSWYgdG9vIGNsb3NlIHRvIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dC4gSWYgdGhlIDEgSHogdGlja1xuK1x0ICogY3Jvc3NlZCBiZXR3ZWVuIHRoZSB0d28gcmVhZHMsIG5vcm1hbGl6ZSBieSB0aGUgZWxhcHNlZCB0aWNrcy5cbitcdCAqL1xuK1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRpZiAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNjIHRocmVzaG9sZF9ucykge1xuK1x0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xuK1x0XHR0c19uZXh0LnR2X3NlYysrO1xuK1x0fSBlbHNlIGlmIChkaWZmLnR2X3NlYyBcdTAwM2MgMCkge1xuK1x0XHR0c19uZXh0LnR2X3NlYyAtPSBkaWZmLnR2X3NlYztcbitcdH1cbitcbitcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuK1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbitcdGlmICghdGltZXNwZWM2NF92YWxpZChcdTAwMjZ0c19uZXh0KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbitcdGlmICghcmMpXG4rXHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiArLTFzKVxuKyAqXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuK3tcbitcdHM2NCB0aWVfZGF0YTtcbitcdGludCByYztcbitcbitcdGlmIChXQVJOX09OKGRlbHRhX25zIFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcdTAwM2U9IE5TRUNfUEVSX1NFQykpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4rXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuKyAqXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4rXHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4re1xuK1x0dTggY3RybDtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbitcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbitcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4rXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4rXHRpZiAodG9kX3N0ZXApXG4rXHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyZWdzLmhcIlxuIFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiArMjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuKyAqXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbit7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuK1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDdmNWFmYWFhZTYzNDIuLjhhOGMyN2EwNmFjOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTUxMCw2ICs1MTAsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4rXHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDMzLDYgKzEwMzgsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiArNzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbitcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuK3tcbitcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uNWUyOTRmMTkwNTA1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMjc1LDQ1ICsyMjc3LDM2OSBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuK1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuK31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbisgKlxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbisgKlxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZVxuKyAqIGxvd2VzdC1JRCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbitcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbit7XG4rXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4rXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XG4rXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4rXHRzMzIgc3RlcF9jeWNsZXM7XG4rXHR1MzIgc3ludGhfZnJlcTtcbitcdGludCByYztcbitcdHU4IGk7XG4rXG4rXHQvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4rXG4rXHRcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXG4rXHRcdGlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcbitcdFx0aWYgKHN5bnRoX2lkIFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XG4rXHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxuXCIsXG4rXHRcdFx0XHQgb3V0X2lkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbitcdH1cbitcbitcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcbitcdFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XG4rXHRcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxuK1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4rXG4rXHRcdC8qIFJlbWVtYmVyIGxvd2VzdC1JRCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbitcdCAqL1xuK1x0aWYgKCF0b2Rfc3RlcHBlZCkge1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbitcdFx0XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuICAqXG4tICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4rICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuK1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbitcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4rXHQgKi9cbitcdGlmIChkZWx0YSBcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcbitcdFx0czMyIHJlbWFpbmRlcjtcbitcbitcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbitcdFx0dHMudHZfbnNlYyA9IDA7XG4rXHRcdGRlbHRhID0gcmVtYWluZGVyO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIHRzKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbitcdFx0aWYgKCFkZWx0YSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcbitcdFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXG4rXHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuK1x0XHQgKi9cbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuK1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuK1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbitcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuK1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbitcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4rXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRzNjQgb2Zmc2V0O1xuK1xuK1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XG4rXHQgKlxuK1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4rXHQgKi9cbitcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4rXHRcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xuK1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuKyAqXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2Vzbid0IHN1cHBvcnQgVElFLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcbitcdGlmICghZGVsdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbit9XG4rXG4rc3RhdGljIHMzMlxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcbit7XG4rXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcbitcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuK1x0ICovXG4rXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4rXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbitcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbitcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbitcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4rXHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4rXHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4rXHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbitcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuK307XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuK1xuK1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4rXHRcdCBcInpsMzA3M3gtZHBsbCV1XCIsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXG4rXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2emxkcGxsLVx1MDAzZXB0cF9pbmZvLCB6bGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4rXHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcblwiLFxuK1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XG4rXHR9XG4rXG4rXHR6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKi9cbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuK1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yMzk4LDYgKzI3MjQsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqXG4rICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKi9cbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1xuK1x0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4rXHRpZiAoIXpsZHBsbClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4rXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbitcdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1xuK1x0cmV0dXJuIHpsZHBsbDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4rICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICpcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuKyAqL1xuK3ZvaWRcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0V0FSTih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwiKTtcbitcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0a2ZyZWUoemxkcGxsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MjgsNiArMjc5NiwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4rXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTtcbitcdGlmIChyYykge1xuK1x0XHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ0MSw3ICsyODE2LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbitcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICs1LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNvcmUuaFwiXG4gXG5AQCAtMjIsNiArMjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgKzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm9cdFx0cHRwX2luZm87XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHgzMCwgMSlcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BcdFx0XHRHRU5NQVNLKDIsIDApXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTS1x0XHRaTF9SRUcoNSwgMHgzMSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdFx0OFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcdDlcbitcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDUwLCAxKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcdFx0R0VOTUFTSyg3LCA0KVxuQEAgLTE5Myw2ICsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbisgKlxuKyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNixcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgKzIxOSwyNCBAQFxuIFx0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KVxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlx0UzY0X01JTlxuIFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcdFx0XHRaTF9SRUcoNywgMHgwQywgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XHRcdFx0WkxfUkVHKDcsIDB4MTIsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzRcdFx0XHRaTF9SRUcoNywgMHgxOCwgNClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0yMjEsNiArMjU2LDIzIEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFx0XHRaTF9SRUcoOSwgMHgzOCwgMSlcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcdDJcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcdFx0WkxfUkVHKDksIDB4MzksIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjAzLjcxMzU4MTU3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNzI0NTM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQXp1cml0ZSBEUExMIERyaXZlcjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKGBkcml2ZXJzL2RwbGwvemwzMDczeC9gKS4gSXQgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBjb25zaWRlciBmdXp6aW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQ/XG5cbkknbSB0aGlua2luZywgdGhpcyBpcyBhIERQTEwgZHJpdmVyLCBzbyBpdCdzIHByb2JhYmx5IEkyQyBvciBTUEksIGFuZCBzdXJlIGVub3VnaCwgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBjb25maXJtIHRoYXQuIFRoYXQncyBnb29kLCBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3IgZW11bGF0aW9uIG9yIGF0IGxlYXN0IGFjY2VzcyB3aXRoaW4gUUVNVS4gTm93IHRoZSBxdWVzdGlvbiBpcywgKmNhbiogc3l6a2FsbGVyIHJlYWNoIGl0P1xuXG5TeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZnV6eiBJMkMgYW5kIFNQSSBkZXZpY2VzLiBJIGtub3cgaXQgY2FuIGluamVjdCBkZXZpY2VzIHZpYSBzeXNmcywgdXNlIHZpcnR1YWwgYnVzZXMsIG9yIGp1c3QgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCBgL2Rldi9pMmMtWGAgb3IgYC9kZXYvc3BpWGAuIEJ1dCB3YWl0LCB0aGlzIGlzIGEgKmtlcm5lbCBkcml2ZXIqLCBzbyBjYW4gc3l6a2FsbGVyIHJlYWNoIGl0ICphZnRlciogaXQncyBsb2FkZWQ/IFN5emthbGxlciBoYXMgc29tZSBzdXBwb3J0IGZvciBJMkMvU1BJIGRldmljZSBpbnN0YW50aWF0aW9uIGFscmVhZHkgaWYgaXQga25vd3MgaG93LCBvciBpZiBpdCdzIHBhcnQgb2YgdGhlIGRlc2NyaXB0aW9ucy5cblxuQnV0IGhhbmcgb24sIHRoZXJlJ3MgYSBjb25zdHJhaW50OiB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiAuLi4gUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBUaGlzIGlzIEkyQy9TUEksIG5vdCBQQ0llLCBzbyB0aGF0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0uIFRoYXQncyBhIGh1Z2UgcmVsaWVmLiBVc3VhbGx5LCBJMkMvU1BJIGRyaXZlcnMgYXJlIGZpbmUgYXMgbG9uZyBhcyB0aGV5J3JlIGluIHRoZSBkZXZpY2UgdHJlZSBvciBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIHN5c2ZzLiBTeXprYWxsZXIgZXZlbiB1c2VzIGBuZXdfZGV2aWNlYCB0byBwcm9iZSBJMkMgZGV2aWNlcyFcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzeXprYWxsZXIgY2FuIHByb2JlIHRoaXMgZHJpdmVyLiBUaGUgZHJpdmVyIHVzZXMgcmVnbWFwIG92ZXIgSTJDL1NQSSBzbyBsZXQncyBjaGVjayBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBpbiB0aGUga2VybmVsIHRvIGNvbmZpcm0uIEkgdGhpbmsgaXQgbG9va3MgcHJvbWlzaW5nLCBzbyBsZXQncyBkaWcgaW50byB0aGF0IGRpcmVjdG9yeSB0byBjaGVjayBpZiB0aGlzIGlzIGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjEyLjg4NjAzNzYzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4NDAxNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA0NDg3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTQtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNTpcXHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTE3PWNvbmZpZyBaTDMwNzNYX0kyQ1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yNi1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mjc6XFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTI5PWNvbmZpZyBaTDMwNzNYX1NQSVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zOC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6Mzk6XFx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1pMMzA3M1gpXFx0XFx0Kz0gemwzMDczeC5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6NDp6bDMwNzN4LW9ianNcXHRcXHRcXHQ6PSBjaGFuLm8gY29yZS5vIGRldmxpbmsubyBkcGxsLm9cXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBmbGFzaC5vIGZ3Lm8gb3V0Lm8gcHJvcC5vIHJlZi5vIHN5bnRoLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS02LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1pMMzA3M1hfSTJDKVxcdCs9IHpsMzA3M3hfaTJjLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo4OnpsMzA3M3hfaTJjLW9ianNcXHRcXHQ6PSBpMmMub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1pMMzA3M1hfU1BJKVxcdCs9IHpsMzA3M3hfc3BpLm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMTp6bDMwNzN4X3NwaS1vYmpzXFx0XFx0Oj0gc3BpLm9cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMy0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTQ6ICogemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSAtIHVwZGF0ZSBEUExMIGNoYW5uZWwgc3RhdHVzIGZyb20gSFdcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNi0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDppbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjEte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMtXFx0dTY0IHZhbDtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PTl9TVEFUVVMoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNy1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2Vtb25fc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzE6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRlNFTF9TVEFUVVMoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2VyZWZzZWxfc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOC1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzk6XFx0aWYgKCF6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNoYW4pKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwOlxcdFxcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MS1cXHRcXHRcXHRjaGFuLVxcdTAwM2VkZl9vZmZzZXQgPSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYtXFx0XFx0XFx0XFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01Mi1cXHRcXHRcXHQgICAgICBaTF9EUExMX0RGX1JFQURfU0VNIHwgWkxfRFBMTF9ERl9SRUFEX1JFRl9PRlNUKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTY6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3LVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjI6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoaW5kZXgpLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTcxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MjogKiB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0IC0gc3dpdGNoIERQTEwgY2hhbm5lbCB0byBOQ08gbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTc0LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODItICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjgzOmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04NC17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjg1OlxcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04Ni1cXHR1OCBwcmV2X21vZGUsIGRmX3JlYWQ7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjkwOlxcdHByZXZfbW9kZSA9IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTEtXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTYtXFx0aWYgKHByZXZfbW9kZSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfRlJFRVJVTikge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5NzpcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX05DTyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTk4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5OTpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAwLVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAxLVxcdFxcdGlmIChyYykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMDI6XFx0XFx0XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEwMy1cXHRcXHRcXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIwLVxcdFxcdCAgRklFTERfUFJFUChaTF9EUExMX0RGX1JFQURfQ01ELCBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTIxOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksIGRmX3JlYWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMjItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMxOlxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMyOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzMtXFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzQtXFx0aWYgKHJjKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzNTpcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgcHJldl9tb2RlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTM2LVxcdFxcdHJldHVybiByYztcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDctXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0ODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDktXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTYxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjI6ICogemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoIC0gZmV0Y2ggRFBMTCBjaGFubmVsIHN0YXRlIGZyb20gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTYzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTY0LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3MC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTcxOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Mi17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MzpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuID0gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc0LVxcdGludCByYywgaTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLCBcXHUwMDI2Y2hhbi1cXHUwMDNlY3RybCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Ny1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc5LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODA6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTgxLVxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODUtXFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiRFBMTCV1IG1vZGU6ICV1LCByZWY6ICV1XFxcXG5cXFwiLCBpbmRleCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTg2OlxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSwgemwzMDczeF9jaGFuX3JlZl9nZXQoY2hhbikpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4ODpcXHRyYyA9IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoemxkZXYsIGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTUtXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE5NjpcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTctXFx0XFx0Y2hhbi1cXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDAtXFx0XFx0XFxcIkRQTEwldSBsb2NrX3N0YXRlOiAldSwgaG86ICV1LCBzZWxfc3RhdGU6ICV1LCBzZWxfcmVmOiAldVxcXFxuXFxcIixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAxOlxcdFxcdGluZGV4LCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY2hhbiksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMjpcXHRcXHR6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkoY2hhbikgPyAxIDogMCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAzOlxcdFxcdHpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDQ6XFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA1LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwOC1cXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA5OlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjEwLVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxNS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjaGFuLVxcdTAwM2VyZWZfcHJpbyk7IGkrKykge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMTY6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlcmVmX3ByaW9baV0pO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyNS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI2OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQgLSBnZXQgY3VycmVudCBEUExMIGNoYW5uZWwgc3RhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjI3OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjI4LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGdldCBzdGF0ZSBmb3JcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzEtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjpjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMy1cXHRcXHRcXHRcXHRcXHRcXHQgIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzOC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjM5OiAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjQwOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDEtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0ODppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDkte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjU0OlxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFxcdTAwMjZ0b2RfY3RybCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1NS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjY2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNjc6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNjgtXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjczLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNzQ6ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjc1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODQtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4NTpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODYte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyODc6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg4LVxcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTEtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MjogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjkzOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTQtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTgtICpcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk5OiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAxLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDI6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAzLVxcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzE2LVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMxNzpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMTgtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMS1cXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzIzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMyNjpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzMxOlxcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFxcdTAwMjZzZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMzItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNS1cXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM0NzogKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNDg6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM0OS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1MS0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTI6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzUzLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTQtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NTppbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU2LVxcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2MC1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjE6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzYyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2NTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY2LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2OTpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzcwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzItXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3MzpcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc0LVxcdFxcdFxcdFxcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc4OiAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM3OTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgwLSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzg5LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5MDogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOTEtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5Mi0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzkzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDAtXFx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQwMTpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFxcdTAwMjZ0c19uZXh0LCBOVUxMKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDUtXFx0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDY6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MjY6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI3LX1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MjktLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzMDogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDMxOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MzItICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MzctICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzODppbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDI6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQzLVxcdGlmICghcmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQ5LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTA6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTE6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1Mi0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1OS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2MS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDcwLVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ3MTpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDcyLVxcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4MDpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgxLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ4NDpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODUtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg4OlxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDg5LVxcdFxcdFxcdFxcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5Mi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDkzOiAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ5NDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk1LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTA0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MDU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MDYtXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNC1cXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE1OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MTYtXFx0XFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTIxOlxcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjItXFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUyNjpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyOS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTMwOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTM5LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NDA6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQxLX1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0Ni0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBzZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTU1LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTY6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NzpcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTgte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NTk6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjAtXFx0aW50IHJjLCBpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2Ny1cXHRpZiAoZGNoYW4tXFx1MDAzZWN0cmwgIT0gY2hhbi1cXHUwMDNlY3RybCkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1Njg6XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY5LVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZWN0cmwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3NS1cXHRpZiAoZGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsICE9IGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3NjpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX01PREVfUkVGU0VMKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc3LVxcdFxcdFxcdFxcdCAgICAgIGNoYW4tXFx1MDAzZW1vZGVfcmVmc2VsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTEtXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gaW50byBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU5MjpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5My1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTktXFx0XFx0aWYgKGRjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSAhPSBjaGFuLVxcdTAwM2VyZWZfcHJpb1tpXSkge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDA6XFx0XFx0XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjA4LVxcdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NjA5OlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9XUixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjEwLVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTEzPXN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTgtICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoyNTpzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMjYtXFx0c3RydWN0X2dyb3VwKGNmZyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0zNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Mzg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjM5OmNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDAtXFx0XFx0XFx0XFx0XFx0XFx0IHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQyOlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDQ6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDktXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUzOmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTQtXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTU6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ni1cXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTg6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYwOmludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC02MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYzOiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oPTY4PXN0YXRpYyBpbmxpbmUgczY0XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjY5OnpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTcwLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03NC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NzU6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjgwOnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX21vZGVfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTgxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODY6ICogemwzMDczeF9jaGFuX3JlZl9nZXQgLSBnZXQgbWFudWFsbHkgc2VsZWN0ZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05MC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTE6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk3OiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTgtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMC0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTAxOnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTAyLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDYtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEwNzogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA4LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMTpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTIte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExNi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTE3OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTIzPXN0YXRpYyBpbmxpbmUgdThcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI0OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM1OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNi0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTQwPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNDE6emwzMDczeF9jaGFuX3JlZl9wcmlvX3NldChzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYsIHU4IHByaW8pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE0Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUxLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNTI6ICogemwzMDczeF9jaGFuX3JlZl9pc19zZWxlY3RhYmxlIC0gY2hlY2sgaWYgcmVmZXJlbmNlIGlzIHNlbGVjdGFibGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTUzLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xNTg9c3RhdGljIGlubGluZSBib29sXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE1OTp6bDMwNzN4X2NoYW5fcmVmX2lzX3NlbGVjdGFibGUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNjAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjE6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY2hhbiwgcmVmKSAhPSBaTF9EUExMX1JFRl9QUklPX05PTkU7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Mi19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY0LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNjU6ICogemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBsb2NrIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2Ni0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTY5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNzA6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbG9ja19zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTcxLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNzUtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3NjogKiB6bDMwNzN4X2NoYW5faXNfbG9ja2VkIC0gY2hlY2sgaWYgY2hhbm5lbCBpcyBsb2NrZWQgdG8gYSByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTc3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE4MTpzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX2lzX2xvY2tlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xODIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxODM6XFx0dTggbG9ja19zdGF0ZSA9IHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTg0LVxcdHJldHVybiBsb2NrX3N0YXRlID09IFpMX0RQTExfTU9OX1NUQVRVU19TVEFURV9MT0NLO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTg4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8gLSBjaGVjayBpZiBjaGFubmVsIGlzIGluIGF1dG9tYXRpYyBtb2RlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE4OS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxOTM6c3RhdGljIGlubGluZSBib29sIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTk1OlxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX0FVVE87XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE5Ni19XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTk4LS8qKlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjoxMi45ODg4ODM0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MDgzODExOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCwgUFRQLCBhbmQgU3luY0UgZGV2aWNlcy4gSXQgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIGlzIHRoaXMgdGhpbmcgZW11bGF0ZWQgaW4gUUVNVT8gQnV0IG5vLCBpdCdzIGEgZGVkaWNhdGVkIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZGV2aWNlLCBub3Qgc29tZXRoaW5nIGdlbmVyaWMuIEhtbSwgYnV0IGl0J3MgYW4gSTJDIG9yIFNQSSBkZXZpY2UsIHJpZ2h0P1xuXG5Ob3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGNhbiBTeXprYWxsZXIsIG15IGZhdm9yaXRlIGZ1enppbmcgdG9vbCwgZXZlbiAqaGFuZGxlKiBJMkMgb3IgU1BJIGRldmljZXM/IFRoZSBnb29kIG5ld3MgaXMsIHllcywgaXQgY2FuISBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBpbmplY3RpbmcgSTJDL1NQSSBkZXZpY2VzIGlmIGl0IGtub3dzIHRoZSBzcGVjaWZpY3MsIG9yIGV2ZW4ganVzdCBvcGVuaW5nIGAvZGV2L2kyYy1YYCBhbmQgdGFsa2luZyB0byB0aGUgYnVzLlxuXG5Ib3dldmVyLCBhIGNyaXRpY2FsIHBvaW50IGNvbWVzIHRvIG1pbmQ6IGlmIHRoZSBkcml2ZXIgaXNuJ3QgbG9hZGVkIGluIHRoZSBmaXJzdCBwbGFjZSwgU3l6a2FsbGVyIGNhbid0IGZ1enogaXQuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIFN5emthbGxlciBsb2FkIHRoZSBkcml2ZXI/IEl0IGFwcGVhcnMgU3l6a2FsbGVyICpjYW4qIGxvYWQgdGhlIGRyaXZlciBpZiBpdCdzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCwgdXNpbmcgYENPTkZJR19aTDMwNzNYX0kyQz15YCwgd2hpY2ggbG9va3MgbGlrZSBhbiBvcHRpb24gaGVyZS4gVGhlbiBTeXprYWxsZXIgY2FuIHRyeSB0byBpbnN0YW50aWF0ZSBpdCB2aWEgc3lzZnMgYG5ld19kZXZpY2VgIGZvciBJMkMuXG5cbldhaXQgYSBzZWNvbmQuIFRoZSBvcmlnaW5hbCBwcm9tcHQgdGFsa3MgYWJvdXQgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIG5lZWRpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gVGhpcyBpcyAqbm90KiBhIFBDSWUgY2FyZDsgaXQncyBJMkMvU1BJLCBzbyBpdCdzIGEgZGlmZmVyZW50IHVzZSBjYXNlLlxuXG5Pa2F5LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEdpdmVuIHRoYXQgaXQncyBhbiBJMkMgZGV2aWNlLCBhbmQgU3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSBpdCB1c2luZyBgZWNobyB6bDMwNzN4IFx1MDAzZSAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCwgdGhlIGFuc3dlciBpcyBwcm9iYWJseSB5ZXMuXG5cbkxldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGlmIHRoaXMgZHJpdmVyIGhhcyBhbiBJMkMgSUQgdGFibGUuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCB0byBjb25maXJtIFN5emthbGxlciBjYW4gYWN0dWFsbHkgaW5zdGFudGlhdGUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjIxLjg5NzI2NjU0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQwMTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpMmNfZGV2aWNlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cXHR7IC5uYW1lID0gXFxcInpsMzA3MzFcXFwiIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjIxLjk5MTY3Mjg2MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzQ3MzYyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJMkMgRGV2aWNlIFByb2JlIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGRldmljZSBoYXMgYW4gSTJDIElEIHRhYmxlLCB3aGljaCBpcyBnb29kLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGluc3RhbnRpYXRpb24gdXNpbmcgYG5ld19kZXZpY2VgLiBUaGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbi4gTm93IEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJvYmUgZnVuY3Rpb24gaXRzZWxmLiBEb2VzIHRoZSBwcm9iZSBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIHRoZSBoYXJkd2FyZT8gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IHJlYWQgYW55IHJlZ2lzdGVycyBvciBleGNoYW5nZSBhbnkgZGF0YSBvbiB0aGUgYnVzPyBNeSBtYWluIGNvbmNlcm4gaXMsIGlmIGl0IGRvZXMsIHdpbGwgaXQgZmFpbCBncmFjZWZ1bGx5IGlmIHRoZSBleHBlY3RlZCByZXNwb25zZSBpc24ndCByZWNlaXZlZD8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgdW5leHBlY3RlZCBoYW5ncyBvciBlcnJvcnMgZHVyaW5nIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgcHJvY2VzcyBjYW4gY29udGludWUsIHNvIEkgYmV0dGVyIGNoZWNrIHRoZSBgemwzMDczeF9pMmNfcHJvYmVgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDEzMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjI2LjA2NjQxMjY1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2MzE1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9pMmNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTEwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjExOnN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTItXFx0fSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NC1cXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MzY6MjYuMTgwMDUwMjIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUxNzgwNDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgWkwzMDczeCBQcm9iZSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY29ubmVjdGlvbiBwcm9jZXNzLCBzbyBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB6bDMwNzN4X2kyY19wcm9iZWAgYW5kIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb25zLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgSTJDIHZlcnNpb24gaXMgdGhlIG1vc3QgZ2VuZXJpYywgYXMgSTJDIHByb3ZpZGVzIHRoZSBsZWFzdCBvdmVyaGVhZCB0byB0aGUgc3lzdGVtLiBGcm9tIHRoZXJlLCBJIGV4cGVjdCBgemwzMDczeF9kZXZfcHJvYmVgIHRvIGJlIHRoZSBhY3R1YWwgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGRldmljZSwgYW5kIHBvdGVudGlhbGx5IHRoZSBwbGFjZSB3aGVyZSBvdGhlciBtZXRob2RzIG9mIGNvbm5lY3Rpb24gYXJlIHN1cHBvcnRlZC4gTGV0J3Mgc2VlIGhvdyB0aGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHdoYXQgcmVzb3VyY2VzIGFyZSByZXF1ZXN0ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgaW5pdGlhbGx5LiBUaGUgbmFtaW5nIHN1Z2dlc3RzIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgd2l0aCB0aGUgSTJDLXNwZWNpZmljIHByb2JlIGhhbmRsaW5nIGJ1cyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGBkZXZfcHJvYmVgIHRha2luZyBjYXJlIG9mIHRoZSBhY3R1YWwgZGV2aWNlIHNldHVwLiBJJ20gbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHBhdHRlcm4gb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGlkZW50aWZpY2F0aW9uLCBhbmQgcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBBcmUgdGhleSB1c2luZyB0aGUgRGV2aWNlIFRyZWUgb3IgZGlyZWN0IGJvYXJkIGRlZmluaXRpb25zIGZvciBjb25maWd1cmF0aW9uPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIGFuZCBmYWxsYmFjayBtZWNoYW5pc21zPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgYHpsMzA3M3hfZGV2X3Byb2JlYCBpcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGEgcGF0aCBzZXR1cCwgYmVnaW5zLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY3MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjMyLjY5Nzg1Njc1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMTpcXHRzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuICAxMjpcXHR7XFxuICAxMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuICAxNDpcXHRcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2O1xcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHR6bGRldiA9IHpsMzA3M3hfZGV2bV9hbGxvYyhkZXYpO1xcbiAgMTc6XFx0XFx0aWYgKElTX0VSUih6bGRldikpXFxuICAxODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih6bGRldik7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdHpsZGV2LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFxcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xcbiAgMjE6XFx0XFx0aWYgKElTX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSlcXG4gIDIyOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSxcXG4gIDIzOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcXFxuXFxcIik7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xcbiAgMjk6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMxXFxcIiB9LFxcbiAgMzA6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMyXFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODozNjozMi42OTc5MTk0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxMjQyODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwncyBwZXJzcGVjdGl2ZTpcblxuKip6bDMwNzN4X2Rldl9wcm9iZTogRGVjb25zdHJ1Y3RpbmcgdGhlIERldmljZSBQcm9iZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBtZW50aW9uIG9mIGB6bDMwNzN4X2Rldl9wcm9iZWAsIG15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgYXJvdW5kIGRyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBwcm9iaW5nIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgYW5kIGNvbmZpZ3VyZSBhIGRldmljZSwgbGlrZWx5IGEgWkwzMDczeCBzZXJpZXMgZGV2aWNlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgcHJvYmUgc2VxdWVuY2U6IHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIHJlZ2lzdGVyIGludGVycm9nYXRpb24sIHBvdGVudGlhbCBwb3dlci1vbiBzZXF1ZW5jaW5nLCBhbmQgZmluYWxseSwgcmVnaXN0cmF0aW9uIHdpdGggdGhlIHN5c3RlbS5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLiBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgcmVzcG9uc2VzIGR1cmluZyB0aGlzIHByb2JlPyBBcmUgdGhlcmUga25vd24gaXNzdWVzIHdpdGggcG93ZXItdXAgdGltaW5nIG9yIHJlZ2lzdGVyIGFjY2VzcyBvbiB0aGlzIHBhcnRpY3VsYXIgcGxhdGZvcm0/IElzIHRoZXJlIGFueSBkb2N1bWVudGF0aW9uIHJlYWRpbHkgYXZhaWxhYmxlIGZvciB0aGUgWkwzMDczeCBzZXJpZXMgb3IgcmVsZXZhbnQgYXNzb2NpYXRlZCBkZXZpY2UgY29uZmlndXJhdGlvbnM/IEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBJMkMgb3IgU1BJIGNvbW11bmljYXRpb24gdGhhdCdzIGxpa2VseSBpbnZvbHZlZCwgYW5kIG1lbnRhbGx5IHZlcmlmeWluZyB0aGF0IHRoZSBidXMgaW5pdGlhbGl6YXRpb24gaXMgcm9idXN0LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcHJvYmUncyBzdWNjZXNzIG9yIGZhaWx1cmUuIFdoYXQgZXJyb3JzIGNvdWxkIGl0IHJldHVybj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpZiB0aGlzIHByb2JlIGRvZXNuJ3Qgc3VjY2VlZD8gRG9lcyBpdCBncmFjZWZ1bGx5IGhhbmRsZSBlcnJvcnM/IEFuZCBJJ20gY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGl0IHJlcG9ydHMgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMsIHNvIGRlYnVnZ2luZyBpcyBlYXN5LiBXZSdkIGhhdGUgdG8gYmUgc2NyYXRjaGluZyBvdXIgaGVhZHMgZG93biB0aGUgbGluZS4gSSdtIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXM7IGFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlIG1vZHVsZXMgb3IgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgcHJvYmUgY2FuIHJ1biBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgY2xvY2sgY29uZmlndXJhdGlvbj8gRG9lcyB0aGlzIHByb2JlIGFkZHJlc3MgYW55IGNsb2NrLXJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gdGhhdCdzIGNyaXRpY2FsIGZvciB0aGUgZGV2aWNlJ3MgZnVuY3Rpb25hbGl0eT9cblxuRmluYWxseSwgbXkgdGhvdWdodHMgYXJlIG9uIHNjYWxhYmlsaXR5IGFuZCByb2J1c3RuZXNzLiBIb3cgaXMgdGhpcyBwcm9iZSBkZXNpZ25lZCB0byBoYW5kbGUgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBjb25maWd1cmF0aW9ucyBvZiB0aGUgWkwzMDczeCBkZXZpY2U/IFdpbGwgdGhpcyBkZXZpY2Ugd29yayByZWxpYWJseSB3aXRoIHRoZSBwcm9kdWN0IGFzIGl0IGV4aXN0cz8gRG9lcyBpdCBpbmNsdWRlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIHRvIHByb3RlY3QgdGhlIHN5c3RlbSBmcm9tIHVucHJlZGljdGFibGUgaGFyZHdhcmUgYmVoYXZpb3I/XG5cbkluIHNob3J0LCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRpc3NlY3RpbmcgdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb24gZnJvbSBhIHN5c3RlbS1sZXZlbCBwZXJzcGVjdGl2ZSwgc2Vla2luZyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCBpdHMgcG90ZW50aWFsIHBpdGZhbGxzLCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MjYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjM5LjAxMDM1MjEzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NzQyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9kZXZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MzA9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3Ny0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc4OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzktICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg0LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODU6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4Ni17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2NS19XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwNjY6RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwNjctXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA2PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjEwNzppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwOC1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjI1OlxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjM5LjA5MzAzMDYzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY2MDExOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHpsMzA3M3hfZGV2X3Byb2JlYCwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB3ZSdyZSBsb29raW5nIGF0IGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoYXQgbWVhbnMgd2UncmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIGEgYHpsMzA3M3hgIGRldmljZSwgd2hpY2ggSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YuIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0J3MgYmVlbiBwbHVnZ2VkIGluIG9yIGlzIG90aGVyd2lzZSBiZWNvbWluZyBhdmFpbGFibGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUncyBhIG1vcmUgZ2VuZXJpYyBhcHByb2FjaC4gQW55IHVudXN1YWwgYXBwcm9hY2hlcyBoZXJlIHdvdWxkIGJlIGludGVyZXN0aW5nLlxuKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEknbSBrZWVuIHRvIHNlZSB0aGUgYXBwcm9hY2ggYW5kIGFueSBwb3RlbnRpYWwgZm9yIHJvYnVzdG5lc3MgaXNzdWVzLlxuKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCB0aW1pbmcgY29uc3RyYWludHMuXG4qICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSdsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwuIElzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBkZXZpY2UgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3Mgb3Igc3RydWN0dXJlcz8gQW55IGN1c3RvbSBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb25zIHdpbGwgYmUgb2YgaW50ZXJlc3QuXG4qICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSdtIGV4cGVjdGluZyB0aG9yb3VnaCBlcnJvciBoYW5kbGluZywgZXNwZWNpYWxseSB3aGVuIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUuXG4qICAgKipDb25jdXJyZW5jeSoqOiBJJ2xsIGFsc28gZ2xhbmNlIHRvIHNlZSBpZiBhbnl0aGluZyBoZXJlIGlzIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBhcyBJIGtub3cgaGFyZHdhcmUgcHJvYmluZyBjYW4gb2Z0ZW4gaGF2ZSBzaGFyZWQgcmVzb3VyY2VzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJ3JlIGV4cGVjdGluZywgYW5kIHRoZW4gZ2V0dGluZyBpdCByZWFkeSB0byBiZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhleSd2ZSBkb25lIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjQ0LjU1OTA0NzUyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODU6XFx0aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIDk4NjpcXHR7XFxuIDk4NzpcXHRcXHR1MTYgaWQsIHJldmlzaW9uLCBmd192ZXI7XFxuIDk4ODpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gOTg5OlxcdFxcdHUzMiBjZmdfdmVyO1xcbiA5OTA6XFx0XFx0aW50IHJjO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHQvKiBSZWFkIGNoaXAgSUQgKi9cXG4gOTkzOlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbiA5OTQ6XFx0XFx0aWYgKHJjKVxcbiA5OTU6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA5OTY6XFx0XFxuIDk5NzpcXHRcXHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXFxuIDk5ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSsrKSB7XFxuIDk5OTpcXHRcXHRcXHRpZiAoemwzMDczeF9jaGlwX2lkc1tpXS5pZCA9PSBpZClcXG4xMDAwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEwMDE6XFx0XFx0fVxcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRpZiAoaSA9PSBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpKVxcbjEwMDQ6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4xMDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlVua25vd24gY2hpcCBJRDogMHglMDR4XFxcXG5cXFwiLCBpZCk7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHpsZGV2LVxcdTAwM2VpbmZvID0gXFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdC8qIFJlYWQgcmV2aXNpb24sIGZpcm13YXJlIHZlcnNpb24gYW5kIGN1c3RvbSBjb25maWcgdmVyc2lvbiAqL1xcbjEwMTA6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuMTAxMTpcXHRcXHRpZiAocmMpXFxuMTAxMjpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAxMzpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFxcdTAwMjZmd192ZXIpO1xcbjEwMTQ6XFx0XFx0aWYgKHJjKVxcbjEwMTU6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMTY6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFxcdTAwMjZjZmdfdmVyKTtcXG4xMDE3OlxcdFxcdGlmIChyYylcXG4xMDE4OlxcdFxcdFxcdHJldHVybiByYztcXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiQ2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcXFxuXFxcIiwgaWQsXFxuMTAyMTpcXHRcXHRcXHRyZXZpc2lvbiwgZndfdmVyKTtcXG4xMDIyOlxcdFxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkN1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxcXG5cXFwiLFxcbjEwMjM6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMzEsIDI0KSwgY2ZnX3ZlciksXFxuMTAyNDpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCBjZmdfdmVyKSxcXG4xMDI1OlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXFxuMTAyNjpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgY2ZnX3ZlcikpO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxcbjEwMjk6XFx0XFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXFxuMTAzMDpcXHRcXHQgKiB1c2luZyBkZXZsaW5rLlxcbjEwMzE6XFx0XFx0ICovXFxuMTAzMjpcXHRcXHR6bGRldi1cXHUwMDNlY2xvY2tfaWQgPSBnZXRfcmFuZG9tX3U2NCgpO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXFxuMTAzNTpcXHRcXHR6bGRldi1cXHUwMDNlcGhhc2VfYXZnX2ZhY3RvciA9IDI7XFxuMTAzNjpcXHRcXG4xMDM3OlxcdFxcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xcbjEwMzg6XFx0XFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXFxuMTAzOTpcXHRcXHQgKi9cXG4xMDQwOlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4xMDQxOlxcdFxcdGlmIChyYylcXG4xMDQyOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNDM6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNDQ6XFx0XFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xcbjEwNDU6XFx0XFx0aWYgKHJjKVxcbjEwNDY6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA0NzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuMTA0ODpcXHRcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4xMDQ5OlxcdFxcdGlmIChyYylcXG4xMDUwOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNTE6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHQvKiBSZWdpc3RlciBEUExMIGNoYW5uZWxzICovXFxuMTA1NDpcXHRcXHRyYyA9IHpsMzA3M3hfZGV2bV9kcGxsX2luaXQoemxkZXYpO1xcbjEwNTU6XFx0XFx0aWYgKHJjKVxcbjEwNTY6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHQvKiBSZWdpc3RlciB0aGUgZGV2bGluayBpbnN0YW5jZSBhbmQgcGFyYW1ldGVycyAqL1xcbjEwNTk6XFx0XFx0cmMgPSB6bDMwNzN4X2RldmxpbmtfcmVnaXN0ZXIoemxkZXYpO1xcbjEwNjA6XFx0XFx0aWYgKHJjKVxcbjEwNjE6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA2MjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bGluayBpbnN0YW5jZVxcXFxuXFxcIik7XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdHJldHVybiAwO1xcbjEwNjU6XFx0fVxcbjEwNjY6XFx0RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuMTA2NzpcXHRcXG4xMDY4OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkl2YW4gVmVjZXJhIFxcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuMTA2OTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXFxcIik7XFxuMTA3MDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjM2OjQ0LjU1OTI1NTI4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDYwMjA4NzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBmb3IgdGhlIE1pY3JvY2hpcCBaTDMwNzN4IERQTEwvUFRQL1N5bmNFIGRldmljZSwgYW5kIHRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgcHJvYmUgZnVuY3Rpb24uIEl0IHN0YXJ0cyB3aXRoIGEgc2ltcGxlIGB6bDMwNzN4X3JlYWRfdTE2YCBjYWxsIHRvIGdldCB0aGUgZGV2aWNlIElEIHZpYSBJMkMuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gSWYgdGhhdCByZWFkIGZhaWxzLCBvciBpZiB0aGUgSUQgZG9lc24ndCBtYXRjaCBhIGtub3duIHZhbHVlLCB0aGUgcHJvYmUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVOT0RFVmAuIFxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIFN5emthbGxlciBlbXVsYXRlIHRoaXM/IEl0IGRvZXNuJ3QgbG9vayBsaWtlIFN5emthbGxlciBoYXMgYSBzcGVjaWZpYyBlbXVsYXRpb24gZm9yIHRoZSBaTDMwNzN4LCB3aGljaCBtYWtlcyBzZW5zZTsgaXQncyBhIHNwZWNpYWxpemVkIHBpZWNlIG9mIGhhcmR3YXJlLiBJIGtub3cgU3l6a2FsbGVyICpjYW4qIGluamVjdCBJMkMgZGV2aWNlcywgYnV0IGl0J3Mgbm90IHRoZSBzYW1lIGFzIGhhdmluZyBhIHByb3BlciBlbXVsYXRvciB3aXRoIGEgZGVmaW5lZCByZWdpc3RlciBtYXAuIEl0ICptaWdodCogaW50ZXJjZXB0IHRoZSBJMkMgcmVhZHMgd2l0aCBzb21lIGtpbmQgb2YgZmF1bHQgaW5qZWN0aW9uLCBvciBtYXliZSBhIG1vY2ssIGJ1dCBJIGRvbid0IHRoaW5rIFN5emthbGxlciBoYXMgYSBnZW5lcmljIEkyQyBtb2NrIHRoYXQgY2FuIHJlcGx5IHdpdGggYXJiaXRyYXJ5IGRhdGEgdW5sZXNzIGl0J3MgdXNpbmcgYSB2aXJ0dWFsIEkyQyBidXMgdGhhdCBpdCBjb250cm9scy4gSSByZW1lbWJlciB0aGF0IFN5emthbGxlciB1c2VzIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBhbmQgYHZrbXNgIGZvciBEUk0gZXRjLCBkb2VzIGl0IGhhdmUgYSB2aXJ0dWFsIEkyQyBidXM/XG5cblRoZXJlJ3MgYGkyYy1zdHViYCwgYnV0IFN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSB1c2UgaXQgdG8gbW9jayBhcmJpdHJhcnkgZGV2aWNlcyB3aXRoIHNwZWNpZmljIHJlZ2lzdGVyIG1hcHMgdW5sZXNzIHRoZXJlJ3MgYSBzeXpsYW5nIGRlc2NyaXB0aW9uIGZvciBpdC4gSSByZW1lbWJlciB0aGVyZSB1c2VkIHRvIGJlIGEgYHN5el9pMmNfc2V0dXBgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgbm8uXG5cbklmIHdlJ3JlIGRlYWxpbmcgd2l0aCBqdXN0IGFuIEkyQyBkZXZpY2UgZHJpdmVyIGFuZCB0aGVyZSdzIG5vIHJlYWwgaGFyZHdhcmUsIHRoZSBwcm9iZSB3aWxsIGZhaWwuIFRoZSBJMkMgcmVhZCB3aWxsIGZhaWwgb3IgcmV0dXJuIGdhcmJhZ2UuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciB3b24ndCBiZSBpbnN0YW50aWF0ZWQsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgbmV3IFBUUCBjbG9jayBjb2RlIGxpa2UgYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYW4gZXh0cmVtZWx5IHNwZWNpZmljIGVtdWxhdG9yLlxuXG5MZXQncyBtYWtlIHN1cmUgSSdtIHJpZ2h0IGFib3V0IHRoaXMuIEFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgYXJlIHRoaW5ncyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZS4gSXQgZG9lcyBleHBsaWNpdGx5IGNhbGwgb3V0IHRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgZXhhY3RseSB0aGlzIHNjZW5hcmlvLlxuXG5UaGlzIGRyaXZlciB0YXJnZXRzIHRoZSBaTDMwNzN4LCBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZS4gSXQgdXNlcyBJMkMgb3IgU1BJLiBJbiBRRU1VLCB1bmxlc3MgdGhlcmUncyBzb21lIGRldmljZSBtb2RlbCBmb3IgdGhlIFpMMzA3M3ggKHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseeKAlGl0J3MgYSB0ZWxlY29tIHRpbWluZyBjaGlwISksIHRoZSBJMkMgb3IgU1BJIHJlYWRzIHdpbGwgYWx3YXlzIGZhaWwgb3IgdGltZSBvdXQuIEV2ZW4gaWYgU3l6a2FsbGVyIGNyZWF0ZXMgYW4gSTJDIGRldmljZSB2aWEgc3lzZnMsIHRoZSBJMkMgdHJhbnNmZXJzIHdpbGwgZ28gdG8gYSBkdW1teSBidXMgKGxpa2UgYGkyYy1zdHViYCBvciBzb21ldGhpbmcgc2ltaWxhcikgd2hpY2ggaGFzIG5vIHN1Y2ggZGV2aWNlIGF0dGFjaGVkLiBUaGUgSTJDIGNvbnRyb2xsZXIgd2lsbCBOQUNLLCB0aGUgcmVhZCB3aWxsIGZhaWwsIGFuZCBgemwzMDczeF9yZWFkX3UxNmAgd2lsbCByZXR1cm4gYW4gZXJyb3IuXG5cblNwZWNpZmljYWxseSwgdGhlIGZhaWx1cmUgd2lsbCBoYXBwZW4gaW4gYHpsMzA3M3hfZGV2X3Byb2JlYCBkdXJpbmcgdGhlIGB6bDMwNzN4X3JlYWRfdTE2YCBjYWxsLCBvciBldmVuIGlmIHRoZSByZWFkIHNvbWVob3cgcmV0dXJucyBnYXJiYWdlLCBpdCB3aWxsIGZhaWwgYXQgdGhlIGNoaXAgSUQgY2hlY2suIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IFN5emthbGxlciBjYW5ub3QgYnlwYXNzIHRoaXMgaGFyZHdhcmUgY2hlY2sgd2l0aG91dCBhbiBleHBsaWNpdCBlbXVsYXRvciwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIGRyaXZlciwgaW5jbHVkaW5nIHRob3NlIFBUUCBmdW5jdGlvbnMsIGlzIGluYWNjZXNzaWJsZS4gSXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzIGZvciBJMkMuIEFuZCBmaW5hbGx5LCBsZXQncyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODEwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MzY6NTkuMTYxMzQ1Njc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgwMzI2OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MzY6NTkuNTg5Mzg1NDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDkwMTkzNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGUgXCJzeXMvXCIgZGlyZWN0b3J5IHNlYXJjaCB5aWVsZGVkIG5vIHJlc3VsdHMsIGJ1dCB0aGUgcHJvbXB0IGZsYWdnZWQgdGhhdCBhcyBleHBlY3RlZCwgc2F5aW5nIHRvIHVzZSBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAgaW5zdGVhZCwgdGhvdWdoIEkgZG9uJ3Qgc2VlIGBzeXotZ3JlcHBlcmAgaW4gbXkgdG9vbCBsaXN0LiBCdXQgd2FpdCwgSSBkb24ndCAqbmVlZCogdGhvc2UgdG9vbHMsIGJlY2F1c2UgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9yIGEgc3RhbmRhcmQga2VybmVsIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgaGFyZHdhcmUgY2hpcC5cblxuR2l2ZW4gdGhhdCBpdCdzIGhhcmR3YXJlLXNwZWNpZmljIGFuZCByZXF1aXJlcyBJMkMvU1BJIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgY3JpdGljYWxseSwgdGhlcmUncyBhIHN0cmljdCBjaGlwIElEIGNoZWNrIGluIHRoZSBwcm9iZSBmdW5jdGlvbi4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgcmVhY2hpbmcgdGhlIFBUUCBjbG9jayBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGlzIHNpbXBseSBpbXBvc3NpYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU28sIHRoYXQncyBpdDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2suIElzIHRoZXJlIHNvbWUga2luZCBvZiB2aXJ0dWFsIG9yIG1vY2sgZHJpdmVyIHRoYXQgY291bGQgYmUgdXNlZD8gTm9wZS4gQW55IG90aGVyIGVudHJ5IHBvaW50PyBMZXQncyBzZWUuLi4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AuIFRoZSBmdW5jdGlvbnMgYWRkZWQgYXJlIGFsbCByZWxhdGVkIHRvIHRpbWUgb2YgZGF5IChUT0QpLCBsaWtlIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXRgLCBldGMuIFRoZXNlIFRPRCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGluZ3MgbGlrZSBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCAtIHRpbWUgYWRqdXN0bWVudCwgZXRjLiBUaGF0IG1lYW5zIHRoZXNlIGFyZSBQVFAgY2xvY2sgY2FsbGJhY2tzLiBXaGljaCBpcyByZWdpc3RlcmVkIGluIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgemwzMDczeF9kcGxsX3JlZ2lzdGVyYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYHpsMzA3M3hfZGV2bV9kcGxsX2luaXRgLCB3aGljaCBpbiB0dXJuLCBpcyBmcm9tIGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoZSBwcm9ibGVtIGlzIGB6bDMwNzN4X2Rldl9wcm9iZWAgZmFpbHMgZWFybHkgd2hlbiByZWFkaW5nIHRoZSBjaGlwIElELiBTbywgbm9uZSBvZiB0aGlzIGlzIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZGV2aWNlcyB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEkyQy9TUEkgaGFyZHdhcmUuIEl0IGhhcyBhIGNoaXAgSUQgY2hlY2sgaW4gYHByb2JlYCB0aGF0J3Mgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHJlbmRlcmluZyB0aGUgbW9kaWZpZWQgY29kZSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBwcm9tcHQgcmVxdWlyZW1lbnRzIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAuLi4gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgUGVyZmVjdCBtYXRjaC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uXG5cbk9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY5MiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6Mzc6MTMuMDc5NTgxOTAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KSB0byBhZGQgUFRQIGNsb2NrIHN1cHBvcnQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBJMkMvU1BJLiBEdXJpbmcgcHJvYmUsIGl0IHJlYWRzIGEgaGFyZHdhcmUgY2hpcCBJRCBhbmQgZmFpbHMgaWYgaXQgZG9lc24ndCBtYXRjaCBrbm93biB2YWx1ZXMuIFNpbmNlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbmV3bHkgYWRkZWQgUFRQIGNsb2NrIG9wZXJhdGlvbnMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpIHRvIGFkZCBQVFAgY2xvY2sgc3VwcG9ydC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyBvdmVyIEkyQy9TUEkuIER1cmluZyBwcm9iZSwgaXQgcmVhZHMgYSBoYXJkd2FyZSBjaGlwIElEIGFuZCBmYWlscyBpZiBpdCBkb2Vzbid0IG1hdGNoIGtub3duIHZhbHVlcy4gU2luY2UgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBuZXdseSBhZGRlZCBQVFAgY2xvY2sgb3BlcmF0aW9ucyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowchctb[1] Phase: Running StartedAt: 2026-08-03 18:37:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchctb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-03 18:37:24 +0000 UTC FinishedAt: 2026-08-03 18:37:28 +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,}