Name: series-workflow2t986 Phase: Failed StartedAt: 2026-08-04 07:12:42 +0000 UTC FinishedAt: 2026-08-04 07:40:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2t986[0] Phase: Succeeded StartedAt: 2026-08-04 07:12:42 +0000 UTC FinishedAt: 2026-08-04 07:39:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2t986[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 07:12:42 +0000 UTC FinishedAt: 2026-08-04 07:39:52 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NDBlYWVmMjc2YzY1YTE1NmM1YzdjMGI4ZjkzZGVmYmI1OGUyNjcyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNzozODo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuJiM0MztcdFJUV19DSElQX1RZUEVfODcyM0IsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFBLFxuIFx0UlRXX0NISVBfVFlQRV84ODEyQSxcbiBcdFJUV19DSElQX1RZUEVfODgxNEEsXG5AQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4mIzQzO1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwmIzM0O3plcm8gbGVuZ3RoIHBhY2tldFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMC4uZWQxYmVkOGVhMTQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuQEAgLTIwLDYgJiM0MzsyMCwxNyBAQFxuICNpbmNsdWRlIFwmIzM0O3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcdFx0XHQ1MFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4mIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbiYjNDM7ICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgJiM0Mzs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4mIzQzOyAqIGZyb20gdGhlIHNpbmdsZSB0aHJlYWRlZCBUWCB3b3JrIGFuZCwgZm9yIEgyQyBhbmQgcmVzZXJ2ZWQgcGFnZSB3cml0ZXMsXG4mIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MzsgKiBnaXZlcyB1cCwgd2hpY2ggYWxzbyBhYnNvcmJzIGEgbG9zdCB1cGRhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdTMyIGZyZWVfdHhwZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZykge1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbiYjNDM7XHRcdFx0ICAgcGdfdGJsLVx1MDAzZWxxX251bSAtIHBnX3RibC1cdTAwM2VucV9udW0gLSBwZ190YmwtXHUwMDNlZXhxX251bSAtXG4mIzQzO1x0XHRcdCAgIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZylcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdW0gb2YgdGhlIHF1ZXVlJiMzOTtzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpXG4mIzQzOyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXG4mIzQzOyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICYjNDM7IGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocXVldWUpIHtcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsO1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3c7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0gyQzpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WTzpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0XHRcdFx0ICAgIHNpemVfdCBjb3VudClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkO1xuIFxuLVx0aWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbiYjNDM7XHRcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4mIzQzO1x0XHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuJiM0MztcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiBcdFx0dTMyIGZyZWVfdHhwZztcbiBcbiBcdFx0ZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbkBAIC02MzIsNDQgJiM0Mzs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHU4IGZyZWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGFrZW47XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0aWYgKCFkZWRpY2F0ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuJiM0MztcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbiYjNDM7XHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xuJiM0MztcbiYjNDM7XHRwYWdlcyAtPSB0YWtlbjtcbiYjNDM7XHRpZiAocGFnZXMgXHUwMDI2XHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKSBcdTAwM2MgMClcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2VzO1xuJiM0MztcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbiYjNDM7XHRcdFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbiYjNDM7XHRcdHdyaXRlX3NpemUgPSB0eHNpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuO1xuIFxuLVx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuJiM0MztcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcbiYjNDM7XHRpZiAoIXR4YWRkcikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCBfX2Z1bmNfXywgcXVldWUpO1xuIFxuIFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcbi1cbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4tXG4tXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLCB0eHNpemUpO1xuLVxuJiM0MztcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4mIzQzO1x0aWYgKHJldCkge1xuIFx0XHRydHdfd2FybihydHdkZXYsXG4gXHRcdFx0IFwmIzM0O0ZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCYjMzQ7LFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4mIzQzO1x0XHRcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTtcbiYjNDM7XHR9XG4gXG4mIzQzO291dF90cmltOlxuJiM0MztcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbilcbiYjNDM7XHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgJiM0Mzs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuJiM0MztcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiAmIzQzOzg4OSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbiYjNDM7XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgJiM0Mzs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICYjNDM7OTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MTYgcmVzZXJ2ZWRfbnVtO1xuJiM0MztcdHUzMiBmcmVlX3R4cGc7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VscV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZW5xX251bSAmIzQzO1xuJiM0MztcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbiYjNDM7XHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuJiM0MztcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiYjNDM7XHR1MzIgY2xlYXI7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFx1MDAyNlxuJiM0MztcdFx0XHRSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1x0XHRpZiAoY2xlYXIpXG4mIzQzO1x0XHRcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRxdWV1ZV93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuJiM0MztcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcbiBcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcbiBcdHZhbCBcdTAwMjY9IDB4ZmZmODtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgJiM0MzsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4mIzQzO1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzO1x0ICogaGFuZGluZyB1cyBmcmFtZXMsIGJvdW5kaW5nIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBSZXN1bWVkIGZyb20gdGhlIFRYXG4mIzQzO1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA5NSw2ICYjNDM7MTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcbiYjNDM7XHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4mIzQzO1x0ICogYm90aCBkZWZpbmVkIGFuZCB1bm1hc2tlZC4gT3RoZXIgY2hpcHMga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRoaXNyIFx1MDAyNj0gcnR3c2Rpby1cdTAwM2VpcnFfbWFzayBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XG4gXG4gXHRydHdzZGlvLVx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xuQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuJiM0MzsvKlxuJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZVxuJiM0MzsgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4mIzQzOyAqIHRoZSBmcmFtZSBpcyBwdXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgcV9tYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuJiM0MztcdHFfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbiYjNDM7XHQgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7XG4mIzQzO1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzO1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0cnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuIFxuIFx0aWYgKCFydHdfZndfZmVhdHVyZV9jaGVjayhcdTAwMjZydHdkZXYtXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXG4gXHRcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgcGFnZSBzaG9ydGFnZSBpcyB0cmFuc2llbnQ6IGxlYXZlIHRoZVxuJiM0MztcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuJiM0MztcdFx0XHRcdCAqIG9mIHN0YWxsaW5nIHRoaXMgQUMgdW50aWwgc29tZXRoaW5nIGVsc2VcbiYjNDM7XHRcdFx0XHQgKiBraWNrcyB0aGUgd29ya2VyLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGlmIChydGw4NzIzYnMgXHUwMDI2XHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgUlRXX1NESU9fVFhfUkVUUllfREVMQVkpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5XG4mIzQzO1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbiYjNDM7XHRcdFx0ICogYmVoaW5kIGEgZGF0YSBiYWNrbG9nLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbiYjNDM7XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZ3b3JrX2RhdGEtXHUwMDNld29yaywgMCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTY0MSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHF1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIGNoaXAuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgdG8gYmUgcHJlc2VudC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBkZXZpY2UgZnV6emVyIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODQwZWFlZjI3NmM2NWExNTZjNWM3YzBiOGY5M2RlZmJiNThlMjY3MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDc6Mzg6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3N0YmM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwppbmRleCAwMWZkMjk5YWJiN2ZlLi5hOTM2MWVmNGI5M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpOwogCi0JLyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MiBhbmQKLQkgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC4KJiM0MzsJLyoKJiM0MzsJICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSAmbHQ7IDE0IG9yIHNpemUgJmd0OyA4MTkyCiYjNDM7CSAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LgogCSAqLwotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgJmFtcDsmYW1wOyBwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwKSB7CiYjNDM7CWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwpAQCAtMjAsNiAmIzQzOzIwLDE3IEBACiAjaW5jbHVkZSAmIzM0O3R4LmgmIzM0OwogCiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVMJCQk1MAomIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVMJCQkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW4KJiM0MzsgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLAomIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpcwomIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7ICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgICB1MzIgZnJlZV90eHBnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwKJiM0MzsJCSAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnKSB7CiYjNDM7CQlydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwkJcHVicV9udW0gPSBydHdkZXYtJmd0O2ZpZm8uYWNxX3BnX251bSAtIHBnX3RibC0mZ3Q7aHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2xxX251bSAtIHBnX3RibC0mZ3Q7bnFfbnVtIC0gcGdfdGJsLSZndDtleHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwomIzQzOwlpZiAoZnJlZV90eHBnKQomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86CiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpCiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGUKJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWUgJmd0OyAwID8gZnJlZSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAocXVldWUpIHsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfVkk6CiYjNDM7CQlyZXR1cm4gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQkU6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JLOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3c7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JDTjoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSDJDOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9ISTA6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZPOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKIAkJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7CiAKLQlpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJYXRvbWljX3QgKmRlZGljYXRlZDsKJiM0MzsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlpZiAoIWRlZGljYXRlZCkgewomIzQzOwkJCXJ0d193YXJuKHJ0d2RldiwgJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XG4mIzM0OywgcXVldWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7CiYjNDM7CQlwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdTggZnJlZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChhdG9taWNfYWRkX3VubGVzcygmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCAtMSwgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFJUV19TRElPX09RVF9USU1FT1VUX01TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTsKJiM0MzsJCWlmIChmcmVlKSB7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCBmcmVlIC0gMSk7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlhdG9taWNfdCAqZGVkaWNhdGVkOwomIzQzOwl1bnNpZ25lZCBpbnQgdGFrZW47CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpOwomIzQzOwlpZiAoIWRlZGljYXRlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7CiYjNDM7CXRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSAmZ3Q7IDAgPyBmcmVlIDogMCk7CiYjNDM7CWF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7CiYjNDM7CiYjNDM7CXBhZ2VzIC09IHRha2VuOwomIzQzOwlpZiAocGFnZXMgJmFtcDsmYW1wOyBhdG9taWNfc3ViX3JldHVybihwYWdlcywgJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YikgJmx0OyAwKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItJmd0O2xlbjsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2VzOwomIzQzOwlzaXplX3Qgd3JpdGVfc2l6ZTsKIAlib29sIGJ1c19jbGFpbTsKIAlzaXplX3QgdHhzaXplOwogCXUzMiB0eGFkZHI7CiAJaW50IHJldDsKIAotCXR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLSZndDtsZW4sIHF1ZXVlKTsKLQlpZiAoIXR4YWRkcikKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemUgJmd0OyBSVFdfU0RJT19CTE9DS19TSVpFID8KJiM0MzsJCQkgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBvcmlnX2xlbik7CiYjNDM7CQl3cml0ZV9zaXplID0gdHhzaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3cml0ZV9zaXplICZndDsgb3JpZ19sZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuOwogCi0JdHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgc2tiLSZndDtsZW4pOwomIzQzOwkJaWYgKHNrYl90YWlscm9vbShza2IpICZsdDsgcGFkZGluZykgewomIzQzOwkJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLAomIzQzOwkJCQkJICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSwKJiM0MzsJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwkJc2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTsKJiM0MzsJaWYgKCF0eGFkZHIpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwl9CiAKIAlyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBvdXRfdHJpbTsKJiM0MzsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItJmd0O2RhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSkKIAkJcnR3X3dhcm4ocnR3ZGV2LCAmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XG4mIzM0OywKIAkJCSBfX2Z1bmNfXywgcXVldWUpOwogCiAJYnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTsKLQogCWlmIChidXNfY2xhaW0pCiAJCXNkaW9fY2xhaW1faG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwotCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLCB0eHNpemUpOwotCiYjNDM7CXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCB0eGFkZHIsIHNrYi0mZ3Q7ZGF0YSwKJiM0MzsJCQkgICAgICAgd3JpdGVfc2l6ZSk7CiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jKTsKIAotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKIAkJcnR3X3dhcm4ocnR3ZGV2LAogCQkJICYjMzQ7RmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHgmIzM0OywKLQkJCSB0eHNpemUsIHR4YWRkcik7CiYjNDM7CQkJIHdyaXRlX3NpemUsIHR4YWRkcik7CiYjNDM7CX0gZWxzZSBpZiAocnRsODcyM2JzKSB7CiYjNDM7CQlwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpOwomIzQzOwl9CiAKJiM0MztvdXRfdHJpbToKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikKJiM0MzsJCXNrYl90cmltKHNrYiwgb3JpZ19sZW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3Nyw3ICYjNDM7ODc3LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7CiYjNDM7CWVsc2UKJiM0MzsJCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwKJiM0MzsJCQkJICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQpAQCAtNjg1LDYgJiM0Mzs4ODksNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAl1OCBzaXplLCB0aW1lb3V0OwogCiAJc3dpdGNoIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkKSB7CiYjNDM7CWNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODcwM0I6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOgogCWNhc2UgUlRXX0NISVBfVFlQRV84ODEyQToKQEAgLTcxMiw2ICYjNDM7OTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCSAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7CiAKIAlydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC03NDksOSAmIzQzOzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAgPSBydHdkZXYtJmd0O2NoaXA7CiYjNDM7CXN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gJmFtcDtydHdkZXYtJmd0O2ZpZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MTYgcmVzZXJ2ZWRfbnVtOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnIHx8ICFmaWZvLSZndDthY3FfcGdfbnVtKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXJlc2VydmVkX251bSA9IHBnX3RibC0mZ3Q7aHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bnFfbnVtICYjNDM7CiYjNDM7CQkgICAgICAgcGdfdGJsLSZndDtleHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7Z2FwcV9udW07CiYjNDM7CWlmIChmaWZvLSZndDthY3FfcGdfbnVtICZsdDs9IHJlc2VydmVkX251bSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHVicV9udW0gPSBmaWZvLSZndDthY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSwKJiM0MzsJCSAgICBCSVRfUlFQTl9ORShwZ190YmwtJmd0O25xX251bSwgcGdfdGJsLSZndDtleHFfbnVtKSk7CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sCiYjNDM7CQkgICAgQklUX1JRUE5fSExQKHBnX3RibC0mZ3Q7aHFfbnVtLCBwZ190YmwtJmd0O2xxX251bSwgcHVicV9udW0pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpICZhbXA7CiYjNDM7CQkJUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwkJaWYgKGNsZWFyKQomIzQzOwkJCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcXVldWVfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yayk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5CiYjNDM7CSAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LgomIzQzOwkgKi8KJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcikKQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAogCXZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTsKIAl2YWwgJmFtcDs9IDB4ZmZmODsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7CiAJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpOwogfQogCkBAIC05MzcsNiAmIzQzOzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJc2tiX3F1ZXVlX3RhaWwoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7CiAKJiM0MzsJLyoKJiM0MzsJICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0CiYjNDM7CSAqIHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wcwomIzQzOwkgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFgKJiM0MzsJICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBxdWV1ZSAmbHQ7IFJUV19UWF9RVUVVRV9CQ04gJmFtcDsmYW1wOwomIzQzOwkgICAgIXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZndDs9IFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUikgewomIzQzOwkJcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlOwomIzQzOwkJaWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LSZndDtodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTUsNiAmIzQzOzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpCiAJCXJ0d19zZGlvX3J4X2lzcihydHdkZXYpOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWQKJiM0MzsJICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZQomIzQzOwkgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJaGlzciAmYW1wOz0gcnR3c2Rpby0mZ3Q7aXJxX21hc2sgJmFtcDsgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7CiAKIAlydHdzZGlvLSZndDtpcnFfdGhyZWFkID0gTlVMTDsKQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAotCQkJCSAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiYjNDM7LyoKJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZQomIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2UKJiM0MzsgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgcV9tYXA7CiAJaW50IHJldDsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIDA7CiAKJiM0MzsJcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7CiAJaWYgKHJldCkgewogCQlza2JfcXVldWVfaGVhZCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAKIAlydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsgcXVldWUgJmx0OyBSVFdfVFhfUVVFVUVfQkNOICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDs9CiYjNDM7CSAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHsKJiM0MzsJCXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7CiYjNDM7CQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTsKJiM0MzsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsCiYjNDM7CQkJICAgICB3b3JrKTsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKLQlpbnQgbGltaXQsIHF1ZXVlOwomIzQzOwlpbnQgbGltaXQsIHF1ZXVlLCByZXQ7CiYjNDM7CWJvb2wgcnRsODcyM2JzOwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CiAJcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CXJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTsKIAogCWlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soJmFtcDtydHdkZXYtJmd0O2Z3LCBGV19GRUFUVVJFX1RYX1dBS0UpKQogCQlydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7CiAKIAlmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSAmZ3Q7PSAwOyBxdWV1ZS0tKSB7CiAJCWZvciAobGltaXQgPSAwOyBsaW1pdCAmbHQ7IDEwMDA7IGxpbWl0JiM0MzsmIzQzOykgewotCQkJcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlCiYjNDM7CQkJCSAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZAomIzQzOwkJCQkgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlCiYjNDM7CQkJCSAqIGtpY2tzIHRoZSB3b3JrZXIuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcmV0ID09IC1FQlVTWSkgewomIzQzOwkJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJCSAgICZhbXA7d29ya19kYXRhLSZndDt3b3JrLAomIzQzOwkJCQkJCQkgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7CiYjNDM7CQkJCQlyZXR1cm47CiYjNDM7CQkJCX0KJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5CiYjNDM7CQkJICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cAomIzQzOwkJCSAqIGJlaGluZCBhIGRhdGEgYmFja2xvZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHsKJiM0MzsJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJICAgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIDApOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQogCiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSkKIAkJCQlicmVhazsKQEAgLTEyOTQsMTQgJiM0MzsxNjE4LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtpXSk7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7CiYjNDM7CX0KIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIAlpZiAoIXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSkKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7cnR3ZGV2ID0gcnR3ZGV2OwotCUlOSVRfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzE1LDYgJiM0MzsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlpbnQgaTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tJmd0O3R4d3EpOwogCWtmcmVlKHJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKaW5kZXggNDU3ZThiMDIzODBlNS4uMmYxYjY3ZjRiYmM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAKIC8qIFNESU8gVHggQ29udHJvbCAqLwogI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMCkKJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRQlCSVQoNCkKIAogLypTRElPIHN0YXR1cyB0aW1lb3V0Ki8KICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVAkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMDIpCkBAIC03Nyw2ICYjNDM7NzgsMTQgQEAKIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi8KICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSCQkJQklUKDI4KQogI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEUJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSwkJXAomIzQzOwkoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpCiAKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi8KICNkZWZpbmUgUkVHX1NESU9fSENQV00JCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxOSkKQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQAogI2RlZmluZSBSRUdfU0RJT19PUVRfRlJFRV9QRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMUUpCiAvKiBGcmVlIFR4IEJ1ZmZlciBQYWdlICovCiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0hJR0gJCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX05PUk1BTAkJCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPVwkJCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19QVUIJCQlHRU5NQVNLKDMxLCAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTTEJCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMiAqLwpAQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7CiB9OwogCiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7CiB9OwogCkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8gewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxOwogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsJYm9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19oaWdoOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX25vcm1hbDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19sb3c7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfcHViOwomIzQzOwlhdG9taWNfdCB0eF9vcXRfZnJlZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggc2VyaWVzIHRhcmdldGluZyB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGBydHc4OGAgUmVhbHRlayB3aXJlbGVzcyBkcml2ZXIuIE15IGluaXRpYWwgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBgbWFpbi5oYCwgYHJ4LmNgLCBgc2Rpby5jYCwgYW5kIGBzZGlvLmhgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBhZGRpbmcgc3VwcG9ydCBmb3IgYFJUV19DSElQX1RZUEVfODcyM0JgLCBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIFNESU8gKGBydHdfaXNfODcyM2JzYCkuCgpEaWdnaW5nIGRlZXBlciwgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydHdfc2Rpb184NzIzYnNfKmAgYXJlIGludHJvZHVjZWQsIGhhbmRsaW5nIHRhc2tzIHN1Y2ggYXMgVFggcGFnZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBxdWV1ZSBoYW5kbGluZy4gTW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBmdW5jdGlvbnMsIGBydHdfc2Rpb193cml0ZV9wb3J0YCBhbmQgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLCBzdWdnZXN0IGNoaXAtc3BlY2lmaWMgbG9naWMgZm9yIHRoZSA4NzIzQlMgdmFyaWFudC4gVGhlIGFsdGVyYXRpb24gb2YgYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGEgYGRlbGF5ZWRfd29ya2AgaXMgYWxzbyBhIGtleSBjaGFuZ2UuIEZpbmFsbHksIGJhY2stcHJlc3N1cmUgbG9naWMgZm9yIG1hYzgwMjExIHF1ZXVlcyBzdWdnZXN0cyBmdXJ0aGVyIGludGVncmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgbmV0d29ya2luZyBzdGFjay4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBDYW4gdGhpcyBjb2RlIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50PyBUaGlzIGlzIHdoZXJlIG15IGV4cGVydGlzZSBjb21lcyBpbnRvIHBsYXkuIFRoZSBkcml2ZXIgaXMgYHJ0dzg4YCwgd2hpY2ggaXMgYSBSZWFsdGVrIHdpcmVsZXNzIGRyaXZlciwgYW5kIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzcGVjaWZpY2FsbHkgd2l0aGluIGBzZGlvLmNgLCBpbXBseWluZyBhbiBTRElPIGludGVyZmFjZS4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBRRU1VLCBvdXIgZ28tdG8gdmlydHVhbGl6YXRpb24gcGxhdGZvcm0sIGFuZCB3aGV0aGVyIGl0IGNhbiBlbXVsYXRlIFNESU8gZGV2aWNlcyBzdWZmaWNpZW50bHkgdG8gdHJpZ2dlciB0aGVzZSBjb2RlIHBhdGhzLgoKSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgcHJvdmlkZXMgc29mdHdhcmUgZW11bGF0aW9uIGZvciBtYWM4MDIxMSwgYnV0IHRoaXMgaXMgYSAqc3BlY2lmaWMqIGhhcmR3YXJlIGRyaXZlci4gVXN1YWxseSwgdGhlc2Ugc29ydHMgb2YgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGRyaXZlcnMsIHN1Y2ggYXMgYHJ0dzg4YCwgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHdpdGhvdXQgc3BlY2lmaWMgUENJIG9yIFVTQiBlbXVsYXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgKlNESU8qLiBRRU1VIGhhcyBzb21lIFNESENJIGVtdWxhdGlvbiwgYnV0IGRvZXMgaXQgZ28gc28gZmFyIGFzIHRvIGVtdWxhdGUgdGhlIFJlYWx0ZWsgODcyM0JTIFNESU8gV2ktRmkgY2FyZD8gTW9zdCBsaWtlbHkgbm90LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQmIzM5O3MgZXhjbHVzaW9uIG9mIGNvZGUgdGhhdCYjMzk7cyBub3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaGUgcHJvbXB0IGhpZ2hsaWdodHMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcyBiZWluZyBleGNsdWRlZC4gYHJ0dzg4YCBpcyBhIFJlYWx0ZWsgV2ktRmkgZHJpdmVyLCBzbyBpdCBkb2VzIHF1YWxpZnkgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGFuZCB3b3VsZCBsaWtlbHkgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS4KClRoZSBuZXh0IHBvaW50IEkgbmVlZCB0byBjb25zaWRlciBpcyBzeXprYWxsZXImIzM5O3MgV2ktRmkgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgY292ZXJhZ2UgdmlhIGBtYWM4MDIxMV9od3NpbWAsIGJ1dCB0aGF0JiMzOTtzIGFpbWVkIGF0IHRoZSBnZW5lcmljIG1hYzgwMjExIHN0YWNrLiBSZWFsdGVrJiMzOTtzIGRyaXZlciBpcyBsaWtlbHkgdG8gbm90IGJlIGNvdmVyZWQsIHVubGVzcyB3ZSBoYXZlIGEgVVNCL1BDSS9TRElPIGZ1enplciB0aGF0IGNhbiBpbmplY3QgcGFja2V0cyBhbmQgcmVzcG9uc2VzLiBJIGtub3cgc3l6a2FsbGVyIGRvZXMgaGF2ZSBhIFVTQiBmdXp6ZXIgdmlhIGBkdW1teV9oY2RgLCBidXQgZG9lcyBpdCBoYXZlIGFuIFNESU8gZnV6emVyPyBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQsIGNoZWNraW5nIHRoZSBrZXJuZWwgc291cmNlcyBhbmQgc3l6a2FsbGVyJiMzOTtzIGNvZGViYXNlIGZvciBTRElPIGZ1enppbmcgb3IgaWYgYHJ0dzg4YCBpcyBhbHJlYWR5IHRhcmdldGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgU3l6a2FsbGVyJiMzOTtzIFNESU8gRnV6emluZyBDYXBhYmlsaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgaXMgYSB2aWFibGUgdG9vbCBmb3IgZnV6emluZyBTRElPLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgY292ZXJhZ2UuIERvZXMgaXQgaGF2ZSBhbnkgZXhpc3RpbmcgU0RJTyBzdXBwb3J0IG1vZHVsZXM/IElmIG5vdCwgd2hhdCYjMzk7cyB0aGUgbGV2ZWwgb2YgZWZmb3J0IHJlcXVpcmVkIHRvIGFkZCBpdD8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBTRElPIHByb3RvY29sIGl0c2VsZi4gQXJlIHRoZXJlIHNwZWNpZmljIGFzcGVjdHMgbGlrZSB0aGUgQ01EIGFuZCBEQVRBIGxpbmVzLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIG9yIHRoZSB2YXJpb3VzIFNESU8gcmVnaXN0ZXJzIHRoYXQgd2lsbCByZXF1aXJlIGZvY3VzZWQgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nPyBBbmQgd2hhdCBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZT8gRG9lcyBzeXprYWxsZXIgaGF2ZSBnb29kIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIFNESU8gbGlrZSB0aGUgQnJvYWRjb20gb3IgUXVhbGNvbW0gY2hpcHM/CgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBraW5kcyBvZiBpbnB1dHMgdGhhdCB3b3VsZCBiZSBlZmZlY3RpdmUuIFdoYXQgYXJlIHRoZSBrZXkgYXR0YWNrIHN1cmZhY2VzIHdpdGhpbiB0aGUgU0RJTyBkcml2ZXI/IFNlbmRpbmcgbWFsZm9ybWVkIGNvbW1hbmRzPyBVbmV4cGVjdGVkIGRhdGEgc2l6ZXM/IE92ZXJmbG93aW5nIGJ1ZmZlcnM/IEludGVycnVwdCBzdG9ybXM/IFRoZSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgaGF2ZSB0byBiZSB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzIEkgd2FudCB0byB1bmNvdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGNyYWZ0IGEgcGxhbiB0byBjcmVhdGUgZWZmZWN0aXZlIHRlc3QgY2FzZXMsIGFuZCBkZXRlcm1pbmUgaG93IHRvIHZhbGlkYXRlL2Fzc2VzcyB0aGUgc3RhYmlsaXR5IGFuZCBlZmZlY3RpdmVuZXNzIG9mIHRoZSBmdXp6aW5nLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB0aGUgcHJhY3RpY2FsaXRpZXMuIEhvdyBlYXN5IGlzIGl0IHRvIGludGVncmF0ZSBTRElPIGZ1enppbmcgaW50byBteSBjdXJyZW50IHNldHVwPyBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIHdpbGwgSSBuZWVkIHRvIGNvbGxlY3QgdXNlZnVsIHJlc3VsdHMsIGFuZCBkZXRlY3QgY3Jhc2hlcywgaGFuZ3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEnigJltIHRoaW5raW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBrZXJuZWwgcGFuaWNzLCBwcmltYXJpbHkuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcG90ZW50aWFsIHBheW9mZiBhZ2FpbnN0IHRoZSBkZXZlbG9wbWVudCB0aW1lIHJlcXVpcmVkLiBHaXZlbiBteSBleHBlcnRpc2UsIG15IGZvY3VzIGlzIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZW5kZWF2b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXp6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgZm9yIGEgVmlydHVhbCBTRElPIEhvc3QqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBCZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIGluIG9yZGVyLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBmdW5kYW1lbnRhbCBzZXR1cCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGVyZSBldmVuIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciBwcmVzZW50PyYjMzQ7IFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IHdpdGhvdXQgaXQsIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24gaXMgcG9pbnRsZXNzLiBJdCBkaWN0YXRlcyB0aGUgZW50aXJlIGFwcHJvYWNoLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgZXZlbiBjb25zaWRlciB3aGF0IHRhc2tzIHRoaXMgY29udHJvbGxlciBtYXkgYmUgcGVyZm9ybWluZy4gV2UmIzM5O2xsIHN0YXJ0IHdpdGggdmVyaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21tYy9ob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTg0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnPTY1OT1jb25maWcgTU1DX01WU0RJT1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnOjY2OTpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NzAtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXHQmIzQzOz0gdGlmbV9zZC5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19NTUNfTVZTRElPKVx0JiM0Mzs9IG12c2Rpby5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19NTUNfREFWSU5DSSkgICAgICAgJiM0Mzs9IGRhdmluY2lfbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcdCYjNDM7PSBtZXNvbi1teC1zZGhjLm9cbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX01NQ19NRVNPTl9NWF9TRElPKVx0JiM0Mzs9IG1lc29uLW14LXNkaW8ub1xuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZS03MC1vYmotJChDT05GSUdfTU1DX01PWEFSVClcdCYjNDM7PSBtb3hhcnQtbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9ob3N0LmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MzA6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0zMS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4Ny0gKiBAc2RjX3JlZzogVmFsdWUgb2YgU0RDUiB0byBiZSB3cml0dGVuIGJlZm9yZSB1c2luZyB0aGlzIHNsb3QuXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg5LSAqIEBtcnE6IG1tY19yZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgb3Igd2FpdGluZyB0byBiZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy00MDUtXHR1MzJcdFx0XHRzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzo0MDY6XHR1MzJcdFx0XHRzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU0NT1zdGF0aWMgaW50IGF0bWNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NTk6c3RhdGljIHZvaWQgYXRtY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjQtXHRpZiAoZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoxNTY1Olx0XHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2Ni1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NzpcdFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdG1jaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVx0LmdldF9jZFx0XHQ9IGF0bWNpX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU3NTpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdG1jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIwMTE9c3RhdGljIHZvaWQgYXRtY2lfd3JpdGVfZGF0YV9waW8oc3RydWN0IGF0bWVsX21jaSAqaG9zdClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwNzgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwNzk6c3RhdGljIHZvaWQgYXRtY2lfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwgdTMyIHN0YXR1cylcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg0LVx0XHRzdHJ1Y3QgYXRtZWxfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LVx1MDAzZXNsb3RbaV07XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoc3RhdHVzIFx1MDAyNiBzbG90LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMDg2Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoc2xvdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVx0XHR9XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0yMDkyPXN0YXRpYyBpcnFyZXR1cm5fdCBhdG1jaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cdFx0aWYgKHBlbmRpbmcgXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjIxNDpcdFx0XHRhdG1jaV9zZGlvX2ludGVycnVwdChob3N0LCBzdGF0dXMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjE1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjIzNj1zdGF0aWMgaW50IGF0bWNpX2luaXRfc2xvdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM3LVx0XHRzdHJ1Y3QgbWNpX3Nsb3RfcGRhdGEgKnNsb3RfZGF0YSwgdW5zaWduZWQgaW50IGlkLFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjM4Olx0XHR1MzIgc2RjX3JlZywgdTMyIHNkaW9faXJxKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM5LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNTQtXHRzbG90LVx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjU1Olx0c2xvdC1cdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU2LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cdG1tYy1cdTAwM2VvY3JfYXZhaWxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyNjg6XHRpZiAoc2Rpb19pcnEpXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXHRcdG1tYy1cdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM9Nzc4PXN0YXRpYyBpcnFyZXR1cm5fdCBhdTF4bW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtNzg4LVx0aWYgKHN0YXR1cyBcdTAwMjYgU0RfU1RBVFVTX1NJKVx0LyogU0RJTyAqL1xuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6Nzg5Olx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MDY9c3RhdGljIHZvaWQgYXUxeG1tY19kYmRtYV9zaHV0ZG93bihzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkxNC1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkxNTpzdGF0aWMgdm9pZCBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuKVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXUxeG1tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTI5LVx0LmdldF9jZFx0XHQ9IGF1MXhtbWNfY2FyZF9pbnNlcnRlZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkzMDpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkzMS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jOjk6ICogVGhlIHNkaGNpIGNvbnRyb2xsZXIgc3VwcG9ydHMgYm90aCBzZGNhcmQgYW5kIHNkaW8uICBUaGUgc2Rob3N0XG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYy0xMC0gKiBjb250cm9sbGVyIHN1cHBvcnRzIHRoZSBzZGNhcmQgb25seSwgYnV0IGhhcyBiZXR0ZXIgcGVyZm9ybWFuY2UuXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxuZHJpdmVycy9tbWMvaG9zdC9iY20yODM1LmMtMTItICogdGhlIHNkaG9zdCBjb250cm9sbGVyIGFsbG93cyB0byB1c2UgdGhlIHNkaGNpIGNvbnRyb2xsZXIgZm9yIHdpZmlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTczLVx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE3NDpcdGludCBtbWNfaXJxLCBzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXHR1bnNpZ25lZCBjaGFyIGJ1c19tb2RlO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXHRib29sIGRvX2RtYTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxODg6XHRib29sIHNkaW9faW50O1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTE4OS1cdGJvb2wgYWN0aXZlX3JlcXVlc3Q7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTc1Nj1tbWNfZGF2aW5jaV94ZmVyX2RvbmUoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XHRcdGlmIChob3N0LVx1MDAzZXNkaW9faW50IFx1MDAyNlx1MDAyNiAhKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9TVDApIFx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2Ny1cdFx0XHRcdFx0U0RJT1NUMF9EQVQxX0hJKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2OC1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6NzY5Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc3MC1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz04MzM9ZGF2aW5jaV9hYm9ydF9kYXRhKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg0MC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NDE6c3RhdGljIGlycXJldHVybl90IG1tY19kYXZpbmNpX3NkaW9faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NTAtXHRcdHdyaXRlbChzdGF0dXMgfCBTRElPSVNUX0lPSU5ULCBob3N0LVx1MDAzZWJhc2UgJiM0MzsgREFWSU5DSV9TRElPSVNUKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NTE6XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cdH1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTAzMjpcdFx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XHRcdFx0aG9zdC1cdTAwM2VzZGlvX2ludCA9IHRydWU7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzNS1cdFx0XHR3cml0ZWwocmVhZGwoaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lFTikgfFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM4LVx0fSBlbHNlIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5Olx0XHRob3N0LVx1MDAzZXNkaW9faW50ID0gZmFsc2U7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0MC1cdFx0d3JpdGVsKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9JRU4pIFx1MDAyNiB+U0RJT0lFTl9JT0lOVEVOLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0OS1cdC5nZXRfcm9cdFx0PSBtbWNfZGF2aW5jaV9nZXRfcm8sXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcdC5lbmFibGVfc2Rpb19pcnEgPSBtbWNfZGF2aW5jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA1MS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMTg0PXN0YXRpYyBpbnQgZGF2aW5jaV9tbWNzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVx0aG9zdC1cdTAwM2VtbWNfaXJxID0gaXJxO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XHRob3N0LVx1MDAzZXNkaW9faXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMzAxLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XHRpZiAoaG9zdC1cdTAwM2VzZGlvX2lycSBcdTAwM2U9IDApIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzAzOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBob3N0LVx1MDAzZXNkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDQ6XHRcdFx0XHQgICAgICAgbW1jX2RhdmluY2lfc2Rpb19pcnEsIDAsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cdFx0XHRcdCAgICAgICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTAzLVx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jOjUwNDpcdGhvc3QtXHUwMDNlc2Rpb19pcnEgPSA4O1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDUtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2QuaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTQ4MD1zdGF0aWMgdm9pZCBkd19tY2lfaHdfcmVzZXQoc3RydWN0IG1tY19ob3N0ICptbWMpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTEzOnN0YXRpYyB2b2lkIGR3X21jaV9wcmVwYXJlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGJvb2wgcHJlcGFyZSlcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTUxNC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQwLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTQxOnN0YXRpYyB2b2lkIF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBpbnQgZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTAtXHRpZiAoZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTUxOlx0XHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1Mi1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MzpcdFx0aW50X21hc2sgXHUwMDI2PSB+U0RNTUNfSU5UX1NESU8oaG9zdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXHRtY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIGludF9tYXNrKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTk6c3RhdGljIHZvaWQgZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYilcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTYzOlx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU2NDpcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCBlbmIpO1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3Mi1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTc0LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1Nzc6XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBkd19tY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTY3Ny1cdC5jYXJkX2h3X3Jlc2V0ICAgICAgICAgID0gZHdfbWNpX2h3X3Jlc2V0LFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4Olx0LmVuYWJsZV9zZGlvX2lycVx0PSBkd19tY2lfZW5hYmxlX3NkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5Olx0LmFja19zZGlvX2lycVx0XHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2ODAtXHQuZXhlY3V0ZV90dW5pbmdcdFx0PSBkd19tY2lfZXhlY3V0ZV90dW5pbmcsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTctXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XHRcdGlmIChwZW5kaW5nIFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNzU5LVx0XHRcdG1jaV93cml0ZWwoaG9zdCwgUklOVFNUUyxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcdFx0XHRcdCAgIFNETU1DX0lOVF9TRElPKGhvc3QtXHUwMDNlc2Rpb19pcnEpKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcdFx0XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NjI6XHRcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9Mjc5ND1zdGF0aWMgaW50IGR3X21jaV9pbml0X2hvc3RfY2FwcyhzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MjgyNjpcdC8qIFByb2Nlc3MgU0RJTyBJUlFzIHRocm91Z2ggdGhlIHNkaW9faXJxX3dvcmsuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXHRpZiAobW1jLVx1MDAzZWNhcHMgXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0zNDQzPWludCBkd19tY2lfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5NC1cdC8qIFJlLWVuYWJsZSBTRElPIGludGVycnVwdHMuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XHRpZiAoc2Rpb19pcnFfY2xhaW1lZChob3N0LVx1MDAzZW1tYykpXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XHRcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTUyPXN0cnVjdCBkd19tY2lfZG1hX3NsYXZlIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMS0gKiBAaXJxOiBUaGUgaXJxIHZhbHVlIHRvIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycS5cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MTIyOiAqIEBzZGlvX2lycTogU0RJTyBpbnRlcnJ1cHQgYml0IGluIGludGVycnVwdCByZWdpc3RlcnMuXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTE2MT1zdHJ1Y3QgZHdfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzMy1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MjM0Olx0aW50XHRcdFx0c2Rpb19pcnE7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzNS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtODU5LVx0XHRqejQ3NDBfbW1jX3dyaXRlX2lycV9yZWcoaG9zdCwgSlpfTU1DX0lSUV9TRElPKTtcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jOjg2MDpcdFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVx1MDAzZW1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXHRcdGlycV9yZWcgXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTk0MD1zdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk0LVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6OTk1OnN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz0xMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGp6NDc0MF9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjQtXHQuZ2V0X2NkXHRcdD0gbW1jX2dwaW9fZ2V0X2NkLFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6MTAyNTpcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjYtXHQuc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoID0gano0NzQwX3ZvbHRhZ2Vfc3dpdGNoLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZC5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz00MTM9c3RhdGljIGlycXJldHVybl90IGxvb25nc29uMl9tbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQyOC1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjQyOTpcdFx0c2Rpb19zaWduYWxfaXJxKG1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MzAtXHRcdHJldHVybiBJUlFfSEFORExFRDtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01ODgtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTAte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjU5NjpzdGF0aWMgdm9pZCBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5Ny17XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XHRsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIDEpO1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk5LX1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MDE9c3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbG9vbmdzb24yX21tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVx0LmdldF9jZFx0XHQ9IG1tY19ncGlvX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNjpcdC5lbmFibGVfc2Rpb19pcnEgPSBsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcdC5hY2tfc2Rpb19pcnFcdD0gbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MTc9c3RhdGljIGludCBsb29uZ3NvbjJfcmVvcmRlcl9jbWRfbGlzdFtdID0geyBTRF9BUFBfU0VORF9TQ1IsIFNEX0FQUF9TRU5EX05VTV9XUl9CTEtTLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTYyMi0gKiByZXNwb25zZSBkYXRhcyBoYXMgZGlmZmVyZW50IGJ5dGUgb3JkZXIgd2l0aCB1c3VhbCBkYXRhIHBhY2tldHMuXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MjM6ICogSG93ZXZlciBzZGlvIGNvbnRyb2xsZXIgd2lsbCBzZW5kIHRoZXNlIGRhdGFzIGluIHVzdWFsIGRhdGEgZm9ybWF0LFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTk0MD1zdGF0aWMgaW50IGxvb25nc29uMl9tbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy05NzMtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo5NzQ6XHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTc1LVx0aWYgKG1tYy1cdTAwM2VjYXBzIFx1MDAyNiBNTUNfQ0FQX1NESU9fSVJRKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3Nsb3QtZ3Bpby5oXHUwMDNlXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01My0jZGVmaW5lICAgQ0xLX0FMV0FZU19PTihoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWFsd2F5c19vbilcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWlycV9zZGlvX3NsZWVwKVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01NS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzNj1zdHJ1Y3QgbWVzb25fbW1jX2RhdGEge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVx0dW5zaWduZWQgaW50IGFkanVzdDtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTQxOlx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xNDItfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMC1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy05NTYtXHRcdHNwaW5fbG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzo5NTc6XHRcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVx1MDAzZW1tYywgMCk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjk1ODpcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVx0XHRzcGluX3VubG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMDktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExMS17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aG9zdC1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTY6XHRfX21lc29uX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCBlbmFibGUpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZob3N0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEyMS17XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjI6XHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzMy1cdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMzQ6XHQuZW5hYmxlX3NkaW9faXJxID0gbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcdC5hY2tfc2Rpb19pcnFcdD0gbWVzb25fbW1jX2Fja19zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2d4X2RhdGEgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzEzLVx0LmFkanVzdFx0XHQ9IFNEX0VNTUNfQURKVVNULFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMzE0Olx0LmlycV9zZGlvX3NsZWVwXHQ9IENMS19WMl9JUlFfU0RJT19TTEVFUCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxNS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2F4Z19kYXRhID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cdC5hZGp1c3RcdFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTMyMjpcdC5pcnFfc2Rpb19zbGVlcFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTEzMjMtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYz0xMzI9c3RhdGljIHZvaWQgbWVzb25fbXhfc2RoY19zdGFydF9jbWQoc3RydWN0IG1tY19ob3N0ICptbWMsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cdFx0ICogZG93bmxvYWQgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBmb3IgYSBCQ000MzM2Mi8xIGNhcmQuXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlx0XHQgKiBXaXRob3V0IHRoaXMgc2Rpb19tZW1jcHlfdG9pbygpICh3aXRoIGEgc2l6ZSBvZiAyMTk1NTdcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXHRcdCAqIGJ5dGVzKSB0aW1lcyBvdXQgaWYgTUVTT05fU0RIQ19NSVNDX01BTlVBTF9TVE9QIGlzIG5vdCBzZXQuXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMi0vKlxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6MzogKiBtZXNvbi1teC1zZGlvLmMgLSBNZXNvbjYsIE1lc29uOCBhbmQgTWVzb244YiBTRElPL01NQyBIb3N0IENvbnRyb2xsZXJcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvbW1jLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjI4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjMwLXtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjYzMTpcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMi1cdFx0LnJlZ19iaXRzID0gOCxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NjgtXHRob3N0LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgYmFzZSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjY2OTpcdFx0XHRcdFx0ICAgICBcdTAwMjZtZXNvbl9teF9zZGlvX3JlZ21hcF9jb25maWcpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjcwLVx0aWYgKElTX0VSUihob3N0LVx1MDAzZXJlZ21hcCkpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo3NDk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YW1sb2dpYyxtZXNvbjgtc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthbWxvZ2ljLG1lc29uOGItc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1OC1cdC5kcml2ZXIgID0ge1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzU5Olx0XHQubmFtZSA9IFwmIzM0O21lc29uLW14LXNkaW9cJiMzNDssXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXHRcdC5wcm9iZV90eXBlID0gUFJPQkVfUFJFRkVSX0FTWU5DSFJPTk9VUyxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zMy0gKlxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmM6MzQ6ICogLSBGb3Igbm93LCB3ZSB3b24mIzM5O3QgdHJ5IHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgcmVhbCBtbWMvc2Qvc2Rpb1xuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzUtICogICBjb250cm9sbGVyLCBhbHRob3VnaCBzb21lIG9mIHRoZW0gZG8gaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IGZvclxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTExMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3UzMDAgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVx0LmRhdGFjdHJsX2Jsb2Nrc3pcdD0gMTEsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcdC5zdF9zZGlvXHRcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI0LVx0LnB3cnJlZ19wb3dlcnVwXHRcdD0gTUNJX1BXUl9PTixcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMzY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9ub21hZGlrID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNDktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzYtXHQuZG1hX3Bvd2VyX29mXzJcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxMS1cdC5kbWFfcG93ZXJfb2ZfMlx0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcdC5zdF9zZGlvXHRcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxNC1cdC5zdF9jbGtkaXZcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI0NC1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MjQ1Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDY6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0yNTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9zdG0zMl9zZG1tYyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzItXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI3MzpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc0LVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTIsIDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc1LVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNSksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzY6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3Ny1cdC5idXN5X3RpbWVvdXRcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAwLVx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDE6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMi1cdC5zdG0zMl9pZG1hYnNpemVfbWFza1x0PSBHRU5NQVNLKDE2LCA1KSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMy1cdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cdD0gQklUKDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MzA0Olx0LnN1cHBvcnRzX3NkaW9faXJxXHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDUtXHQuZG1hX2xsaVx0XHQ9IHRydWUsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MzEzPXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfc3RtMzJfc2RtbWN2MyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTYsIDYpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNiksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cdC5kbWFfbGxpXHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz00MjU9c3RhdGljIHZvaWQgbW1jaV93cml0ZV9kYXRhY3RybHJlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1MzIgZGF0YWN0cmwpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDI4LVx0ZGF0YWN0cmwgfD0gaG9zdC1cdTAwM2VkYXRhY3RybF9yZWcgXHUwMDI2IChob3N0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6NDI5Olx0XHRcdFx0XHQgIGhvc3QtXHUwMDNldmFyaWFudC1cdTAwM2VkYXRhY3RybF9tYXNrX3NkaW8pO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTEyMzY9c3RhdGljIHZvaWQgbW1jaV9zdGFydF9kYXRhKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYxLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2MjpcdGlmIChob3N0LVx1MDAzZW1tYy1cdTAwM2VjYXJkIFx1MDAyNlx1MDAyNiBtbWNfY2FyZF9zZGlvKGhvc3QtXHUwMDNlbW1jLVx1MDAzZWNhcmQpKSB7XG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYzLVx0XHR1MzIgY2xrO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2NC1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNjU6XHRcdGRhdGFjdHJsIHw9IHZhcmlhbnQtXHUwMDNlZGF0YWN0cmxfbWFza19zZGlvO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjcyLVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNzM6XHRcdGlmICh2YXJpYW50LVx1MDAzZXN0X3NkaW8gXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZmxhZ3MgXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cdFx0ICAgIChob3N0LVx1MDAzZXNpemUgXHUwMDNjIDggfHxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3NjgtXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzcwLXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkzNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNESU8gRHJpdmVyIGluIFFFTVUgYW5kIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgcnR3ODhgIGRyaXZlciwgYW5kIGl0JiMzOTtzIGZvciBhIFJlYWx0ZWsgODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYW4gU0RJTyBkZXZpY2UuIFFFTVUgc3VwcG9ydHMgdmFyaW91cyBTRElPIGhvc3QgY29udHJvbGxlcnMg4oCTIHNkaGNpLCBiY20yODM1X3NkaG9zdCwgYW5kIHRoZSBsaWtlIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IGRvZXMgUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgdGhlIFJlYWx0ZWsgODcyM0JTIGl0c2VsZj8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0cyBnZW5lcmFsIHB1cnBvc2UuCgpTbywgaWYgaXQmIzM5O3MgU0RJTywgUUVNVSBjYW4gZG8gU0QgY2FyZHMgaW4gYSBsaW1pdGVkIHdheSwgYnV0IGFuIFNESU8gV2ktRmkgY2FyZD8gSSBkb24mIzM5O3QgdGhpbmsgc28sIHVubGVzcyB0aGVyZSYjMzk7cyBzcGVjaWZpYyBlbXVsYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBzb21lIG9ic2N1cmUgYHNkaW9fZHVtbXlgIGtlcm5lbCBtb2R1bGUgb3Igc29tZXRoaW5nLiBObywgbm90aGluZyBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaW4gdGVybXMgb2YgYSBnZW5lcmFsIFNESU8gZW11bGF0aW9uIGxheWVyIGluIHRoZSBrZXJuZWwuIFdhaXQsIHRoZXJlJiMzOTtzIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLCBidXQgdGhhdCYjMzk7cyBhdCB0aGUgbWFjODAyMTEgbGF5ZXIsIG5vdCB0aGUgU0RJTyBidXMgbGV2ZWwuIEkga25vdyB0aGF0IHRoZSBgcnR3ODhgIGRyaXZlciBpcyBkZXNpZ25lZCB0byBiaW5kIHRvIGFuIFNESU8gZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IvZGV2aWNlIElEIGNvbWJpbmF0aW9uLgoKSWYgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSwgZG9lc24mIzM5O3QgcHJlc2VudCBhIHZpcnR1YWwgU0RJTyBXaS1GaSBjYXJkIHdpdGggdGhvc2UgcGFydGljdWxhciBJRHMsIHRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiB3aWxsICpuZXZlciogYmUgY2FsbGVkLiBXaGljaCBtZWFucyBub25lIG9mIHRoaXMgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgd291bGQgYmUgcmVhY2hhYmxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGlzc3VlIG9mIGhvdyB0aGUgaGFyZHdhcmUgZW11bGF0aW9uIGlzIHNldCB1cC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBzeXprYWxsZXIgY2FuIGhlbHAgbWUgd2l0aCB0aGlzIHByb2JsZW0uIEkgaGF2ZSBzZWVuIHRoYXQgc3l6a2FsbGVyIGhhcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGRldmljZXMgYW5kIGBzeXpfdmhjaWAgZm9yIEJsdWV0b290aCwgYW5kIGBzeXpfZ2VuZXRsaW5rYCBmb3IgbmV0bGluay4gVGhlIHF1ZXN0aW9uIGlzOiBEb2VzIHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBzaW1pbGFyIGZvciBTRElPPyBEb2VzIGl0IGhhdmUgYSBgc3l6X3NkaW9fY29ubmVjdGAgY2FsbCBvciBzb21ldGhpbmcgSSBjYW4gdXNlPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9zZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3OTgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVFc4OCBTRElPIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gZ2V0IGF0IHRoZSBgcnR3ODhgIFNESU8gZHJpdmVyIHdpdGggU3l6a2FsbGVyLiBGaXJzdCBvZmYsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWZlcmVuY2VzIHRvIGBzeXpfc2Rpb2AgcHNldWRvLXN5c2NhbGxzLCB3aGljaCBpcyBleHBlY3RlZC4gVGhhdCBwYXRoIGlzIHByb2JhYmx5IGEgZGVhZCBlbmQuIE5leHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHN5el84MDIxMWAuIFN5emthbGxlciAqY2FuKiBoaXQgODAyLjExIHdpdGggZnJhbWUgaW5qZWN0aW9uIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCwgYnV0IGBtYWM4MDIxMV9od3NpbWAgaXMgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIGRyaXZlciwgbm90IHJlbGF0ZWQgdG8gYHJ0dzg4YC4gSXQgZG9lc24mIzM5O3QgdXNlIGBydHc4OGAuCgpBbHJpZ2h0LCB0aGVuIEkgcmVtZW1iZXJlZCBTeXprYWxsZXIgY2FuIGFsc28gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5IGFyZSBRRU1VIGVtdWxhdGVkLiBCdXQgdGhlIHByb2JsZW0gaXMsIGBydHc4OGAgaXMgYW4gU0RJTyBkZXZpY2UuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgZG9lcyBRRU1VIG9mZmVyIGFueSBTRElPIGRldmljZSBlbXVsYXRpb24gdGhhdCBTeXprYWxsZXIgY291bGQgbGV2ZXJhZ2U/CgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IFN5emthbGxlciBpc24mIzM5O3Qgc2V0IHVwIHRvIGZ1enogU0RJTyBkcml2ZXJzLCBiZWNhdXNlIHRoZXJlIGlzbiYjMzk7dCBhIHJlYWRpbHkgYXZhaWxhYmxlIGR1bW15IGhvc3QgY29udHJvbGxlciBvciBTRElPIGRldmljZSBmdXp6ZXIgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gVGhlIGNvbW1vbiB3b3JrZmxvdyBpc24mIzM5O3QgdGhlcmUgZm9yIFNESU8gZGV2aWNlcy4gU28sIHRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlIGNhbiBldmVuIGdldCBgcnR3ODhgIHRvIHByb2JlIGluIHRoaXMgZW52aXJvbm1lbnQsIGFzIGEgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0d19zZGlvX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYz0yMT1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzY3NfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2NzLmMtMjMtXHQuaWRfdGFibGUgPSBydHdfODcyM2NzX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYz0yNz1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzZHNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYy0yOC1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jOjI5Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jLTMwLVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjFjc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTIzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM6MjQ6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjUtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMmJzX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmMtMjMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyY3NfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYy0yMy1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYz0xNjM5PXN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE2NTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxNjUyOmludCBydHdfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNjUzLVx0XHQgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MjYtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM6MTcyNzpFWFBPUlRfU1lNQk9MKHJ0d19zZGlvX3Byb2JlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MjgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmg9MTg0PWV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaDoxODY6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4Ny1cdFx0ICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTk0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enphYmlsaXR5KioKCk9rYXksIHRoZSBwcm9tcHQgaW5zdHJ1Y3RzIG1lIHRvIGZsYWcgcGF0Y2hlcyBhcyB1bi1mdXp6YWJsZSBpZiB0aGV5IHRhcmdldCBjb2RlIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gUmVhZGluZyB0aGlzLCBJIHNlZSB0aGlzIHBhdGNoIHRvdWNoZXMgYSBSZWFsdGVrIDg3MjNCUyBTRElPIFdpLUZpIGRyaXZlci4gQW5kIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O05vLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBvZmYtbGltaXRzIGZvciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcy4mIzM0OyBTRElPIGRldmljZXMsIGFzIEkga25vdywgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IEkgY2FuIHNpbXVsYXRlIHRoYXQga2luZCBvZiBoYXJkd2FyZSBvbiBHQ0Ugb3IgYSByZWd1bGFyIFFFTVUgaW5zdGFuY2UuIFNvLCB0aGUgY2hhbmNlcyBvZiBldmVuIGhpdHRpbmcgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgbGV0IGFsb25lIGV4ZWN1dGluZyBhbnkgb2YgaXRzIGNvZGUsIGlzIHplcm8uCgpCdXQsIGJlaW5nIHRob3JvdWdoLCBJIHNob3VsZCAqYWx3YXlzKiBkb3VibGUtY2hlY2sgZm9yIGVkZ2UgY2FzZXMuIElzIHRoZXJlICphbnkqIHZpcnR1YWwgU0RJTyBkZXZpY2UgZnJhbWV3b3JrIGluIHRoZSBrZXJuZWwgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nPyBJIGtub3cgYWJvdXQgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIHdoaWNoIGlzIHNvZnR3YXJlLWJhc2VkIGJ1dCBub3QgU0RJTywgYW5kIGBkdW1teV9oY2RgIGFuZCBgdmhjaWAgZm9yIFVTQiBhbmQgQmx1ZXRvb3RoLCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBnb29kIGV4YW1wbGVzIG9mIGhvdyB0byBzaW11bGF0ZSBkcml2ZXJzLCBhbGxvd2luZyBmdXp6aW5nIGluIHRoZXNlIGNhc2VzLiBIb3dldmVyLCBhZnRlciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoZXJlIGlzIG5vIGBkdW1teV9zZGlvYCBvciBgc2Rpb19mdXp6ZXJgIGVxdWl2YWxlbnQgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gVGhpcyBzdHJvbmdseSBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoOiBTRElPIGRyaXZlcnMgY2FuJiMzOTt0IGJlIHJlYWRpbHkgZnV6emVkIGJ5IHN5emthbGxlciBvciBhIHNpbWlsYXIgdG9vbC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciAqbmVlZHMqIGEgcGh5c2ljYWwgU0RJTyBjYXJkIHRvIHJ1biwgYW5kIFFFTVUgZG9lcyBub3QgZW11bGF0ZSB0aGVtLCB0aGlzIHNob3VsZCBiZSBtYXJrZWQgYXMgdW4tZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW9fYWRkX2Z1bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tbWMvY29yZS9zZGlvLmM9MTIxMj1pbnQgbW1jX2F0dGFjaF9zZGlvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdClcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW8uYy0xMzA0LVx0Zm9yIChpID0gMDtpIFx1MDAzYyBmdW5jcztpJiM0MzsmIzQzOykge1xuZHJpdmVycy9tbWMvY29yZS9zZGlvLmM6MTMwNTpcdFx0ZXJyID0gc2Rpb19hZGRfZnVuYyhob3N0LVx1MDAzZWNhcmQtXHUwMDNlc2Rpb19mdW5jW2ldKTtcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpby5jLTEzMDYtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jPTM4Mz1zdGF0aWMgdm9pZCBzZGlvX3NldF9vZl9ub2RlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTM5Mi0gKi9cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzozOTM6aW50IHNkaW9fYWRkX2Z1bmMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYylcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zOTQte1xuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy00MTEtICogKGV2ZW50dWFsbHkpIGZyZWUgaXQuXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM6NDEyOiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGVycm9yIHBhdGhzIHdoZXJlIHNkaW9fYWRkX2Z1bmMoKSB3YXNcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy00MTMtICogbmV2ZXIgZXhlY3V0ZWQgKGJlY2F1c2UgYSBmYWlsdXJlIG9jY3VycmVkIGF0IGFuIGVhcmxpZXIgcG9pbnQpLlxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaD0xMz1zdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2FsbG9jX2Z1bmMoc3RydWN0IG1tY19jYXJkICpjYXJkKTtcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaDoxNDppbnQgc2Rpb19hZGRfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTtcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaC0xNS12b2lkIHNkaW9fcmVtb3ZlX2Z1bmMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODIwCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFNESU8gRHJpdmVyIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgcnR3ODhgIGRyaXZlciwgd2hpY2ggaXMgUmVhbHRlayYjMzk7cyBkcml2ZXIgZm9yIHRoZWlyIFdpLUZpIGNoaXBzLiBTcGVjaWZpY2FsbHksIHRoaXMgcGFydGljdWxhciBwYXRjaCBhcHBlYXJzIHRvIGJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgU0RJTyBpcyBhbHdheXMgYSBoZWFkYWNoZSB0byBmdXp6LgoKVGhlIGNvcmUgaXNzdWUgaXMsIGFzIEkgc3VzcGVjdGVkLCB0aGlzIHBhdGNoIGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkgZnV6eiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBTRElPLCB3aGljaCBtZWFucyB3ZSBuZWVkIGEgcmVhbCBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgcGx1Z2dlZCBpbnRvIHRoZSBzeXN0ZW0uIFFFTVUgYW5kIG90aGVyIHZpcnR1YWxpemF0aW9uIHNvbHV0aW9ucyBhcmVuJiMzOTt0IGdvaW5nIHRvIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhY2N1cmF0ZWx5LiBUaGVyZSYjMzk7cyBubyBlcXVpdmFsZW50IG9mIGEgYGR1bW15X2hjZGAgZm9yIFNESU8gdG8gc2ltdWxhdGUgdGhlIGRldmljZSBhbmQgYWxsb3cgdGVzdGluZyBpbiBhIHNvZnR3YXJlLW9ubHkgbWFubmVyLCBhdCBsZWFzdCwgbm90IGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIE5vIGVhc3kgd2F5IHRvIGdlbmVyYXRlIFNESU8gdHJhZmZpYywgYW5kIHRoZXJlZm9yZSwgbm8gd2F5IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBhZnRlciBjb25zaWRlcmluZyBhbGwgb2YgdGhpcywgbXkgYXNzZXNzbWVudCBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZyBpbiB0aGUgY3VycmVudCBzZXR1cC4gSXQmIzM5O3MgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHNjZW5hcmlvLiBXZSYjMzk7ZCBuZWVkIHNpZ25pZmljYW50IGhhcmR3YXJlIGludmVzdG1lbnQsIG9yIGEgbm92ZWwgU0RJTyBmdXp6ZXIsIHRvIGV2ZW4gYmVnaW4gdG8gbWFrZSBwcm9ncmVzcyBvbiBmdXp6aW5nIHRoZSBsb2dpYyBhZGRlZCBoZXJlLiBBbmQsIGV2ZW4gdGhlbiwgdGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozODo0Mi42NTI1OTU1NzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgwMjA3MTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBjaGlwLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjYXJkIHRvIGJlIHByZXNlbnQuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIFNESU8gZGV2aWNlIGZ1enplciAobGlrZSBkdW1teV9oY2QgZm9yIFVTQikgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzg6NDIuNjUyNjA1MTQxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDEzNjM4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NDBlYWVmMjc2YzY1YTE1NmM1YzdjMGI4ZjkzZGVmYmI1OGUyNjcyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDc6Mzg6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtMjE5NCw2ICsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2V0eF9zdGJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xcbiBcXG4tXFx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MiBhbmRcXG4tXFx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXFxuK1xcdC8qXFxuK1xcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MlxcbitcXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cXG4gXFx0ICovXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXFx1MDAyNlxcdTAwMjYgcGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCkge1xcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlcGt0X2xlbiA9PSAwKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTAuLmVkMWJlZDhlYTE0NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbkBAIC0yMCw2ICsyMCwxNyBAQFxcbiAjaW5jbHVkZSBcXFwidHguaFxcXCJcXG4gXFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1xcdFxcdFxcdDUwXFxuKyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcXHRcXHRcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXFxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcXG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXFxuKyAqL1xcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlxcdFxcdFxcdDE2XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXFx0XFx0XFx0OFxcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcygxKVxcbiBcXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXFxuIHtcXG5AQCAtNTQ4LDEyICs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGNhY2hlZCBmcmVlIHBhZ2UgY291bnRlcnMgYXJlIGEgZmFzdCBwYXRoIGhpbnQgb25seS4gVGhleSBhcmUgd3JpdHRlblxcbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcXG4rICogbm90IGVub3VnaCByb29tIHRoZXkgYXJlIHJlc3luY2hyb25pc2VkIGZyb20gdGhlIGNoaXAgYmVmb3JlIHRoZSBjYWxsZXJcXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZyZWVfdHhwZylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YixcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XFxuK1xcdHUzMiBmcmVlX3R4cGc7XFxuK1xcdHUxNiBwdWJxX251bTtcXG4rXFxuK1xcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXHRpZiAoZnJlZV90eHBnKSB7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRcXHRwdWJxX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtIC0gcGdfdGJsLVxcdTAwM2VocV9udW0gLVxcbitcXHRcXHRcXHQgICBwZ190YmwtXFx1MDAzZWxxX251bSAtIHBnX3RibC1cXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVxcdTAwM2VleHFfbnVtIC1cXG4rXFx0XFx0XFx0ICAgcGdfdGJsLVxcdTAwM2VnYXBxX251bTtcXG4rXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVxcdTAwM2VocV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVxcdTAwM2VucV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdywgcGdfdGJsLVxcdTAwM2VscV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xcbitcXHR9XFxuK1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSxcXG4rXFx0XFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKGZyZWVfdHhwZylcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFN1bSBvZiB0aGUgcXVldWUncyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XFxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxcbisgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcbitcXHRyZXR1cm4gZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcbitcXHRcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRpZiAoIWRlZGljYXRlZCkge1xcbitcXHRcXHRcXHRydHdfd2FybihydHdkZXYsIFxcXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsNDQgKzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHU4IGZyZWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgLTEsIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XFxuK1xcdFxcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XFxuK1xcdFxcdGlmIChmcmVlKSB7XFxuK1xcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FQlVTWTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xcbitcXHR1bnNpZ25lZCBpbnQgdGFrZW47XFxuK1xcdGludCBmcmVlO1xcbitcXG4rXFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcXG4rXFx0aWYgKCFkZWRpY2F0ZWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xcbitcXHR0YWtlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZXMsIGZyZWUgXFx1MDAzZSAwID8gZnJlZSA6IDApO1xcbitcXHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xcbitcXG4rXFx0cGFnZXMgLT0gdGFrZW47XFxuK1xcdGlmIChwYWdlcyBcXHUwMDI2XFx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViKSBcXHUwMDNjIDApXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbitcXHRzaXplX3Qgd3JpdGVfc2l6ZTtcXG4gXFx0Ym9vbCBidXNfY2xhaW07XFxuIFxcdHNpemVfdCB0eHNpemU7XFxuIFxcdHUzMiB0eGFkZHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cXHUwMDNlbGVuLCBxdWV1ZSk7XFxuLVxcdGlmICghdHhhZGRyKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemUgXFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cXG4rXFx0XFx0XFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3cml0ZV9zaXplIFxcdTAwM2Ugb3JpZ19sZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XFxuIFxcbi1cXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHBhZGRpbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcXG4rXFx0aWYgKCF0eGFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF90cmltO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVxcdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgX19mdW5jX18sIHF1ZXVlKTtcXG4gXFxuIFxcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XFxuLVxcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jKTtcXG4tXFxuLVxcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSwgdHhzaXplKTtcXG4tXFxuK1xcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHdyaXRlX3NpemUpO1xcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbiBcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCkge1xcbiBcXHRcXHRydHdfd2FybihydHdkZXYsXFxuIFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcXFwiLFxcbi1cXHRcXHRcXHQgdHhzaXplLCB0eGFkZHIpO1xcbitcXHRcXHRcXHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChydGw4NzIzYnMpIHtcXG4rXFx0XFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xcbitcXHR9XFxuIFxcbitvdXRfdHJpbTpcXG4rXFx0aWYgKHdyaXRlX3NpemUgXFx1MDAzZSBvcmlnX2xlbilcXG4rXFx0XFx0c2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTY3Nyw3ICs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcbi1cXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcXG4rXFx0XFx0XFx0XFx0ICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHU4IHNpemUsIHRpbWVvdXQ7XFxuIFxcbiBcXHRzd2l0Y2ggKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQpIHtcXG4rXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxcbkBAIC03MTIsNiArOTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdFxcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XFxuIFxcbiBcXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNzQ5LDkgKzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVxcdTAwM2VjaGlwO1xcbitcXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWZpZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MTYgcmVzZXJ2ZWRfbnVtO1xcbitcXHR1MzIgZnJlZV90eHBnO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcbitcXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcXG4rXFx0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cXHUwMDNlYWNxX3BnX251bSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGdfdGJsID0gXFx1MDAyNmNoaXAtXFx1MDAzZXBhZ2VfdGFibGVbMF07XFxuK1xcdHJlc2VydmVkX251bSA9IHBnX3RibC1cXHUwMDNlaHFfbnVtICsgcGdfdGJsLVxcdTAwM2VscV9udW0gKyBwZ190YmwtXFx1MDAzZW5xX251bSArXFxuK1xcdFxcdCAgICAgICBwZ190YmwtXFx1MDAzZWV4cV9udW0gKyBwZ190YmwtXFx1MDAzZWdhcHFfbnVtO1xcbitcXHRpZiAoZmlmby1cXHUwMDNlYWNxX3BnX251bSBcXHUwMDNjPSByZXNlcnZlZF9udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHB1YnFfbnVtID0gZmlmby1cXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXFx1MDAzZW5xX251bSwgcGdfdGJsLVxcdTAwM2VleHFfbnVtKSk7XFxuK1xcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVxcdTAwM2VocV9udW0sIHBnX3RibC1cXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4rXFx0dTMyIGNsZWFyO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihydHdkZXYpO1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XFxuK1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFxcdTAwMjZcXG4rXFx0XFx0XFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXHRcXHRpZiAoY2xlYXIpXFxuK1xcdFxcdFxcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xcbitcXHR9XFxuK1xcbiBcXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODE1LDcgKzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cXVldWVfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4rXFx0LypcXG4rXFx0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcXG4rXFx0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXFxuK1xcdCAqL1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsIFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXFxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXG4gXFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xcbiBcXHR2YWwgXFx1MDAyNj0gMHhmZmY4O1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xcbiBcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XFxuIH1cXG4gXFxuQEAgLTkzNyw2ICsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4gXFxuIFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBGSUZPIGZpbGxzIHBhc3RcXG4rXFx0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXFxuK1xcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxcbitcXHQgKiBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZHJhaW5zIGJlbG93IHRoZSBsb3cgd2F0ZXJtYXJrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFydHdzZGlvLVxcdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlO1xcbitcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXFx1MDAzZWh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxcbitcXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrIFxcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rLypcXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcXG4rICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZVxcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgcV9tYXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfcXVldWVfbGVuKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFxcdTAwM2M9XFxuK1xcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuLVxcdGludCBsaW1pdCwgcXVldWU7XFxuK1xcdGludCBsaW1pdCwgcXVldWUsIHJldDtcXG4rXFx0Ym9vbCBydGw4NzIzYnM7XFxuIFxcbiBcXHRydHdkZXYgPSB3b3JrX2RhdGEtXFx1MDAzZXJ0d2RldjtcXG4gXFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcXG4gXFxuIFxcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXFx1MDAyNnJ0d2Rldi1cXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXFxuIFxcdFxcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxcbitcXHRcXHRcXHRcXHQgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlXFxuK1xcdFxcdFxcdFxcdCAqIGtpY2tzIHRoZSB3b3JrZXIuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ3b3JrX2RhdGEtXFx1MDAzZXdvcmssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBSZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgYWZ0ZXIgZXZlcnlcXG4rXFx0XFx0XFx0ICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cFxcbitcXHRcXHRcXHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UKSB7XFxuK1xcdFxcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI5NCwxNCArMTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xcbiBcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtpXSk7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcXG4rXFx0fVxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFx0aWYgKCFydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpXFxuIFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXJ0d2RldiA9IHJ0d2RldjtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTMxNSw2ICsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVxcdTAwM2V0eHdxKTtcXG4gXFx0a2ZyZWUocnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiBcXG4gLyogU0RJTyBUeCBDb250cm9sICovXFxuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcXHRCSVQoNClcXG4gXFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXFxuICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMilcXG5AQCAtNzcsNiArNzgsMTQgQEBcXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlxcdFxcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcXHRcXHRCSVQoMjkpXFxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXFx0XFx0XFxcXFxcbitcXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXFxuIFxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovXFxuICNkZWZpbmUgUkVHX1NESU9fSENQV01cXHRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXFxuQEAgLTg2LDYgKzk1LDEwIEBAXFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXFxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19GUkVFX1RYUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjApXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXFx0XFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXFx0XFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1xcdFxcdFxcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXFx0XFx0XFx0R0VOTUFTSygzMSwgMjQpXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNMVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXFxuQEAgLTE0Myw3ICsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4gXFx0c3RydWN0IHJ0d19kZXYgKnJ0d2RldjtcXG4gfTtcXG4gXFxuQEAgLTE1OSw2ICsxNzIsMTMgQEAgc3RydWN0IHJ0d19zZGlvIHtcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XFxuIFxcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2xvdztcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19wdWI7XFxuK1xcdGF0b21pY190IHR4X29xdF9mcmVlO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzg6NDMuMTk1MDQ0Njc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTgyNTk2MTM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0MGVhZWYyNzZjNjVhMTU2YzVjN2MwYjhmOTNkZWZiYjU4ZTI2NzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjM4OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggYzZlOTgxYmE3OTg2OC4uOGY4NmY3YzEyZGU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuK1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgKzIxOTUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNldHhfc3RiYztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmE5MzYxZWY0YjkzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4rXHQvKlxuK1x0ICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuK1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XG4gXHRcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcInplcm8gbGVuZ3RoIHBhY2tldFwiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTcgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuKyAqL1xuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgKzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcbisgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXG4rXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbitcdGlmIChmcmVlX3R4cGcpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlbHFfbnVtIC0gcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cdTAwM2VocV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcbitcdH1cbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSxcbitcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1xuK1x0aWYgKGZyZWVfdHhwZylcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rfVxuK1xuKy8qXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbisgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGZyZWU7XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1xuK1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbit9XG4rXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdHN3aXRjaCAocXVldWUpIHtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbitcdFx0XHRydHdfd2FybihydHdkZXYsIFwiVW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwiLCBxdWV1ZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4rXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDQ0ICs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0dTggZnJlZTtcbitcdGludCBpO1xuK1xuK1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1x0dW5zaWduZWQgaW50IHRha2VuO1xuK1x0aW50IGZyZWU7XG4rXG4rXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1x0aWYgKCFkZWRpY2F0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuK1x0dGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDApO1xuK1x0YXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTtcbitcbitcdHBhZ2VzIC09IHRha2VuO1xuK1x0aWYgKHBhZ2VzIFx1MDAyNlx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YikgXHUwMDNjIDApXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuK1x0dW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbitcdH1cbitcbitcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuK1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuK1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4rXHR9XG4rXG4rXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuK1x0aWYgKCF0eGFkZHIpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXG5cIixcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbitcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4rXHRcdFx0ICAgICAgIHdyaXRlX3NpemUpO1xuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuIFxuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcIkZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCIsXG4tXHRcdFx0IHR4c2l6ZSwgdHhhZGRyKTtcbitcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbitcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4rXHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4rXHR9XG4gXG4rb3V0X3RyaW06XG4rXHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pXG4rXHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgKzg3NywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuK1x0ZWxzZVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcbitcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHR1OCBzaXplLCB0aW1lb3V0O1xuIFxuIFx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuK1x0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxuQEAgLTcxMiw2ICs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSArOTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MTYgcmVzZXJ2ZWRfbnVtO1xuK1x0dTMyIGZyZWVfdHhwZztcbitcdHUxNiBwdWJxX251bTtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICsgcGdfdGJsLVx1MDAzZWxxX251bSArIHBnX3RibC1cdTAwM2VucV9udW0gK1xuK1x0XHQgICAgICAgcGdfdGJsLVx1MDAzZWV4cV9udW0gKyBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxuK1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4rXHRcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVx1MDAzZWhxX251bSwgcGdfdGJsLVx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbitcdHUzMiBjbGVhcjtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0Y2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgXHUwMDI2XG4rXHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTA2MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHF1ZXVlX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbitcdC8qXG4rXHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuK1x0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXG4rXHQgKi9cbitcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgKzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4rXHQvKlxuK1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4rXHQgKiB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcbitcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxuK1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbitcdCAqL1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7XG4rXHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwOTUsNiArMTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4rXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBydHdzZGlvLVx1MDAzZWlycV9tYXNrIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuKy8qXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcbisgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiBcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKTtcbiBcdGlmICghc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAwO1xuIFxuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbitcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlO1xuK1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbitcdH1cbitcbitcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4rXHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4rXHRcdFx0ICAgICB3b3JrKTtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4tXHRpbnQgbGltaXQsIHF1ZXVlO1xuK1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuK1x0Ym9vbCBydGw4NzIzYnM7XG4gXG4gXHRydHdkZXYgPSB3b3JrX2RhdGEtXHUwMDNlcnR3ZGV2O1xuIFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiBcbiBcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXHUwMDI2cnR3ZGV2LVx1MDAzZWZ3LCBGV19GRUFUVVJFX1RYX1dBS0UpKVxuIFx0XHRydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7XG4gXG4gXHRmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSBcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcbiBcdFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XG4tXHRcdFx0cnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBBIHBhZ2Ugc2hvcnRhZ2UgaXMgdHJhbnNpZW50OiBsZWF2ZSB0aGVcbitcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuK1x0XHRcdFx0ICogb2Ygc3RhbGxpbmcgdGhpcyBBQyB1bnRpbCBzb21ldGhpbmcgZWxzZVxuK1x0XHRcdFx0ICoga2lja3MgdGhlIHdvcmtlci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcmV0ID09IC1FQlVTWSkge1xuK1x0XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuK1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4rXHRcdFx0XHRcdFx0XHQgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7XG4rXHRcdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFJlc3RhcnQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBhZnRlciBldmVyeVxuK1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbitcdFx0XHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbitcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4rXHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssIDApO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgKzE2MTgsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW2ldKTtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7XG4rXHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMzE1LDYgKzE2NDEsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdGludCBpO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiArMjIsNyBAQFxuIFxuIC8qIFNESU8gVHggQ29udHJvbCAqL1xuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDIpXG5AQCAtNzcsNiArNzgsMTQgQEBcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcdFx0QklUKDI5KVxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4rXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXG4gXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV01cdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcbkBAIC04Niw2ICs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXG4gLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDIwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUxcdFx0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1dcdFx0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi9cbkBAIC0xNDMsNyArMTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEge1xuIH07XG4gXG4gc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiArMTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuK1x0Ym9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcbitcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcbitcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xuK1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4rXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcbitcdGF0b21pY190IHR4X29xdF9mcmVlO1xuIH07XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM4OjQzLjE5NTA0NzEwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTI3MTQ5MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0YXJnZXRpbmcgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBgcnR3ODhgIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLiBNeSBpbml0aWFsIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucyB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlczogYG1haW4uaGAsIGByeC5jYCwgYHNkaW8uY2AsIGFuZCBgc2Rpby5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYWRkaW5nIHN1cHBvcnQgZm9yIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCwgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBTRElPIChgcnR3X2lzXzg3MjNic2ApLlxuXG5EaWdnaW5nIGRlZXBlciwgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydHdfc2Rpb184NzIzYnNfKmAgYXJlIGludHJvZHVjZWQsIGhhbmRsaW5nIHRhc2tzIHN1Y2ggYXMgVFggcGFnZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBxdWV1ZSBoYW5kbGluZy4gTW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBmdW5jdGlvbnMsIGBydHdfc2Rpb193cml0ZV9wb3J0YCBhbmQgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLCBzdWdnZXN0IGNoaXAtc3BlY2lmaWMgbG9naWMgZm9yIHRoZSA4NzIzQlMgdmFyaWFudC4gVGhlIGFsdGVyYXRpb24gb2YgYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGEgYGRlbGF5ZWRfd29ya2AgaXMgYWxzbyBhIGtleSBjaGFuZ2UuIEZpbmFsbHksIGJhY2stcHJlc3N1cmUgbG9naWMgZm9yIG1hYzgwMjExIHF1ZXVlcyBzdWdnZXN0cyBmdXJ0aGVyIGludGVncmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgbmV0d29ya2luZyBzdGFjay5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IENhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQ/IFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGludG8gcGxheS4gVGhlIGRyaXZlciBpcyBgcnR3ODhgLCB3aGljaCBpcyBhIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNwZWNpZmljYWxseSB3aXRoaW4gYHNkaW8uY2AsIGltcGx5aW5nIGFuIFNESU8gaW50ZXJmYWNlLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IFFFTVUsIG91ciBnby10byB2aXJ0dWFsaXphdGlvbiBwbGF0Zm9ybSwgYW5kIHdoZXRoZXIgaXQgY2FuIGVtdWxhdGUgU0RJTyBkZXZpY2VzIHN1ZmZpY2llbnRseSB0byB0cmlnZ2VyIHRoZXNlIGNvZGUgcGF0aHMuXG5cbkkga25vdyBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgbWFjODAyMTEsIGJ1dCB0aGlzIGlzIGEgKnNwZWNpZmljKiBoYXJkd2FyZSBkcml2ZXIuIFVzdWFsbHksIHRoZXNlIHNvcnRzIG9mIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXJzLCBzdWNoIGFzIGBydHc4OGAsIGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHdpdGhvdXQgc3BlY2lmaWMgUENJIG9yIFVTQiBlbXVsYXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgKlNESU8qLiBRRU1VIGhhcyBzb21lIFNESENJIGVtdWxhdGlvbiwgYnV0IGRvZXMgaXQgZ28gc28gZmFyIGFzIHRvIGVtdWxhdGUgdGhlIFJlYWx0ZWsgODcyM0JTIFNESU8gV2ktRmkgY2FyZD8gTW9zdCBsaWtlbHkgbm90LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQncyBleGNsdXNpb24gb2YgY29kZSB0aGF0J3Mgbm90IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5UaGUgcHJvbXB0IGhpZ2hsaWdodHMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcyBiZWluZyBleGNsdWRlZC4gYHJ0dzg4YCBpcyBhIFJlYWx0ZWsgV2ktRmkgZHJpdmVyLCBzbyBpdCBkb2VzIHF1YWxpZnkgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGFuZCB3b3VsZCBsaWtlbHkgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuVGhlIG5leHQgcG9pbnQgSSBuZWVkIHRvIGNvbnNpZGVyIGlzIHN5emthbGxlcidzIFdpLUZpIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGNvdmVyYWdlIHZpYSBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhhdCdzIGFpbWVkIGF0IHRoZSBnZW5lcmljIG1hYzgwMjExIHN0YWNrLiBSZWFsdGVrJ3MgZHJpdmVyIGlzIGxpa2VseSB0byBub3QgYmUgY292ZXJlZCwgdW5sZXNzIHdlIGhhdmUgYSBVU0IvUENJL1NESU8gZnV6emVyIHRoYXQgY2FuIGluamVjdCBwYWNrZXRzIGFuZCByZXNwb25zZXMuIEkga25vdyBzeXprYWxsZXIgZG9lcyBoYXZlIGEgVVNCIGZ1enplciB2aWEgYGR1bW15X2hjZGAsIGJ1dCBkb2VzIGl0IGhhdmUgYW4gU0RJTyBmdXp6ZXI/IEknbGwgbmVlZCB0byByZXNlYXJjaCB0aGF0LCBjaGVja2luZyB0aGUga2VybmVsIHNvdXJjZXMgYW5kIHN5emthbGxlcidzIGNvZGViYXNlIGZvciBTRElPIGZ1enppbmcgb3IgaWYgYHJ0dzg4YCBpcyBhbHJlYWR5IHRhcmdldGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM4OjU2LjEyMjIwMDQ0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgzMDEyMzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM4OjU2LjQwMDUxMjk2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDYyMTQ3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgU3l6a2FsbGVyJ3MgU0RJTyBGdXp6aW5nIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgaXMgYSB2aWFibGUgdG9vbCBmb3IgZnV6emluZyBTRElPLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgY292ZXJhZ2UuIERvZXMgaXQgaGF2ZSBhbnkgZXhpc3RpbmcgU0RJTyBzdXBwb3J0IG1vZHVsZXM/IElmIG5vdCwgd2hhdCdzIHRoZSBsZXZlbCBvZiBlZmZvcnQgcmVxdWlyZWQgdG8gYWRkIGl0PyBJIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFNESU8gcHJvdG9jb2wgaXRzZWxmLiBBcmUgdGhlcmUgc3BlY2lmaWMgYXNwZWN0cyBsaWtlIHRoZSBDTUQgYW5kIERBVEEgbGluZXMsIGludGVycnVwdCBoYW5kbGluZywgb3IgdGhlIHZhcmlvdXMgU0RJTyByZWdpc3RlcnMgdGhhdCB3aWxsIHJlcXVpcmUgZm9jdXNlZCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmc/IEFuZCB3aGF0IGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBEb2VzIHN5emthbGxlciBoYXZlIGdvb2Qgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgU0RJTyBsaWtlIHRoZSBCcm9hZGNvbSBvciBRdWFsY29tbSBjaGlwcz9cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBraW5kcyBvZiBpbnB1dHMgdGhhdCB3b3VsZCBiZSBlZmZlY3RpdmUuIFdoYXQgYXJlIHRoZSBrZXkgYXR0YWNrIHN1cmZhY2VzIHdpdGhpbiB0aGUgU0RJTyBkcml2ZXI/IFNlbmRpbmcgbWFsZm9ybWVkIGNvbW1hbmRzPyBVbmV4cGVjdGVkIGRhdGEgc2l6ZXM/IE92ZXJmbG93aW5nIGJ1ZmZlcnM/IEludGVycnVwdCBzdG9ybXM/IFRoZSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgaGF2ZSB0byBiZSB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzIEkgd2FudCB0byB1bmNvdmVyLiBJJ2xsIG5lZWQgdG8gY3JhZnQgYSBwbGFuIHRvIGNyZWF0ZSBlZmZlY3RpdmUgdGVzdCBjYXNlcywgYW5kIGRldGVybWluZSBob3cgdG8gdmFsaWRhdGUvYXNzZXNzIHRoZSBzdGFiaWxpdHkgYW5kIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIGZ1enppbmcuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGUgcHJhY3RpY2FsaXRpZXMuIEhvdyBlYXN5IGlzIGl0IHRvIGludGVncmF0ZSBTRElPIGZ1enppbmcgaW50byBteSBjdXJyZW50IHNldHVwPyBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIHdpbGwgSSBuZWVkIHRvIGNvbGxlY3QgdXNlZnVsIHJlc3VsdHMsIGFuZCBkZXRlY3QgY3Jhc2hlcywgaGFuZ3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEnigJltIHRoaW5raW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBrZXJuZWwgcGFuaWNzLCBwcmltYXJpbHkuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcG90ZW50aWFsIHBheW9mZiBhZ2FpbnN0IHRoZSBkZXZlbG9wbWVudCB0aW1lIHJlcXVpcmVkLiBHaXZlbiBteSBleHBlcnRpc2UsIG15IGZvY3VzIGlzIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZW5kZWF2b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MDEuNDA2NzMwMDM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzAwMTA0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV6elwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21tYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjAxLjU2OTczOTg1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDkwMTA3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIGEgVmlydHVhbCBTRElPIEhvc3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBidXNpbmVzcy4gQmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBpbiBvcmRlci4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZnVuZGFtZW50YWwgc2V0dXAgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhlcmUgZXZlbiBhIHZpcnR1YWwgU0RJTyBob3N0IGNvbnRyb2xsZXIgcHJlc2VudD9cIiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyB3aXRob3V0IGl0LCB0aGUgcmVzdCBvZiBteSBpbnZlc3RpZ2F0aW9uIGlzIHBvaW50bGVzcy4gSXQgZGljdGF0ZXMgdGhlIGVudGlyZSBhcHByb2FjaC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZXhpc3RlbmNlIGJlZm9yZSBJIGV2ZW4gY29uc2lkZXIgd2hhdCB0YXNrcyB0aGlzIGNvbnRyb2xsZXIgbWF5IGJlIHBlcmZvcm1pbmcuIFdlJ2xsIHN0YXJ0IHdpdGggdmVyaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjA1LjkxODc1MzQ3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NTk3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21tYy9ob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE4NDkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZz02NTk9Y29uZmlnIE1NQ19NVlNESU9cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWc6NjY5OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWctNjcwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXFx0Kz0gdGlmbV9zZC5vXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTU1DX01WU0RJTylcXHQrPSBtdnNkaW8ub1xcbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUtMzYtb2JqLSQoQ09ORklHX01NQ19EQVZJTkNJKSAgICAgICArPSBkYXZpbmNpX21tYy5vXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcXHQrPSBtZXNvbi1teC1zZGhjLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RJTylcXHQrPSBtZXNvbi1teC1zZGlvLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19NTUNfTU9YQVJUKVxcdCs9IG1veGFydC1tbWMub1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL2hvc3QuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjMwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzEtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg3LSAqIEBzZGNfcmVnOiBWYWx1ZSBvZiBTRENSIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIHVzaW5nIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4OS0gKiBAbXJxOiBtbWNfcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIG9yIHdhaXRpbmcgdG8gYmVcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTQwNS1cXHR1MzJcXHRcXHRcXHRzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6NDA2OlxcdHUzMlxcdFxcdFxcdHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0xNTQ1PXN0YXRpYyBpbnQgYXRtY2lfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTU4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU1OTpzdGF0aWMgdm9pZCBhdG1jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2NC1cXHRpZiAoZW5hYmxlKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NTpcXHRcXHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTY2LVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1Njc6XFx0XFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cXHUwMDNlc2Rpb19pcnEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2OC19XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTE1NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXRtY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVxcdC5nZXRfY2RcXHRcXHQ9IGF0bWNpX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NzU6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGF0bWNpX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjAxMT1zdGF0aWMgdm9pZCBhdG1jaV93cml0ZV9kYXRhX3BpbyhzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDc4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA3OTpzdGF0aWMgdm9pZCBhdG1jaV9zZGlvX2ludGVycnVwdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCB1MzIgc3RhdHVzKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwODQtXFx0XFx0c3RydWN0IGF0bWVsX21jaV9zbG90ICpzbG90ID0gaG9zdC1cXHUwMDNlc2xvdFtpXTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XFx0XFx0aWYgKHNsb3QgXFx1MDAyNlxcdTAwMjYgKHN0YXR1cyBcXHUwMDI2IHNsb3QtXFx1MDAzZXNkaW9faXJxKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA4NjpcXHRcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKHNsb3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjA5Mj1zdGF0aWMgaXJxcmV0dXJuX3QgYXRtY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cXHRcXHRpZiAocGVuZGluZyBcXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMTQ6XFx0XFx0XFx0YXRtY2lfc2Rpb19pbnRlcnJ1cHQoaG9zdCwgc3RhdHVzKTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMTUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIyMzY9c3RhdGljIGludCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzctXFx0XFx0c3RydWN0IG1jaV9zbG90X3BkYXRhICpzbG90X2RhdGEsIHVuc2lnbmVkIGludCBpZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMzg6XFx0XFx0dTMyIHNkY19yZWcsIHUzMiBzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzkte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU0LVxcdHNsb3QtXFx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjI1NTpcXHRzbG90LVxcdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI1Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cXHRtbWMtXFx1MDAzZW9jcl9hdmFpbFxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjY4OlxcdGlmIChzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXFx0XFx0bW1jLVxcdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz03Nzg9c3RhdGljIGlycXJldHVybl90IGF1MXhtbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc4OC1cXHRpZiAoc3RhdHVzIFxcdTAwMjYgU0RfU1RBVFVTX1NJKVxcdC8qIFNESU8gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYzo3ODk6XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkwNj1zdGF0aWMgdm9pZCBhdTF4bW1jX2RiZG1hX3NodXRkb3duKHN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MTQtXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTE1OnN0YXRpYyB2b2lkIGF1MXhtbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW4pXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdTF4bW1jX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkyOS1cXHQuZ2V0X2NkXFx0XFx0PSBhdTF4bW1jX2NhcmRfaW5zZXJ0ZWQsXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTMwOlxcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MzEtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzo5OiAqIFRoZSBzZGhjaSBjb250cm9sbGVyIHN1cHBvcnRzIGJvdGggc2RjYXJkIGFuZCBzZGlvLiAgVGhlIHNkaG9zdFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEwLSAqIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlIHNkY2FyZCBvbmx5LCBidXQgaGFzIGJldHRlciBwZXJmb3JtYW5jZS5cXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEyLSAqIHRoZSBzZGhvc3QgY29udHJvbGxlciBhbGxvd3MgdG8gdXNlIHRoZSBzZGhjaSBjb250cm9sbGVyIGZvciB3aWZpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzMtXFx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxNzQ6XFx0aW50IG1tY19pcnEsIHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXFx0dW5zaWduZWQgY2hhciBidXNfbW9kZTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXFx0Ym9vbCBkb19kbWE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE4ODpcXHRib29sIHNkaW9faW50O1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODktXFx0Ym9vbCBhY3RpdmVfcmVxdWVzdDtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz03NTY9bW1jX2RhdmluY2lfeGZlcl9kb25lKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVxcdFxcdCAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XFx0XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faW50IFxcdTAwMjZcXHUwMDI2ICEocmVhZGwoaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT1NUMCkgXFx1MDAyNlxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjctXFx0XFx0XFx0XFx0XFx0U0RJT1NUMF9EQVQxX0hJKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjgtXFx0XFx0XFx0d3JpdGVsKFNESU9JU1RfSU9JTlQsIGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JU1QpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3Njk6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NzAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTgzMz1kYXZpbmNpX2Fib3J0X2RhdGEoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDAtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg0MTpzdGF0aWMgaXJxcmV0dXJuX3QgbW1jX2RhdmluY2lfc2Rpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1MC1cXHRcXHR3cml0ZWwoc3RhdHVzIHwgU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg1MTpcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI0LVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cXHRcXHRcXHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzI6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XFx0XFx0XFx0aG9zdC1cXHUwMDNlc2Rpb19pbnQgPSB0cnVlO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM1LVxcdFxcdFxcdHdyaXRlbChyZWFkbChob3N0LVxcdTAwM2ViYXNlICsgREFWSU5DSV9TRElPSUVOKSB8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzOC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5OlxcdFxcdGhvc3QtXFx1MDAzZXNkaW9faW50ID0gZmFsc2U7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEwNDAtXFx0XFx0d3JpdGVsKHJlYWRsKGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JRU4pIFxcdTAwMjYgflNESU9JRU5fSU9JTlRFTixcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDQ5LVxcdC5nZXRfcm9cXHRcXHQ9IG1tY19kYXZpbmNpX2dldF9ybyxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcXHQuZW5hYmxlX3NkaW9faXJxID0gbW1jX2RhdmluY2lfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDUxLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTE4ND1zdGF0aWMgaW50IGRhdmluY2lfbW1jc2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVxcdGhvc3QtXFx1MDAzZW1tY19pcnEgPSBpcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEzMDEtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faXJxIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTMwMzpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGhvc3QtXFx1MDAzZXNkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzA0OlxcdFxcdFxcdFxcdCAgICAgICBtbWNfZGF2aW5jaV9zZGlvX2lycSwgMCxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cXHRcXHRcXHRcXHQgICAgICAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDMtXFx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYzo1MDQ6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSA4O1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTA1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkaW8uaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTE0ODA9c3RhdGljIHZvaWQgZHdfbWNpX2h3X3Jlc2V0KHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTUxMzpzdGF0aWMgdm9pZCBkd19tY2lfcHJlcGFyZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBib29sIHByZXBhcmUpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTE0LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU0MC1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NDE6c3RhdGljIHZvaWQgX19kd19tY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1MC1cXHRpZiAoZW5iKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MTpcXHRcXHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTUyLVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTM6XFx0XFx0aW50X21hc2sgXFx1MDAyNj0gflNETU1DX0lOVF9TRElPKGhvc3QtXFx1MDAzZXNkaW9faXJxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXFx0bWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLCBpbnRfbWFzayk7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTU5OnN0YXRpYyB2b2lkIGR3X21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2Mi1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjM6XFx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjQ6XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIGVuYik7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTcyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3NC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTc3OlxcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0xNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGR3X21jaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2NzctXFx0LmNhcmRfaHdfcmVzZXQgICAgICAgICAgPSBkd19tY2lfaHdfcmVzZXQsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4OlxcdC5lbmFibGVfc2Rpb19pcnFcXHQ9IGR3X21jaV9lbmFibGVfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5OlxcdC5hY2tfc2Rpb19pcnFcXHRcXHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNjgwLVxcdC5leGVjdXRlX3R1bmluZ1xcdFxcdD0gZHdfbWNpX2V4ZWN1dGVfdHVuaW5nLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc1Ny1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XFx0XFx0aWYgKHBlbmRpbmcgXFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpIHtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTktXFx0XFx0XFx0bWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLFxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcXHRcXHRcXHRcXHQgICBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcXHRcXHRcXHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNzYyOlxcdFxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTI3OTQ9c3RhdGljIGludCBkd19tY2lfaW5pdF9ob3N0X2NhcHMoc3RydWN0IGR3X21jaSAqaG9zdClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI4MjY6XFx0LyogUHJvY2VzcyBTRElPIElSUXMgdGhyb3VnaCB0aGUgc2Rpb19pcnFfd29yay4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXFx0aWYgKG1tYy1cXHUwMDNlY2FwcyBcXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTM0NDM9aW50IGR3X21jaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTM0OTQtXFx0LyogUmUtZW5hYmxlIFNESU8gaW50ZXJydXB0cy4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XFx0aWYgKHNkaW9faXJxX2NsYWltZWQoaG9zdC1cXHUwMDNlbW1jKSlcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XFx0XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9NTI9c3RydWN0IGR3X21jaV9kbWFfc2xhdmUge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0xMjEtICogQGlycTogVGhlIGlycSB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gcmVxdWVzdF9pcnEuXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoxMjI6ICogQHNkaW9faXJxOiBTRElPIGludGVycnVwdCBiaXQgaW4gaW50ZXJydXB0IHJlZ2lzdGVycy5cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9MTYxPXN0cnVjdCBkd19tY2kge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzMtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoyMzQ6XFx0aW50XFx0XFx0XFx0c2Rpb19pcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NTktXFx0XFx0ano0NzQwX21tY193cml0ZV9pcnFfcmVnKGhvc3QsIEpaX01NQ19JUlFfU0RJTyk7XFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6ODYwOlxcdFxcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cXHUwMDNlbW1jKTtcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXFx0XFx0aXJxX3JlZyBcXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM9OTQwPXN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTk5NC1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzo5OTU6c3RhdGljIHZvaWQgano0NzQwX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTEwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgano0NzQwX21tY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI0LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzoxMDI1OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI2LVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBqejQ3NDBfdm9sdGFnZV9zd2l0Y2gsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTQxMz1zdGF0aWMgaXJxcmV0dXJuX3QgbG9vbmdzb24yX21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MjgtXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6NDI5OlxcdFxcdHNkaW9fc2lnbmFsX2lycShtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQzMC1cXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU4OC1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTkwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTY6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk3LXtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XFx0bG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTktfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGxvb25nc29uMl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MDY6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGxvb25nc29uMl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcXHQuYWNrX3NkaW9faXJxXFx0PSBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTYxNz1zdGF0aWMgaW50IGxvb25nc29uMl9yZW9yZGVyX2NtZF9saXN0W10gPSB7IFNEX0FQUF9TRU5EX1NDUiwgU0RfQVBQX1NFTkRfTlVNX1dSX0JMS1MsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MjItICogcmVzcG9uc2UgZGF0YXMgaGFzIGRpZmZlcmVudCBieXRlIG9yZGVyIHdpdGggdXN1YWwgZGF0YSBwYWNrZXRzLlxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYyMzogKiBIb3dldmVyIHNkaW8gY29udHJvbGxlciB3aWxsIHNlbmQgdGhlc2UgZGF0YXMgaW4gdXN1YWwgZGF0YSBmb3JtYXQsXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9OTQwPXN0YXRpYyBpbnQgbG9vbmdzb24yX21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTczLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjk3NDpcXHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTk3NS1cXHRpZiAobW1jLVxcdTAwM2VjYXBzIFxcdTAwMjYgTU1DX0NBUF9TRElPX0lSUSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtNTMtI2RlZmluZSAgIENMS19BTFdBWVNfT04oaClcXHRcXHQoaC1cXHUwMDNlZGF0YS1cXHUwMDNlYWx3YXlzX29uKVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVxcdFxcdChoLVxcdTAwM2VkYXRhLVxcdTAwM2VpcnFfc2Rpb19zbGVlcClcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTU1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzY9c3RydWN0IG1lc29uX21tY19kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVxcdHVuc2lnbmVkIGludCBhZGp1c3Q7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxNDE6XFx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQyLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIwLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTk1Ni1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU3OlxcdFxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMsIDApO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU4OlxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEwOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTEte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTE2OlxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIGVuYWJsZSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjEte1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEyMjpcXHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTMzLVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTM0OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcXHQuYWNrX3NkaW9faXJxXFx0PSBtZXNvbl9tbWNfYWNrX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fbW1jX2RhdGEgbWVzb25fZ3hfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxMy1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMTQ6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjJfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzE1LX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZXNvbl9tbWNfZGF0YSBtZXNvbl9heGdfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMjI6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzIzLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM9MTMyPXN0YXRpYyB2b2lkIG1lc29uX214X3NkaGNfc3RhcnRfY21kKHN0cnVjdCBtbWNfaG9zdCAqbW1jLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cXHRcXHQgKiBkb3dubG9hZCBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGZvciBhIEJDTTQzMzYyLzEgY2FyZC5cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlxcdFxcdCAqIFdpdGhvdXQgdGhpcyBzZGlvX21lbWNweV90b2lvKCkgKHdpdGggYSBzaXplIG9mIDIxOTU1N1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXFx0XFx0ICogYnl0ZXMpIHRpbWVzIG91dCBpZiBNRVNPTl9TREhDX01JU0NfTUFOVUFMX1NUT1AgaXMgbm90IHNldC5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTItLypcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzozOiAqIG1lc29uLW14LXNkaW8uYyAtIE1lc29uNiwgTWVzb244IGFuZCBNZXNvbjhiIFNESU8vTU1DIEhvc3QgQ29udHJvbGxlclxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvbW1jLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMC17XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NjMxOlxcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02MzItXFx0XFx0LnJlZ19iaXRzID0gOCxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTY2OC1cXHRob3N0LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYmFzZSxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo2Njk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVzb25fbXhfc2Rpb19yZWdtYXBfY29uZmlnKTtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NzAtXFx0aWYgKElTX0VSUihob3N0LVxcdTAwM2VyZWdtYXApKSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzQ5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjgtc2Rpb1xcXCIsIH0sXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzUwOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjhiLXNkaW9cXFwiLCB9LFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNzU4LVxcdC5kcml2ZXIgID0ge1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1OTpcXHRcXHQubmFtZSA9IFxcXCJtZXNvbi1teC1zZGlvXFxcIixcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXFx0XFx0LnByb2JlX3R5cGUgPSBQUk9CRV9QUkVGRVJfQVNZTkNIUk9OT1VTLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzMtICpcXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYzozNDogKiAtIEZvciBub3csIHdlIHdvbid0IHRyeSB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIHJlYWwgbW1jL3NkL3NkaW9cXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zNS0gKiAgIGNvbnRyb2xsZXIsIGFsdGhvdWdoIHNvbWUgb2YgdGhlbSBkbyBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgZm9yXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMTE9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91MzAwID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcXHQuc3Rfc2Rpb1xcdFxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjQtXFx0LnB3cnJlZ19wb3dlcnVwXFx0XFx0PSBNQ0lfUFdSX09OLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTM2PXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfbm9tYWRpayA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cXHQuZGF0YWN0cmxfYmxvY2tzelxcdD0gMTEsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTQ5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3Ni1cXHQuZG1hX3Bvd2VyX29mXzJcXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjExLVxcdC5kbWFfcG93ZXJfb2ZfMlxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yMTQtXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjQ0LVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDU6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI0NjpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI1Nj1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjcyLVxcdC5kYXRhY3RybF9hbnlfYmxvY2tzelxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzM6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NC1cXHQuc3RtMzJfaWRtYWJzaXplX21hc2tcXHQ9IEdFTk1BU0soMTIsIDUpLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NS1cXHQuc3RtMzJfaWRtYWJzaXplX2FsaWduXFx0PSBCSVQoNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6Mjc2OlxcdC5zdXBwb3J0c19zZGlvX2lycVxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzctXFx0LmJ1c3lfdGltZW91dFxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDAtXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMwMTpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAyLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAzLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg1KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDQ6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwNS1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTMxMz1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNiksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg2KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTQyNT1zdGF0aWMgdm9pZCBtbWNpX3dyaXRlX2RhdGFjdHJscmVnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHUzMiBkYXRhY3RybClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTQyOC1cXHRkYXRhY3RybCB8PSBob3N0LVxcdTAwM2VkYXRhY3RybF9yZWcgXFx1MDAyNiAoaG9zdC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjQyOTpcXHRcXHRcXHRcXHRcXHQgIGhvc3QtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWRhdGFjdHJsX21hc2tfc2Rpbyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTIzNj1zdGF0aWMgdm9pZCBtbWNpX3N0YXJ0X2RhdGEoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2MS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjYyOlxcdGlmIChob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQgXFx1MDAyNlxcdTAwMjYgbW1jX2NhcmRfc2Rpbyhob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQpKSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2My1cXHRcXHR1MzIgY2xrO1xcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNjQtXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2NTpcXHRcXHRkYXRhY3RybCB8PSB2YXJpYW50LVxcdTAwM2VkYXRhY3RybF9tYXNrX3NkaW87XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNzItXFx0XFx0ICovXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI3MzpcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNlc3Rfc2RpbyBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cXHRcXHQgICAgKGhvc3QtXFx1MDAzZXNpemUgXFx1MDAzYyA4IHx8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc2OC1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc3MC17XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MDYuMDM5NzE3OTU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzMTMzMTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNESU8gRHJpdmVyIGluIFFFTVUgYW5kIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHJ0dzg4YCBkcml2ZXIsIGFuZCBpdCdzIGZvciBhIFJlYWx0ZWsgODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYW4gU0RJTyBkZXZpY2UuIFFFTVUgc3VwcG9ydHMgdmFyaW91cyBTRElPIGhvc3QgY29udHJvbGxlcnMg4oCTIHNkaGNpLCBiY20yODM1X3NkaG9zdCwgYW5kIHRoZSBsaWtlIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgZG9lcyBRRU1VICphY3R1YWxseSogZW11bGF0ZSB0aGUgUmVhbHRlayA4NzIzQlMgaXRzZWxmPyBObywgdGhhdCdzIG5vdCBpdHMgZ2VuZXJhbCBwdXJwb3NlLlxuXG5TbywgaWYgaXQncyBTRElPLCBRRU1VIGNhbiBkbyBTRCBjYXJkcyBpbiBhIGxpbWl0ZWQgd2F5LCBidXQgYW4gU0RJTyBXaS1GaSBjYXJkPyBJIGRvbid0IHRoaW5rIHNvLCB1bmxlc3MgdGhlcmUncyBzcGVjaWZpYyBlbXVsYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBzb21lIG9ic2N1cmUgYHNkaW9fZHVtbXlgIGtlcm5lbCBtb2R1bGUgb3Igc29tZXRoaW5nLiBObywgbm90aGluZyBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaW4gdGVybXMgb2YgYSBnZW5lcmFsIFNESU8gZW11bGF0aW9uIGxheWVyIGluIHRoZSBrZXJuZWwuIFdhaXQsIHRoZXJlJ3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCB0aGF0J3MgYXQgdGhlIG1hYzgwMjExIGxheWVyLCBub3QgdGhlIFNESU8gYnVzIGxldmVsLiBJIGtub3cgdGhhdCB0aGUgYHJ0dzg4YCBkcml2ZXIgaXMgZGVzaWduZWQgdG8gYmluZCB0byBhbiBTRElPIGRldmljZSB3aXRoIGEgc3BlY2lmaWMgdmVuZG9yL2RldmljZSBJRCBjb21iaW5hdGlvbi5cblxuSWYgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSwgZG9lc24ndCBwcmVzZW50IGEgdmlydHVhbCBTRElPIFdpLUZpIGNhcmQgd2l0aCB0aG9zZSBwYXJ0aWN1bGFyIElEcywgdGhlIGRyaXZlcidzIGBwcm9iZWAgZnVuY3Rpb24gd2lsbCAqbmV2ZXIqIGJlIGNhbGxlZC4gV2hpY2ggbWVhbnMgbm9uZSBvZiB0aGlzIGNvZGUgSSdtIGxvb2tpbmcgYXQgd291bGQgYmUgcmVhY2hhYmxlLiBJdCdzIGEgZnVuZGFtZW50YWwgaXNzdWUgb2YgaG93IHRoZSBoYXJkd2FyZSBlbXVsYXRpb24gaXMgc2V0IHVwLlxuXG5Ob3csIGxldCdzIHNlZSBpZiBzeXprYWxsZXIgY2FuIGhlbHAgbWUgd2l0aCB0aGlzIHByb2JsZW0uIEkgaGF2ZSBzZWVuIHRoYXQgc3l6a2FsbGVyIGhhcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGRldmljZXMgYW5kIGBzeXpfdmhjaWAgZm9yIEJsdWV0b290aCwgYW5kIGBzeXpfZ2VuZXRsaW5rYCBmb3IgbmV0bGluay4gVGhlIHF1ZXN0aW9uIGlzOiBEb2VzIHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBzaW1pbGFyIGZvciBTRElPPyBEb2VzIGl0IGhhdmUgYSBgc3l6X3NkaW9fY29ubmVjdGAgY2FsbCBvciBzb21ldGhpbmcgSSBjYW4gdXNlPyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTM1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjEzLjU3MTA1MzQzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzc3MTc3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X3NkaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozOToxOC4xODQ4NDI2ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NjI0ODY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJUVzg4IFNESU8gRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gZ2V0IGF0IHRoZSBgcnR3ODhgIFNESU8gZHJpdmVyIHdpdGggU3l6a2FsbGVyLiBGaXJzdCBvZmYsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWZlcmVuY2VzIHRvIGBzeXpfc2Rpb2AgcHNldWRvLXN5c2NhbGxzLCB3aGljaCBpcyBleHBlY3RlZC4gVGhhdCBwYXRoIGlzIHByb2JhYmx5IGEgZGVhZCBlbmQuIE5leHQsIEknbSB0aGlua2luZyBhYm91dCBgc3l6XzgwMjExYC4gU3l6a2FsbGVyICpjYW4qIGhpdCA4MDIuMTEgd2l0aCBmcmFtZSBpbmplY3Rpb24gdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gLCBidXQgYG1hYzgwMjExX2h3c2ltYCBpcyBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgZHJpdmVyLCBub3QgcmVsYXRlZCB0byBgcnR3ODhgLiBJdCBkb2Vzbid0IHVzZSBgcnR3ODhgLlxuXG5BbHJpZ2h0LCB0aGVuIEkgcmVtZW1iZXJlZCBTeXprYWxsZXIgY2FuIGFsc28gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5IGFyZSBRRU1VIGVtdWxhdGVkLiBCdXQgdGhlIHByb2JsZW0gaXMsIGBydHc4OGAgaXMgYW4gU0RJTyBkZXZpY2UuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgZG9lcyBRRU1VIG9mZmVyIGFueSBTRElPIGRldmljZSBlbXVsYXRpb24gdGhhdCBTeXprYWxsZXIgY291bGQgbGV2ZXJhZ2U/XG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgU3l6a2FsbGVyIGlzbid0IHNldCB1cCB0byBmdXp6IFNESU8gZHJpdmVycywgYmVjYXVzZSB0aGVyZSBpc24ndCBhIHJlYWRpbHkgYXZhaWxhYmxlIGR1bW15IGhvc3QgY29udHJvbGxlciBvciBTRElPIGRldmljZSBmdXp6ZXIgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gVGhlIGNvbW1vbiB3b3JrZmxvdyBpc24ndCB0aGVyZSBmb3IgU0RJTyBkZXZpY2VzLiBTbywgdG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgaWYgd2UgY2FuIGV2ZW4gZ2V0IGBydHc4OGAgdG8gcHJvYmUgaW4gdGhpcyBlbnZpcm9ubWVudCwgYXMgYSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MjMuODgxMDk1MjQ1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1NDQ5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnR3X3NkaW9fcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYz0yMT1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzY3NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cXHQuaWRfdGFibGUgPSBydHdfODcyM2NzX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2NzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYz0yNz1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzZHNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMjgtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jOjI5OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTIzLVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJic19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyY3NfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jOjI0OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE2Mzk9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNjUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE2NTI6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNjUzLVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNzI2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxNzI3OkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MjgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmg6MTg2OmludCBydHdfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg3LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozOToyNC4wMjM2NDU3NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1ODM0MTM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enphYmlsaXR5KipcblxuT2theSwgdGhlIHByb21wdCBpbnN0cnVjdHMgbWUgdG8gZmxhZyBwYXRjaGVzIGFzIHVuLWZ1enphYmxlIGlmIHRoZXkgdGFyZ2V0IGNvZGUgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBSZWFkaW5nIHRoaXMsIEkgc2VlIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIFJlYWx0ZWsgODcyM0JTIFNESU8gV2ktRmkgZHJpdmVyLiBBbmQgaW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgXCJObywgdGhpcyBpcyAqZGVmaW5pdGVseSogb2ZmLWxpbWl0cyBmb3Igc3RhbmRhcmQgZnV6emluZyBzZXR1cHMuXCIgU0RJTyBkZXZpY2VzLCBhcyBJIGtub3csIGFyZW4ndCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmUncyBubyB3YXkgSSBjYW4gc2ltdWxhdGUgdGhhdCBraW5kIG9mIGhhcmR3YXJlIG9uIEdDRSBvciBhIHJlZ3VsYXIgUUVNVSBpbnN0YW5jZS4gU28sIHRoZSBjaGFuY2VzIG9mIGV2ZW4gaGl0dGluZyB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIGxldCBhbG9uZSBleGVjdXRpbmcgYW55IG9mIGl0cyBjb2RlLCBpcyB6ZXJvLlxuXG5CdXQsIGJlaW5nIHRob3JvdWdoLCBJIHNob3VsZCAqYWx3YXlzKiBkb3VibGUtY2hlY2sgZm9yIGVkZ2UgY2FzZXMuIElzIHRoZXJlICphbnkqIHZpcnR1YWwgU0RJTyBkZXZpY2UgZnJhbWV3b3JrIGluIHRoZSBrZXJuZWwgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/IEkga25vdyBhYm91dCBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSwgd2hpY2ggaXMgc29mdHdhcmUtYmFzZWQgYnV0IG5vdCBTRElPLCBhbmQgYGR1bW15X2hjZGAgYW5kIGB2aGNpYCBmb3IgVVNCIGFuZCBCbHVldG9vdGgsIHJlc3BlY3RpdmVseS4gVGhlc2UgYXJlIGdvb2QgZXhhbXBsZXMgb2YgaG93IHRvIHNpbXVsYXRlIGRyaXZlcnMsIGFsbG93aW5nIGZ1enppbmcgaW4gdGhlc2UgY2FzZXMuIEhvd2V2ZXIsIGFmdGVyIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgdGhlcmUgaXMgbm8gYGR1bW15X3NkaW9gIG9yIGBzZGlvX2Z1enplcmAgZXF1aXZhbGVudCBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGlzIHN0cm9uZ2x5IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2g6IFNESU8gZHJpdmVycyBjYW4ndCBiZSByZWFkaWx5IGZ1enplZCBieSBzeXprYWxsZXIgb3IgYSBzaW1pbGFyIHRvb2wuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciAqbmVlZHMqIGEgcGh5c2ljYWwgU0RJTyBjYXJkIHRvIHJ1biwgYW5kIFFFTVUgZG9lcyBub3QgZW11bGF0ZSB0aGVtLCB0aGlzIHNob3VsZCBiZSBtYXJrZWQgYXMgdW4tZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTk0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjMxLjU4MTk5MTEwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYxNzY2OTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZGlvX2FkZF9mdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21tYy9jb3JlL3NkaW8uYz0xMjEyPWludCBtbWNfYXR0YWNoX3NkaW8oc3RydWN0IG1tY19ob3N0ICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvLmMtMTMwNC1cXHRmb3IgKGkgPSAwO2kgXFx1MDAzYyBmdW5jcztpKyspIHtcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW8uYzoxMzA1OlxcdFxcdGVyciA9IHNkaW9fYWRkX2Z1bmMoaG9zdC1cXHUwMDNlY2FyZC1cXHUwMDNlc2Rpb19mdW5jW2ldKTtcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW8uYy0xMzA2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM9MzgzPXN0YXRpYyB2b2lkIHNkaW9fc2V0X29mX25vZGUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYylcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zOTItICovXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jOjM5MzppbnQgc2Rpb19hZGRfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zOTQte1xcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTQxMS0gKiAoZXZlbnR1YWxseSkgZnJlZSBpdC5cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM6NDEyOiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGVycm9yIHBhdGhzIHdoZXJlIHNkaW9fYWRkX2Z1bmMoKSB3YXNcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtNDEzLSAqIG5ldmVyIGV4ZWN1dGVkIChiZWNhdXNlIGEgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbiBlYXJsaWVyIHBvaW50KS5cXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaD0xMz1zdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2FsbG9jX2Z1bmMoc3RydWN0IG1tY19jYXJkICpjYXJkKTtcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmg6MTQ6aW50IHNkaW9fYWRkX2Z1bmMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7XFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5oLTE1LXZvaWQgc2Rpb19yZW1vdmVfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MzUuMTk5NjY1NDgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTQ5NTQ0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBTRElPIERyaXZlciBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyB0aGUgYHJ0dzg4YCBkcml2ZXIsIHdoaWNoIGlzIFJlYWx0ZWsncyBkcml2ZXIgZm9yIHRoZWlyIFdpLUZpIGNoaXBzLiBTcGVjaWZpY2FsbHksIHRoaXMgcGFydGljdWxhciBwYXRjaCBhcHBlYXJzIHRvIGJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgU0RJTyBpcyBhbHdheXMgYSBoZWFkYWNoZSB0byBmdXp6LlxuXG5UaGUgY29yZSBpc3N1ZSBpcywgYXMgSSBzdXNwZWN0ZWQsIHRoaXMgcGF0Y2ggaXMgaW1wb3NzaWJsZSB0byByZWxpYWJseSBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgU0RJTywgd2hpY2ggbWVhbnMgd2UgbmVlZCBhIHJlYWwgcGh5c2ljYWwgU0RJTyBXaS1GaSBjYXJkIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtLiBRRU1VIGFuZCBvdGhlciB2aXJ0dWFsaXphdGlvbiBzb2x1dGlvbnMgYXJlbid0IGdvaW5nIHRvIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhY2N1cmF0ZWx5LiBUaGVyZSdzIG5vIGVxdWl2YWxlbnQgb2YgYSBgZHVtbXlfaGNkYCBmb3IgU0RJTyB0byBzaW11bGF0ZSB0aGUgZGV2aWNlIGFuZCBhbGxvdyB0ZXN0aW5nIGluIGEgc29mdHdhcmUtb25seSBtYW5uZXIsIGF0IGxlYXN0LCBub3QgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gTm8gZWFzeSB3YXkgdG8gZ2VuZXJhdGUgU0RJTyB0cmFmZmljLCBhbmQgdGhlcmVmb3JlLCBubyB3YXkgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGNvZGUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIG9mIHRoaXMsIG15IGFzc2Vzc21lbnQgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcgaW4gdGhlIGN1cnJlbnQgc2V0dXAuIEl0J3MgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvLiBXZSdkIG5lZWQgc2lnbmlmaWNhbnQgaGFyZHdhcmUgaW52ZXN0bWVudCwgb3IgYSBub3ZlbCBTRElPIGZ1enplciwgdG8gZXZlbiBiZWdpbiB0byBtYWtlIHByb2dyZXNzIG9uIGZ1enppbmcgdGhlIGxvZ2ljIGFkZGVkIGhlcmUuIEFuZCwgZXZlbiB0aGVuLCB0aGlzIGlzIGEgdmVyeSBzcGVjaWZpYyBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODIwLCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozOTo0MS40NTQ2MjM4MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIGNoaXAuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgdG8gYmUgcHJlc2VudC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBkZXZpY2UgZnV6emVyIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIGNoaXAuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgdG8gYmUgcHJlc2VudC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBkZXZpY2UgZnV6emVyIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2t986[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 07:12:42 +0000 UTC FinishedAt: 2026-08-04 07:39:42 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NDBlYWVmMjc2YzY1YTE1NmM1YzdjMGI4ZjkzZGVmYmI1OGUyNjcyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNzozODo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuJiM0MztcdFJUV19DSElQX1RZUEVfODcyM0IsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFBLFxuIFx0UlRXX0NISVBfVFlQRV84ODEyQSxcbiBcdFJUV19DSElQX1RZUEVfODgxNEEsXG5AQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4mIzQzO1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwmIzM0O3plcm8gbGVuZ3RoIHBhY2tldFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMC4uZWQxYmVkOGVhMTQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuQEAgLTIwLDYgJiM0MzsyMCwxNyBAQFxuICNpbmNsdWRlIFwmIzM0O3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcdFx0XHQ1MFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4mIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbiYjNDM7ICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgJiM0Mzs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4mIzQzOyAqIGZyb20gdGhlIHNpbmdsZSB0aHJlYWRlZCBUWCB3b3JrIGFuZCwgZm9yIEgyQyBhbmQgcmVzZXJ2ZWQgcGFnZSB3cml0ZXMsXG4mIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MzsgKiBnaXZlcyB1cCwgd2hpY2ggYWxzbyBhYnNvcmJzIGEgbG9zdCB1cGRhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdTMyIGZyZWVfdHhwZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZykge1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbiYjNDM7XHRcdFx0ICAgcGdfdGJsLVx1MDAzZWxxX251bSAtIHBnX3RibC1cdTAwM2VucV9udW0gLSBwZ190YmwtXHUwMDNlZXhxX251bSAtXG4mIzQzO1x0XHRcdCAgIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZylcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdW0gb2YgdGhlIHF1ZXVlJiMzOTtzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpXG4mIzQzOyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXG4mIzQzOyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICYjNDM7IGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocXVldWUpIHtcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsO1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3c7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0gyQzpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WTzpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0XHRcdFx0ICAgIHNpemVfdCBjb3VudClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkO1xuIFxuLVx0aWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbiYjNDM7XHRcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4mIzQzO1x0XHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuJiM0MztcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiBcdFx0dTMyIGZyZWVfdHhwZztcbiBcbiBcdFx0ZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbkBAIC02MzIsNDQgJiM0Mzs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHU4IGZyZWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGFrZW47XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0aWYgKCFkZWRpY2F0ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuJiM0MztcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbiYjNDM7XHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xuJiM0MztcbiYjNDM7XHRwYWdlcyAtPSB0YWtlbjtcbiYjNDM7XHRpZiAocGFnZXMgXHUwMDI2XHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKSBcdTAwM2MgMClcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2VzO1xuJiM0MztcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbiYjNDM7XHRcdFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbiYjNDM7XHRcdHdyaXRlX3NpemUgPSB0eHNpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuO1xuIFxuLVx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuJiM0MztcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcbiYjNDM7XHRpZiAoIXR4YWRkcikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCBfX2Z1bmNfXywgcXVldWUpO1xuIFxuIFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcbi1cbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4tXG4tXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLCB0eHNpemUpO1xuLVxuJiM0MztcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4mIzQzO1x0aWYgKHJldCkge1xuIFx0XHRydHdfd2FybihydHdkZXYsXG4gXHRcdFx0IFwmIzM0O0ZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCYjMzQ7LFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4mIzQzO1x0XHRcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTtcbiYjNDM7XHR9XG4gXG4mIzQzO291dF90cmltOlxuJiM0MztcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbilcbiYjNDM7XHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgJiM0Mzs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuJiM0MztcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiAmIzQzOzg4OSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbiYjNDM7XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgJiM0Mzs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICYjNDM7OTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MTYgcmVzZXJ2ZWRfbnVtO1xuJiM0MztcdHUzMiBmcmVlX3R4cGc7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VscV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZW5xX251bSAmIzQzO1xuJiM0MztcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbiYjNDM7XHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuJiM0MztcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiYjNDM7XHR1MzIgY2xlYXI7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFx1MDAyNlxuJiM0MztcdFx0XHRSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1x0XHRpZiAoY2xlYXIpXG4mIzQzO1x0XHRcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRxdWV1ZV93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuJiM0MztcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcbiBcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcbiBcdHZhbCBcdTAwMjY9IDB4ZmZmODtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgJiM0MzsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4mIzQzO1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzO1x0ICogaGFuZGluZyB1cyBmcmFtZXMsIGJvdW5kaW5nIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBSZXN1bWVkIGZyb20gdGhlIFRYXG4mIzQzO1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA5NSw2ICYjNDM7MTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcbiYjNDM7XHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4mIzQzO1x0ICogYm90aCBkZWZpbmVkIGFuZCB1bm1hc2tlZC4gT3RoZXIgY2hpcHMga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRoaXNyIFx1MDAyNj0gcnR3c2Rpby1cdTAwM2VpcnFfbWFzayBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XG4gXG4gXHRydHdzZGlvLVx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xuQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuJiM0MzsvKlxuJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZVxuJiM0MzsgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4mIzQzOyAqIHRoZSBmcmFtZSBpcyBwdXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgcV9tYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuJiM0MztcdHFfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbiYjNDM7XHQgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7XG4mIzQzO1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzO1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0cnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuIFxuIFx0aWYgKCFydHdfZndfZmVhdHVyZV9jaGVjayhcdTAwMjZydHdkZXYtXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXG4gXHRcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgcGFnZSBzaG9ydGFnZSBpcyB0cmFuc2llbnQ6IGxlYXZlIHRoZVxuJiM0MztcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuJiM0MztcdFx0XHRcdCAqIG9mIHN0YWxsaW5nIHRoaXMgQUMgdW50aWwgc29tZXRoaW5nIGVsc2VcbiYjNDM7XHRcdFx0XHQgKiBraWNrcyB0aGUgd29ya2VyLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGlmIChydGw4NzIzYnMgXHUwMDI2XHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgUlRXX1NESU9fVFhfUkVUUllfREVMQVkpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5XG4mIzQzO1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbiYjNDM7XHRcdFx0ICogYmVoaW5kIGEgZGF0YSBiYWNrbG9nLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbiYjNDM7XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZ3b3JrX2RhdGEtXHUwMDNld29yaywgMCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTY0MSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHF1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIGNoaXAuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgdG8gYmUgcHJlc2VudC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBkZXZpY2UgZnV6emVyIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODQwZWFlZjI3NmM2NWExNTZjNWM3YzBiOGY5M2RlZmJiNThlMjY3MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDc6Mzg6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3N0YmM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwppbmRleCAwMWZkMjk5YWJiN2ZlLi5hOTM2MWVmNGI5M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpOwogCi0JLyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MiBhbmQKLQkgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC4KJiM0MzsJLyoKJiM0MzsJICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSAmbHQ7IDE0IG9yIHNpemUgJmd0OyA4MTkyCiYjNDM7CSAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LgogCSAqLwotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgJmFtcDsmYW1wOyBwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwKSB7CiYjNDM7CWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwpAQCAtMjAsNiAmIzQzOzIwLDE3IEBACiAjaW5jbHVkZSAmIzM0O3R4LmgmIzM0OwogCiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVMJCQk1MAomIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVMJCQkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW4KJiM0MzsgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLAomIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpcwomIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7ICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgICB1MzIgZnJlZV90eHBnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwKJiM0MzsJCSAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnKSB7CiYjNDM7CQlydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwkJcHVicV9udW0gPSBydHdkZXYtJmd0O2ZpZm8uYWNxX3BnX251bSAtIHBnX3RibC0mZ3Q7aHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2xxX251bSAtIHBnX3RibC0mZ3Q7bnFfbnVtIC0gcGdfdGJsLSZndDtleHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwomIzQzOwlpZiAoZnJlZV90eHBnKQomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86CiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpCiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGUKJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWUgJmd0OyAwID8gZnJlZSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAocXVldWUpIHsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfVkk6CiYjNDM7CQlyZXR1cm4gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQkU6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JLOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3c7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JDTjoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSDJDOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9ISTA6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZPOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKIAkJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7CiAKLQlpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJYXRvbWljX3QgKmRlZGljYXRlZDsKJiM0MzsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlpZiAoIWRlZGljYXRlZCkgewomIzQzOwkJCXJ0d193YXJuKHJ0d2RldiwgJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XG4mIzM0OywgcXVldWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7CiYjNDM7CQlwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdTggZnJlZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChhdG9taWNfYWRkX3VubGVzcygmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCAtMSwgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFJUV19TRElPX09RVF9USU1FT1VUX01TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTsKJiM0MzsJCWlmIChmcmVlKSB7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCBmcmVlIC0gMSk7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlhdG9taWNfdCAqZGVkaWNhdGVkOwomIzQzOwl1bnNpZ25lZCBpbnQgdGFrZW47CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpOwomIzQzOwlpZiAoIWRlZGljYXRlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7CiYjNDM7CXRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSAmZ3Q7IDAgPyBmcmVlIDogMCk7CiYjNDM7CWF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7CiYjNDM7CiYjNDM7CXBhZ2VzIC09IHRha2VuOwomIzQzOwlpZiAocGFnZXMgJmFtcDsmYW1wOyBhdG9taWNfc3ViX3JldHVybihwYWdlcywgJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YikgJmx0OyAwKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItJmd0O2xlbjsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2VzOwomIzQzOwlzaXplX3Qgd3JpdGVfc2l6ZTsKIAlib29sIGJ1c19jbGFpbTsKIAlzaXplX3QgdHhzaXplOwogCXUzMiB0eGFkZHI7CiAJaW50IHJldDsKIAotCXR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLSZndDtsZW4sIHF1ZXVlKTsKLQlpZiAoIXR4YWRkcikKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemUgJmd0OyBSVFdfU0RJT19CTE9DS19TSVpFID8KJiM0MzsJCQkgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBvcmlnX2xlbik7CiYjNDM7CQl3cml0ZV9zaXplID0gdHhzaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3cml0ZV9zaXplICZndDsgb3JpZ19sZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuOwogCi0JdHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgc2tiLSZndDtsZW4pOwomIzQzOwkJaWYgKHNrYl90YWlscm9vbShza2IpICZsdDsgcGFkZGluZykgewomIzQzOwkJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLAomIzQzOwkJCQkJICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSwKJiM0MzsJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwkJc2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTsKJiM0MzsJaWYgKCF0eGFkZHIpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwl9CiAKIAlyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBvdXRfdHJpbTsKJiM0MzsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItJmd0O2RhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSkKIAkJcnR3X3dhcm4ocnR3ZGV2LCAmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XG4mIzM0OywKIAkJCSBfX2Z1bmNfXywgcXVldWUpOwogCiAJYnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTsKLQogCWlmIChidXNfY2xhaW0pCiAJCXNkaW9fY2xhaW1faG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwotCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLCB0eHNpemUpOwotCiYjNDM7CXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCB0eGFkZHIsIHNrYi0mZ3Q7ZGF0YSwKJiM0MzsJCQkgICAgICAgd3JpdGVfc2l6ZSk7CiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jKTsKIAotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKIAkJcnR3X3dhcm4ocnR3ZGV2LAogCQkJICYjMzQ7RmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHgmIzM0OywKLQkJCSB0eHNpemUsIHR4YWRkcik7CiYjNDM7CQkJIHdyaXRlX3NpemUsIHR4YWRkcik7CiYjNDM7CX0gZWxzZSBpZiAocnRsODcyM2JzKSB7CiYjNDM7CQlwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpOwomIzQzOwl9CiAKJiM0MztvdXRfdHJpbToKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikKJiM0MzsJCXNrYl90cmltKHNrYiwgb3JpZ19sZW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3Nyw3ICYjNDM7ODc3LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7CiYjNDM7CWVsc2UKJiM0MzsJCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwKJiM0MzsJCQkJICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQpAQCAtNjg1LDYgJiM0Mzs4ODksNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAl1OCBzaXplLCB0aW1lb3V0OwogCiAJc3dpdGNoIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkKSB7CiYjNDM7CWNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODcwM0I6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOgogCWNhc2UgUlRXX0NISVBfVFlQRV84ODEyQToKQEAgLTcxMiw2ICYjNDM7OTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCSAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7CiAKIAlydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC03NDksOSAmIzQzOzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAgPSBydHdkZXYtJmd0O2NoaXA7CiYjNDM7CXN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gJmFtcDtydHdkZXYtJmd0O2ZpZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MTYgcmVzZXJ2ZWRfbnVtOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnIHx8ICFmaWZvLSZndDthY3FfcGdfbnVtKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXJlc2VydmVkX251bSA9IHBnX3RibC0mZ3Q7aHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bnFfbnVtICYjNDM7CiYjNDM7CQkgICAgICAgcGdfdGJsLSZndDtleHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7Z2FwcV9udW07CiYjNDM7CWlmIChmaWZvLSZndDthY3FfcGdfbnVtICZsdDs9IHJlc2VydmVkX251bSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHVicV9udW0gPSBmaWZvLSZndDthY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSwKJiM0MzsJCSAgICBCSVRfUlFQTl9ORShwZ190YmwtJmd0O25xX251bSwgcGdfdGJsLSZndDtleHFfbnVtKSk7CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sCiYjNDM7CQkgICAgQklUX1JRUE5fSExQKHBnX3RibC0mZ3Q7aHFfbnVtLCBwZ190YmwtJmd0O2xxX251bSwgcHVicV9udW0pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpICZhbXA7CiYjNDM7CQkJUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwkJaWYgKGNsZWFyKQomIzQzOwkJCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcXVldWVfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yayk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5CiYjNDM7CSAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LgomIzQzOwkgKi8KJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcikKQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAogCXZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTsKIAl2YWwgJmFtcDs9IDB4ZmZmODsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7CiAJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpOwogfQogCkBAIC05MzcsNiAmIzQzOzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJc2tiX3F1ZXVlX3RhaWwoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7CiAKJiM0MzsJLyoKJiM0MzsJICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0CiYjNDM7CSAqIHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wcwomIzQzOwkgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFgKJiM0MzsJICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBxdWV1ZSAmbHQ7IFJUV19UWF9RVUVVRV9CQ04gJmFtcDsmYW1wOwomIzQzOwkgICAgIXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZndDs9IFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUikgewomIzQzOwkJcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlOwomIzQzOwkJaWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LSZndDtodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTUsNiAmIzQzOzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpCiAJCXJ0d19zZGlvX3J4X2lzcihydHdkZXYpOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWQKJiM0MzsJICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZQomIzQzOwkgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJaGlzciAmYW1wOz0gcnR3c2Rpby0mZ3Q7aXJxX21hc2sgJmFtcDsgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7CiAKIAlydHdzZGlvLSZndDtpcnFfdGhyZWFkID0gTlVMTDsKQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAotCQkJCSAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiYjNDM7LyoKJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZQomIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2UKJiM0MzsgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgcV9tYXA7CiAJaW50IHJldDsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIDA7CiAKJiM0MzsJcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7CiAJaWYgKHJldCkgewogCQlza2JfcXVldWVfaGVhZCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAKIAlydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsgcXVldWUgJmx0OyBSVFdfVFhfUVVFVUVfQkNOICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDs9CiYjNDM7CSAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHsKJiM0MzsJCXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7CiYjNDM7CQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTsKJiM0MzsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsCiYjNDM7CQkJICAgICB3b3JrKTsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKLQlpbnQgbGltaXQsIHF1ZXVlOwomIzQzOwlpbnQgbGltaXQsIHF1ZXVlLCByZXQ7CiYjNDM7CWJvb2wgcnRsODcyM2JzOwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CiAJcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CXJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTsKIAogCWlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soJmFtcDtydHdkZXYtJmd0O2Z3LCBGV19GRUFUVVJFX1RYX1dBS0UpKQogCQlydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7CiAKIAlmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSAmZ3Q7PSAwOyBxdWV1ZS0tKSB7CiAJCWZvciAobGltaXQgPSAwOyBsaW1pdCAmbHQ7IDEwMDA7IGxpbWl0JiM0MzsmIzQzOykgewotCQkJcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlCiYjNDM7CQkJCSAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZAomIzQzOwkJCQkgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlCiYjNDM7CQkJCSAqIGtpY2tzIHRoZSB3b3JrZXIuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcmV0ID09IC1FQlVTWSkgewomIzQzOwkJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJCSAgICZhbXA7d29ya19kYXRhLSZndDt3b3JrLAomIzQzOwkJCQkJCQkgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7CiYjNDM7CQkJCQlyZXR1cm47CiYjNDM7CQkJCX0KJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5CiYjNDM7CQkJICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cAomIzQzOwkJCSAqIGJlaGluZCBhIGRhdGEgYmFja2xvZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHsKJiM0MzsJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJICAgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIDApOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQogCiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSkKIAkJCQlicmVhazsKQEAgLTEyOTQsMTQgJiM0MzsxNjE4LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtpXSk7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7CiYjNDM7CX0KIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIAlpZiAoIXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSkKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7cnR3ZGV2ID0gcnR3ZGV2OwotCUlOSVRfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzE1LDYgJiM0MzsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlpbnQgaTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tJmd0O3R4d3EpOwogCWtmcmVlKHJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKaW5kZXggNDU3ZThiMDIzODBlNS4uMmYxYjY3ZjRiYmM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAKIC8qIFNESU8gVHggQ29udHJvbCAqLwogI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMCkKJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRQlCSVQoNCkKIAogLypTRElPIHN0YXR1cyB0aW1lb3V0Ki8KICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVAkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMDIpCkBAIC03Nyw2ICYjNDM7NzgsMTQgQEAKIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi8KICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSCQkJQklUKDI4KQogI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEUJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSwkJXAomIzQzOwkoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpCiAKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi8KICNkZWZpbmUgUkVHX1NESU9fSENQV00JCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxOSkKQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQAogI2RlZmluZSBSRUdfU0RJT19PUVRfRlJFRV9QRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMUUpCiAvKiBGcmVlIFR4IEJ1ZmZlciBQYWdlICovCiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0hJR0gJCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX05PUk1BTAkJCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPVwkJCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19QVUIJCQlHRU5NQVNLKDMxLCAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTTEJCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMiAqLwpAQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7CiB9OwogCiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7CiB9OwogCkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8gewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxOwogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsJYm9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19oaWdoOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX25vcm1hbDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19sb3c7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfcHViOwomIzQzOwlhdG9taWNfdCB0eF9vcXRfZnJlZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggc2VyaWVzIHRhcmdldGluZyB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGBydHc4OGAgUmVhbHRlayB3aXJlbGVzcyBkcml2ZXIuIE15IGluaXRpYWwgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBgbWFpbi5oYCwgYHJ4LmNgLCBgc2Rpby5jYCwgYW5kIGBzZGlvLmhgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBhZGRpbmcgc3VwcG9ydCBmb3IgYFJUV19DSElQX1RZUEVfODcyM0JgLCBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIFNESU8gKGBydHdfaXNfODcyM2JzYCkuCgpEaWdnaW5nIGRlZXBlciwgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydHdfc2Rpb184NzIzYnNfKmAgYXJlIGludHJvZHVjZWQsIGhhbmRsaW5nIHRhc2tzIHN1Y2ggYXMgVFggcGFnZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBxdWV1ZSBoYW5kbGluZy4gTW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBmdW5jdGlvbnMsIGBydHdfc2Rpb193cml0ZV9wb3J0YCBhbmQgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLCBzdWdnZXN0IGNoaXAtc3BlY2lmaWMgbG9naWMgZm9yIHRoZSA4NzIzQlMgdmFyaWFudC4gVGhlIGFsdGVyYXRpb24gb2YgYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGEgYGRlbGF5ZWRfd29ya2AgaXMgYWxzbyBhIGtleSBjaGFuZ2UuIEZpbmFsbHksIGJhY2stcHJlc3N1cmUgbG9naWMgZm9yIG1hYzgwMjExIHF1ZXVlcyBzdWdnZXN0cyBmdXJ0aGVyIGludGVncmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgbmV0d29ya2luZyBzdGFjay4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBDYW4gdGhpcyBjb2RlIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50PyBUaGlzIGlzIHdoZXJlIG15IGV4cGVydGlzZSBjb21lcyBpbnRvIHBsYXkuIFRoZSBkcml2ZXIgaXMgYHJ0dzg4YCwgd2hpY2ggaXMgYSBSZWFsdGVrIHdpcmVsZXNzIGRyaXZlciwgYW5kIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzcGVjaWZpY2FsbHkgd2l0aGluIGBzZGlvLmNgLCBpbXBseWluZyBhbiBTRElPIGludGVyZmFjZS4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBRRU1VLCBvdXIgZ28tdG8gdmlydHVhbGl6YXRpb24gcGxhdGZvcm0sIGFuZCB3aGV0aGVyIGl0IGNhbiBlbXVsYXRlIFNESU8gZGV2aWNlcyBzdWZmaWNpZW50bHkgdG8gdHJpZ2dlciB0aGVzZSBjb2RlIHBhdGhzLgoKSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgcHJvdmlkZXMgc29mdHdhcmUgZW11bGF0aW9uIGZvciBtYWM4MDIxMSwgYnV0IHRoaXMgaXMgYSAqc3BlY2lmaWMqIGhhcmR3YXJlIGRyaXZlci4gVXN1YWxseSwgdGhlc2Ugc29ydHMgb2YgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGRyaXZlcnMsIHN1Y2ggYXMgYHJ0dzg4YCwgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHdpdGhvdXQgc3BlY2lmaWMgUENJIG9yIFVTQiBlbXVsYXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgKlNESU8qLiBRRU1VIGhhcyBzb21lIFNESENJIGVtdWxhdGlvbiwgYnV0IGRvZXMgaXQgZ28gc28gZmFyIGFzIHRvIGVtdWxhdGUgdGhlIFJlYWx0ZWsgODcyM0JTIFNESU8gV2ktRmkgY2FyZD8gTW9zdCBsaWtlbHkgbm90LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQmIzM5O3MgZXhjbHVzaW9uIG9mIGNvZGUgdGhhdCYjMzk7cyBub3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaGUgcHJvbXB0IGhpZ2hsaWdodHMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcyBiZWluZyBleGNsdWRlZC4gYHJ0dzg4YCBpcyBhIFJlYWx0ZWsgV2ktRmkgZHJpdmVyLCBzbyBpdCBkb2VzIHF1YWxpZnkgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGFuZCB3b3VsZCBsaWtlbHkgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS4KClRoZSBuZXh0IHBvaW50IEkgbmVlZCB0byBjb25zaWRlciBpcyBzeXprYWxsZXImIzM5O3MgV2ktRmkgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgY292ZXJhZ2UgdmlhIGBtYWM4MDIxMV9od3NpbWAsIGJ1dCB0aGF0JiMzOTtzIGFpbWVkIGF0IHRoZSBnZW5lcmljIG1hYzgwMjExIHN0YWNrLiBSZWFsdGVrJiMzOTtzIGRyaXZlciBpcyBsaWtlbHkgdG8gbm90IGJlIGNvdmVyZWQsIHVubGVzcyB3ZSBoYXZlIGEgVVNCL1BDSS9TRElPIGZ1enplciB0aGF0IGNhbiBpbmplY3QgcGFja2V0cyBhbmQgcmVzcG9uc2VzLiBJIGtub3cgc3l6a2FsbGVyIGRvZXMgaGF2ZSBhIFVTQiBmdXp6ZXIgdmlhIGBkdW1teV9oY2RgLCBidXQgZG9lcyBpdCBoYXZlIGFuIFNESU8gZnV6emVyPyBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQsIGNoZWNraW5nIHRoZSBrZXJuZWwgc291cmNlcyBhbmQgc3l6a2FsbGVyJiMzOTtzIGNvZGViYXNlIGZvciBTRElPIGZ1enppbmcgb3IgaWYgYHJ0dzg4YCBpcyBhbHJlYWR5IHRhcmdldGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgU3l6a2FsbGVyJiMzOTtzIFNESU8gRnV6emluZyBDYXBhYmlsaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgaXMgYSB2aWFibGUgdG9vbCBmb3IgZnV6emluZyBTRElPLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgY292ZXJhZ2UuIERvZXMgaXQgaGF2ZSBhbnkgZXhpc3RpbmcgU0RJTyBzdXBwb3J0IG1vZHVsZXM/IElmIG5vdCwgd2hhdCYjMzk7cyB0aGUgbGV2ZWwgb2YgZWZmb3J0IHJlcXVpcmVkIHRvIGFkZCBpdD8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBTRElPIHByb3RvY29sIGl0c2VsZi4gQXJlIHRoZXJlIHNwZWNpZmljIGFzcGVjdHMgbGlrZSB0aGUgQ01EIGFuZCBEQVRBIGxpbmVzLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIG9yIHRoZSB2YXJpb3VzIFNESU8gcmVnaXN0ZXJzIHRoYXQgd2lsbCByZXF1aXJlIGZvY3VzZWQgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nPyBBbmQgd2hhdCBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZT8gRG9lcyBzeXprYWxsZXIgaGF2ZSBnb29kIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIFNESU8gbGlrZSB0aGUgQnJvYWRjb20gb3IgUXVhbGNvbW0gY2hpcHM/CgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBraW5kcyBvZiBpbnB1dHMgdGhhdCB3b3VsZCBiZSBlZmZlY3RpdmUuIFdoYXQgYXJlIHRoZSBrZXkgYXR0YWNrIHN1cmZhY2VzIHdpdGhpbiB0aGUgU0RJTyBkcml2ZXI/IFNlbmRpbmcgbWFsZm9ybWVkIGNvbW1hbmRzPyBVbmV4cGVjdGVkIGRhdGEgc2l6ZXM/IE92ZXJmbG93aW5nIGJ1ZmZlcnM/IEludGVycnVwdCBzdG9ybXM/IFRoZSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgaGF2ZSB0byBiZSB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzIEkgd2FudCB0byB1bmNvdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGNyYWZ0IGEgcGxhbiB0byBjcmVhdGUgZWZmZWN0aXZlIHRlc3QgY2FzZXMsIGFuZCBkZXRlcm1pbmUgaG93IHRvIHZhbGlkYXRlL2Fzc2VzcyB0aGUgc3RhYmlsaXR5IGFuZCBlZmZlY3RpdmVuZXNzIG9mIHRoZSBmdXp6aW5nLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB0aGUgcHJhY3RpY2FsaXRpZXMuIEhvdyBlYXN5IGlzIGl0IHRvIGludGVncmF0ZSBTRElPIGZ1enppbmcgaW50byBteSBjdXJyZW50IHNldHVwPyBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIHdpbGwgSSBuZWVkIHRvIGNvbGxlY3QgdXNlZnVsIHJlc3VsdHMsIGFuZCBkZXRlY3QgY3Jhc2hlcywgaGFuZ3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEnigJltIHRoaW5raW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBrZXJuZWwgcGFuaWNzLCBwcmltYXJpbHkuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcG90ZW50aWFsIHBheW9mZiBhZ2FpbnN0IHRoZSBkZXZlbG9wbWVudCB0aW1lIHJlcXVpcmVkLiBHaXZlbiBteSBleHBlcnRpc2UsIG15IGZvY3VzIGlzIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZW5kZWF2b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXp6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgZm9yIGEgVmlydHVhbCBTRElPIEhvc3QqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBCZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIGluIG9yZGVyLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBmdW5kYW1lbnRhbCBzZXR1cCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGVyZSBldmVuIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciBwcmVzZW50PyYjMzQ7IFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IHdpdGhvdXQgaXQsIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24gaXMgcG9pbnRsZXNzLiBJdCBkaWN0YXRlcyB0aGUgZW50aXJlIGFwcHJvYWNoLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgZXZlbiBjb25zaWRlciB3aGF0IHRhc2tzIHRoaXMgY29udHJvbGxlciBtYXkgYmUgcGVyZm9ybWluZy4gV2UmIzM5O2xsIHN0YXJ0IHdpdGggdmVyaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21tYy9ob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTg0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnPTY1OT1jb25maWcgTU1DX01WU0RJT1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnOjY2OTpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NzAtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXHQmIzQzOz0gdGlmbV9zZC5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19NTUNfTVZTRElPKVx0JiM0Mzs9IG12c2Rpby5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19NTUNfREFWSU5DSSkgICAgICAgJiM0Mzs9IGRhdmluY2lfbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcdCYjNDM7PSBtZXNvbi1teC1zZGhjLm9cbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX01NQ19NRVNPTl9NWF9TRElPKVx0JiM0Mzs9IG1lc29uLW14LXNkaW8ub1xuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZS03MC1vYmotJChDT05GSUdfTU1DX01PWEFSVClcdCYjNDM7PSBtb3hhcnQtbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9ob3N0LmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MzA6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0zMS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4Ny0gKiBAc2RjX3JlZzogVmFsdWUgb2YgU0RDUiB0byBiZSB3cml0dGVuIGJlZm9yZSB1c2luZyB0aGlzIHNsb3QuXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg5LSAqIEBtcnE6IG1tY19yZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgb3Igd2FpdGluZyB0byBiZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy00MDUtXHR1MzJcdFx0XHRzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzo0MDY6XHR1MzJcdFx0XHRzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU0NT1zdGF0aWMgaW50IGF0bWNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NTk6c3RhdGljIHZvaWQgYXRtY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjQtXHRpZiAoZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoxNTY1Olx0XHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2Ni1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NzpcdFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdG1jaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVx0LmdldF9jZFx0XHQ9IGF0bWNpX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU3NTpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdG1jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIwMTE9c3RhdGljIHZvaWQgYXRtY2lfd3JpdGVfZGF0YV9waW8oc3RydWN0IGF0bWVsX21jaSAqaG9zdClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwNzgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwNzk6c3RhdGljIHZvaWQgYXRtY2lfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwgdTMyIHN0YXR1cylcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg0LVx0XHRzdHJ1Y3QgYXRtZWxfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LVx1MDAzZXNsb3RbaV07XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoc3RhdHVzIFx1MDAyNiBzbG90LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMDg2Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoc2xvdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVx0XHR9XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0yMDkyPXN0YXRpYyBpcnFyZXR1cm5fdCBhdG1jaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cdFx0aWYgKHBlbmRpbmcgXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjIxNDpcdFx0XHRhdG1jaV9zZGlvX2ludGVycnVwdChob3N0LCBzdGF0dXMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjE1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjIzNj1zdGF0aWMgaW50IGF0bWNpX2luaXRfc2xvdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM3LVx0XHRzdHJ1Y3QgbWNpX3Nsb3RfcGRhdGEgKnNsb3RfZGF0YSwgdW5zaWduZWQgaW50IGlkLFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjM4Olx0XHR1MzIgc2RjX3JlZywgdTMyIHNkaW9faXJxKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM5LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNTQtXHRzbG90LVx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjU1Olx0c2xvdC1cdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU2LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cdG1tYy1cdTAwM2VvY3JfYXZhaWxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyNjg6XHRpZiAoc2Rpb19pcnEpXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXHRcdG1tYy1cdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM9Nzc4PXN0YXRpYyBpcnFyZXR1cm5fdCBhdTF4bW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtNzg4LVx0aWYgKHN0YXR1cyBcdTAwMjYgU0RfU1RBVFVTX1NJKVx0LyogU0RJTyAqL1xuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6Nzg5Olx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MDY9c3RhdGljIHZvaWQgYXUxeG1tY19kYmRtYV9zaHV0ZG93bihzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkxNC1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkxNTpzdGF0aWMgdm9pZCBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuKVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXUxeG1tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTI5LVx0LmdldF9jZFx0XHQ9IGF1MXhtbWNfY2FyZF9pbnNlcnRlZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkzMDpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkzMS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jOjk6ICogVGhlIHNkaGNpIGNvbnRyb2xsZXIgc3VwcG9ydHMgYm90aCBzZGNhcmQgYW5kIHNkaW8uICBUaGUgc2Rob3N0XG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYy0xMC0gKiBjb250cm9sbGVyIHN1cHBvcnRzIHRoZSBzZGNhcmQgb25seSwgYnV0IGhhcyBiZXR0ZXIgcGVyZm9ybWFuY2UuXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxuZHJpdmVycy9tbWMvaG9zdC9iY20yODM1LmMtMTItICogdGhlIHNkaG9zdCBjb250cm9sbGVyIGFsbG93cyB0byB1c2UgdGhlIHNkaGNpIGNvbnRyb2xsZXIgZm9yIHdpZmlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTczLVx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE3NDpcdGludCBtbWNfaXJxLCBzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXHR1bnNpZ25lZCBjaGFyIGJ1c19tb2RlO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXHRib29sIGRvX2RtYTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxODg6XHRib29sIHNkaW9faW50O1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTE4OS1cdGJvb2wgYWN0aXZlX3JlcXVlc3Q7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTc1Nj1tbWNfZGF2aW5jaV94ZmVyX2RvbmUoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XHRcdGlmIChob3N0LVx1MDAzZXNkaW9faW50IFx1MDAyNlx1MDAyNiAhKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9TVDApIFx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2Ny1cdFx0XHRcdFx0U0RJT1NUMF9EQVQxX0hJKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2OC1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6NzY5Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc3MC1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz04MzM9ZGF2aW5jaV9hYm9ydF9kYXRhKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg0MC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NDE6c3RhdGljIGlycXJldHVybl90IG1tY19kYXZpbmNpX3NkaW9faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NTAtXHRcdHdyaXRlbChzdGF0dXMgfCBTRElPSVNUX0lPSU5ULCBob3N0LVx1MDAzZWJhc2UgJiM0MzsgREFWSU5DSV9TRElPSVNUKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NTE6XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cdH1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTAzMjpcdFx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XHRcdFx0aG9zdC1cdTAwM2VzZGlvX2ludCA9IHRydWU7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzNS1cdFx0XHR3cml0ZWwocmVhZGwoaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lFTikgfFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM4LVx0fSBlbHNlIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5Olx0XHRob3N0LVx1MDAzZXNkaW9faW50ID0gZmFsc2U7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0MC1cdFx0d3JpdGVsKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9JRU4pIFx1MDAyNiB+U0RJT0lFTl9JT0lOVEVOLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0OS1cdC5nZXRfcm9cdFx0PSBtbWNfZGF2aW5jaV9nZXRfcm8sXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcdC5lbmFibGVfc2Rpb19pcnEgPSBtbWNfZGF2aW5jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA1MS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMTg0PXN0YXRpYyBpbnQgZGF2aW5jaV9tbWNzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVx0aG9zdC1cdTAwM2VtbWNfaXJxID0gaXJxO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XHRob3N0LVx1MDAzZXNkaW9faXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMzAxLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XHRpZiAoaG9zdC1cdTAwM2VzZGlvX2lycSBcdTAwM2U9IDApIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzAzOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBob3N0LVx1MDAzZXNkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDQ6XHRcdFx0XHQgICAgICAgbW1jX2RhdmluY2lfc2Rpb19pcnEsIDAsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cdFx0XHRcdCAgICAgICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTAzLVx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jOjUwNDpcdGhvc3QtXHUwMDNlc2Rpb19pcnEgPSA4O1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDUtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2QuaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTQ4MD1zdGF0aWMgdm9pZCBkd19tY2lfaHdfcmVzZXQoc3RydWN0IG1tY19ob3N0ICptbWMpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTEzOnN0YXRpYyB2b2lkIGR3X21jaV9wcmVwYXJlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGJvb2wgcHJlcGFyZSlcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTUxNC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQwLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTQxOnN0YXRpYyB2b2lkIF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBpbnQgZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTAtXHRpZiAoZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTUxOlx0XHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1Mi1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MzpcdFx0aW50X21hc2sgXHUwMDI2PSB+U0RNTUNfSU5UX1NESU8oaG9zdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXHRtY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIGludF9tYXNrKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTk6c3RhdGljIHZvaWQgZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYilcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTYzOlx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU2NDpcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCBlbmIpO1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3Mi1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTc0LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1Nzc6XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBkd19tY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTY3Ny1cdC5jYXJkX2h3X3Jlc2V0ICAgICAgICAgID0gZHdfbWNpX2h3X3Jlc2V0LFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4Olx0LmVuYWJsZV9zZGlvX2lycVx0PSBkd19tY2lfZW5hYmxlX3NkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5Olx0LmFja19zZGlvX2lycVx0XHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2ODAtXHQuZXhlY3V0ZV90dW5pbmdcdFx0PSBkd19tY2lfZXhlY3V0ZV90dW5pbmcsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTctXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XHRcdGlmIChwZW5kaW5nIFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNzU5LVx0XHRcdG1jaV93cml0ZWwoaG9zdCwgUklOVFNUUyxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcdFx0XHRcdCAgIFNETU1DX0lOVF9TRElPKGhvc3QtXHUwMDNlc2Rpb19pcnEpKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcdFx0XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NjI6XHRcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9Mjc5ND1zdGF0aWMgaW50IGR3X21jaV9pbml0X2hvc3RfY2FwcyhzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MjgyNjpcdC8qIFByb2Nlc3MgU0RJTyBJUlFzIHRocm91Z2ggdGhlIHNkaW9faXJxX3dvcmsuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXHRpZiAobW1jLVx1MDAzZWNhcHMgXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0zNDQzPWludCBkd19tY2lfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5NC1cdC8qIFJlLWVuYWJsZSBTRElPIGludGVycnVwdHMuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XHRpZiAoc2Rpb19pcnFfY2xhaW1lZChob3N0LVx1MDAzZW1tYykpXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XHRcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTUyPXN0cnVjdCBkd19tY2lfZG1hX3NsYXZlIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMS0gKiBAaXJxOiBUaGUgaXJxIHZhbHVlIHRvIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycS5cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MTIyOiAqIEBzZGlvX2lycTogU0RJTyBpbnRlcnJ1cHQgYml0IGluIGludGVycnVwdCByZWdpc3RlcnMuXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTE2MT1zdHJ1Y3QgZHdfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzMy1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MjM0Olx0aW50XHRcdFx0c2Rpb19pcnE7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzNS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtODU5LVx0XHRqejQ3NDBfbW1jX3dyaXRlX2lycV9yZWcoaG9zdCwgSlpfTU1DX0lSUV9TRElPKTtcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jOjg2MDpcdFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVx1MDAzZW1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXHRcdGlycV9yZWcgXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTk0MD1zdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk0LVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6OTk1OnN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz0xMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGp6NDc0MF9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjQtXHQuZ2V0X2NkXHRcdD0gbW1jX2dwaW9fZ2V0X2NkLFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6MTAyNTpcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjYtXHQuc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoID0gano0NzQwX3ZvbHRhZ2Vfc3dpdGNoLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZC5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz00MTM9c3RhdGljIGlycXJldHVybl90IGxvb25nc29uMl9tbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQyOC1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjQyOTpcdFx0c2Rpb19zaWduYWxfaXJxKG1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MzAtXHRcdHJldHVybiBJUlFfSEFORExFRDtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01ODgtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTAte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjU5NjpzdGF0aWMgdm9pZCBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5Ny17XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XHRsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIDEpO1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk5LX1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MDE9c3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbG9vbmdzb24yX21tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVx0LmdldF9jZFx0XHQ9IG1tY19ncGlvX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNjpcdC5lbmFibGVfc2Rpb19pcnEgPSBsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcdC5hY2tfc2Rpb19pcnFcdD0gbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MTc9c3RhdGljIGludCBsb29uZ3NvbjJfcmVvcmRlcl9jbWRfbGlzdFtdID0geyBTRF9BUFBfU0VORF9TQ1IsIFNEX0FQUF9TRU5EX05VTV9XUl9CTEtTLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTYyMi0gKiByZXNwb25zZSBkYXRhcyBoYXMgZGlmZmVyZW50IGJ5dGUgb3JkZXIgd2l0aCB1c3VhbCBkYXRhIHBhY2tldHMuXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MjM6ICogSG93ZXZlciBzZGlvIGNvbnRyb2xsZXIgd2lsbCBzZW5kIHRoZXNlIGRhdGFzIGluIHVzdWFsIGRhdGEgZm9ybWF0LFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTk0MD1zdGF0aWMgaW50IGxvb25nc29uMl9tbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy05NzMtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo5NzQ6XHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTc1LVx0aWYgKG1tYy1cdTAwM2VjYXBzIFx1MDAyNiBNTUNfQ0FQX1NESU9fSVJRKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3Nsb3QtZ3Bpby5oXHUwMDNlXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01My0jZGVmaW5lICAgQ0xLX0FMV0FZU19PTihoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWFsd2F5c19vbilcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWlycV9zZGlvX3NsZWVwKVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01NS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzNj1zdHJ1Y3QgbWVzb25fbW1jX2RhdGEge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVx0dW5zaWduZWQgaW50IGFkanVzdDtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTQxOlx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xNDItfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMC1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy05NTYtXHRcdHNwaW5fbG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzo5NTc6XHRcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVx1MDAzZW1tYywgMCk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjk1ODpcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVx0XHRzcGluX3VubG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMDktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExMS17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aG9zdC1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTY6XHRfX21lc29uX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCBlbmFibGUpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZob3N0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEyMS17XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjI6XHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzMy1cdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMzQ6XHQuZW5hYmxlX3NkaW9faXJxID0gbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcdC5hY2tfc2Rpb19pcnFcdD0gbWVzb25fbW1jX2Fja19zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2d4X2RhdGEgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzEzLVx0LmFkanVzdFx0XHQ9IFNEX0VNTUNfQURKVVNULFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMzE0Olx0LmlycV9zZGlvX3NsZWVwXHQ9IENMS19WMl9JUlFfU0RJT19TTEVFUCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxNS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2F4Z19kYXRhID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cdC5hZGp1c3RcdFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTMyMjpcdC5pcnFfc2Rpb19zbGVlcFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTEzMjMtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYz0xMzI9c3RhdGljIHZvaWQgbWVzb25fbXhfc2RoY19zdGFydF9jbWQoc3RydWN0IG1tY19ob3N0ICptbWMsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cdFx0ICogZG93bmxvYWQgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBmb3IgYSBCQ000MzM2Mi8xIGNhcmQuXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlx0XHQgKiBXaXRob3V0IHRoaXMgc2Rpb19tZW1jcHlfdG9pbygpICh3aXRoIGEgc2l6ZSBvZiAyMTk1NTdcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXHRcdCAqIGJ5dGVzKSB0aW1lcyBvdXQgaWYgTUVTT05fU0RIQ19NSVNDX01BTlVBTF9TVE9QIGlzIG5vdCBzZXQuXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMi0vKlxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6MzogKiBtZXNvbi1teC1zZGlvLmMgLSBNZXNvbjYsIE1lc29uOCBhbmQgTWVzb244YiBTRElPL01NQyBIb3N0IENvbnRyb2xsZXJcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvbW1jLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjI4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjMwLXtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjYzMTpcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMi1cdFx0LnJlZ19iaXRzID0gOCxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NjgtXHRob3N0LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgYmFzZSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjY2OTpcdFx0XHRcdFx0ICAgICBcdTAwMjZtZXNvbl9teF9zZGlvX3JlZ21hcF9jb25maWcpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjcwLVx0aWYgKElTX0VSUihob3N0LVx1MDAzZXJlZ21hcCkpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo3NDk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YW1sb2dpYyxtZXNvbjgtc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthbWxvZ2ljLG1lc29uOGItc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1OC1cdC5kcml2ZXIgID0ge1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzU5Olx0XHQubmFtZSA9IFwmIzM0O21lc29uLW14LXNkaW9cJiMzNDssXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXHRcdC5wcm9iZV90eXBlID0gUFJPQkVfUFJFRkVSX0FTWU5DSFJPTk9VUyxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zMy0gKlxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmM6MzQ6ICogLSBGb3Igbm93LCB3ZSB3b24mIzM5O3QgdHJ5IHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgcmVhbCBtbWMvc2Qvc2Rpb1xuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzUtICogICBjb250cm9sbGVyLCBhbHRob3VnaCBzb21lIG9mIHRoZW0gZG8gaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IGZvclxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTExMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3UzMDAgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVx0LmRhdGFjdHJsX2Jsb2Nrc3pcdD0gMTEsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcdC5zdF9zZGlvXHRcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI0LVx0LnB3cnJlZ19wb3dlcnVwXHRcdD0gTUNJX1BXUl9PTixcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMzY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9ub21hZGlrID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNDktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzYtXHQuZG1hX3Bvd2VyX29mXzJcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxMS1cdC5kbWFfcG93ZXJfb2ZfMlx0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcdC5zdF9zZGlvXHRcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxNC1cdC5zdF9jbGtkaXZcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI0NC1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MjQ1Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDY6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0yNTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9zdG0zMl9zZG1tYyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzItXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI3MzpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc0LVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTIsIDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc1LVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNSksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzY6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3Ny1cdC5idXN5X3RpbWVvdXRcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAwLVx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDE6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMi1cdC5zdG0zMl9pZG1hYnNpemVfbWFza1x0PSBHRU5NQVNLKDE2LCA1KSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMy1cdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cdD0gQklUKDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MzA0Olx0LnN1cHBvcnRzX3NkaW9faXJxXHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDUtXHQuZG1hX2xsaVx0XHQ9IHRydWUsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MzEzPXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfc3RtMzJfc2RtbWN2MyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTYsIDYpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNiksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cdC5kbWFfbGxpXHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz00MjU9c3RhdGljIHZvaWQgbW1jaV93cml0ZV9kYXRhY3RybHJlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1MzIgZGF0YWN0cmwpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDI4LVx0ZGF0YWN0cmwgfD0gaG9zdC1cdTAwM2VkYXRhY3RybF9yZWcgXHUwMDI2IChob3N0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6NDI5Olx0XHRcdFx0XHQgIGhvc3QtXHUwMDNldmFyaWFudC1cdTAwM2VkYXRhY3RybF9tYXNrX3NkaW8pO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTEyMzY9c3RhdGljIHZvaWQgbW1jaV9zdGFydF9kYXRhKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYxLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2MjpcdGlmIChob3N0LVx1MDAzZW1tYy1cdTAwM2VjYXJkIFx1MDAyNlx1MDAyNiBtbWNfY2FyZF9zZGlvKGhvc3QtXHUwMDNlbW1jLVx1MDAzZWNhcmQpKSB7XG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYzLVx0XHR1MzIgY2xrO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2NC1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNjU6XHRcdGRhdGFjdHJsIHw9IHZhcmlhbnQtXHUwMDNlZGF0YWN0cmxfbWFza19zZGlvO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjcyLVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNzM6XHRcdGlmICh2YXJpYW50LVx1MDAzZXN0X3NkaW8gXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZmxhZ3MgXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cdFx0ICAgIChob3N0LVx1MDAzZXNpemUgXHUwMDNjIDggfHxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3NjgtXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzcwLXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkzNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNESU8gRHJpdmVyIGluIFFFTVUgYW5kIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgcnR3ODhgIGRyaXZlciwgYW5kIGl0JiMzOTtzIGZvciBhIFJlYWx0ZWsgODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYW4gU0RJTyBkZXZpY2UuIFFFTVUgc3VwcG9ydHMgdmFyaW91cyBTRElPIGhvc3QgY29udHJvbGxlcnMg4oCTIHNkaGNpLCBiY20yODM1X3NkaG9zdCwgYW5kIHRoZSBsaWtlIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IGRvZXMgUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgdGhlIFJlYWx0ZWsgODcyM0JTIGl0c2VsZj8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0cyBnZW5lcmFsIHB1cnBvc2UuCgpTbywgaWYgaXQmIzM5O3MgU0RJTywgUUVNVSBjYW4gZG8gU0QgY2FyZHMgaW4gYSBsaW1pdGVkIHdheSwgYnV0IGFuIFNESU8gV2ktRmkgY2FyZD8gSSBkb24mIzM5O3QgdGhpbmsgc28sIHVubGVzcyB0aGVyZSYjMzk7cyBzcGVjaWZpYyBlbXVsYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBzb21lIG9ic2N1cmUgYHNkaW9fZHVtbXlgIGtlcm5lbCBtb2R1bGUgb3Igc29tZXRoaW5nLiBObywgbm90aGluZyBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaW4gdGVybXMgb2YgYSBnZW5lcmFsIFNESU8gZW11bGF0aW9uIGxheWVyIGluIHRoZSBrZXJuZWwuIFdhaXQsIHRoZXJlJiMzOTtzIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLCBidXQgdGhhdCYjMzk7cyBhdCB0aGUgbWFjODAyMTEgbGF5ZXIsIG5vdCB0aGUgU0RJTyBidXMgbGV2ZWwuIEkga25vdyB0aGF0IHRoZSBgcnR3ODhgIGRyaXZlciBpcyBkZXNpZ25lZCB0byBiaW5kIHRvIGFuIFNESU8gZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IvZGV2aWNlIElEIGNvbWJpbmF0aW9uLgoKSWYgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSwgZG9lc24mIzM5O3QgcHJlc2VudCBhIHZpcnR1YWwgU0RJTyBXaS1GaSBjYXJkIHdpdGggdGhvc2UgcGFydGljdWxhciBJRHMsIHRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiB3aWxsICpuZXZlciogYmUgY2FsbGVkLiBXaGljaCBtZWFucyBub25lIG9mIHRoaXMgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgd291bGQgYmUgcmVhY2hhYmxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGlzc3VlIG9mIGhvdyB0aGUgaGFyZHdhcmUgZW11bGF0aW9uIGlzIHNldCB1cC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBzeXprYWxsZXIgY2FuIGhlbHAgbWUgd2l0aCB0aGlzIHByb2JsZW0uIEkgaGF2ZSBzZWVuIHRoYXQgc3l6a2FsbGVyIGhhcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGRldmljZXMgYW5kIGBzeXpfdmhjaWAgZm9yIEJsdWV0b290aCwgYW5kIGBzeXpfZ2VuZXRsaW5rYCBmb3IgbmV0bGluay4gVGhlIHF1ZXN0aW9uIGlzOiBEb2VzIHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBzaW1pbGFyIGZvciBTRElPPyBEb2VzIGl0IGhhdmUgYSBgc3l6X3NkaW9fY29ubmVjdGAgY2FsbCBvciBzb21ldGhpbmcgSSBjYW4gdXNlPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9zZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3OTgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVFc4OCBTRElPIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gZ2V0IGF0IHRoZSBgcnR3ODhgIFNESU8gZHJpdmVyIHdpdGggU3l6a2FsbGVyLiBGaXJzdCBvZmYsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWZlcmVuY2VzIHRvIGBzeXpfc2Rpb2AgcHNldWRvLXN5c2NhbGxzLCB3aGljaCBpcyBleHBlY3RlZC4gVGhhdCBwYXRoIGlzIHByb2JhYmx5IGEgZGVhZCBlbmQuIE5leHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHN5el84MDIxMWAuIFN5emthbGxlciAqY2FuKiBoaXQgODAyLjExIHdpdGggZnJhbWUgaW5qZWN0aW9uIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCwgYnV0IGBtYWM4MDIxMV9od3NpbWAgaXMgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIGRyaXZlciwgbm90IHJlbGF0ZWQgdG8gYHJ0dzg4YC4gSXQgZG9lc24mIzM5O3QgdXNlIGBydHc4OGAuCgpBbHJpZ2h0LCB0aGVuIEkgcmVtZW1iZXJlZCBTeXprYWxsZXIgY2FuIGFsc28gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5IGFyZSBRRU1VIGVtdWxhdGVkLiBCdXQgdGhlIHByb2JsZW0gaXMsIGBydHc4OGAgaXMgYW4gU0RJTyBkZXZpY2UuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgZG9lcyBRRU1VIG9mZmVyIGFueSBTRElPIGRldmljZSBlbXVsYXRpb24gdGhhdCBTeXprYWxsZXIgY291bGQgbGV2ZXJhZ2U/CgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IFN5emthbGxlciBpc24mIzM5O3Qgc2V0IHVwIHRvIGZ1enogU0RJTyBkcml2ZXJzLCBiZWNhdXNlIHRoZXJlIGlzbiYjMzk7dCBhIHJlYWRpbHkgYXZhaWxhYmxlIGR1bW15IGhvc3QgY29udHJvbGxlciBvciBTRElPIGRldmljZSBmdXp6ZXIgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gVGhlIGNvbW1vbiB3b3JrZmxvdyBpc24mIzM5O3QgdGhlcmUgZm9yIFNESU8gZGV2aWNlcy4gU28sIHRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlIGNhbiBldmVuIGdldCBgcnR3ODhgIHRvIHByb2JlIGluIHRoaXMgZW52aXJvbm1lbnQsIGFzIGEgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0d19zZGlvX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYz0yMT1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzY3NfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2NzLmMtMjMtXHQuaWRfdGFibGUgPSBydHdfODcyM2NzX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYz0yNz1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzZHNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYy0yOC1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jOjI5Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jLTMwLVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjFjc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTIzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM6MjQ6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjUtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMmJzX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmMtMjMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyY3NfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYy0yMy1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYz0xNjM5PXN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE2NTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxNjUyOmludCBydHdfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNjUzLVx0XHQgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MjYtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM6MTcyNzpFWFBPUlRfU1lNQk9MKHJ0d19zZGlvX3Byb2JlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MjgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmg9MTg0PWV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaDoxODY6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4Ny1cdFx0ICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTk0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enphYmlsaXR5KioKCk9rYXksIHRoZSBwcm9tcHQgaW5zdHJ1Y3RzIG1lIHRvIGZsYWcgcGF0Y2hlcyBhcyB1bi1mdXp6YWJsZSBpZiB0aGV5IHRhcmdldCBjb2RlIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gUmVhZGluZyB0aGlzLCBJIHNlZSB0aGlzIHBhdGNoIHRvdWNoZXMgYSBSZWFsdGVrIDg3MjNCUyBTRElPIFdpLUZpIGRyaXZlci4gQW5kIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O05vLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBvZmYtbGltaXRzIGZvciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcy4mIzM0OyBTRElPIGRldmljZXMsIGFzIEkga25vdywgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IEkgY2FuIHNpbXVsYXRlIHRoYXQga2luZCBvZiBoYXJkd2FyZSBvbiBHQ0Ugb3IgYSByZWd1bGFyIFFFTVUgaW5zdGFuY2UuIFNvLCB0aGUgY2hhbmNlcyBvZiBldmVuIGhpdHRpbmcgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgbGV0IGFsb25lIGV4ZWN1dGluZyBhbnkgb2YgaXRzIGNvZGUsIGlzIHplcm8uCgpCdXQsIGJlaW5nIHRob3JvdWdoLCBJIHNob3VsZCAqYWx3YXlzKiBkb3VibGUtY2hlY2sgZm9yIGVkZ2UgY2FzZXMuIElzIHRoZXJlICphbnkqIHZpcnR1YWwgU0RJTyBkZXZpY2UgZnJhbWV3b3JrIGluIHRoZSBrZXJuZWwgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nPyBJIGtub3cgYWJvdXQgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIHdoaWNoIGlzIHNvZnR3YXJlLWJhc2VkIGJ1dCBub3QgU0RJTywgYW5kIGBkdW1teV9oY2RgIGFuZCBgdmhjaWAgZm9yIFVTQiBhbmQgQmx1ZXRvb3RoLCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBnb29kIGV4YW1wbGVzIG9mIGhvdyB0byBzaW11bGF0ZSBkcml2ZXJzLCBhbGxvd2luZyBmdXp6aW5nIGluIHRoZXNlIGNhc2VzLiBIb3dldmVyLCBhZnRlciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoZXJlIGlzIG5vIGBkdW1teV9zZGlvYCBvciBgc2Rpb19mdXp6ZXJgIGVxdWl2YWxlbnQgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gVGhpcyBzdHJvbmdseSBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoOiBTRElPIGRyaXZlcnMgY2FuJiMzOTt0IGJlIHJlYWRpbHkgZnV6emVkIGJ5IHN5emthbGxlciBvciBhIHNpbWlsYXIgdG9vbC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciAqbmVlZHMqIGEgcGh5c2ljYWwgU0RJTyBjYXJkIHRvIHJ1biwgYW5kIFFFTVUgZG9lcyBub3QgZW11bGF0ZSB0aGVtLCB0aGlzIHNob3VsZCBiZSBtYXJrZWQgYXMgdW4tZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW9fYWRkX2Z1bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tbWMvY29yZS9zZGlvLmM9MTIxMj1pbnQgbW1jX2F0dGFjaF9zZGlvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdClcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW8uYy0xMzA0LVx0Zm9yIChpID0gMDtpIFx1MDAzYyBmdW5jcztpJiM0MzsmIzQzOykge1xuZHJpdmVycy9tbWMvY29yZS9zZGlvLmM6MTMwNTpcdFx0ZXJyID0gc2Rpb19hZGRfZnVuYyhob3N0LVx1MDAzZWNhcmQtXHUwMDNlc2Rpb19mdW5jW2ldKTtcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpby5jLTEzMDYtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jPTM4Mz1zdGF0aWMgdm9pZCBzZGlvX3NldF9vZl9ub2RlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTM5Mi0gKi9cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzozOTM6aW50IHNkaW9fYWRkX2Z1bmMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYylcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zOTQte1xuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy00MTEtICogKGV2ZW50dWFsbHkpIGZyZWUgaXQuXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM6NDEyOiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGVycm9yIHBhdGhzIHdoZXJlIHNkaW9fYWRkX2Z1bmMoKSB3YXNcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy00MTMtICogbmV2ZXIgZXhlY3V0ZWQgKGJlY2F1c2UgYSBmYWlsdXJlIG9jY3VycmVkIGF0IGFuIGVhcmxpZXIgcG9pbnQpLlxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaD0xMz1zdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2FsbG9jX2Z1bmMoc3RydWN0IG1tY19jYXJkICpjYXJkKTtcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaDoxNDppbnQgc2Rpb19hZGRfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTtcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaC0xNS12b2lkIHNkaW9fcmVtb3ZlX2Z1bmMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODIwCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFNESU8gRHJpdmVyIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgcnR3ODhgIGRyaXZlciwgd2hpY2ggaXMgUmVhbHRlayYjMzk7cyBkcml2ZXIgZm9yIHRoZWlyIFdpLUZpIGNoaXBzLiBTcGVjaWZpY2FsbHksIHRoaXMgcGFydGljdWxhciBwYXRjaCBhcHBlYXJzIHRvIGJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgU0RJTyBpcyBhbHdheXMgYSBoZWFkYWNoZSB0byBmdXp6LgoKVGhlIGNvcmUgaXNzdWUgaXMsIGFzIEkgc3VzcGVjdGVkLCB0aGlzIHBhdGNoIGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkgZnV6eiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBTRElPLCB3aGljaCBtZWFucyB3ZSBuZWVkIGEgcmVhbCBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgcGx1Z2dlZCBpbnRvIHRoZSBzeXN0ZW0uIFFFTVUgYW5kIG90aGVyIHZpcnR1YWxpemF0aW9uIHNvbHV0aW9ucyBhcmVuJiMzOTt0IGdvaW5nIHRvIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhY2N1cmF0ZWx5LiBUaGVyZSYjMzk7cyBubyBlcXVpdmFsZW50IG9mIGEgYGR1bW15X2hjZGAgZm9yIFNESU8gdG8gc2ltdWxhdGUgdGhlIGRldmljZSBhbmQgYWxsb3cgdGVzdGluZyBpbiBhIHNvZnR3YXJlLW9ubHkgbWFubmVyLCBhdCBsZWFzdCwgbm90IGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIE5vIGVhc3kgd2F5IHRvIGdlbmVyYXRlIFNESU8gdHJhZmZpYywgYW5kIHRoZXJlZm9yZSwgbm8gd2F5IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBhZnRlciBjb25zaWRlcmluZyBhbGwgb2YgdGhpcywgbXkgYXNzZXNzbWVudCBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZyBpbiB0aGUgY3VycmVudCBzZXR1cC4gSXQmIzM5O3MgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHNjZW5hcmlvLiBXZSYjMzk7ZCBuZWVkIHNpZ25pZmljYW50IGhhcmR3YXJlIGludmVzdG1lbnQsIG9yIGEgbm92ZWwgU0RJTyBmdXp6ZXIsIHRvIGV2ZW4gYmVnaW4gdG8gbWFrZSBwcm9ncmVzcyBvbiBmdXp6aW5nIHRoZSBsb2dpYyBhZGRlZCBoZXJlLiBBbmQsIGV2ZW4gdGhlbiwgdGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozODo0Mi42NTI1OTU1NzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgwMjA3MTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBjaGlwLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjYXJkIHRvIGJlIHByZXNlbnQuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIFNESU8gZGV2aWNlIGZ1enplciAobGlrZSBkdW1teV9oY2QgZm9yIFVTQikgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzg6NDIuNjUyNjA1MTQxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDEzNjM4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NDBlYWVmMjc2YzY1YTE1NmM1YzdjMGI4ZjkzZGVmYmI1OGUyNjcyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDc6Mzg6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtMjE5NCw2ICsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2V0eF9zdGJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xcbiBcXG4tXFx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MiBhbmRcXG4tXFx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXFxuK1xcdC8qXFxuK1xcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MlxcbitcXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cXG4gXFx0ICovXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXFx1MDAyNlxcdTAwMjYgcGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCkge1xcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlcGt0X2xlbiA9PSAwKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTAuLmVkMWJlZDhlYTE0NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbkBAIC0yMCw2ICsyMCwxNyBAQFxcbiAjaW5jbHVkZSBcXFwidHguaFxcXCJcXG4gXFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1xcdFxcdFxcdDUwXFxuKyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcXHRcXHRcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXFxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcXG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXFxuKyAqL1xcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlxcdFxcdFxcdDE2XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXFx0XFx0XFx0OFxcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcygxKVxcbiBcXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXFxuIHtcXG5AQCAtNTQ4LDEyICs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGNhY2hlZCBmcmVlIHBhZ2UgY291bnRlcnMgYXJlIGEgZmFzdCBwYXRoIGhpbnQgb25seS4gVGhleSBhcmUgd3JpdHRlblxcbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcXG4rICogbm90IGVub3VnaCByb29tIHRoZXkgYXJlIHJlc3luY2hyb25pc2VkIGZyb20gdGhlIGNoaXAgYmVmb3JlIHRoZSBjYWxsZXJcXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZyZWVfdHhwZylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YixcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XFxuK1xcdHUzMiBmcmVlX3R4cGc7XFxuK1xcdHUxNiBwdWJxX251bTtcXG4rXFxuK1xcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXHRpZiAoZnJlZV90eHBnKSB7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRcXHRwdWJxX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtIC0gcGdfdGJsLVxcdTAwM2VocV9udW0gLVxcbitcXHRcXHRcXHQgICBwZ190YmwtXFx1MDAzZWxxX251bSAtIHBnX3RibC1cXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVxcdTAwM2VleHFfbnVtIC1cXG4rXFx0XFx0XFx0ICAgcGdfdGJsLVxcdTAwM2VnYXBxX251bTtcXG4rXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVxcdTAwM2VocV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVxcdTAwM2VucV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdywgcGdfdGJsLVxcdTAwM2VscV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xcbitcXHR9XFxuK1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSxcXG4rXFx0XFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKGZyZWVfdHhwZylcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFN1bSBvZiB0aGUgcXVldWUncyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XFxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxcbisgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcbitcXHRyZXR1cm4gZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcbitcXHRcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRpZiAoIWRlZGljYXRlZCkge1xcbitcXHRcXHRcXHRydHdfd2FybihydHdkZXYsIFxcXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsNDQgKzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHU4IGZyZWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgLTEsIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XFxuK1xcdFxcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XFxuK1xcdFxcdGlmIChmcmVlKSB7XFxuK1xcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FQlVTWTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xcbitcXHR1bnNpZ25lZCBpbnQgdGFrZW47XFxuK1xcdGludCBmcmVlO1xcbitcXG4rXFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcXG4rXFx0aWYgKCFkZWRpY2F0ZWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xcbitcXHR0YWtlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZXMsIGZyZWUgXFx1MDAzZSAwID8gZnJlZSA6IDApO1xcbitcXHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xcbitcXG4rXFx0cGFnZXMgLT0gdGFrZW47XFxuK1xcdGlmIChwYWdlcyBcXHUwMDI2XFx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViKSBcXHUwMDNjIDApXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbitcXHRzaXplX3Qgd3JpdGVfc2l6ZTtcXG4gXFx0Ym9vbCBidXNfY2xhaW07XFxuIFxcdHNpemVfdCB0eHNpemU7XFxuIFxcdHUzMiB0eGFkZHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cXHUwMDNlbGVuLCBxdWV1ZSk7XFxuLVxcdGlmICghdHhhZGRyKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemUgXFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cXG4rXFx0XFx0XFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3cml0ZV9zaXplIFxcdTAwM2Ugb3JpZ19sZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XFxuIFxcbi1cXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHBhZGRpbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcXG4rXFx0aWYgKCF0eGFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF90cmltO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVxcdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgX19mdW5jX18sIHF1ZXVlKTtcXG4gXFxuIFxcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XFxuLVxcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jKTtcXG4tXFxuLVxcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSwgdHhzaXplKTtcXG4tXFxuK1xcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHdyaXRlX3NpemUpO1xcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbiBcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCkge1xcbiBcXHRcXHRydHdfd2FybihydHdkZXYsXFxuIFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcXFwiLFxcbi1cXHRcXHRcXHQgdHhzaXplLCB0eGFkZHIpO1xcbitcXHRcXHRcXHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChydGw4NzIzYnMpIHtcXG4rXFx0XFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xcbitcXHR9XFxuIFxcbitvdXRfdHJpbTpcXG4rXFx0aWYgKHdyaXRlX3NpemUgXFx1MDAzZSBvcmlnX2xlbilcXG4rXFx0XFx0c2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTY3Nyw3ICs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcbi1cXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcXG4rXFx0XFx0XFx0XFx0ICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHU4IHNpemUsIHRpbWVvdXQ7XFxuIFxcbiBcXHRzd2l0Y2ggKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQpIHtcXG4rXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxcbkBAIC03MTIsNiArOTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdFxcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XFxuIFxcbiBcXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNzQ5LDkgKzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVxcdTAwM2VjaGlwO1xcbitcXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWZpZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MTYgcmVzZXJ2ZWRfbnVtO1xcbitcXHR1MzIgZnJlZV90eHBnO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcbitcXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcXG4rXFx0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cXHUwMDNlYWNxX3BnX251bSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGdfdGJsID0gXFx1MDAyNmNoaXAtXFx1MDAzZXBhZ2VfdGFibGVbMF07XFxuK1xcdHJlc2VydmVkX251bSA9IHBnX3RibC1cXHUwMDNlaHFfbnVtICsgcGdfdGJsLVxcdTAwM2VscV9udW0gKyBwZ190YmwtXFx1MDAzZW5xX251bSArXFxuK1xcdFxcdCAgICAgICBwZ190YmwtXFx1MDAzZWV4cV9udW0gKyBwZ190YmwtXFx1MDAzZWdhcHFfbnVtO1xcbitcXHRpZiAoZmlmby1cXHUwMDNlYWNxX3BnX251bSBcXHUwMDNjPSByZXNlcnZlZF9udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHB1YnFfbnVtID0gZmlmby1cXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXFx1MDAzZW5xX251bSwgcGdfdGJsLVxcdTAwM2VleHFfbnVtKSk7XFxuK1xcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVxcdTAwM2VocV9udW0sIHBnX3RibC1cXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4rXFx0dTMyIGNsZWFyO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihydHdkZXYpO1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XFxuK1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFxcdTAwMjZcXG4rXFx0XFx0XFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXHRcXHRpZiAoY2xlYXIpXFxuK1xcdFxcdFxcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xcbitcXHR9XFxuK1xcbiBcXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODE1LDcgKzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cXVldWVfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4rXFx0LypcXG4rXFx0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcXG4rXFx0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXFxuK1xcdCAqL1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsIFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXFxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXG4gXFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xcbiBcXHR2YWwgXFx1MDAyNj0gMHhmZmY4O1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xcbiBcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XFxuIH1cXG4gXFxuQEAgLTkzNyw2ICsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4gXFxuIFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBGSUZPIGZpbGxzIHBhc3RcXG4rXFx0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXFxuK1xcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxcbitcXHQgKiBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZHJhaW5zIGJlbG93IHRoZSBsb3cgd2F0ZXJtYXJrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFydHdzZGlvLVxcdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlO1xcbitcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXFx1MDAzZWh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxcbitcXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrIFxcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rLypcXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcXG4rICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZVxcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgcV9tYXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfcXVldWVfbGVuKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFxcdTAwM2M9XFxuK1xcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuLVxcdGludCBsaW1pdCwgcXVldWU7XFxuK1xcdGludCBsaW1pdCwgcXVldWUsIHJldDtcXG4rXFx0Ym9vbCBydGw4NzIzYnM7XFxuIFxcbiBcXHRydHdkZXYgPSB3b3JrX2RhdGEtXFx1MDAzZXJ0d2RldjtcXG4gXFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcXG4gXFxuIFxcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXFx1MDAyNnJ0d2Rldi1cXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXFxuIFxcdFxcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxcbitcXHRcXHRcXHRcXHQgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlXFxuK1xcdFxcdFxcdFxcdCAqIGtpY2tzIHRoZSB3b3JrZXIuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ3b3JrX2RhdGEtXFx1MDAzZXdvcmssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBSZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgYWZ0ZXIgZXZlcnlcXG4rXFx0XFx0XFx0ICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cFxcbitcXHRcXHRcXHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UKSB7XFxuK1xcdFxcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI5NCwxNCArMTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xcbiBcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtpXSk7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcXG4rXFx0fVxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFx0aWYgKCFydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpXFxuIFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXJ0d2RldiA9IHJ0d2RldjtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTMxNSw2ICsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVxcdTAwM2V0eHdxKTtcXG4gXFx0a2ZyZWUocnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiBcXG4gLyogU0RJTyBUeCBDb250cm9sICovXFxuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcXHRCSVQoNClcXG4gXFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXFxuICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMilcXG5AQCAtNzcsNiArNzgsMTQgQEBcXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlxcdFxcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcXHRcXHRCSVQoMjkpXFxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXFx0XFx0XFxcXFxcbitcXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXFxuIFxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovXFxuICNkZWZpbmUgUkVHX1NESU9fSENQV01cXHRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXFxuQEAgLTg2LDYgKzk1LDEwIEBAXFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXFxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19GUkVFX1RYUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjApXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXFx0XFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXFx0XFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1xcdFxcdFxcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXFx0XFx0XFx0R0VOTUFTSygzMSwgMjQpXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNMVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXFxuQEAgLTE0Myw3ICsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4gXFx0c3RydWN0IHJ0d19kZXYgKnJ0d2RldjtcXG4gfTtcXG4gXFxuQEAgLTE1OSw2ICsxNzIsMTMgQEAgc3RydWN0IHJ0d19zZGlvIHtcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XFxuIFxcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2xvdztcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19wdWI7XFxuK1xcdGF0b21pY190IHR4X29xdF9mcmVlO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzg6NDMuMTk1MDQ0Njc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTgyNTk2MTM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2FyZCB0byBiZSBwcmVzZW50LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGRldmljZSBmdXp6ZXIgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0MGVhZWYyNzZjNjVhMTU2YzVjN2MwYjhmOTNkZWZiYjU4ZTI2NzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjM4OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggYzZlOTgxYmE3OTg2OC4uOGY4NmY3YzEyZGU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuK1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgKzIxOTUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNldHhfc3RiYztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmE5MzYxZWY0YjkzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4rXHQvKlxuK1x0ICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuK1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XG4gXHRcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcInplcm8gbGVuZ3RoIHBhY2tldFwiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTcgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuKyAqL1xuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgKzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcbisgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXG4rXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbitcdGlmIChmcmVlX3R4cGcpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlbHFfbnVtIC0gcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cdTAwM2VocV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcbitcdH1cbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSxcbitcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1xuK1x0aWYgKGZyZWVfdHhwZylcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rfVxuK1xuKy8qXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbisgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGZyZWU7XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1xuK1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbit9XG4rXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdHN3aXRjaCAocXVldWUpIHtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbitcdFx0XHRydHdfd2FybihydHdkZXYsIFwiVW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwiLCBxdWV1ZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4rXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDQ0ICs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0dTggZnJlZTtcbitcdGludCBpO1xuK1xuK1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1x0dW5zaWduZWQgaW50IHRha2VuO1xuK1x0aW50IGZyZWU7XG4rXG4rXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1x0aWYgKCFkZWRpY2F0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuK1x0dGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDApO1xuK1x0YXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTtcbitcbitcdHBhZ2VzIC09IHRha2VuO1xuK1x0aWYgKHBhZ2VzIFx1MDAyNlx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YikgXHUwMDNjIDApXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuK1x0dW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbitcdH1cbitcbitcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuK1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuK1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4rXHR9XG4rXG4rXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuK1x0aWYgKCF0eGFkZHIpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXG5cIixcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbitcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4rXHRcdFx0ICAgICAgIHdyaXRlX3NpemUpO1xuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuIFxuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcIkZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCIsXG4tXHRcdFx0IHR4c2l6ZSwgdHhhZGRyKTtcbitcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbitcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4rXHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4rXHR9XG4gXG4rb3V0X3RyaW06XG4rXHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pXG4rXHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgKzg3NywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuK1x0ZWxzZVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcbitcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHR1OCBzaXplLCB0aW1lb3V0O1xuIFxuIFx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuK1x0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxuQEAgLTcxMiw2ICs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSArOTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MTYgcmVzZXJ2ZWRfbnVtO1xuK1x0dTMyIGZyZWVfdHhwZztcbitcdHUxNiBwdWJxX251bTtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICsgcGdfdGJsLVx1MDAzZWxxX251bSArIHBnX3RibC1cdTAwM2VucV9udW0gK1xuK1x0XHQgICAgICAgcGdfdGJsLVx1MDAzZWV4cV9udW0gKyBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxuK1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4rXHRcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVx1MDAzZWhxX251bSwgcGdfdGJsLVx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbitcdHUzMiBjbGVhcjtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0Y2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgXHUwMDI2XG4rXHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTA2MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHF1ZXVlX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbitcdC8qXG4rXHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuK1x0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXG4rXHQgKi9cbitcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgKzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4rXHQvKlxuK1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4rXHQgKiB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcbitcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxuK1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbitcdCAqL1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7XG4rXHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwOTUsNiArMTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4rXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBydHdzZGlvLVx1MDAzZWlycV9tYXNrIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuKy8qXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcbisgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiBcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKTtcbiBcdGlmICghc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAwO1xuIFxuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbitcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlO1xuK1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbitcdH1cbitcbitcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4rXHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4rXHRcdFx0ICAgICB3b3JrKTtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4tXHRpbnQgbGltaXQsIHF1ZXVlO1xuK1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuK1x0Ym9vbCBydGw4NzIzYnM7XG4gXG4gXHRydHdkZXYgPSB3b3JrX2RhdGEtXHUwMDNlcnR3ZGV2O1xuIFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiBcbiBcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXHUwMDI2cnR3ZGV2LVx1MDAzZWZ3LCBGV19GRUFUVVJFX1RYX1dBS0UpKVxuIFx0XHRydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7XG4gXG4gXHRmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSBcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcbiBcdFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XG4tXHRcdFx0cnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBBIHBhZ2Ugc2hvcnRhZ2UgaXMgdHJhbnNpZW50OiBsZWF2ZSB0aGVcbitcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuK1x0XHRcdFx0ICogb2Ygc3RhbGxpbmcgdGhpcyBBQyB1bnRpbCBzb21ldGhpbmcgZWxzZVxuK1x0XHRcdFx0ICoga2lja3MgdGhlIHdvcmtlci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcmV0ID09IC1FQlVTWSkge1xuK1x0XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuK1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4rXHRcdFx0XHRcdFx0XHQgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7XG4rXHRcdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFJlc3RhcnQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBhZnRlciBldmVyeVxuK1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbitcdFx0XHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbitcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4rXHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssIDApO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgKzE2MTgsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW2ldKTtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7XG4rXHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMzE1LDYgKzE2NDEsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdGludCBpO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiArMjIsNyBAQFxuIFxuIC8qIFNESU8gVHggQ29udHJvbCAqL1xuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDIpXG5AQCAtNzcsNiArNzgsMTQgQEBcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcdFx0QklUKDI5KVxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4rXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXG4gXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV01cdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcbkBAIC04Niw2ICs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXG4gLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDIwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUxcdFx0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1dcdFx0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi9cbkBAIC0xNDMsNyArMTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEge1xuIH07XG4gXG4gc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiArMTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuK1x0Ym9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcbitcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcbitcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xuK1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4rXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcbitcdGF0b21pY190IHR4X29xdF9mcmVlO1xuIH07XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM4OjQzLjE5NTA0NzEwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTI3MTQ5MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0YXJnZXRpbmcgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBgcnR3ODhgIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLiBNeSBpbml0aWFsIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucyB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlczogYG1haW4uaGAsIGByeC5jYCwgYHNkaW8uY2AsIGFuZCBgc2Rpby5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYWRkaW5nIHN1cHBvcnQgZm9yIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCwgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBTRElPIChgcnR3X2lzXzg3MjNic2ApLlxuXG5EaWdnaW5nIGRlZXBlciwgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydHdfc2Rpb184NzIzYnNfKmAgYXJlIGludHJvZHVjZWQsIGhhbmRsaW5nIHRhc2tzIHN1Y2ggYXMgVFggcGFnZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBxdWV1ZSBoYW5kbGluZy4gTW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBmdW5jdGlvbnMsIGBydHdfc2Rpb193cml0ZV9wb3J0YCBhbmQgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLCBzdWdnZXN0IGNoaXAtc3BlY2lmaWMgbG9naWMgZm9yIHRoZSA4NzIzQlMgdmFyaWFudC4gVGhlIGFsdGVyYXRpb24gb2YgYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGEgYGRlbGF5ZWRfd29ya2AgaXMgYWxzbyBhIGtleSBjaGFuZ2UuIEZpbmFsbHksIGJhY2stcHJlc3N1cmUgbG9naWMgZm9yIG1hYzgwMjExIHF1ZXVlcyBzdWdnZXN0cyBmdXJ0aGVyIGludGVncmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgbmV0d29ya2luZyBzdGFjay5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IENhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQ/IFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGludG8gcGxheS4gVGhlIGRyaXZlciBpcyBgcnR3ODhgLCB3aGljaCBpcyBhIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNwZWNpZmljYWxseSB3aXRoaW4gYHNkaW8uY2AsIGltcGx5aW5nIGFuIFNESU8gaW50ZXJmYWNlLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IFFFTVUsIG91ciBnby10byB2aXJ0dWFsaXphdGlvbiBwbGF0Zm9ybSwgYW5kIHdoZXRoZXIgaXQgY2FuIGVtdWxhdGUgU0RJTyBkZXZpY2VzIHN1ZmZpY2llbnRseSB0byB0cmlnZ2VyIHRoZXNlIGNvZGUgcGF0aHMuXG5cbkkga25vdyBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgbWFjODAyMTEsIGJ1dCB0aGlzIGlzIGEgKnNwZWNpZmljKiBoYXJkd2FyZSBkcml2ZXIuIFVzdWFsbHksIHRoZXNlIHNvcnRzIG9mIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXJzLCBzdWNoIGFzIGBydHc4OGAsIGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHdpdGhvdXQgc3BlY2lmaWMgUENJIG9yIFVTQiBlbXVsYXRpb24uIEhvd2V2ZXIsIHRoaXMgaXMgKlNESU8qLiBRRU1VIGhhcyBzb21lIFNESENJIGVtdWxhdGlvbiwgYnV0IGRvZXMgaXQgZ28gc28gZmFyIGFzIHRvIGVtdWxhdGUgdGhlIFJlYWx0ZWsgODcyM0JTIFNESU8gV2ktRmkgY2FyZD8gTW9zdCBsaWtlbHkgbm90LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQncyBleGNsdXNpb24gb2YgY29kZSB0aGF0J3Mgbm90IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5UaGUgcHJvbXB0IGhpZ2hsaWdodHMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcyBiZWluZyBleGNsdWRlZC4gYHJ0dzg4YCBpcyBhIFJlYWx0ZWsgV2ktRmkgZHJpdmVyLCBzbyBpdCBkb2VzIHF1YWxpZnkgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGFuZCB3b3VsZCBsaWtlbHkgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuVGhlIG5leHQgcG9pbnQgSSBuZWVkIHRvIGNvbnNpZGVyIGlzIHN5emthbGxlcidzIFdpLUZpIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGNvdmVyYWdlIHZpYSBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhhdCdzIGFpbWVkIGF0IHRoZSBnZW5lcmljIG1hYzgwMjExIHN0YWNrLiBSZWFsdGVrJ3MgZHJpdmVyIGlzIGxpa2VseSB0byBub3QgYmUgY292ZXJlZCwgdW5sZXNzIHdlIGhhdmUgYSBVU0IvUENJL1NESU8gZnV6emVyIHRoYXQgY2FuIGluamVjdCBwYWNrZXRzIGFuZCByZXNwb25zZXMuIEkga25vdyBzeXprYWxsZXIgZG9lcyBoYXZlIGEgVVNCIGZ1enplciB2aWEgYGR1bW15X2hjZGAsIGJ1dCBkb2VzIGl0IGhhdmUgYW4gU0RJTyBmdXp6ZXI/IEknbGwgbmVlZCB0byByZXNlYXJjaCB0aGF0LCBjaGVja2luZyB0aGUga2VybmVsIHNvdXJjZXMgYW5kIHN5emthbGxlcidzIGNvZGViYXNlIGZvciBTRElPIGZ1enppbmcgb3IgaWYgYHJ0dzg4YCBpcyBhbHJlYWR5IHRhcmdldGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM4OjU2LjEyMjIwMDQ0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgzMDEyMzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM4OjU2LjQwMDUxMjk2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDYyMTQ3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgU3l6a2FsbGVyJ3MgU0RJTyBGdXp6aW5nIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgaXMgYSB2aWFibGUgdG9vbCBmb3IgZnV6emluZyBTRElPLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgY292ZXJhZ2UuIERvZXMgaXQgaGF2ZSBhbnkgZXhpc3RpbmcgU0RJTyBzdXBwb3J0IG1vZHVsZXM/IElmIG5vdCwgd2hhdCdzIHRoZSBsZXZlbCBvZiBlZmZvcnQgcmVxdWlyZWQgdG8gYWRkIGl0PyBJIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFNESU8gcHJvdG9jb2wgaXRzZWxmLiBBcmUgdGhlcmUgc3BlY2lmaWMgYXNwZWN0cyBsaWtlIHRoZSBDTUQgYW5kIERBVEEgbGluZXMsIGludGVycnVwdCBoYW5kbGluZywgb3IgdGhlIHZhcmlvdXMgU0RJTyByZWdpc3RlcnMgdGhhdCB3aWxsIHJlcXVpcmUgZm9jdXNlZCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmc/IEFuZCB3aGF0IGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBEb2VzIHN5emthbGxlciBoYXZlIGdvb2Qgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgU0RJTyBsaWtlIHRoZSBCcm9hZGNvbSBvciBRdWFsY29tbSBjaGlwcz9cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBraW5kcyBvZiBpbnB1dHMgdGhhdCB3b3VsZCBiZSBlZmZlY3RpdmUuIFdoYXQgYXJlIHRoZSBrZXkgYXR0YWNrIHN1cmZhY2VzIHdpdGhpbiB0aGUgU0RJTyBkcml2ZXI/IFNlbmRpbmcgbWFsZm9ybWVkIGNvbW1hbmRzPyBVbmV4cGVjdGVkIGRhdGEgc2l6ZXM/IE92ZXJmbG93aW5nIGJ1ZmZlcnM/IEludGVycnVwdCBzdG9ybXM/IFRoZSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgaGF2ZSB0byBiZSB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzIEkgd2FudCB0byB1bmNvdmVyLiBJJ2xsIG5lZWQgdG8gY3JhZnQgYSBwbGFuIHRvIGNyZWF0ZSBlZmZlY3RpdmUgdGVzdCBjYXNlcywgYW5kIGRldGVybWluZSBob3cgdG8gdmFsaWRhdGUvYXNzZXNzIHRoZSBzdGFiaWxpdHkgYW5kIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIGZ1enppbmcuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGUgcHJhY3RpY2FsaXRpZXMuIEhvdyBlYXN5IGlzIGl0IHRvIGludGVncmF0ZSBTRElPIGZ1enppbmcgaW50byBteSBjdXJyZW50IHNldHVwPyBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIHdpbGwgSSBuZWVkIHRvIGNvbGxlY3QgdXNlZnVsIHJlc3VsdHMsIGFuZCBkZXRlY3QgY3Jhc2hlcywgaGFuZ3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEnigJltIHRoaW5raW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBrZXJuZWwgcGFuaWNzLCBwcmltYXJpbHkuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcG90ZW50aWFsIHBheW9mZiBhZ2FpbnN0IHRoZSBkZXZlbG9wbWVudCB0aW1lIHJlcXVpcmVkLiBHaXZlbiBteSBleHBlcnRpc2UsIG15IGZvY3VzIGlzIG9uIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZW5kZWF2b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MDEuNDA2NzMwMDM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzAwMTA0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV6elwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21tYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjAxLjU2OTczOTg1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDkwMTA3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIGEgVmlydHVhbCBTRElPIEhvc3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBidXNpbmVzcy4gQmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBpbiBvcmRlci4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZnVuZGFtZW50YWwgc2V0dXAgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhlcmUgZXZlbiBhIHZpcnR1YWwgU0RJTyBob3N0IGNvbnRyb2xsZXIgcHJlc2VudD9cIiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyB3aXRob3V0IGl0LCB0aGUgcmVzdCBvZiBteSBpbnZlc3RpZ2F0aW9uIGlzIHBvaW50bGVzcy4gSXQgZGljdGF0ZXMgdGhlIGVudGlyZSBhcHByb2FjaC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZXhpc3RlbmNlIGJlZm9yZSBJIGV2ZW4gY29uc2lkZXIgd2hhdCB0YXNrcyB0aGlzIGNvbnRyb2xsZXIgbWF5IGJlIHBlcmZvcm1pbmcuIFdlJ2xsIHN0YXJ0IHdpdGggdmVyaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjA1LjkxODc1MzQ3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NTk3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21tYy9ob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE4NDkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZz02NTk9Y29uZmlnIE1NQ19NVlNESU9cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWc6NjY5OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWctNjcwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXFx0Kz0gdGlmbV9zZC5vXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTU1DX01WU0RJTylcXHQrPSBtdnNkaW8ub1xcbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUtMzYtb2JqLSQoQ09ORklHX01NQ19EQVZJTkNJKSAgICAgICArPSBkYXZpbmNpX21tYy5vXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcXHQrPSBtZXNvbi1teC1zZGhjLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RJTylcXHQrPSBtZXNvbi1teC1zZGlvLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19NTUNfTU9YQVJUKVxcdCs9IG1veGFydC1tbWMub1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL2hvc3QuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjMwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzEtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg3LSAqIEBzZGNfcmVnOiBWYWx1ZSBvZiBTRENSIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIHVzaW5nIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4OS0gKiBAbXJxOiBtbWNfcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIG9yIHdhaXRpbmcgdG8gYmVcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTQwNS1cXHR1MzJcXHRcXHRcXHRzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6NDA2OlxcdHUzMlxcdFxcdFxcdHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0xNTQ1PXN0YXRpYyBpbnQgYXRtY2lfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTU4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU1OTpzdGF0aWMgdm9pZCBhdG1jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2NC1cXHRpZiAoZW5hYmxlKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NTpcXHRcXHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTY2LVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1Njc6XFx0XFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cXHUwMDNlc2Rpb19pcnEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2OC19XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTE1NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXRtY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVxcdC5nZXRfY2RcXHRcXHQ9IGF0bWNpX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NzU6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGF0bWNpX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjAxMT1zdGF0aWMgdm9pZCBhdG1jaV93cml0ZV9kYXRhX3BpbyhzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDc4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA3OTpzdGF0aWMgdm9pZCBhdG1jaV9zZGlvX2ludGVycnVwdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCB1MzIgc3RhdHVzKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwODQtXFx0XFx0c3RydWN0IGF0bWVsX21jaV9zbG90ICpzbG90ID0gaG9zdC1cXHUwMDNlc2xvdFtpXTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XFx0XFx0aWYgKHNsb3QgXFx1MDAyNlxcdTAwMjYgKHN0YXR1cyBcXHUwMDI2IHNsb3QtXFx1MDAzZXNkaW9faXJxKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA4NjpcXHRcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKHNsb3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjA5Mj1zdGF0aWMgaXJxcmV0dXJuX3QgYXRtY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cXHRcXHRpZiAocGVuZGluZyBcXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMTQ6XFx0XFx0XFx0YXRtY2lfc2Rpb19pbnRlcnJ1cHQoaG9zdCwgc3RhdHVzKTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMTUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIyMzY9c3RhdGljIGludCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzctXFx0XFx0c3RydWN0IG1jaV9zbG90X3BkYXRhICpzbG90X2RhdGEsIHVuc2lnbmVkIGludCBpZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMzg6XFx0XFx0dTMyIHNkY19yZWcsIHUzMiBzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzkte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU0LVxcdHNsb3QtXFx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjI1NTpcXHRzbG90LVxcdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI1Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cXHRtbWMtXFx1MDAzZW9jcl9hdmFpbFxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjY4OlxcdGlmIChzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXFx0XFx0bW1jLVxcdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz03Nzg9c3RhdGljIGlycXJldHVybl90IGF1MXhtbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc4OC1cXHRpZiAoc3RhdHVzIFxcdTAwMjYgU0RfU1RBVFVTX1NJKVxcdC8qIFNESU8gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYzo3ODk6XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkwNj1zdGF0aWMgdm9pZCBhdTF4bW1jX2RiZG1hX3NodXRkb3duKHN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MTQtXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTE1OnN0YXRpYyB2b2lkIGF1MXhtbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW4pXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdTF4bW1jX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkyOS1cXHQuZ2V0X2NkXFx0XFx0PSBhdTF4bW1jX2NhcmRfaW5zZXJ0ZWQsXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTMwOlxcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MzEtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzo5OiAqIFRoZSBzZGhjaSBjb250cm9sbGVyIHN1cHBvcnRzIGJvdGggc2RjYXJkIGFuZCBzZGlvLiAgVGhlIHNkaG9zdFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEwLSAqIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlIHNkY2FyZCBvbmx5LCBidXQgaGFzIGJldHRlciBwZXJmb3JtYW5jZS5cXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEyLSAqIHRoZSBzZGhvc3QgY29udHJvbGxlciBhbGxvd3MgdG8gdXNlIHRoZSBzZGhjaSBjb250cm9sbGVyIGZvciB3aWZpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzMtXFx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxNzQ6XFx0aW50IG1tY19pcnEsIHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXFx0dW5zaWduZWQgY2hhciBidXNfbW9kZTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXFx0Ym9vbCBkb19kbWE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE4ODpcXHRib29sIHNkaW9faW50O1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODktXFx0Ym9vbCBhY3RpdmVfcmVxdWVzdDtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz03NTY9bW1jX2RhdmluY2lfeGZlcl9kb25lKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVxcdFxcdCAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XFx0XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faW50IFxcdTAwMjZcXHUwMDI2ICEocmVhZGwoaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT1NUMCkgXFx1MDAyNlxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjctXFx0XFx0XFx0XFx0XFx0U0RJT1NUMF9EQVQxX0hJKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjgtXFx0XFx0XFx0d3JpdGVsKFNESU9JU1RfSU9JTlQsIGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JU1QpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3Njk6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NzAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTgzMz1kYXZpbmNpX2Fib3J0X2RhdGEoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDAtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg0MTpzdGF0aWMgaXJxcmV0dXJuX3QgbW1jX2RhdmluY2lfc2Rpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1MC1cXHRcXHR3cml0ZWwoc3RhdHVzIHwgU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg1MTpcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI0LVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cXHRcXHRcXHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzI6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XFx0XFx0XFx0aG9zdC1cXHUwMDNlc2Rpb19pbnQgPSB0cnVlO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM1LVxcdFxcdFxcdHdyaXRlbChyZWFkbChob3N0LVxcdTAwM2ViYXNlICsgREFWSU5DSV9TRElPSUVOKSB8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzOC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5OlxcdFxcdGhvc3QtXFx1MDAzZXNkaW9faW50ID0gZmFsc2U7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEwNDAtXFx0XFx0d3JpdGVsKHJlYWRsKGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JRU4pIFxcdTAwMjYgflNESU9JRU5fSU9JTlRFTixcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDQ5LVxcdC5nZXRfcm9cXHRcXHQ9IG1tY19kYXZpbmNpX2dldF9ybyxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcXHQuZW5hYmxlX3NkaW9faXJxID0gbW1jX2RhdmluY2lfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDUxLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTE4ND1zdGF0aWMgaW50IGRhdmluY2lfbW1jc2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVxcdGhvc3QtXFx1MDAzZW1tY19pcnEgPSBpcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEzMDEtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faXJxIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTMwMzpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGhvc3QtXFx1MDAzZXNkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzA0OlxcdFxcdFxcdFxcdCAgICAgICBtbWNfZGF2aW5jaV9zZGlvX2lycSwgMCxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cXHRcXHRcXHRcXHQgICAgICAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDMtXFx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYzo1MDQ6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSA4O1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTA1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkaW8uaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTE0ODA9c3RhdGljIHZvaWQgZHdfbWNpX2h3X3Jlc2V0KHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTUxMzpzdGF0aWMgdm9pZCBkd19tY2lfcHJlcGFyZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBib29sIHByZXBhcmUpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTE0LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU0MC1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NDE6c3RhdGljIHZvaWQgX19kd19tY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1MC1cXHRpZiAoZW5iKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MTpcXHRcXHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTUyLVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTM6XFx0XFx0aW50X21hc2sgXFx1MDAyNj0gflNETU1DX0lOVF9TRElPKGhvc3QtXFx1MDAzZXNkaW9faXJxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXFx0bWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLCBpbnRfbWFzayk7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTU5OnN0YXRpYyB2b2lkIGR3X21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2Mi1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjM6XFx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjQ6XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIGVuYik7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTcyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3NC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTc3OlxcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0xNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGR3X21jaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2NzctXFx0LmNhcmRfaHdfcmVzZXQgICAgICAgICAgPSBkd19tY2lfaHdfcmVzZXQsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4OlxcdC5lbmFibGVfc2Rpb19pcnFcXHQ9IGR3X21jaV9lbmFibGVfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5OlxcdC5hY2tfc2Rpb19pcnFcXHRcXHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNjgwLVxcdC5leGVjdXRlX3R1bmluZ1xcdFxcdD0gZHdfbWNpX2V4ZWN1dGVfdHVuaW5nLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc1Ny1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XFx0XFx0aWYgKHBlbmRpbmcgXFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpIHtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTktXFx0XFx0XFx0bWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLFxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcXHRcXHRcXHRcXHQgICBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcXHRcXHRcXHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNzYyOlxcdFxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTI3OTQ9c3RhdGljIGludCBkd19tY2lfaW5pdF9ob3N0X2NhcHMoc3RydWN0IGR3X21jaSAqaG9zdClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI4MjY6XFx0LyogUHJvY2VzcyBTRElPIElSUXMgdGhyb3VnaCB0aGUgc2Rpb19pcnFfd29yay4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXFx0aWYgKG1tYy1cXHUwMDNlY2FwcyBcXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTM0NDM9aW50IGR3X21jaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTM0OTQtXFx0LyogUmUtZW5hYmxlIFNESU8gaW50ZXJydXB0cy4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XFx0aWYgKHNkaW9faXJxX2NsYWltZWQoaG9zdC1cXHUwMDNlbW1jKSlcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XFx0XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9NTI9c3RydWN0IGR3X21jaV9kbWFfc2xhdmUge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0xMjEtICogQGlycTogVGhlIGlycSB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gcmVxdWVzdF9pcnEuXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoxMjI6ICogQHNkaW9faXJxOiBTRElPIGludGVycnVwdCBiaXQgaW4gaW50ZXJydXB0IHJlZ2lzdGVycy5cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9MTYxPXN0cnVjdCBkd19tY2kge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzMtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoyMzQ6XFx0aW50XFx0XFx0XFx0c2Rpb19pcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NTktXFx0XFx0ano0NzQwX21tY193cml0ZV9pcnFfcmVnKGhvc3QsIEpaX01NQ19JUlFfU0RJTyk7XFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6ODYwOlxcdFxcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cXHUwMDNlbW1jKTtcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXFx0XFx0aXJxX3JlZyBcXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM9OTQwPXN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTk5NC1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzo5OTU6c3RhdGljIHZvaWQgano0NzQwX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTEwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgano0NzQwX21tY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI0LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzoxMDI1OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI2LVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBqejQ3NDBfdm9sdGFnZV9zd2l0Y2gsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTQxMz1zdGF0aWMgaXJxcmV0dXJuX3QgbG9vbmdzb24yX21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MjgtXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6NDI5OlxcdFxcdHNkaW9fc2lnbmFsX2lycShtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQzMC1cXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU4OC1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTkwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTY6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk3LXtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XFx0bG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTktfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGxvb25nc29uMl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MDY6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGxvb25nc29uMl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcXHQuYWNrX3NkaW9faXJxXFx0PSBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTYxNz1zdGF0aWMgaW50IGxvb25nc29uMl9yZW9yZGVyX2NtZF9saXN0W10gPSB7IFNEX0FQUF9TRU5EX1NDUiwgU0RfQVBQX1NFTkRfTlVNX1dSX0JMS1MsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MjItICogcmVzcG9uc2UgZGF0YXMgaGFzIGRpZmZlcmVudCBieXRlIG9yZGVyIHdpdGggdXN1YWwgZGF0YSBwYWNrZXRzLlxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYyMzogKiBIb3dldmVyIHNkaW8gY29udHJvbGxlciB3aWxsIHNlbmQgdGhlc2UgZGF0YXMgaW4gdXN1YWwgZGF0YSBmb3JtYXQsXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9OTQwPXN0YXRpYyBpbnQgbG9vbmdzb24yX21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTczLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjk3NDpcXHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTk3NS1cXHRpZiAobW1jLVxcdTAwM2VjYXBzIFxcdTAwMjYgTU1DX0NBUF9TRElPX0lSUSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtNTMtI2RlZmluZSAgIENMS19BTFdBWVNfT04oaClcXHRcXHQoaC1cXHUwMDNlZGF0YS1cXHUwMDNlYWx3YXlzX29uKVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVxcdFxcdChoLVxcdTAwM2VkYXRhLVxcdTAwM2VpcnFfc2Rpb19zbGVlcClcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTU1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzY9c3RydWN0IG1lc29uX21tY19kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVxcdHVuc2lnbmVkIGludCBhZGp1c3Q7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxNDE6XFx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQyLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIwLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTk1Ni1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU3OlxcdFxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMsIDApO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU4OlxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEwOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTEte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTE2OlxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIGVuYWJsZSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjEte1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEyMjpcXHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTMzLVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTM0OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcXHQuYWNrX3NkaW9faXJxXFx0PSBtZXNvbl9tbWNfYWNrX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fbW1jX2RhdGEgbWVzb25fZ3hfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxMy1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMTQ6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjJfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzE1LX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZXNvbl9tbWNfZGF0YSBtZXNvbl9heGdfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMjI6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzIzLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM9MTMyPXN0YXRpYyB2b2lkIG1lc29uX214X3NkaGNfc3RhcnRfY21kKHN0cnVjdCBtbWNfaG9zdCAqbW1jLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cXHRcXHQgKiBkb3dubG9hZCBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGZvciBhIEJDTTQzMzYyLzEgY2FyZC5cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlxcdFxcdCAqIFdpdGhvdXQgdGhpcyBzZGlvX21lbWNweV90b2lvKCkgKHdpdGggYSBzaXplIG9mIDIxOTU1N1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXFx0XFx0ICogYnl0ZXMpIHRpbWVzIG91dCBpZiBNRVNPTl9TREhDX01JU0NfTUFOVUFMX1NUT1AgaXMgbm90IHNldC5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTItLypcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzozOiAqIG1lc29uLW14LXNkaW8uYyAtIE1lc29uNiwgTWVzb244IGFuZCBNZXNvbjhiIFNESU8vTU1DIEhvc3QgQ29udHJvbGxlclxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvbW1jLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMC17XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NjMxOlxcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02MzItXFx0XFx0LnJlZ19iaXRzID0gOCxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTY2OC1cXHRob3N0LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYmFzZSxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo2Njk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVzb25fbXhfc2Rpb19yZWdtYXBfY29uZmlnKTtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NzAtXFx0aWYgKElTX0VSUihob3N0LVxcdTAwM2VyZWdtYXApKSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzQ5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjgtc2Rpb1xcXCIsIH0sXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzUwOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjhiLXNkaW9cXFwiLCB9LFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNzU4LVxcdC5kcml2ZXIgID0ge1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1OTpcXHRcXHQubmFtZSA9IFxcXCJtZXNvbi1teC1zZGlvXFxcIixcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXFx0XFx0LnByb2JlX3R5cGUgPSBQUk9CRV9QUkVGRVJfQVNZTkNIUk9OT1VTLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzMtICpcXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYzozNDogKiAtIEZvciBub3csIHdlIHdvbid0IHRyeSB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIHJlYWwgbW1jL3NkL3NkaW9cXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zNS0gKiAgIGNvbnRyb2xsZXIsIGFsdGhvdWdoIHNvbWUgb2YgdGhlbSBkbyBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgZm9yXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMTE9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91MzAwID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcXHQuc3Rfc2Rpb1xcdFxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjQtXFx0LnB3cnJlZ19wb3dlcnVwXFx0XFx0PSBNQ0lfUFdSX09OLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTM2PXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfbm9tYWRpayA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cXHQuZGF0YWN0cmxfYmxvY2tzelxcdD0gMTEsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTQ5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3Ni1cXHQuZG1hX3Bvd2VyX29mXzJcXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjExLVxcdC5kbWFfcG93ZXJfb2ZfMlxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yMTQtXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjQ0LVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDU6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI0NjpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI1Nj1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjcyLVxcdC5kYXRhY3RybF9hbnlfYmxvY2tzelxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzM6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NC1cXHQuc3RtMzJfaWRtYWJzaXplX21hc2tcXHQ9IEdFTk1BU0soMTIsIDUpLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NS1cXHQuc3RtMzJfaWRtYWJzaXplX2FsaWduXFx0PSBCSVQoNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6Mjc2OlxcdC5zdXBwb3J0c19zZGlvX2lycVxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzctXFx0LmJ1c3lfdGltZW91dFxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDAtXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMwMTpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAyLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAzLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg1KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDQ6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwNS1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTMxMz1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNiksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg2KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTQyNT1zdGF0aWMgdm9pZCBtbWNpX3dyaXRlX2RhdGFjdHJscmVnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHUzMiBkYXRhY3RybClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTQyOC1cXHRkYXRhY3RybCB8PSBob3N0LVxcdTAwM2VkYXRhY3RybF9yZWcgXFx1MDAyNiAoaG9zdC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjQyOTpcXHRcXHRcXHRcXHRcXHQgIGhvc3QtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWRhdGFjdHJsX21hc2tfc2Rpbyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTIzNj1zdGF0aWMgdm9pZCBtbWNpX3N0YXJ0X2RhdGEoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2MS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjYyOlxcdGlmIChob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQgXFx1MDAyNlxcdTAwMjYgbW1jX2NhcmRfc2Rpbyhob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQpKSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2My1cXHRcXHR1MzIgY2xrO1xcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNjQtXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2NTpcXHRcXHRkYXRhY3RybCB8PSB2YXJpYW50LVxcdTAwM2VkYXRhY3RybF9tYXNrX3NkaW87XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNzItXFx0XFx0ICovXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI3MzpcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNlc3Rfc2RpbyBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cXHRcXHQgICAgKGhvc3QtXFx1MDAzZXNpemUgXFx1MDAzYyA4IHx8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc2OC1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc3MC17XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MDYuMDM5NzE3OTU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzMTMzMTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNESU8gRHJpdmVyIGluIFFFTVUgYW5kIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHJ0dzg4YCBkcml2ZXIsIGFuZCBpdCdzIGZvciBhIFJlYWx0ZWsgODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYW4gU0RJTyBkZXZpY2UuIFFFTVUgc3VwcG9ydHMgdmFyaW91cyBTRElPIGhvc3QgY29udHJvbGxlcnMg4oCTIHNkaGNpLCBiY20yODM1X3NkaG9zdCwgYW5kIHRoZSBsaWtlIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgZG9lcyBRRU1VICphY3R1YWxseSogZW11bGF0ZSB0aGUgUmVhbHRlayA4NzIzQlMgaXRzZWxmPyBObywgdGhhdCdzIG5vdCBpdHMgZ2VuZXJhbCBwdXJwb3NlLlxuXG5TbywgaWYgaXQncyBTRElPLCBRRU1VIGNhbiBkbyBTRCBjYXJkcyBpbiBhIGxpbWl0ZWQgd2F5LCBidXQgYW4gU0RJTyBXaS1GaSBjYXJkPyBJIGRvbid0IHRoaW5rIHNvLCB1bmxlc3MgdGhlcmUncyBzcGVjaWZpYyBlbXVsYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBzb21lIG9ic2N1cmUgYHNkaW9fZHVtbXlgIGtlcm5lbCBtb2R1bGUgb3Igc29tZXRoaW5nLiBObywgbm90aGluZyBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaW4gdGVybXMgb2YgYSBnZW5lcmFsIFNESU8gZW11bGF0aW9uIGxheWVyIGluIHRoZSBrZXJuZWwuIFdhaXQsIHRoZXJlJ3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCB0aGF0J3MgYXQgdGhlIG1hYzgwMjExIGxheWVyLCBub3QgdGhlIFNESU8gYnVzIGxldmVsLiBJIGtub3cgdGhhdCB0aGUgYHJ0dzg4YCBkcml2ZXIgaXMgZGVzaWduZWQgdG8gYmluZCB0byBhbiBTRElPIGRldmljZSB3aXRoIGEgc3BlY2lmaWMgdmVuZG9yL2RldmljZSBJRCBjb21iaW5hdGlvbi5cblxuSWYgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSwgZG9lc24ndCBwcmVzZW50IGEgdmlydHVhbCBTRElPIFdpLUZpIGNhcmQgd2l0aCB0aG9zZSBwYXJ0aWN1bGFyIElEcywgdGhlIGRyaXZlcidzIGBwcm9iZWAgZnVuY3Rpb24gd2lsbCAqbmV2ZXIqIGJlIGNhbGxlZC4gV2hpY2ggbWVhbnMgbm9uZSBvZiB0aGlzIGNvZGUgSSdtIGxvb2tpbmcgYXQgd291bGQgYmUgcmVhY2hhYmxlLiBJdCdzIGEgZnVuZGFtZW50YWwgaXNzdWUgb2YgaG93IHRoZSBoYXJkd2FyZSBlbXVsYXRpb24gaXMgc2V0IHVwLlxuXG5Ob3csIGxldCdzIHNlZSBpZiBzeXprYWxsZXIgY2FuIGhlbHAgbWUgd2l0aCB0aGlzIHByb2JsZW0uIEkgaGF2ZSBzZWVuIHRoYXQgc3l6a2FsbGVyIGhhcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGRldmljZXMgYW5kIGBzeXpfdmhjaWAgZm9yIEJsdWV0b290aCwgYW5kIGBzeXpfZ2VuZXRsaW5rYCBmb3IgbmV0bGluay4gVGhlIHF1ZXN0aW9uIGlzOiBEb2VzIHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBzaW1pbGFyIGZvciBTRElPPyBEb2VzIGl0IGhhdmUgYSBgc3l6X3NkaW9fY29ubmVjdGAgY2FsbCBvciBzb21ldGhpbmcgSSBjYW4gdXNlPyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTM1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjEzLjU3MTA1MzQzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzc3MTc3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X3NkaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozOToxOC4xODQ4NDI2ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NjI0ODY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJUVzg4IFNESU8gRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gZ2V0IGF0IHRoZSBgcnR3ODhgIFNESU8gZHJpdmVyIHdpdGggU3l6a2FsbGVyLiBGaXJzdCBvZmYsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWZlcmVuY2VzIHRvIGBzeXpfc2Rpb2AgcHNldWRvLXN5c2NhbGxzLCB3aGljaCBpcyBleHBlY3RlZC4gVGhhdCBwYXRoIGlzIHByb2JhYmx5IGEgZGVhZCBlbmQuIE5leHQsIEknbSB0aGlua2luZyBhYm91dCBgc3l6XzgwMjExYC4gU3l6a2FsbGVyICpjYW4qIGhpdCA4MDIuMTEgd2l0aCBmcmFtZSBpbmplY3Rpb24gdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gLCBidXQgYG1hYzgwMjExX2h3c2ltYCBpcyBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgZHJpdmVyLCBub3QgcmVsYXRlZCB0byBgcnR3ODhgLiBJdCBkb2Vzbid0IHVzZSBgcnR3ODhgLlxuXG5BbHJpZ2h0LCB0aGVuIEkgcmVtZW1iZXJlZCBTeXprYWxsZXIgY2FuIGFsc28gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5IGFyZSBRRU1VIGVtdWxhdGVkLiBCdXQgdGhlIHByb2JsZW0gaXMsIGBydHc4OGAgaXMgYW4gU0RJTyBkZXZpY2UuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgZG9lcyBRRU1VIG9mZmVyIGFueSBTRElPIGRldmljZSBlbXVsYXRpb24gdGhhdCBTeXprYWxsZXIgY291bGQgbGV2ZXJhZ2U/XG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgU3l6a2FsbGVyIGlzbid0IHNldCB1cCB0byBmdXp6IFNESU8gZHJpdmVycywgYmVjYXVzZSB0aGVyZSBpc24ndCBhIHJlYWRpbHkgYXZhaWxhYmxlIGR1bW15IGhvc3QgY29udHJvbGxlciBvciBTRElPIGRldmljZSBmdXp6ZXIgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gVGhlIGNvbW1vbiB3b3JrZmxvdyBpc24ndCB0aGVyZSBmb3IgU0RJTyBkZXZpY2VzLiBTbywgdG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgaWYgd2UgY2FuIGV2ZW4gZ2V0IGBydHc4OGAgdG8gcHJvYmUgaW4gdGhpcyBlbnZpcm9ubWVudCwgYXMgYSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MjMuODgxMDk1MjQ1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1NDQ5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnR3X3NkaW9fcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYz0yMT1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzY3NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cXHQuaWRfdGFibGUgPSBydHdfODcyM2NzX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2NzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYz0yNz1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzZHNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMjgtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jOjI5OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTIzLVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJic19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyY3NfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jOjI0OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE2Mzk9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNjUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE2NTI6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNjUzLVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNzI2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxNzI3OkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MjgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmg6MTg2OmludCBydHdfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg3LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozOToyNC4wMjM2NDU3NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1ODM0MTM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enphYmlsaXR5KipcblxuT2theSwgdGhlIHByb21wdCBpbnN0cnVjdHMgbWUgdG8gZmxhZyBwYXRjaGVzIGFzIHVuLWZ1enphYmxlIGlmIHRoZXkgdGFyZ2V0IGNvZGUgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBSZWFkaW5nIHRoaXMsIEkgc2VlIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIFJlYWx0ZWsgODcyM0JTIFNESU8gV2ktRmkgZHJpdmVyLiBBbmQgaW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgXCJObywgdGhpcyBpcyAqZGVmaW5pdGVseSogb2ZmLWxpbWl0cyBmb3Igc3RhbmRhcmQgZnV6emluZyBzZXR1cHMuXCIgU0RJTyBkZXZpY2VzLCBhcyBJIGtub3csIGFyZW4ndCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmUncyBubyB3YXkgSSBjYW4gc2ltdWxhdGUgdGhhdCBraW5kIG9mIGhhcmR3YXJlIG9uIEdDRSBvciBhIHJlZ3VsYXIgUUVNVSBpbnN0YW5jZS4gU28sIHRoZSBjaGFuY2VzIG9mIGV2ZW4gaGl0dGluZyB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIGxldCBhbG9uZSBleGVjdXRpbmcgYW55IG9mIGl0cyBjb2RlLCBpcyB6ZXJvLlxuXG5CdXQsIGJlaW5nIHRob3JvdWdoLCBJIHNob3VsZCAqYWx3YXlzKiBkb3VibGUtY2hlY2sgZm9yIGVkZ2UgY2FzZXMuIElzIHRoZXJlICphbnkqIHZpcnR1YWwgU0RJTyBkZXZpY2UgZnJhbWV3b3JrIGluIHRoZSBrZXJuZWwgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/IEkga25vdyBhYm91dCBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSwgd2hpY2ggaXMgc29mdHdhcmUtYmFzZWQgYnV0IG5vdCBTRElPLCBhbmQgYGR1bW15X2hjZGAgYW5kIGB2aGNpYCBmb3IgVVNCIGFuZCBCbHVldG9vdGgsIHJlc3BlY3RpdmVseS4gVGhlc2UgYXJlIGdvb2QgZXhhbXBsZXMgb2YgaG93IHRvIHNpbXVsYXRlIGRyaXZlcnMsIGFsbG93aW5nIGZ1enppbmcgaW4gdGhlc2UgY2FzZXMuIEhvd2V2ZXIsIGFmdGVyIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgdGhlcmUgaXMgbm8gYGR1bW15X3NkaW9gIG9yIGBzZGlvX2Z1enplcmAgZXF1aXZhbGVudCBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGlzIHN0cm9uZ2x5IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2g6IFNESU8gZHJpdmVycyBjYW4ndCBiZSByZWFkaWx5IGZ1enplZCBieSBzeXprYWxsZXIgb3IgYSBzaW1pbGFyIHRvb2wuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciAqbmVlZHMqIGEgcGh5c2ljYWwgU0RJTyBjYXJkIHRvIHJ1biwgYW5kIFFFTVUgZG9lcyBub3QgZW11bGF0ZSB0aGVtLCB0aGlzIHNob3VsZCBiZSBtYXJrZWQgYXMgdW4tZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTk0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjM5OjMxLjU4MTk5MTEwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYxNzY2OTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZGlvX2FkZF9mdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21tYy9jb3JlL3NkaW8uYz0xMjEyPWludCBtbWNfYXR0YWNoX3NkaW8oc3RydWN0IG1tY19ob3N0ICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvLmMtMTMwNC1cXHRmb3IgKGkgPSAwO2kgXFx1MDAzYyBmdW5jcztpKyspIHtcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW8uYzoxMzA1OlxcdFxcdGVyciA9IHNkaW9fYWRkX2Z1bmMoaG9zdC1cXHUwMDNlY2FyZC1cXHUwMDNlc2Rpb19mdW5jW2ldKTtcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW8uYy0xMzA2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM9MzgzPXN0YXRpYyB2b2lkIHNkaW9fc2V0X29mX25vZGUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYylcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zOTItICovXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jOjM5MzppbnQgc2Rpb19hZGRfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zOTQte1xcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTQxMS0gKiAoZXZlbnR1YWxseSkgZnJlZSBpdC5cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM6NDEyOiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGVycm9yIHBhdGhzIHdoZXJlIHNkaW9fYWRkX2Z1bmMoKSB3YXNcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtNDEzLSAqIG5ldmVyIGV4ZWN1dGVkIChiZWNhdXNlIGEgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbiBlYXJsaWVyIHBvaW50KS5cXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuaD0xMz1zdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2FsbG9jX2Z1bmMoc3RydWN0IG1tY19jYXJkICpjYXJkKTtcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmg6MTQ6aW50IHNkaW9fYWRkX2Z1bmMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7XFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5oLTE1LXZvaWQgc2Rpb19yZW1vdmVfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6Mzk6MzUuMTk5NjY1NDgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTQ5NTQ0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBTRElPIERyaXZlciBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyB0aGUgYHJ0dzg4YCBkcml2ZXIsIHdoaWNoIGlzIFJlYWx0ZWsncyBkcml2ZXIgZm9yIHRoZWlyIFdpLUZpIGNoaXBzLiBTcGVjaWZpY2FsbHksIHRoaXMgcGFydGljdWxhciBwYXRjaCBhcHBlYXJzIHRvIGJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gY2hpcC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgU0RJTyBpcyBhbHdheXMgYSBoZWFkYWNoZSB0byBmdXp6LlxuXG5UaGUgY29yZSBpc3N1ZSBpcywgYXMgSSBzdXNwZWN0ZWQsIHRoaXMgcGF0Y2ggaXMgaW1wb3NzaWJsZSB0byByZWxpYWJseSBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgU0RJTywgd2hpY2ggbWVhbnMgd2UgbmVlZCBhIHJlYWwgcGh5c2ljYWwgU0RJTyBXaS1GaSBjYXJkIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtLiBRRU1VIGFuZCBvdGhlciB2aXJ0dWFsaXphdGlvbiBzb2x1dGlvbnMgYXJlbid0IGdvaW5nIHRvIGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhY2N1cmF0ZWx5LiBUaGVyZSdzIG5vIGVxdWl2YWxlbnQgb2YgYSBgZHVtbXlfaGNkYCBmb3IgU0RJTyB0byBzaW11bGF0ZSB0aGUgZGV2aWNlIGFuZCBhbGxvdyB0ZXN0aW5nIGluIGEgc29mdHdhcmUtb25seSBtYW5uZXIsIGF0IGxlYXN0LCBub3QgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gTm8gZWFzeSB3YXkgdG8gZ2VuZXJhdGUgU0RJTyB0cmFmZmljLCBhbmQgdGhlcmVmb3JlLCBubyB3YXkgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGNvZGUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIG9mIHRoaXMsIG15IGFzc2Vzc21lbnQgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcgaW4gdGhlIGN1cnJlbnQgc2V0dXAuIEl0J3MgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvLiBXZSdkIG5lZWQgc2lnbmlmaWNhbnQgaGFyZHdhcmUgaW52ZXN0bWVudCwgb3IgYSBub3ZlbCBTRElPIGZ1enplciwgdG8gZXZlbiBiZWdpbiB0byBtYWtlIHByb2dyZXNzIG9uIGZ1enppbmcgdGhlIGxvZ2ljIGFkZGVkIGhlcmUuIEFuZCwgZXZlbiB0aGVuLCB0aGlzIGlzIGEgdmVyeSBzcGVjaWZpYyBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODIwLCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzozOTo0MS40NTQ2MjM4MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIGNoaXAuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgdG8gYmUgcHJlc2VudC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBkZXZpY2UgZnV6emVyIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIGNoaXAuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNhcmQgdG8gYmUgcHJlc2VudC4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBkZXZpY2UgZnV6emVyIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2t986[1] Phase: Running StartedAt: 2026-08-04 07:39:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2t986[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 07:39:52 +0000 UTC FinishedAt: 2026-08-04 07:39:56 +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,}