Name: series-workflowj2b79 Phase: Failed StartedAt: 2026-09-08 04:20:28 +0000 UTC FinishedAt: 2026-09-08 04:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2b79[0] Phase: Succeeded StartedAt: 2026-09-08 04:20:28 +0000 UTC FinishedAt: 2026-09-08 04:23:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2b79[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 04:20:28 +0000 UTC FinishedAt: 2026-09-08 04:23:46 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgLyBQQ0kgZGV2aWNlIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgb3IgcGxhdGZvcm0tc3BlY2lmaWMgQXp1cmUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjI0ZDU3NzE3Nzc0ZWRmMzRmNWJlNWUxMTc1YWNjM2Q0MzA0MDBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6MjM6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuaW5kZXggZjkyYjJkMGJmOTI2ZS4uNzg0MjRlMWQ4ODRmMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuQEAgLTE2Miw2ICYjNDM7MTYyLDggQEAgc3RhdGljIGludCBtYW5hX2dkX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiB7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4mIzQzO1x0Ym9vbCBuZWVkX2xvZyA9IHRydWU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChlcnIgIT0gLUVUSU1FRE9VVClcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTY5LDExICYjNDM7MTcxLDEzIEBAIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiBcdGlmICghZ2MpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRpZiAoaHdjIFx1MDAyNlx1MDAyNiBod2MtXHUwMDNlaHdjX3RpbWVvdXQgPT0gMClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0bmVlZF9sb2cgPSBmYWxzZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gbmVlZF9sb2c7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTMzMSw3ICYjNDM7MzM1LDExIEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9od2NfdGltZW91dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICp0aW1lb3V0X3ZhbClcbiBcdGlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKVxuIFx0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVQUk9UTztcbiBcbi1cdCp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tcztcbiYjNDM7XHQvKiBLZWVwIHRoZSBjdXJyZW50IHRpbWVvdXQgb24gYSB6ZXJvIHF1ZXJ5IHJlcGx5LiBBc3luY2hyb25vdXNcbiYjNDM7XHQgKiBIV0NfREFUQV9DRkdfSFdDX1RJTUVPVVQgdXBkYXRlcyByZW1haW4gdW5maWx0ZXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmVzcC50aW1lb3V0X21zKVxuJiM0MztcdFx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM4Nyw5ICYjNDM7Mzk1LDI3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9kZXRlY3RfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgbWFuYV9nZF9zZW5kX3JlcXVlc3Qoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiByZXFfbGVuLCBjb25zdCB2b2lkICpyZXEsXG4gXHRcdFx0IHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcClcbiB7XG4tXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4mIzQzO1x0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IGVycjtcbiBcbi1cdHJldHVybiBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHRpZiAoIWh3Yykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyYjNDM7JiM0Mzs7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoLS1od2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMClcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2Z2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFwmIzM0O05FVF9NQU5BXCYjMzQ7KTtcbiBcbkBAIC03MTAsNiAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghZ2MpIHtcbkBAIC03MTksMTQgJiM0Mzs3NDYsMTcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmICghaHdjKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O01BTkEgc2VydmljZTogbm8gSFdDXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBIV0MgaXMgbm90IHJlc3BvbmRpbmcgaW4gdGhpcyBjYXNlLCBzbyBkb24mIzM5O3Qgd2FpdCAqL1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFOQSByZXNldCBjeWNsZSBzdGFydFxcblwmIzM0Oyk7XG4gXG5AQCAtMTIzMCwxNSAmIzQzOzEyNjAsMTcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9jcmVhdGVfY3EoY29uc3Qgc3RydWN0IGdkbWFfcXVldWVfc3BlYyAqc3BlYyxcbiBzdGF0aWMgdm9pZCBtYW5hX2dkX2Rlc3Ryb3lfY3Eoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgKipjcV90YWJsZSA9IFJFQURfT05DRShnYy1cdTAwM2VjcV90YWJsZSk7XG4gXHR1MzIgaWQgPSBxdWV1ZS1cdTAwM2VpZDtcbiBcbi1cdGlmIChpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuJiM0MztcdC8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi9cbiYjNDM7XHRpZiAoIWNxX3RhYmxlIHx8IGlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghZ2MtXHUwMDNlY3FfdGFibGVbaWRdKVxuJiM0MztcdGlmICghY3FfdGFibGVbaWRdKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xuJiM0MztcdGNxX3RhYmxlW2lkXSA9IE5VTEw7XG4gfVxuIFxuIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCxcbkBAIC0xMzMzLDYgJiM0MzsxMzY1LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsXG4gXHRpZiAoZ21pLVx1MDAzZW5yX3BhZ2VzID09IDAgXHUwMDI2XHUwMDI2ICFNQU5BX1BBR0VfQUxJR05FRChnbWktXHUwMDNldmlydF9hZGRyKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogVGhlIGNhbGxlciBtdXN0IGtlZXAgdGhlIEhXQyBhbGl2ZSB0aHJvdWdob3V0IHF1ZXVlIGNyZWF0aW9uLiAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0cmVxX21zZ19zaXplID0gc3RydWN0X3NpemUocmVxLCBwYWdlX2FkZHJfbGlzdCwgbnVtX3BhZ2UpO1xuIFx0aWYgKHJlcV9tc2dfc2l6ZSBcdTAwM2UgaHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemUpXG5AQCAtMTUzOCw3ICYjNDM7MTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBUaGUgc2V0dXAgY2FsbGVyIG11c3QgZXhjbHVkZSBjb25jdXJyZW50IEhXQyB0ZWFyZG93bi4gKi9cbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XG4gXHRtYW5hX2dkX2luaXRfcmVxX2hkcihcdTAwMjZyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTixcbiBcdFx0XHQgICAgIHNpemVvZihyZXEpLCBzaXplb2YocmVzcCkpO1xuIFxuQEAgLTI1MzIsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNmdjLVx1MDAzZWVxX3Rlc3RfZXZlbnRfbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VnaWNfbXV0ZXgpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7XG4gXHRnYy1cdTAwM2ViYXIwX3BhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xuIFx0Z2MtXHUwMDNlYmFyMF9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbmluZGV4IDI2M2U3YzRlMjkzNDEuLjc1MGVlOGY3Mjk5OTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuQEAgLTksMTcgJiM0Mzs5LDQ4IEBAXG4gc3RhdGljIGludCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2ICptc2dfaWQpXG4ge1xuIFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgKnIgPSBcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3JlcztcbiYjNDM7XHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1MzIgaW5kZXg7XG4gXG4tXHRkb3duKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiYjNDM7XHQvKiBGSUZPIHNsb3QgYWRtaXNzaW9uIGhhcyBhIHNlcGFyYXRlIGJ1ZGdldCBmcm9tIHRoZSByZXNwb25zZSB3YWl0LlxuJiM0MztcdCAqIEV4cGlyeSByZXBvcnRzIC1FVElNRURPVVQgZXZlbiB3aGlsZSBlYXJsaWVyIHJlcXVlc3RzIG1ha2UgcHJvZ3Jlc3MsXG4mIzQzO1x0ICogc28gY2FsbGVycyBtYXkgaW5pdGlhdGUgcmVjb3Zlcnkgb24gY29udGVudGlvbiBhbG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZG93bl90aW1lb3V0KFx1MDAyNmh3Yy1cdTAwM2VzZW1hLCBtc2Vjc190b19qaWZmaWVzKGh3Yy1cdTAwM2Vod2NfdGltZW91dCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXAsXG4tXHRcdFx0XHQgICAgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMuc2l6ZSk7XG4mIzQzO1x0aWYgKCFod2MtXHUwMDNlY2hhbm5lbF91cCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIHNlbWFwaG9yZSBhZG1pdHMgYXQgbW9zdCByLVx1MDAzZXNpemUgaG9sZGVycyBhdCBhIHRpbWUsIHNvIGEgc2xvdFxuJiM0MztcdCAqIGFjcXVpcmVkIGFib3ZlIGFsd2F5cyBoYXMgYSBmcmVlIGJpdCB3YWl0aW5nIGZvciBpdCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChyLVx1MDAzZW1hcCwgci1cdTAwM2VzaXplKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGluZGV4IFx1MDAzZT0gci1cdTAwM2VzaXplKSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiBcbi1cdGJpdG1hcF9zZXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XG4mIzQzO1x0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaW5kZXhdO1xuJiM0MztcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbiYjNDM7XHQvKiBUYWtlIGJvdGggcmVmZXJlbmNlcyAoc2VuZGVyICYjNDM7IGhhbmRsZV9yZXNwKSBiZWZvcmUgcHVibGlzaGluZyB0aGVcbiYjNDM7XHQgKiBzbG90LCBzbyBhbiBlYXJseSByZXNwb25zZSBjYW5ub3QgZnJlZSBpdCB1bmRlciB0aGUgc2VuZGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNlcmVmY250LCAyKTtcbiYjNDM7XHRjdHgtXHUwMDNlcmVzcG9uZGVkID0gZmFsc2U7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0Y3R4LVx1MDAzZW1zZ19pZCA9IGluZGV4O1xuJiM0MztcdGN0eC1cdTAwM2VlcnJvciA9IC1FSU5QUk9HUkVTUztcbiYjNDM7XG4mIzQzO1x0LyogUHVibGlzaCB0aGUgc2xvdCBsYXN0LCBhZnRlciBpdCBpcyBmdWxseSBpbml0aWFsaXNlZC4gKi9cbiYjNDM7XHRiaXRtYXBfc2V0KHItXHUwMDNlbWFwLCBpbmRleCwgMSk7XG4gXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTQwLDYgJiM0Mzs3MSwxMyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19wdXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IG1zZ19pZClcbiBcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiYjNDM7XHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cdTAwM2Vtc2dfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGNvbnN0IHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY2FsbGVyX2N0eCxcbiBcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqcmVzcF9tc2csXG4gXHRcdFx0XHQgICAgdTMyIHJlc3BfbGVuKVxuQEAgLTgxLDYgJiM0MzsxMTksNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqcmVzcF9tc2cgPSByeF9yZXEtXHUwMDNlYnVmX3ZhO1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4mIzQzO1x0Ym9vbCByZWxlYXNlO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XG5AQCAtOTAsMjIgJiM0MzsxMjksNTMgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7XG4tXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4gXG4tXHRjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPSByZXNwX21zZy1cdTAwM2VzdGF0dXM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1vdXQ6XG4mIzQzO1x0LyogVGhlIHNlbmRlciBoYXMgbm90IHB1Ymxpc2hlZCBpdHMgYnVmZmVyIHlldCwgc28gbm90aGluZyBhc2tlZCBmb3JcbiYjNDM7XHQgKiB0aGlzIHJlc3BvbnNlLiAgS2VlcCB0aGUgc2xvdCByZXNlcnZlZCBhbmQgZHJvcCB0aGUgbWVzc2FnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWN0eC1cdTAwM2VvdXRwdXRfYnVmIFx1MDAyNlx1MDAyNiAhY3R4LVx1MDAzZXJlc3BvbmRlZCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRha2UgdGhlIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIGF3YXkgZXhhY3RseSBvbmNlOiByZWxlYXNpbmcgaXRcbiYjNDM7XHQgKiBpcyB3aGF0IGZyZWVzIGEgc2xvdCB3aG9zZSBzZW5kZXIgaGFzIGFscmVhZHkgZ2l2ZW4gdXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVsZWFzZSA9IGN0eC1cdTAwM2VyZXNwX3BlbmRpbmc7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXJlc3BvbmRlZCkge1xuJiM0MztcdFx0LyogVGhlIHNlbmRlciB0aW1lZCBvdXQgYW5kIGFiYW5kb25lZCB0aGUgc2xvdCwgb3IgYSByZXNwb25zZVxuJiM0MztcdFx0ICogd2FzIGFscmVhZHkgYXBwbGllZC4gIENvbnN1bWUgdGhpcyBvbmUgd2l0aG91dCB3cml0aW5nXG4mIzQzO1x0XHQgKiBhbnl0aGluZywgdGhlbiByZWxlYXNlIHRoZSBzbG90IGl0IHdhcyBob2xkaW5nLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtXHUwMDNlcnhxLCByeF9yZXEpO1xuJiM0MztcdFx0aWYgKHJlbGVhc2UpXG4mIzQzO1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7XG4mIzQzO1x0aWYgKCFlcnIpIHtcbiYjNDM7XHRcdGN0eC1cdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRcdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbiYjNDM7XHR9XG4gXHRjdHgtXHUwMDNlZXJyb3IgPSBlcnI7XG4gXG4tXHQvKiBNdXN0IHBvc3Qgcnggd3FlIGJlZm9yZSBjb21wbGV0ZSgpLCBvdGhlcndpc2UgdGhlIG5leHQgcnggbWF5XG4tXHQgKiBoaXQgbm9fd3FlIGVycm9yLlxuJiM0MztcdC8qIFBvc3QgUlggV1FFIGJlZm9yZSBjb21wbGV0aW5nIOKAlCB0aGUgbmV4dCByZXNwb25zZSBtYXkgYXJyaXZlXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkgYW5kIG5lZWRzIGEgcG9zdGVkIGJ1ZmZlci5cbiBcdCAqL1xuIFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbi1cbiBcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZWxlYXNlKVxuJiM0MztcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxuQEAgLTE0Niw3ICYjNDM7MjE2LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSDpcbi1cdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDtcbiYjNDM7XHRcdFx0LyogSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyBhIDI0LWJpdCBmaWVsZC4gIEtlZXBcbiYjNDM7XHRcdFx0ICogdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlIGhlcmU7IGl0IGlzIGNsYW1wZWRcbiYjNDM7XHRcdFx0ICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlclxuJiM0MztcdFx0XHQgKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlZCB0byB1MTYuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSB2YWw7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDpcbkBAIC00NzYsNyAmIzQzOzU1MSwxMSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcbiBcdGRtYV9idWYtXHUwMDNlbnVtX3JlcXMgPSBxX2RlcHRoO1xuIFxuLVx0YnVmX3NpemUgPSBNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSk7XG4mIzQzO1x0LyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhc1xuJiM0MztcdCAqIGFscmVhZHkgYXNzdW1lZCBmb3IgdGhlIEVRIGFuZCBDUSByaW5ncyBhYm92ZS4gIFRoZSBzbG90cyBhcmVcbiYjNDM7XHQgKiBjYXJ2ZWQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLCBzbyBhbnkgdGFpbCBpcyB1bnVzZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnVmX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oTUFOQV9QQUdFX0FMSUdOKHFfZGVwdGggKiBtYXhfbXNnX3NpemUpKTtcbiBcbiBcdGdtaSA9IFx1MDAyNmRtYV9idWYtXHUwMDNlbWVtX2luZm87XG4gXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSwgZmFsc2UpO1xuQEAgLTU2MCw2ICYjNDM7NjM5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19jcmVhdGVfd3Eoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuIFx0aHdjX3dxLVx1MDAzZWdkbWFfd3EgPSBxdWV1ZTtcbiBcdGh3Y193cS1cdTAwM2VxdWV1ZV9kZXB0aCA9IHFfZGVwdGg7XG4gXHRod2Nfd3EtXHUwMDNlaHdjX2NxID0gaHdjX2NxO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh3Y193cS1cdTAwM2Vsb2NrKTtcbiBcbiBcdGVyciA9IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoaHdjLCBxX2RlcHRoLCBtYXhfbXNnX3NpemUsXG4gXHRcdFx0XHQgICAgIFx1MDAyNmh3Y193cS1cdTAwM2Vtc2dfYnVmKTtcbkBAIC01NzcsNyAmIzQzOzY1Nyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxuIFx0XHRcdFx0c3RydWN0IGh3Y193b3JrX3JlcXVlc3QgKnJlcSxcbiBcdFx0XHRcdHUzMiBkZXN0X3ZpcnRfcnFfaWQsIHUzMiBkZXN0X3ZpcnRfcmNxX2lkLFxuIFx0XHRcdFx0Ym9vbCBkZXN0X3BmKVxuQEAgLTYxNiw3ICYjNDM7Njk2LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmlubGluZV9vb2JfZGF0YSA9IHR4X29vYjtcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmNsaWVudF9kYXRhX3VuaXQgPSAwO1xuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZod2NfdHhxLVx1MDAzZWxvY2spO1xuIFx0ZXJyID0gbWFuYV9nZF9wb3N0X2FuZF9yaW5nKGh3Y190eHEtXHUwMDNlZ2RtYV93cSwgXHUwMDI2cmVxLVx1MDAzZXdxZV9yZXEsIE5VTEwpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0aWYgKGVycilcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3N0IFdRRSBvbiBIV0MgU1E6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02NDIsNiAmIzQzOzcyNSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLVx1MDAzZXJ4cTtcbiBcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGVycjtcbiBcdGludCBpO1xuIFxuQEAgLTY1NywxOCAmIzQzOzc0MSwzOCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFx0aWYgKCFjdHgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcV9kZXB0aDsgJiM0MzsmIzQzO2kpXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcV9kZXB0aDsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eFtpXS5sb2NrKTtcbiBcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eFtpXS5jb21wX2V2ZW50KTtcbiYjNDM7XHR9XG4gXG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcbiBcbi1cdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxKTtcbiYjNDM7XHQvKiBFbmFibGUgYWRtaXNzaW9uIGZvciB0aGUgdGVzdCBFUSByZXF1ZXN0LiAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IHRydWU7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyICpxX2RlcHRoLFxuIFx0XHRcdFx0ICAgICAgdTMyICptYXhfcmVxX21zZ19zaXplLFxuIFx0XHRcdFx0ICAgICAgdTMyICptYXhfcmVzcF9tc2dfc2l6ZSlcbiB7XG4mIzQzO1x0LyogbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkgZmlsbHMgdGhlIGJvb3RzdHJhcCBmaWVsZHMgZnJvbSBoYXJkXG4mIzQzO1x0ICogSVJRIG9uIEdETUFfRVFFX0hXQ19JTklUX0RBVEEgYW5kIHRoZW4gc2lnbmFscyBod2NfaW5pdF9lcWVfY29tcCBvblxuJiM0MztcdCAqIEdETUFfRVFFX0hXQ19JTklUX0RPTkUuICBUaGUgd2FpdF9mb3JfY29tcGxldGlvbigpIGJlbG93IHBhaXJzIHdpdGhcbiYjNDM7XHQgKiB0aGF0IGNvbXBsZXRlKCksIHNvIGV2ZXJ5IHZhbHVlIHN0b3JlZCBiZWZvcmUgSU5JVF9ET05FIGlzIG9yZGVyZWRcbiYjNDM7XHQgKiBhZ2FpbnN0IHRoZSByZWFkcyB0aGF0IGZvbGxvdyBpdCBoZXJlLlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnJxID0gaHdjLVx1MDAzZXJ4cS1cdTAwM2VnZG1hX3dxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVx1MDAzZXR4cS1cdTAwM2VnZG1hX3dxO1xuQEAgLTY3Niw2ICYjNDM7NzgwLDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcSA9IGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2NxO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBEbyBub3QgcmV1c2UgZGltZW5zaW9ucyBvciByb3V0aW5nIElEcyBmcm9tIGEgcHJldmlvdXMgZXN0YWJsaXNoLiAqL1xuJiM0MztcdGh3Yy1cdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IDA7XG4mIzQzO1x0aHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemUgPSAwO1xuJiM0MztcdGh3Yy1cdTAwM2Vod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZSA9IDA7XG4mIzQzO1x0Z2MtXHUwMDNlaHdjLmRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcbiYjNDM7XHRnYy1cdTAwM2Vod2MucGRpZCA9IElOVkFMSURfUERJRDtcbiYjNDM7XHRod2MtXHUwMDNlcGZfZGVzdF92cnFfaWQgPSAwO1xuJiM0MztcdGh3Yy1cdTAwM2VwZl9kZXN0X3ZyY3FfaWQgPSAwO1xuJiM0MztcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuIFxuIFx0ZXJyID0gbWFuYV9zbWNfc2V0dXBfaHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSxcbkBAIC02ODMsNyAmIzQzOzc5Niw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdFx0XHRcdCBjcS1cdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlLFxuIFx0XHRcdFx0IHJxLVx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGUsXG4gXHRcdFx0XHQgc3EtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZSxcbi1cdFx0XHRcdCBlcS1cdTAwM2VlcS5tc2l4X2luZGV4KTtcbiYjNDM7XHRcdFx0XHQgZXEtXHUwMDNlZXEubXNpeF9pbmRleCwgXHUwMDI2aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTY5NCw2ICYjNDM7ODA3LDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdCptYXhfcmVxX21zZ19zaXplID0gaHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XG4gXHQqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4mIzQzO1x0LyogUmVqZWN0IGEgbWlzc2luZyBkb29yYmVsbCBiZWZvcmUgdGhlIGNoYW5uZWwgdGVzdC4gVGhpcyBuZWl0aGVyXG4mIzQzO1x0ICogdmFsaWRhdGVzIGl0cyBCQVIgcmFuZ2Ugbm9yIHByb3RlY3RzIGVhcmxpZXIgSVJRIHJlYXJtaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChnYy1cdTAwM2Vod2MuZG9vcmJlbGwgPT0gSU5WQUxJRF9ET09SQkVMTCkge1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0M6IG5vIGRvb3JiZWxsIGluIGluaXQgZGF0YVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi9cbiBcdGlmIChXQVJOX09OKGNxLVx1MDAzZWlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbkBAIC03MTIsNiAmIzQzOzgzMywxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBDUSBkZXB0aCBpcyBxX2RlcHRoICogMiAoU1EgJiM0MzsgUlEpIHBhc3NlZCBhcyB1MTYgdG8gY3JlYXRlX2NxLlxuJiM0MztcdCAqIENhcCB0byBwcmV2ZW50IHUxNiB0cnVuY2F0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChxX2RlcHRoIFx1MDAzZSBVMTZfTUFYIC8gMilcbiYjNDM7XHRcdHFfZGVwdGggPSBVMTZfTUFYIC8gMjtcbiYjNDM7XG4gXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC03NTEsMTIgJiM0Mzs4NzgsNDQgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzOy8qIEJyaW5nLXVwIG9ubHk6IHJlcXVpcmVzIG5vIHNlbmRlcnMgb3IgY29uY3VycmVudCBsaWZlY3ljbGUgb3BlcmF0aW9ucy5cbiYjNDM7ICogVGhpcyBoZWxwZXIgZG9lcyBub3QgdW5wdWJsaXNoIHRoZSBIV0Mgb3IgZHJhaW4gc2VuZGVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIENRIGhlbHBlciBkZXJlZ2lzdGVycyB0aGUgSFdDIEVRIGJlZm9yZSByZXR1cm5pbmcuICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjcSkge1xuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV9jcShnYywgaHdjLVx1MDAzZWNxKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VjcSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4mIzQzO1x0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZXR4cSkge1xuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2V0eHEpO1xuJiM0MztcdFx0aHdjLVx1MDAzZXR4cSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZXJ4cSkge1xuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuJiM0MztcdFx0aHdjLVx1MDAzZXJ4cSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcyk7XG4mIzQzO1x0aHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemU7XG4gXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gXHUwMDI2Z2MtXHUwMDNlaHdjO1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuLVx0dTE2IHFfZGVwdGhfbWF4O1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlICoqb2xkX2NxX3RhYmxlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIHFfZGVwdGhfbWF4O1xuIFx0aW50IGVycjtcbiBcbiBcdGh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpO1xuQEAgLTc2NCwxMCAmIzQzOzkyMywxMSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Z2QtXHUwMDNlZ2RtYV9jb250ZXh0ID0gZ2M7XG4tXHRnZC1cdTAwM2Vkcml2ZXJfZGF0YSA9IGh3YztcbiBcdGh3Yy1cdTAwM2VnZG1hX2RldiA9IGdkO1xuIFx0aHdjLVx1MDAzZWRldiA9IGdjLVx1MDAzZWRldjtcbiBcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IEhXX0NIQU5ORUxfV0FJVF9SRVNPVVJDRV9USU1FT1VUX01TO1xuJiM0MztcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9IDA7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEpO1xuIFxuIFx0LyogSFdDJiMzOTtzIGluc3RhbmNlIG51bWJlciBpcyBhbHdheXMgMC4gKi9cbiBcdGdkLVx1MDAzZWRldl9pZC5hc191aW50MzIgPSAwO1xuQEAgLTc3Niw2ICYjNDM7OTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdGdkLVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gXHRnZC1cdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4gXG4mIzQzO1x0LyogUHVibGlzaCBmb3Igc2V0dXA7IHF1ZXVlIGluaXRpYWxpemF0aW9uIGJlbG93IG11c3QgcHJlY2VkZSBzZW5kZXJzLiAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gaHdjO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHQvKiBtYW5hX2h3Y19pbml0X3F1ZXVlcygpIG9ubHkgY3JlYXRlcyB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLFxuIFx0ICogYW5kIGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBIV0MgZGV2aWNlLlxuIFx0ICovXG5AQCAtNzk0LDggJiM0Mzs5NTksMTMyIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHFfZGVwdGhfbWF4IFx1MDAzZSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCkge1xuJiM0MztcdFx0LyogQm91bmQgRE1BIGFsbG9jYXRpb25zIGJlZm9yZSB1c2luZyB0aGUgMjQtYml0IGRlcHRoLiAqL1xuJiM0MztcdFx0aWYgKHFfZGVwdGhfbWF4IFx1MDAzZSBIV19DSEFOTkVMX01BWF9RVUVVRV9ERVBUSClcbiYjNDM7XHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX01BWF9RVUVVRV9ERVBUSDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBLZWVwIGJvb3RzdHJhcCBtZXNzYWdlIHNpemVzIGZvciBtYW5kYXRvcnkgY29tbWFuZHMuXG4mIzQzO1x0XHQgKiBJbmNvbXBhdGlibGUgcmVwb3J0cyBza2lwIHJlYnVpbGRpbmcsIG5vdCBjaGFubmVsIGNyZWF0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcbiYjNDM7XHRcdCAgICBtYXhfcmVzcF9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFIHx8XG4mIzQzO1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXFfbXNnX3NpemUgXHUwMDNlXG4mIzQzO1x0XHRcdFUzMl9NQVggLSBNQU5BX1BBR0VfU0laRSB8fFxuJiM0MztcdFx0ICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVzcF9tc2dfc2l6ZSBcdTAwM2VcbiYjNDM7XHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtIV0M6IGludmFsaWQgZGltcyBxPSV1IHJlcT0ldSByZXNwPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDtcbiYjNDM7XHRcdFx0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFVucHVibGlzaCB0aGUgQ1EgYW5kIGRyYWluIGl0cyBFUSBiZWZvcmUgZnJlZWluZyB0aGUgdGFibGUuICovXG4mIzQzO1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuJiM0MztcbiYjNDM7XHRcdG9sZF9jcV90YWJsZSA9IGdjLVx1MDAzZWNxX3RhYmxlO1xuJiM0MztcdFx0Z2MtXHUwMDNlY3FfdGFibGUgPSBOVUxMO1xuJiM0MztcdFx0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXG4mIzQzO1x0XHRcdFx0XHQgICBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgbWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWluaXQgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChxX2RlcHRoX21heCBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cgfHxcbiYjNDM7XHRcdCAgICAgbWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcbiYjNDM7XHRcdCAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHtcbiYjNDM7XHRcdFx0LyogVGhlIHJlYnVpbHQgY2hhbm5lbCBtdXN0IHN1cHBvcnQgdGhlIGFsbG9jYXRlZCBkZXB0aFxuJiM0MztcdFx0XHQgKiBhbmQgbWVzc2FnZSBzaXplcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtIV0M6IHJlYnVpbHQgcT0ldSByZXE9JXUgcmVzcD0ldSwgYnVpbHQgZm9yICV1LyV1LyV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplLCBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbiYjNDM7XHRcdFx0XHRIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXG4mIzQzO1x0XHRcdFx0SFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XG4mIzQzO1x0XHRcdGVyciA9IC1FUFJPVE87XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlLWVzdGFibGlzaCBIV0M6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGVycik7XG4mIzQzO1x0XHRcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XG4mIzQzO3JlaW5pdF9mYWxsYmFjazpcbiYjNDM7XHQvKiBBIGZhaWxlZCBoYW5kc2hha2UgbGVhdmVzIHF1ZXVlIG93bmVyc2hpcCB1bmNlcnRhaW4uICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpIHtcbiYjNDM7XHRcdGlmIChtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHRlYXIgZG93biBIV0MgYmVmb3JlIGJvb3RzdHJhcCBmYWxsYmFja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZhaWxlZCBlc3RhYmxpc2ggbWF5IG5vdCBoYXZlIGFsbG9jYXRlZCBjcV90YWJsZS4gKi9cbiYjNDM7XHRkZXZfd2Fybihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0MgcmVpbml0IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGJvb3RzdHJhcCBkZXB0aFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKGh3Yyk7XG4mIzQzO1xuJiM0MztcdG9sZF9jcV90YWJsZSA9IGdjLVx1MDAzZWNxX3RhYmxlO1xuJiM0MztcdGdjLVx1MDAzZWNxX3RhYmxlID0gTlVMTDtcbiYjNDM7XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0dmZyZWUob2xkX2NxX3RhYmxlKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcbiYjNDM7XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXG4mIzQzO1x0XHRcdFx0ICAgSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LCBcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8XG4mIzQzO1x0ICAgICBtYXhfcmVzcF9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFKSkge1xuJiM0MztcdFx0LyogVGhlIHJlc3RvcmVkIGNoYW5uZWwgbXVzdCByZXBvcnQgdGhlIGFsbG9jYXRlZCBtZXNzYWdlIHNpemVzLiAqL1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0M6IGJvb3RzdHJhcCByZXBvcnRzIHJlcT0ldSByZXNwPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVycik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0Mztza2lwX3JlaW5pdDpcbiYjNDM7XG4gXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxuLVx0XHRcdFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuJiM0MztcdFx0XHRcdCAgICBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbiBcdFx0XHRcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC04MTAsMTggJiM0MzsxMDk5LDcxIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcbiB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4mIzQzO1x0LyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFod2MpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIGdjLVx1MDAzZW1heF9udW1fY3FzIGlzIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gSWYgaXQmIzM5O3Ncbi1cdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXG4mIzQzO1x0LyogTm9uemVybyBudW1faW5mbGlnaHRfbXNnIG1lYW5zIHF1ZXVlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZC4gKi9cbiYjNDM7XHRpZiAoaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEJsb2NrIG5ldyBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIHJlZmVyZW5jZXMgYmVmb3JlIGRyYWluaW5nLiAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIENvbXBsZXRlIG9jY3VwaWVkIHNsb3RzIGFuZCBkcm9wIHBlbmRpbmcgcmVzcG9uc2Utc2lkZSByZWZlcmVuY2VzLiAqL1xuJiM0MztcdGlmIChod2MtXHUwMDNlY2FsbGVyX2N0eCkge1xuJiM0MztcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4mIzQzO1x0XHRib29sIGRyb3BfcmVzcF9yZWY7XG4mIzQzO1x0XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaV07XG4mIzQzO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHQvKiBQcmVzZXJ2ZSBhbiBhbHJlYWR5IHJlY29yZGVkIHJlc3VsdC4gKi9cbiYjNDM7XHRcdFx0aWYgKCFjdHgtXHUwMDNlcmVzcG9uZGVkKVxuJiM0MztcdFx0XHRcdGN0eC1cdTAwM2VlcnJvciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlcmVzcF9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRcdGN0eC1cdTAwM2VyZXNwb25kZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChkcm9wX3Jlc3BfcmVmKVxuJiM0MztcdFx0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBhaXIgd2l0aCB0aGUgbGFzdCBzZW5kZXImIzM5O3Mgd2FrZXVwIHVuZGVyIGh3Y19sb2NrLCBzbyBpdCBmaW5pc2hlc1xuJiM0MztcdCAqIGFjY2Vzc2luZyBnYyBiZWZvcmUgdGhlIGRyYWluIHJldHVybnMuXG4gXHQgKi9cbi1cdGlmIChnYy1cdTAwM2VtYXhfbnVtX2NxcyBcdTAwM2UgMCkge1xuLVx0XHRtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbi1cdFx0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuJiM0MztcdFx0XHQgICAgaHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID09IDAsIGdjLVx1MDAzZWh3Y19sb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZXNldHVwX2FjdGl2ZSkge1xuJiM0MztcdFx0aWYgKCFtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSlcbiYjNDM7XHRcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byB0ZWFyIGRvd24gSFdDXFxuXCYjMzQ7KTtcbiBcdH1cbiYjNDM7XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIERlcmVnaXN0ZXIgdGhlIEhXQyBFUSBiZWZvcmUgZnJlZWluZyB0aGUgd29yayBxdWV1ZXMuICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjcSlcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVx1MDAzZWNxKTtcbiBcbiBcdGlmIChod2MtXHUwMDNldHhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG5AQCAtODI5LDggJiM0MzsxMTcxLDE4IEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aWYgKGh3Yy1cdTAwM2VyeHEpXG4gXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNlcnhxKTtcbiBcbi1cdGlmIChod2MtXHUwMDNlY3EpXG4tXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVx1MDAzZWNxKTtcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZWNhbGxlcl9jdHgpIHtcbiYjNDM7XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuJiM0MztcdFx0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0a2ZyZWUoaHdjLVx1MDAzZWNhbGxlcl9jdHgpO1xuIFx0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBOVUxMO1xuQEAgLTg0NSw3ICYjNDM7MTE5Nyw2IEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiBcbiBcdGtmcmVlKGh3Yyk7XG4tXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0Z2MtXHUwMDNlaHdjLmdkbWFfY29udGV4dCA9IE5VTEw7XG4gXG4gXHR2ZnJlZShnYy1cdTAwM2VjcV90YWJsZSk7XG5AQCAtODYwLDEzICYjNDM7MTIxMSwyMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRzdHJ1Y3QgaHdjX3dxICp0eHEgPSBod2MtXHUwMDNldHhxO1xuIFx0c3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZztcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCBkcm9wX3Jlc3BfcmVmO1xuJiM0MztcdGJvb2wgYWJhbmRvbmVkID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBjYW5jZWxsZWQ7XG4gXHR1MzIgZGVzdF92cmNxID0gMDtcbiBcdHUzMiBkZXN0X3ZycSA9IDA7XG4gXHR1MzIgY29tbWFuZDtcbiYjNDM7XHR1MzIgc3RhdHVzO1xuJiM0MztcdHUzMiB3YWl0X21zO1xuIFx0dTE2IG1zZ19pZDtcbiBcdGludCBlcnI7XG4gXG4tXHRtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHR4X3dyID0gXHUwMDI2dHhxLVx1MDAzZW1zZ19idWYtXHUwMDNlcmVxc1ttc2dfaWRdO1xuIFxuQEAgLTg3OCw4ICYjNDM7MTIzNywxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IHJlc3A7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZmxlbiA9IHJlc3BfbGVuO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJlcV9tc2cgPSAoc3RydWN0IGdkbWFfcmVxX2hkciAqKXR4X3dyLVx1MDAzZWJ1Zl92YTtcbiBcdGlmIChyZXEpXG5AQCAtODk1LDQzICYjNDM7MTI1NywxMTQgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0XHRkZXN0X3ZyY3EgPSBod2MtXHUwMDNlcGZfZGVzdF92cmNxX2lkO1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSwgZmFsc2UpO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBjYW5jZWxsYXRpb24gd2l0aCBzdWJtaXNzaW9uLiBBbiB1bnN1Ym1pdHRlZCByZXF1ZXN0XG4mIzQzO1x0ICogY2Fubm90IHN1Y2NlZWQsIGV2ZW4gaWYgYW4gdW5zb2xpY2l0ZWQgcmVzcG9uc2Ugd2FzIGFjY2VwdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y2FuY2VsbGVkID0gY3R4LVx1MDAzZXJlc3BvbmRlZDtcbiYjNDM7XHRpZiAoY2FuY2VsbGVkKVxuJiM0MztcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yID86IC1FUFJPVE87XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSxcbiYjNDM7XHRcdFx0XHRcdCAgIGZhbHNlKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChjYW5jZWxsZWQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDOiBGYWlsZWQgdG8gcG9zdCBzZW5kIFdRRTogJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdHdhaXRfbXMgPSBod2MtXHUwMDNlaHdjX3RpbWVvdXQ7XG4gXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCxcbi1cdFx0XHRcdFx0IChtc2Vjc190b19qaWZmaWVzKGh3Yy1cdTAwM2Vod2NfdGltZW91dCkpKSkge1xuLVx0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lb3V0ICE9IDApXG4tXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcblwmIzM0Oyxcbi1cdFx0XHRcdGNvbW1hbmQsIGh3Yy1cdTAwM2Vod2NfdGltZW91dCk7XG4mIzQzO1x0XHRcdFx0XHQgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSkpIHtcbiYjNDM7XHRcdC8qIENsZWFyIG91dHB1dF9idWYgc28gYSBsYXRlIHJlc3BvbnNlIGNhbm5vdCB3cml0ZSB0aGUgY2FsbGVyJiMzOTtzXG4mIzQzO1x0XHQgKiBidWZmZXIsIHRoZW4gY2hlY2sgd2hldGhlciBvbmUgYWxyZWFkeSBhcnJpdmVkXG4mIzQzO1x0XHQgKiAoZXJyb3IgIT0gLUVJTlBST0dSRVNTKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbiYjNDM7XHRcdGVyciA9IGN0eC1cdTAwM2VlcnJvcjtcbiYjNDM7XHRcdHN0YXR1cyA9IGN0eC1cdTAwM2VzdGF0dXNfY29kZTtcbiYjNDM7XHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4mIzQzO1x0XHRcdC8qIFB1Ymxpc2ggYWJhbmRvbm1lbnQgd2l0aCBidWZmZXIgd2l0aGRyYXdhbCBzbyBhIGxhdGVcbiYjNDM7XHRcdFx0ICogcmVzcG9uc2UgY2FuIHJlY2xhaW0gdGhlIHNsb3QuIEtlZXAgaXRzIHJlZmVyZW5jZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGN0eC1cdTAwM2VyZXNwb25kZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRhYmFuZG9uZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYWJhbmRvbmVkKSB7XG4mIzQzO1x0XHRcdC8qIEEgY29tcGxldGlvbiB3b24gdGhlIHJhY2Ugd2l0aCB0aW1lb3V0OyB1c2UgaXRzIHJlc3VsdC4gKi9cbiYjNDM7XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3N0YXR1cztcbiYjNDM7XHRcdH1cbiBcbi1cdFx0LyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi9cbi1cdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCBcdTAwM2UgMSlcbi1cdFx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAxO1xuJiM0MztcdFx0aWYgKHdhaXRfbXMgIT0gMCkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0NvbW1hbmQgMHgleCB0aW1lZCBvdXQ6ICV1IG1zXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGNvbW1hbmQsIHdhaXRfbXMpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogR2VudWluZSB0aW1lb3V0OiBzaG9ydGVuIGxhdGVyIHdhaXRzIHNvIHN1YnNlcXVlbnRcbiYjNDM7XHRcdFx0ICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGVcbiYjNDM7XHRcdFx0ICogZnVsbCB0aW1lb3V0LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAxO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbi1cdGlmIChjdHgtXHUwMDNlZXJyb3IpIHtcbi1cdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdC8qIERyb3Agb25seSB0aGUgc2VuZGVyJiMzOTtzIHJlZmVyZW5jZTsgdGhlIHJlc3BvbnNlLXNpZGUgb25lIGlzXG4mIzQzO1x0XHQgKiB3aGF0IGtlZXBzIHRoZSBzbG90IHJlc2VydmVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4gXG4tXHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc3RhdHVzX2NvZGUgIT0gR0RNQV9TVEFUVVNfTU9SRV9FTlRSSUVTKSB7XG4tXHRcdGlmIChjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XG4mIzQzO1x0LyogQ2xlYXIgb3V0cHV0X2J1ZiBhbmQgcmVhZCB0aGUgcmVzdWx0IHVuZGVyIHRoZSBsb2NrOyB0aGUgc2xvdCBtYXlcbiYjNDM7XHQgKiBiZSByZXVzZWQgYWZ0ZXIgaHdjX2N0eF9wdXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbiYjNDM7XHRlcnIgPSBjdHgtXHUwMDNlZXJyb3I7XG4mIzQzO1x0c3RhdHVzID0gY3R4LVx1MDAzZXN0YXR1c19jb2RlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4mIzQzO1xuJiM0MztjaGVja19zdGF0dXM6XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuJiM0MztcdFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4mIzQzO1xuIFx0XHRpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKVxuIFx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7Q29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxcblwmIzM0Oyxcbi1cdFx0XHRcdGNvbW1hbmQsIGN0eC1cdTAwM2VzdGF0dXNfY29kZSk7XG4mIzQzO1x0XHRcdFx0Y29tbWFuZCwgc3RhdHVzKTtcbiBcdFx0ZXJyID0gLUVQUk9UTztcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0Z290byBkb25lO1xuIG91dDpcbi1cdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xuJiM0MztcdC8qIFJlbGVhc2UgYW55IHJlZmVyZW5jZXMgc3RpbGwgaGVsZCBieSB0aGlzIHVuc3VibWl0dGVkIHJlcXVlc3QuICovXG4mIzQzO1x0Y3R4ID0gaHdjLVx1MDAzZWNhbGxlcl9jdHggJiM0MzsgbXNnX2lkO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y3R4LVx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xuJiM0MztcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuJiM0MztcdGN0eC1cdTAwM2VyZXNwX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRjdHgtXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGRyb3BfcmVzcF9yZWYpXG4mIzQzO1x0XHRyZWZjb3VudF9kZWMoXHUwMDI2Y3R4LVx1MDAzZXJlZmNudCk7XG4mIzQzO1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0Mztkb25lOlxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcbmluZGV4IGQyMWI1ZGIwNmU1MDkuLjNjZjZhOWY4ZTMyYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jXG5AQCAtMTI5LDkgJiM0MzsxMjksMTIgQEAgdm9pZCBtYW5hX3NtY19pbml0KHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHNjLVx1MDAzZWJhc2UgPSBiYXNlO1xuIH1cbiBcbiYjNDM7LyogUmVxdWlyZXMgbm8gb3V0c3RhbmRpbmcgSFdDIGhhbmRvdmVyLiAqc3VibWl0dGVkIHJlY29yZHMgcG9zc2libGUgUEZcbiYjNDM7ICogb3duZXJzaGlwLCBpbmNsdWRpbmcgd2hlbiBzZXR1cCBmYWlscyBhZnRlciBzdWJtaXNzaW9uLlxuJiM0MzsgKi9cbiBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxuIFx0XHQgICAgICAgdTY0IGNxX2FkZHIsIHU2NCBycV9hZGRyLCB1NjQgc3FfYWRkcixcbi1cdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4KVxuJiM0MztcdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpXG4ge1xuIFx0dW5pb24gc21jX3Byb3RvX2hkciAqaGRyO1xuIFx0dTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7XG5AQCAtMTQ0LDYgJiM0MzsxNDcsOCBAQCBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxuIFx0aW50IGVycjtcbiBcdGludCBpO1xuIFxuJiM0MztcdCpzdWJtaXR0ZWQgPSBmYWxzZTtcbiYjNDM7XG4gXHQvKiBFbnN1cmUgVkYgYWxyZWFkeSBoYXMgcG9zc2Vzc2lvbiBvZiBzaGFyZWQgbWVtb3J5ICovXG4gXHRlcnIgPSBtYW5hX3NtY19wb2xsX3JlZ2lzdGVyKHNjLVx1MDAzZWJhc2UsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yMjksNiAmIzQzOzIzNCw3IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXG4gXHQvKiBXcml0ZSAyNTYtbWVzc2FnZSBidWZmZXIgdG8gc2hhcmVkIG1lbW9yeSAoZmluYWwgMzItYml0IHdyaXRlXG4gXHQgKiB0cmlnZ2VycyBIVyB0byBzZXQgcG9zc2Vzc2lvbiBiaXQgdG8gUEYpLlxuIFx0ICovXG4mIzQzO1x0KnN1Ym1pdHRlZCA9IHRydWU7XG4gXHRkd29yZCA9ICh1MzIgKilzaG1fYnVmO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgU01DX0FQRVJUVVJFX0RXT1JEUzsgaSYjNDM7JiM0MzspXG4gXHRcdHdyaXRlbCgqZHdvcmQmIzQzOyYjNDM7LCBzYy1cdTAwM2ViYXNlICYjNDM7IGkgKiBTTUNfQkFTSUNfVU5JVCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggMzA4OTUwZjliNTRiMC4uMjJkZDdjOWNlY2M4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTQ2OCw2ICYjNDM7NDY4LDE1IEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0aHdjO1xuIFxuJiM0MztcdC8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqL1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90XHRod2NfZHJhaW5fd2FpdHE7XG4mIzQzO1xuJiM0MztcdC8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpblxuJiM0MztcdCAqIG1hbmFfbmVlZF9sb2coKS9tYW5hX3NlcnZfcmVzZXQoKS4gU2V0dXAgYW5kIERNQS1yZWdpb24gcmVhZGVyc1xuJiM0MztcdCAqIHN0aWxsIHJlcXVpcmUgbGlmZWN5Y2xlIG9yZGVyaW5nLiBOb3QgYWxsIHRpbWVvdXQgd3JpdGVycyB1c2UgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3BpbmxvY2tfdFx0XHRod2NfbG9jaztcbiYjNDM7XG4gXHQvKiBBenVyZSBuZXR3b3JrIGFkYXB0ZXIgKi9cbiBcdHN0cnVjdCBnZG1hX2Rldlx0XHRtYW5hO1xuIFxuQEAgLTY4Myw2ICYjNDM7NjkyLDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqL1xuJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpXG4mIzQzO1xuIC8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuIFxuQEAgLTcwMSw2ICYjNDM7NzEzLDcgQEAgZW51bSB7XG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9QUk9CRV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IQU5ETEVfU1RBTExfU1FfUkVDT1ZFUlkgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxuJiM0MztcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmggYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuaW5kZXggMTZmZWIzOTYxNmMxYi4uZGZkOTIzMzZiMmI0ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuQEAgLTExLDYgJiM0MzsxMSwxMyBAQFxuIFxuICNkZWZpbmUgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEggMVxuIFxuJiM0MzsvKiBVcHBlciBib3VuZCBvbiB0aGUgZGV2aWNlLXJlcG9ydGVkIEhXQyBxdWV1ZSBkZXB0aC4gIFRoZSBIV0MgaXMgYVxuJiM0MzsgKiBjb250cm9sIGNoYW5uZWwsIHNvIGEgbW9kZXN0IGRlcHRoIGFscmVhZHkga2VlcHMgZW5vdWdoIG1hbmFnZW1lbnRcbiYjNDM7ICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUFcbiYjNDM7ICogYnVmZmVycyBvZiBxX2RlcHRoICogbWF4X21zZ19zaXplIGJ5dGVzIGVhY2guXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOFxuJiM0MztcbiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfQ1FJRFx0XHQxXG4gI2RlZmluZSBIV0NfSU5JVF9EQVRBX1JRSURcdFx0MlxuICNkZWZpbmUgSFdDX0lOSVRfREFUQV9TUUlEXHRcdDNcbkBAIC0xNjQsNiAmIzQzOzE3MSw5IEBAIHN0cnVjdCBod2Nfd3Ege1xuIFx0dTE2IHF1ZXVlX2RlcHRoO1xuIFxuIFx0c3RydWN0IGh3Y19jcSAqaHdjX2NxO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJpYWxpemVzIFNRIHBvc3Rpbmc7IHVudXNlZCBmb3IgdGhlIFJRLiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiB9O1xuIFxuIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XG5AQCAtMTcxLDggJiM0MzsxODEsMjcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcbiBcdHZvaWQgKm91dHB1dF9idWY7XG4gXHR1MzIgb3V0cHV0X2J1ZmxlbjtcbiBcbi1cdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xuJiM0MztcdGludCBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAobmVnYXRpdmUgZXJybm8gb3IgMCkgKi9cbiBcdHUzMiBzdGF0dXNfY29kZTtcbiYjNDM7XG4mIzQzO1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbiYjNDM7XHQgKiBoYW5kbGVfcmVzcCgpIChDUSBpbnRlcnJ1cHQpIGFuZCB0aGUgc2VuZGVyIHRpbWVvdXQgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1xuJiM0MztcdC8qIFRyYWNrcyBzZW5kZXIgJiM0MzsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4mIzQzO1x0ICogKHJlZmNvdW50IHJlYWNoZXMgMCkgcmVsZWFzZXMgdGhlIGJpdG1hcCBzbG90LlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY250O1xuJiM0MztcdHUxNiBtc2dfaWQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBieSB0aGUgZmlyc3QgaGFuZGxlX3Jlc3AoKSwgb3IgYnkgdGhlIHNlbmRlciYjMzk7cyB0aW1lb3V0IHBhdGgsXG4mIzQzO1x0ICogc28gYSBsYXRlciBvciBkdXBsaWNhdGUgcmVzcG9uc2UgaXMgZHJvcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHJlc3BvbmRlZDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzcG9uc2Utc2lkZSByZWZlcmVuY2Ugb3V0c3RhbmRpbmc7IHByb3RlY3RlZCBieSBsb2NrLiAqL1xuJiM0MztcdGJvb2wgcmVzcF9wZW5kaW5nO1xuIH07XG4gXG4gc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG5AQCAtMTgwLDkgJiM0MzsyMDksMTAgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG4gXHR1MTYgbnVtX2luZmxpZ2h0X21zZztcbiYjNDM7XG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZTtcbiBcbi1cdHUxNiBod2NfaW5pdF9xX2RlcHRoX21heDtcbiYjNDM7XHR1MzIgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4gXHR1MzIgaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTtcbiBcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcbiBcbkBAIC0xOTIsNiAmIzQzOzIyMiw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFx0c3RydWN0IGh3Y193cSAqdHhxO1xuIFx0c3RydWN0IGh3Y19jcSAqY3E7XG4gXG4mIzQzO1x0LyogQWRtaXNzaW9uIHBlcm1pdHMuIFRpbWVkLW91dCByZXF1ZXN0cyByZXRhaW4gdGhlaXJzIHVudGlsIGFcbiYjNDM7XHQgKiByZXNwb25zZSBvciB0ZWFyZG93biByZWxlYXNlcyB0aGUgc2xvdC5cbiYjNDM7XHQgKi9cbiBcdHN0cnVjdCBzZW1hcGhvcmUgc2VtYTtcbiBcdHN0cnVjdCBnZG1hX3Jlc291cmNlIGluZmxpZ2h0X21zZ19yZXM7XG4gXG5AQCAtMTk5LDYgJiM0MzsyMzIsMTUgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG4gXHR1MzIgcGZfZGVzdF92cmNxX2lkO1xuIFx0dTMyIGh3Y190aW1lb3V0O1xuIFxuJiM0MztcdC8qIENoZWNrZWQgYWZ0ZXIgc2xvdCBhY3F1aXNpdGlvbjsgY2xlYXJlZCBvbiB0ZWFyZG93biB0byByZWplY3Qgc2VuZHMuICovXG4mIzQzO1x0Ym9vbCBjaGFubmVsX3VwO1xuJiM0MztcbiYjNDM7XHQvKiBQRiBtYXkgb3duIHRoZSBxdWV1ZSBtYXBwaW5nczsgc3RhdGUgbGFzdHMgb25seSBmb3IgdGhpcyBjb250ZXh0LiAqL1xuJiM0MztcdGJvb2wgc2V0dXBfYWN0aXZlO1xuJiM0MztcbiYjNDM7XHQvKiBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIGNhbGxlcnMsIGluY2x1ZGluZyB3YWl0ZXJzOyB1bmRlciBod2NfbG9jay4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7XG4mIzQzO1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG5pbmRleCBkYmFiY2ZiOTVkYWYzLi5lOTYzODdkNzk1MjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcbkBAIC0yMCw3ICYjNDM7MjAsNyBAQCB2b2lkIG1hbmFfc21jX2luaXQoc3RydWN0IHNobV9jaGFubmVsICpzYywgc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXG4gXHRcdCAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLFxuLVx0XHQgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpO1xuJiM0MztcdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpO1xuIFxuIGludCBtYW5hX3NtY190ZWFyZG93bl9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92Zik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgLyBQQ0kgZGV2aWNlIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgb3IgcGxhdGZvcm0tc3BlY2lmaWMgQXp1cmUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI0ZDU3NzE3Nzc0ZWRmMzRmNWJlNWUxMTc1YWNjM2Q0MzA0MDBlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDQ6MjM6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCmluZGV4IGY5MmIyZDBiZjkyNmUuLjc4NDI0ZTFkODg0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycikKIHsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CWJvb2wgbmVlZF9sb2cgPSB0cnVlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGVyciAhPSAtRVRJTUVET1VUKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2OSwxMSAmIzQzOzE3MSwxMyBAQCBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpCiAJaWYgKCFnYykKIAkJcmV0dXJuIHRydWU7CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmIChod2MgJmFtcDsmYW1wOyBod2MtJmd0O2h3Y190aW1lb3V0ID09IDApCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCW5lZWRfbG9nID0gZmFsc2U7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gbmVlZF9sb2c7CiB9CiAKIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzMxLDcgJiM0MzszMzUsMTEgQEAgc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X2h3Y190aW1lb3V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKnRpbWVvdXRfdmFsKQogCWlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKQogCQlyZXR1cm4gZXJyID8gZXJyIDogLUVQUk9UTzsKIAotCSp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tczsKJiM0MzsJLyogS2VlcCB0aGUgY3VycmVudCB0aW1lb3V0IG9uIGEgemVybyBxdWVyeSByZXBseS4gQXN5bmNocm9ub3VzCiYjNDM7CSAqIEhXQ19EQVRBX0NGR19IV0NfVElNRU9VVCB1cGRhdGVzIHJlbWFpbiB1bmZpbHRlcmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlc3AudGltZW91dF9tcykKJiM0MzsJCSp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tczsKIAogCXJldHVybiAwOwogfQpAQCAtMzg3LDkgJiM0MzszOTUsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLAogCQkJIHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcCkKIHsKLQlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwomIzQzOwlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBlcnI7CiAKLQlyZXR1cm4gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlod2MtJmd0O2FjdGl2ZV9zZW5kZXJzJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKC0taHdjLSZndDthY3RpdmVfc2VuZGVycyA9PSAwKQomIzQzOwkJd2FrZV91cCgmYW1wO2djLSZndDtod2NfZHJhaW5fd2FpdHEpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCAmIzM0O05FVF9NQU5BJiMzNDspOwogCkBAIC03MTAsNiAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghZ2MpIHsKQEAgLTcxOSwxNCAmIzQzOzc0NiwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSBzZXJ2aWNlOiBubyBIV0NcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJiMzOTt0IHdhaXQgKi8KIAlod2MtJmd0O2h3Y190aW1lb3V0ID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwogCiAJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSByZXNldCBjeWNsZSBzdGFydFxuJiMzNDspOwogCkBAIC0xMjMwLDE1ICYjNDM7MTI2MCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLAogc3RhdGljIHZvaWQgbWFuYV9nZF9kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLAogCQkJICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSkKIHsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKipjcV90YWJsZSA9IFJFQURfT05DRShnYy0mZ3Q7Y3FfdGFibGUpOwogCXUzMiBpZCA9IHF1ZXVlLSZndDtpZDsKIAotCWlmIChpZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpCiYjNDM7CS8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi8KJiM0MzsJaWYgKCFjcV90YWJsZSB8fCBpZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpCiAJCXJldHVybjsKIAotCWlmICghZ2MtJmd0O2NxX3RhYmxlW2lkXSkKJiM0MzsJaWYgKCFjcV90YWJsZVtpZF0pCiAJCXJldHVybjsKIAotCWdjLSZndDtjcV90YWJsZVtpZF0gPSBOVUxMOwomIzQzOwljcV90YWJsZVtpZF0gPSBOVUxMOwogfQogCiBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsCkBAIC0xMzMzLDYgJiM0MzsxMzY1LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsCiAJaWYgKGdtaS0mZ3Q7bnJfcGFnZXMgPT0gMCAmYW1wOyZhbXA7ICFNQU5BX1BBR0VfQUxJR05FRChnbWktJmd0O3ZpcnRfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qIFRoZSBjYWxsZXIgbXVzdCBrZWVwIHRoZSBIV0MgYWxpdmUgdGhyb3VnaG91dCBxdWV1ZSBjcmVhdGlvbi4gKi8KIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCXJlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKHJlcSwgcGFnZV9hZGRyX2xpc3QsIG51bV9wYWdlKTsKIAlpZiAocmVxX21zZ19zaXplICZndDsgaHdjLSZndDttYXhfcmVxX21zZ19zaXplKQpAQCAtMTUzOCw3ICYjNDM7MTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YzsKIAlpbnQgZXJyOwogCiYjNDM7CS8qIFRoZSBzZXR1cCBjYWxsZXIgbXVzdCBleGNsdWRlIGNvbmN1cnJlbnQgSFdDIHRlYXJkb3duLiAqLwogCWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CiAJbWFuYV9nZF9pbml0X3JlcV9oZHIoJmFtcDtyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTiwKIAkJCSAgICAgc2l6ZW9mKHJlcSksIHNpemVvZihyZXNwKSk7CiAKQEAgLTI1MzIsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAltdXRleF9pbml0KCZhbXA7Z2MtJmd0O2VxX3Rlc3RfZXZlbnRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtnYy0mZ3Q7Z2ljX211dGV4KTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtnYy0mZ3Q7aHdjX2xvY2spOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7CiAJZ2MtJmd0O2JhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJZ2MtJmd0O2JhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKaW5kZXggMjYzZTdjNGUyOTM0MS4uNzUwZWU4ZjcyOTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYwpAQCAtOSwxNyAmIzQzOzksNDggQEAKIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKQogewogCXN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXM7CiYjNDM7CXN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGluZGV4OwogCi0JZG93bigmYW1wO2h3Yy0mZ3Q7c2VtYSk7CiYjNDM7CS8qIEZJRk8gc2xvdCBhZG1pc3Npb24gaGFzIGEgc2VwYXJhdGUgYnVkZ2V0IGZyb20gdGhlIHJlc3BvbnNlIHdhaXQuCiYjNDM7CSAqIEV4cGlyeSByZXBvcnRzIC1FVElNRURPVVQgZXZlbiB3aGlsZSBlYXJsaWVyIHJlcXVlc3RzIG1ha2UgcHJvZ3Jlc3MsCiYjNDM7CSAqIHNvIGNhbGxlcnMgbWF5IGluaXRpYXRlIHJlY292ZXJ5IG9uIGNvbnRlbnRpb24gYWxvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoZG93bl90aW1lb3V0KCZhbXA7aHdjLSZndDtzZW1hLCBtc2Vjc190b19qaWZmaWVzKGh3Yy0mZ3Q7aHdjX3RpbWVvdXQpKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiAKLQlpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLm1hcCwKLQkJCQkgICAgaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLnNpemUpOwomIzQzOwlpZiAoIWh3Yy0mZ3Q7Y2hhbm5lbF91cCkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXVwKCZhbXA7aHdjLSZndDtzZW1hKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBzZW1hcGhvcmUgYWRtaXRzIGF0IG1vc3Qgci0mZ3Q7c2l6ZSBob2xkZXJzIGF0IGEgdGltZSwgc28gYSBzbG90CiYjNDM7CSAqIGFjcXVpcmVkIGFib3ZlIGFsd2F5cyBoYXMgYSBmcmVlIGJpdCB3YWl0aW5nIGZvciBpdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItJmd0O21hcCwgci0mZ3Q7c2l6ZSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoaW5kZXggJmd0Oz0gci0mZ3Q7c2l6ZSkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl1cCgmYW1wO2h3Yy0mZ3Q7c2VtYSk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQogCi0JYml0bWFwX3NldChod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7CiYjNDM7CWN0eCA9ICZhbXA7aHdjLSZndDtjYWxsZXJfY3R4W2luZGV4XTsKJiM0MzsJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtjdHgtJmd0O2NvbXBfZXZlbnQpOwomIzQzOwkvKiBUYWtlIGJvdGggcmVmZXJlbmNlcyAoc2VuZGVyICYjNDM7IGhhbmRsZV9yZXNwKSBiZWZvcmUgcHVibGlzaGluZyB0aGUKJiM0MzsJICogc2xvdCwgc28gYW4gZWFybHkgcmVzcG9uc2UgY2Fubm90IGZyZWUgaXQgdW5kZXIgdGhlIHNlbmRlci4KJiM0MzsJICovCiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2N0eC0mZ3Q7cmVmY250LCAyKTsKJiM0MzsJY3R4LSZndDtyZXNwb25kZWQgPSBmYWxzZTsKJiM0MzsJY3R4LSZndDtyZXNwX3BlbmRpbmcgPSB0cnVlOwomIzQzOwljdHgtJmd0O21zZ19pZCA9IGluZGV4OwomIzQzOwljdHgtJmd0O2Vycm9yID0gLUVJTlBST0dSRVNTOwomIzQzOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBzbG90IGxhc3QsIGFmdGVyIGl0IGlzIGZ1bGx5IGluaXRpYWxpc2VkLiAqLwomIzQzOwliaXRtYXBfc2V0KHItJmd0O21hcCwgaW5kZXgsIDEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKIApAQCAtNDAsNiAmIzQzOzcxLDEzIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKQogCXVwKCZhbXA7aHdjLSZndDtzZW1hKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywKJiM0MzsJCQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtjdHgtJmd0O3JlZmNudCkpCiYjNDM7CQltYW5hX2h3Y19wdXRfbXNnX2luZGV4KGh3YywgY3R4LSZndDttc2dfaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGNvbnN0IHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY2FsbGVyX2N0eCwKIAkJCQkgICAgY29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnLAogCQkJCSAgICB1MzIgcmVzcF9sZW4pCkBAIC04MSw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sCiB7CiAJY29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnID0gcnhfcmVxLSZndDtidWZfdmE7CiAJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7CiYjNDM7CWJvb2wgcmVsZWFzZTsKIAlpbnQgZXJyOwogCiAJaWYgKCF0ZXN0X2JpdChtc2dfaWQsIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7CkBAIC05MCwyMiAmIzQzOzEyOSw1MyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbiwKIAl9CiAKIAljdHggPSBod2MtJmd0O2NhbGxlcl9jdHggJiM0MzsgbXNnX2lkOwotCWVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CiAKLQljdHgtJmd0O3N0YXR1c19jb2RlID0gcmVzcF9tc2ctJmd0O3N0YXR1czsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAotCW1lbWNweShjdHgtJmd0O291dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7Ci1vdXQ6CiYjNDM7CS8qIFRoZSBzZW5kZXIgaGFzIG5vdCBwdWJsaXNoZWQgaXRzIGJ1ZmZlciB5ZXQsIHNvIG5vdGhpbmcgYXNrZWQgZm9yCiYjNDM7CSAqIHRoaXMgcmVzcG9uc2UuICBLZWVwIHRoZSBzbG90IHJlc2VydmVkIGFuZCBkcm9wIHRoZSBtZXNzYWdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFjdHgtJmd0O291dHB1dF9idWYgJmFtcDsmYW1wOyAhY3R4LSZndDtyZXNwb25kZWQpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRha2UgdGhlIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIGF3YXkgZXhhY3RseSBvbmNlOiByZWxlYXNpbmcgaXQKJiM0MzsJICogaXMgd2hhdCBmcmVlcyBhIHNsb3Qgd2hvc2Ugc2VuZGVyIGhhcyBhbHJlYWR5IGdpdmVuIHVwLgomIzQzOwkgKi8KJiM0MzsJcmVsZWFzZSA9IGN0eC0mZ3Q7cmVzcF9wZW5kaW5nOwomIzQzOwljdHgtJmd0O3Jlc3BfcGVuZGluZyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDtyZXNwb25kZWQpIHsKJiM0MzsJCS8qIFRoZSBzZW5kZXIgdGltZWQgb3V0IGFuZCBhYmFuZG9uZWQgdGhlIHNsb3QsIG9yIGEgcmVzcG9uc2UKJiM0MzsJCSAqIHdhcyBhbHJlYWR5IGFwcGxpZWQuICBDb25zdW1lIHRoaXMgb25lIHdpdGhvdXQgd3JpdGluZwomIzQzOwkJICogYW55dGhpbmcsIHRoZW4gcmVsZWFzZSB0aGUgc2xvdCBpdCB3YXMgaG9sZGluZy4KJiM0MzsJCSAqLwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O2xvY2spOwomIzQzOwkJbWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLSZndDtyeHEsIHJ4X3JlcSk7CiYjNDM7CQlpZiAocmVsZWFzZSkKJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJY3R4LSZndDtyZXNwb25kZWQgPSB0cnVlOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJY3R4LSZndDtzdGF0dXNfY29kZSA9IHJlc3BfbXNnLSZndDtzdGF0dXM7CiYjNDM7CQltZW1jcHkoY3R4LSZndDtvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pOwomIzQzOwl9CiAJY3R4LSZndDtlcnJvciA9IGVycjsKIAotCS8qIE11c3QgcG9zdCByeCB3cWUgYmVmb3JlIGNvbXBsZXRlKCksIG90aGVyd2lzZSB0aGUgbmV4dCByeCBtYXkKLQkgKiBoaXQgbm9fd3FlIGVycm9yLgomIzQzOwkvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZQomIzQzOwkgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLgogCSAqLwogCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwotCiAJY29tcGxldGUoJmFtcDtjdHgtJmd0O2NvbXBfZXZlbnQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZWxlYXNlKQomIzQzOwkJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwogfQogCiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLApAQCAtMTQ2LDcgJiM0MzsyMTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZiwKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSDoKLQkJCWh3Yy0mZ3Q7aHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDsKJiM0MzsJCQkvKiBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIGEgMjQtYml0IGZpZWxkLiAgS2VlcAomIzQzOwkJCSAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkCiYjNDM7CQkJICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlcgomIzQzOwkJCSAqIHRoYW4gc2lsZW50bHkgdHJ1bmNhdGVkIHRvIHUxNi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlod2MtJmd0O2h3Y19pbml0X3FfZGVwdGhfbWF4ID0gdmFsOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBIV0NfSU5JVF9EQVRBX01BWF9SRVFVRVNUOgpAQCAtNDc2LDcgJiM0Mzs1NTEsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAKIAlkbWFfYnVmLSZndDtudW1fcmVxcyA9IHFfZGVwdGg7CiAKLQlidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTsKJiM0MzsJLyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhcwomIzQzOwkgKiBhbHJlYWR5IGFzc3VtZWQgZm9yIHRoZSBFUSBhbmQgQ1EgcmluZ3MgYWJvdmUuICBUaGUgc2xvdHMgYXJlCiYjNDM7CSAqIGNhcnZlZCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBidWZmZXIsIHNvIGFueSB0YWlsIGlzIHVudXNlZC4KJiM0MzsJICovCiYjNDM7CWJ1Zl9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKSk7CiAKIAlnbWkgPSAmYW1wO2RtYV9idWYtJmd0O21lbV9pbmZvOwogCWVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7CkBAIC01NjAsNiAmIzQzOzYzOSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywKIAlod2Nfd3EtJmd0O2dkbWFfd3EgPSBxdWV1ZTsKIAlod2Nfd3EtJmd0O3F1ZXVlX2RlcHRoID0gcV9kZXB0aDsKIAlod2Nfd3EtJmd0O2h3Y19jcSA9IGh3Y19jcTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtod2Nfd3EtJmd0O2xvY2spOwogCiAJZXJyID0gbWFuYV9od2NfYWxsb2NfZG1hX2J1Zihod2MsIHFfZGVwdGgsIG1heF9tc2dfc2l6ZSwKIAkJCQkgICAgICZhbXA7aHdjX3dxLSZndDttc2dfYnVmKTsKQEAgLTU3Nyw3ICYjNDM7NjU3LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19jcmVhdGVfd3Eoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSwKJiM0MztzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsCiAJCQkJc3RydWN0IGh3Y193b3JrX3JlcXVlc3QgKnJlcSwKIAkJCQl1MzIgZGVzdF92aXJ0X3JxX2lkLCB1MzIgZGVzdF92aXJ0X3JjcV9pZCwKIAkJCQlib29sIGRlc3RfcGYpCkBAIC02MTYsNyAmIzQzOzY5NiwxMCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsCiAJcmVxLSZndDt3cWVfcmVxLmlubGluZV9vb2JfZGF0YSA9IHR4X29vYjsKIAlyZXEtJmd0O3dxZV9yZXEuY2xpZW50X2RhdGFfdW5pdCA9IDA7CiAKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aHdjX3R4cS0mZ3Q7bG9jayk7CiAJZXJyID0gbWFuYV9nZF9wb3N0X2FuZF9yaW5nKGh3Y190eHEtJmd0O2dkbWFfd3EsICZhbXA7cmVxLSZndDt3cWVfcmVxLCBOVUxMKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtod2NfdHhxLSZndDtsb2NrKTsKJiM0MzsKIAlpZiAoZXJyKQogCQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gcG9zdCBXUUUgb24gSFdDIFNROiAlZFxuJiMzNDssIGVycik7CiAJcmV0dXJuIGVycjsKQEAgLTY0Miw2ICYjNDM7NzI1LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLSZndDtyeHE7CiAJc3RydWN0IGh3Y193b3JrX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWludCBpOwogCkBAIC02NTcsMTggJiM0Mzs3NDEsMzggQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlpZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcV9kZXB0aDsgJiM0MzsmIzQzO2kpCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBxX2RlcHRoOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtjdHhbaV0ubG9jayk7CiAJCWluaXRfY29tcGxldGlvbigmYW1wO2N0eFtpXS5jb21wX2V2ZW50KTsKJiM0MzsJfQogCiAJaHdjLSZndDtjYWxsZXJfY3R4ID0gY3R4OwogCi0JcmV0dXJuIG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLSZndDtjcS0mZ3Q7Z2RtYV9lcSk7CiYjNDM7CS8qIEVuYWJsZSBhZG1pc3Npb24gZm9yIHRoZSB0ZXN0IEVRIHJlcXVlc3QuICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTsKJiM0MzsJaHdjLSZndDtjaGFubmVsX3VwID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLSZndDtjcS0mZ3Q7Z2RtYV9lcSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTsKJiM0MzsJCWh3Yy0mZ3Q7Y2hhbm5lbF91cCA9IGZhbHNlOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLAomIzQzO3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCwKIAkJCQkgICAgICB1MzIgKm1heF9yZXFfbXNnX3NpemUsCiAJCQkJICAgICAgdTMyICptYXhfcmVzcF9tc2dfc2l6ZSkKIHsKJiM0MzsJLyogbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkgZmlsbHMgdGhlIGJvb3RzdHJhcCBmaWVsZHMgZnJvbSBoYXJkCiYjNDM7CSAqIElSUSBvbiBHRE1BX0VRRV9IV0NfSU5JVF9EQVRBIGFuZCB0aGVuIHNpZ25hbHMgaHdjX2luaXRfZXFlX2NvbXAgb24KJiM0MzsJICogR0RNQV9FUUVfSFdDX0lOSVRfRE9ORS4gIFRoZSB3YWl0X2Zvcl9jb21wbGV0aW9uKCkgYmVsb3cgcGFpcnMgd2l0aAomIzQzOwkgKiB0aGF0IGNvbXBsZXRlKCksIHNvIGV2ZXJ5IHZhbHVlIHN0b3JlZCBiZWZvcmUgSU5JVF9ET05FIGlzIG9yZGVyZWQKJiM0MzsJICogYWdhaW5zdCB0aGUgcmVhZHMgdGhhdCBmb2xsb3cgaXQgaGVyZS4KJiM0MzsJICovCiAJc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcnEgPSBod2MtJmd0O3J4cS0mZ3Q7Z2RtYV93cTsKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqc3EgPSBod2MtJmd0O3R4cS0mZ3Q7Z2RtYV93cTsKQEAgLTY3Niw2ICYjNDM7NzgwLDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCwKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtJmd0O2NxLSZndDtnZG1hX2NxOwogCWludCBlcnI7CiAKJiM0MzsJLyogRG8gbm90IHJldXNlIGRpbWVuc2lvbnMgb3Igcm91dGluZyBJRHMgZnJvbSBhIHByZXZpb3VzIGVzdGFibGlzaC4gKi8KJiM0MzsJaHdjLSZndDtod2NfaW5pdF9xX2RlcHRoX21heCA9IDA7CiYjNDM7CWh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZSA9IDA7CiYjNDM7CWh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemUgPSAwOwomIzQzOwlnYy0mZ3Q7aHdjLmRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDsKJiM0MzsJZ2MtJmd0O2h3Yy5wZGlkID0gSU5WQUxJRF9QRElEOwomIzQzOwlod2MtJmd0O3BmX2Rlc3RfdnJxX2lkID0gMDsKJiM0MzsJaHdjLSZndDtwZl9kZXN0X3ZyY3FfaWQgPSAwOwomIzQzOwogCWluaXRfY29tcGxldGlvbigmYW1wO2h3Yy0mZ3Q7aHdjX2luaXRfZXFlX2NvbXApOwogCiAJZXJyID0gbWFuYV9zbWNfc2V0dXBfaHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSwKQEAgLTY4Myw3ICYjNDM7Nzk2LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLAogCQkJCSBjcS0mZ3Q7bWVtX2luZm8uZG1hX2hhbmRsZSwKIAkJCQkgcnEtJmd0O21lbV9pbmZvLmRtYV9oYW5kbGUsCiAJCQkJIHNxLSZndDttZW1faW5mby5kbWFfaGFuZGxlLAotCQkJCSBlcS0mZ3Q7ZXEubXNpeF9pbmRleCk7CiYjNDM7CQkJCSBlcS0mZ3Q7ZXEubXNpeF9pbmRleCwgJmFtcDtod2MtJmd0O3NldHVwX2FjdGl2ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjk0LDYgJiM0Mzs4MDcsMTQgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLAogCSptYXhfcmVxX21zZ19zaXplID0gaHdjLSZndDtod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplOwogCSptYXhfcmVzcF9tc2dfc2l6ZSA9IGh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7CiAKJiM0MzsJLyogUmVqZWN0IGEgbWlzc2luZyBkb29yYmVsbCBiZWZvcmUgdGhlIGNoYW5uZWwgdGVzdC4gVGhpcyBuZWl0aGVyCiYjNDM7CSAqIHZhbGlkYXRlcyBpdHMgQkFSIHJhbmdlIG5vciBwcm90ZWN0cyBlYXJsaWVyIElSUSByZWFybWluZy4KJiM0MzsJICovCiYjNDM7CWlmIChnYy0mZ3Q7aHdjLmRvb3JiZWxsID09IElOVkFMSURfRE9PUkJFTEwpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDOiBubyBkb29yYmVsbCBpbiBpbml0IGRhdGFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiYjNDM7CiAJLyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi8KIAlpZiAoV0FSTl9PTihjcS0mZ3Q7aWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkKIAkJcmV0dXJuIC1FUFJPVE87CkBAIC03MTIsNiAmIzQzOzgzMywxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiB7CiAJaW50IGVycjsKIAomIzQzOwkvKiBDUSBkZXB0aCBpcyBxX2RlcHRoICogMiAoU1EgJiM0MzsgUlEpIHBhc3NlZCBhcyB1MTYgdG8gY3JlYXRlX2NxLgomIzQzOwkgKiBDYXAgdG8gcHJldmVudCB1MTYgdHJ1bmNhdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChxX2RlcHRoICZndDsgVTE2X01BWCAvIDIpCiYjNDM7CQlxX2RlcHRoID0gVTE2X01BWCAvIDI7CiYjNDM7CiAJZXJyID0gbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2coaHdjLCBxX2RlcHRoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNzUxLDEyICYjNDM7ODc4LDQ0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7LyogQnJpbmctdXAgb25seTogcmVxdWlyZXMgbm8gc2VuZGVycyBvciBjb25jdXJyZW50IGxpZmVjeWNsZSBvcGVyYXRpb25zLgomIzQzOyAqIFRoaXMgaGVscGVyIGRvZXMgbm90IHVucHVibGlzaCB0aGUgSFdDIG9yIGRyYWluIHNlbmRlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKQomIzQzO3sKJiM0MzsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQ7CiYjNDM7CiYjNDM7CS8qIFRoZSBDUSBoZWxwZXIgZGVyZWdpc3RlcnMgdGhlIEhXQyBFUSBiZWZvcmUgcmV0dXJuaW5nLiAqLwomIzQzOwlpZiAoaHdjLSZndDtjcSkgewomIzQzOwkJbWFuYV9od2NfZGVzdHJveV9jcShnYywgaHdjLSZndDtjcSk7CiYjNDM7CQlod2MtJmd0O2NxID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShod2MtJmd0O2NhbGxlcl9jdHgpOwomIzQzOwlod2MtJmd0O2NhbGxlcl9jdHggPSBOVUxMOwomIzQzOwomIzQzOwlpZiAoaHdjLSZndDt0eHEpIHsKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3R4cSk7CiYjNDM7CQlod2MtJmd0O3R4cSA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGh3Yy0mZ3Q7cnhxKSB7CiYjNDM7CQltYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLSZndDtyeHEpOwomIzQzOwkJaHdjLSZndDtyeHEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hbmFfZ2RfZnJlZV9yZXNfbWFwKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzKTsKJiM0MzsJaHdjLSZndDtudW1faW5mbGlnaHRfbXNnID0gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiAJdTMyIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplOwogCXN0cnVjdCBnZG1hX2RldiAqZ2QgPSAmYW1wO2djLSZndDtod2M7CiAJc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjOwotCXUxNiBxX2RlcHRoX21heDsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKipvbGRfY3FfdGFibGU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBxX2RlcHRoX21heDsKIAlpbnQgZXJyOwogCiAJaHdjID0ga3phbGxvY19vYmooKmh3Yyk7CkBAIC03NjQsMTAgJiM0Mzs5MjMsMTEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWdkLSZndDtnZG1hX2NvbnRleHQgPSBnYzsKLQlnZC0mZ3Q7ZHJpdmVyX2RhdGEgPSBod2M7CiAJaHdjLSZndDtnZG1hX2RldiA9IGdkOwogCWh3Yy0mZ3Q7ZGV2ID0gZ2MtJmd0O2RldjsKIAlod2MtJmd0O2h3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7CiYjNDM7CWh3Yy0mZ3Q7YWN0aXZlX3NlbmRlcnMgPSAwOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7Z2MtJmd0O2h3Y19kcmFpbl93YWl0cSk7CiAKIAkvKiBIV0MmIzM5O3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqLwogCWdkLSZndDtkZXZfaWQuYXNfdWludDMyID0gMDsKQEAgLTc3Niw2ICYjNDM7OTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAlnZC0mZ3Q7cGRpZCA9IElOVkFMSURfUERJRDsKIAlnZC0mZ3Q7ZG9vcmJlbGwgPSBJTlZBTElEX0RPT1JCRUxMOwogCiYjNDM7CS8qIFB1Ymxpc2ggZm9yIHNldHVwOyBxdWV1ZSBpbml0aWFsaXphdGlvbiBiZWxvdyBtdXN0IHByZWNlZGUgc2VuZGVycy4gKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YSA9IGh3YzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwogCS8qIG1hbmFfaHdjX2luaXRfcXVldWVzKCkgb25seSBjcmVhdGVzIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMsCiAJICogYW5kIGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBIV0MgZGV2aWNlLgogCSAqLwpAQCAtNzk0LDggJiM0Mzs5NTksMTMyIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CWlmIChxX2RlcHRoX21heCAmZ3Q7IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7CiYjNDM7CQkvKiBCb3VuZCBETUEgYWxsb2NhdGlvbnMgYmVmb3JlIHVzaW5nIHRoZSAyNC1iaXQgZGVwdGguICovCiYjNDM7CQlpZiAocV9kZXB0aF9tYXggJmd0OyBIV19DSEFOTkVMX01BWF9RVUVVRV9ERVBUSCkKJiM0MzsJCQlxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIOwomIzQzOwomIzQzOwkJLyogS2VlcCBib290c3RyYXAgbWVzc2FnZSBzaXplcyBmb3IgbWFuZGF0b3J5IGNvbW1hbmRzLgomIzQzOwkJICogSW5jb21wYXRpYmxlIHJlcG9ydHMgc2tpcCByZWJ1aWxkaW5nLCBub3QgY2hhbm5lbCBjcmVhdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8CiYjNDM7CQkgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSB8fAomIzQzOwkJICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplICZndDsKJiM0MzsJCQlVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUgfHwKJiM0MzsJCSAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgJmd0OwomIzQzOwkJCVUzMl9NQVggLSBNQU5BX1BBR0VfU0laRSkgewomIzQzOwkJCWRldl9lcnIoaHdjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7SFdDOiBpbnZhbGlkIGRpbXMgcT0ldSByZXE9JXUgcmVzcD0ldVxuJiMzNDssCiYjNDM7CQkJCXFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLAomIzQzOwkJCQltYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQkJcV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDsKJiM0MzsJCQlnb3RvIHNraXBfcmVpbml0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gdGVhcmRvd24gSFdDIGZvciByZWluaXQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJZXJyKTsKJiM0MzsJCQlnb3RvIHJlaW5pdF9mYWxsYmFjazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWh3Yy0mZ3Q7c2V0dXBfYWN0aXZlID0gZmFsc2U7CiYjNDM7CiYjNDM7CQkvKiBVbnB1Ymxpc2ggdGhlIENRIGFuZCBkcmFpbiBpdHMgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHRhYmxlLiAqLwomIzQzOwkJbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTsKJiM0MzsKJiM0MzsJCW9sZF9jcV90YWJsZSA9IGdjLSZndDtjcV90YWJsZTsKJiM0MzsJCWdjLSZndDtjcV90YWJsZSA9IE5VTEw7CiYjNDM7CQlnYy0mZ3Q7bWF4X251bV9jcXMgPSAwOwomIzQzOwkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQl2ZnJlZShvbGRfY3FfdGFibGUpOwomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBxX2RlcHRoX21heCwKJiM0MzsJCQkJCSAgIG1heF9yZXFfbXNnX3NpemUsCiYjNDM7CQkJCQkgICBtYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVpbml0IEhXQzogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJCWdvdG8gcmVpbml0X2ZhbGxiYWNrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsICZhbXA7cV9kZXB0aF9tYXgsCiYjNDM7CQkJCQkJICZhbXA7bWF4X3JlcV9tc2dfc2l6ZSwKJiM0MzsJCQkJCQkgJmFtcDttYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoIWVyciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHFfZGVwdGhfbWF4ICZsdDsgaHdjLSZndDtudW1faW5mbGlnaHRfbXNnIHx8CiYjNDM7CQkgICAgIG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8CiYjNDM7CQkgICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpKSB7CiYjNDM7CQkJLyogVGhlIHJlYnVpbHQgY2hhbm5lbCBtdXN0IHN1cHBvcnQgdGhlIGFsbG9jYXRlZCBkZXB0aAomIzQzOwkJCSAqIGFuZCBtZXNzYWdlIHNpemVzLgomIzQzOwkJCSAqLwomIzQzOwkJCWRldl9lcnIoaHdjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7SFdDOiByZWJ1aWx0IHE9JXUgcmVxPSV1IHJlc3A9JXUsIGJ1aWx0IGZvciAldS8ldS8ldVxuJiMzNDssCiYjNDM7CQkJCXFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLAomIzQzOwkJCQltYXhfcmVzcF9tc2dfc2l6ZSwgaHdjLSZndDtudW1faW5mbGlnaHRfbXNnLAomIzQzOwkJCQlIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsCiYjNDM7CQkJCUhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpOwomIzQzOwkJCWVyciA9IC1FUFJPVE87CiYjNDM7CQl9CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcbiYjMzQ7LAomIzQzOwkJCQllcnIpOwomIzQzOwkJCWdvdG8gcmVpbml0X2ZhbGxiYWNrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gc2tpcF9yZWluaXQ7CiYjNDM7CiYjNDM7cmVpbml0X2ZhbGxiYWNrOgomIzQzOwkvKiBBIGZhaWxlZCBoYW5kc2hha2UgbGVhdmVzIHF1ZXVlIG93bmVyc2hpcCB1bmNlcnRhaW4uICovCiYjNDM7CWlmIChod2MtJmd0O3NldHVwX2FjdGl2ZSkgewomIzQzOwkJaWYgKG1hbmFfc21jX3RlYXJkb3duX2h3YygmYW1wO2djLSZndDtzaG1fY2hhbm5lbCwgZmFsc2UpKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gdGVhciBkb3duIEhXQyBiZWZvcmUgYm9vdHN0cmFwIGZhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlod2MtJmd0O3NldHVwX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBmYWlsZWQgZXN0YWJsaXNoIG1heSBub3QgaGF2ZSBhbGxvY2F0ZWQgY3FfdGFibGUuICovCiYjNDM7CWRldl93YXJuKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0hXQyByZWluaXQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gYm9vdHN0cmFwIGRlcHRoXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKGh3Yyk7CiYjNDM7CiYjNDM7CW9sZF9jcV90YWJsZSA9IGdjLSZndDtjcV90YWJsZTsKJiM0MzsJZ2MtJmd0O2NxX3RhYmxlID0gTlVMTDsKJiM0MzsJZ2MtJmd0O21heF9udW1fY3FzID0gMDsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXZmcmVlKG9sZF9jcV90YWJsZSk7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsCiYjNDM7CQkJCSAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSwKJiM0MzsJCQkJICAgSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgYm9vdHN0cmFwIEhXQzogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsICZhbXA7cV9kZXB0aF9tYXgsICZhbXA7bWF4X3JlcV9tc2dfc2l6ZSwKJiM0MzsJCQkJCSAmYW1wO21heF9yZXNwX21zZ19zaXplKTsKJiM0MzsJaWYgKCFlcnIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8CiYjNDM7CSAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHsKJiM0MzsJCS8qIFRoZSByZXN0b3JlZCBjaGFubmVsIG11c3QgcmVwb3J0IHRoZSBhbGxvY2F0ZWQgbWVzc2FnZSBzaXplcy4gKi8KJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDOiBib290c3RyYXAgcmVwb3J0cyByZXE9JXUgcmVzcD0ldVxuJiMzNDssCiYjNDM7CQkJbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpOwomIzQzOwkJZXJyID0gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcbiYjMzQ7LAomIzQzOwkJCWVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzO3NraXBfcmVpbml0OgomIzQzOwogCWVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhLAotCQkJCSAgICBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCwKJiM0MzsJCQkJICAgIGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZywKIAkJCQkgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gdGVzdCBIV0M6ICVkXG4mIzM0OywgZXJyKTsKQEAgLTgxMCwxOCAmIzQzOzEwOTksNzEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCiB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIHsKJiM0MzsJLyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi8KIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFod2MpCiAJCXJldHVybjsKIAotCS8qIGdjLSZndDttYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0JiMzOTtzCi0JICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS4KJiM0MzsJLyogTm9uemVybyBudW1faW5mbGlnaHRfbXNnIG1lYW5zIHF1ZXVlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZC4gKi8KJiM0MzsJaWYgKGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZykgewomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJaHdjLSZndDtjaGFubmVsX3VwID0gZmFsc2U7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBCbG9jayBuZXcgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSByZWZlcmVuY2VzIGJlZm9yZSBkcmFpbmluZy4gKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJLyogQ29tcGxldGUgb2NjdXBpZWQgc2xvdHMgYW5kIGRyb3AgcGVuZGluZyByZXNwb25zZS1zaWRlIHJlZmVyZW5jZXMuICovCiYjNDM7CWlmIChod2MtJmd0O2NhbGxlcl9jdHgpIHsKJiM0MzsJCXN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4OwomIzQzOwkJYm9vbCBkcm9wX3Jlc3BfcmVmOwomIzQzOwkJaW50IGk7CiYjNDM7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgaHdjLSZndDtudW1faW5mbGlnaHRfbXNnOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghdGVzdF9iaXQoaSwgaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLm1hcCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWN0eCA9ICZhbXA7aHdjLSZndDtjYWxsZXJfY3R4W2ldOwomIzQzOwomIzQzOwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJLyogUHJlc2VydmUgYW4gYWxyZWFkeSByZWNvcmRlZCByZXN1bHQuICovCiYjNDM7CQkJaWYgKCFjdHgtJmd0O3Jlc3BvbmRlZCkKJiM0MzsJCQkJY3R4LSZndDtlcnJvciA9IC1FTk9ERVY7CiYjNDM7CQkJZHJvcF9yZXNwX3JlZiA9IGN0eC0mZ3Q7cmVzcF9wZW5kaW5nOwomIzQzOwkJCWN0eC0mZ3Q7cmVzcF9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQkJY3R4LSZndDtyZXNwb25kZWQgPSB0cnVlOwomIzQzOwkJCWNvbXBsZXRlKCZhbXA7Y3R4LSZndDtjb21wX2V2ZW50KTsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKGRyb3BfcmVzcF9yZWYpCiYjNDM7CQkJCWh3Y19jdHhfcHV0KGh3YywgY3R4KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQYWlyIHdpdGggdGhlIGxhc3Qgc2VuZGVyJiMzOTtzIHdha2V1cCB1bmRlciBod2NfbG9jaywgc28gaXQgZmluaXNoZXMKJiM0MzsJICogYWNjZXNzaW5nIGdjIGJlZm9yZSB0aGUgZHJhaW4gcmV0dXJucy4KIAkgKi8KLQlpZiAoZ2MtJmd0O21heF9udW1fY3FzICZndDsgMCkgewotCQltYW5hX3NtY190ZWFyZG93bl9od2MoJmFtcDtnYy0mZ3Q7c2htX2NoYW5uZWwsIGZhbHNlKTsKLQkJZ2MtJmd0O21heF9udW1fY3FzID0gMDsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO2djLSZndDtod2NfbG9jayk7CiYjNDM7CXdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtJmd0O2h3Y19kcmFpbl93YWl0cSwKJiM0MzsJCQkgICAgaHdjLSZndDthY3RpdmVfc2VuZGVycyA9PSAwLCBnYy0mZ3Q7aHdjX2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtnYy0mZ3Q7aHdjX2xvY2spOwomIzQzOwomIzQzOwlpZiAoaHdjLSZndDtzZXR1cF9hY3RpdmUpIHsKJiM0MzsJCWlmICghbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSkpCiYjNDM7CQkJaHdjLSZndDtzZXR1cF9hY3RpdmUgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byB0ZWFyIGRvd24gSFdDXG4mIzM0Oyk7CiAJfQomIzQzOwlnYy0mZ3Q7bWF4X251bV9jcXMgPSAwOwomIzQzOwomIzQzOwkvKiBEZXJlZ2lzdGVyIHRoZSBIV0MgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHdvcmsgcXVldWVzLiAqLwomIzQzOwlpZiAoaHdjLSZndDtjcSkKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0LCBod2MtJmd0O2NxKTsKIAogCWlmIChod2MtJmd0O3R4cSkKIAkJbWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy0mZ3Q7dHhxKTsKQEAgLTgyOSw4ICYjNDM7MTE3MSwxOCBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAlpZiAoaHdjLSZndDtyeHEpCiAJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3J4cSk7CiAKLQlpZiAoaHdjLSZndDtjcSkKLQkJbWFuYV9od2NfZGVzdHJveV9jcShod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQsIGh3Yy0mZ3Q7Y3EpOwomIzQzOwlpZiAoaHdjLSZndDtjYWxsZXJfY3R4KSB7CiYjNDM7CQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIXRlc3RfYml0KGksIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljdHggPSAmYW1wO2h3Yy0mZ3Q7Y2FsbGVyX2N0eFtpXTsKJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWtmcmVlKGh3Yy0mZ3Q7Y2FsbGVyX2N0eCk7CiAJaHdjLSZndDtjYWxsZXJfY3R4ID0gTlVMTDsKQEAgLTg0NSw3ICYjNDM7MTE5Nyw2IEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCWh3Yy0mZ3Q7aHdjX3RpbWVvdXQgPSAwOwogCiAJa2ZyZWUoaHdjKTsKLQlnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhID0gTlVMTDsKIAlnYy0mZ3Q7aHdjLmdkbWFfY29udGV4dCA9IE5VTEw7CiAKIAl2ZnJlZShnYy0mZ3Q7Y3FfdGFibGUpOwpAQCAtODYwLDEzICYjNDM7MTIxMSwyMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sCiAJc3RydWN0IGh3Y193cSAqdHhxID0gaHdjLSZndDt0eHE7CiAJc3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZzsKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJYm9vbCBkcm9wX3Jlc3BfcmVmOwomIzQzOwlib29sIGFiYW5kb25lZCA9IGZhbHNlOwomIzQzOwlib29sIGNhbmNlbGxlZDsKIAl1MzIgZGVzdF92cmNxID0gMDsKIAl1MzIgZGVzdF92cnEgPSAwOwogCXUzMiBjb21tYW5kOwomIzQzOwl1MzIgc3RhdHVzOwomIzQzOwl1MzIgd2FpdF9tczsKIAl1MTYgbXNnX2lkOwogCWludCBlcnI7CiAKLQltYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgJmFtcDttc2dfaWQpOwomIzQzOwllcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgJmFtcDttc2dfaWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKIAogCXR4X3dyID0gJmFtcDt0eHEtJmd0O21zZ19idWYtJmd0O3JlcXNbbXNnX2lkXTsKIApAQCAtODc4LDggJiM0MzsxMjM3LDExIEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbiwKIAl9CiAKIAljdHggPSBod2MtJmd0O2NhbGxlcl9jdHggJiM0MzsgbXNnX2lkOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwogCWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IHJlc3A7CiAJY3R4LSZndDtvdXRwdXRfYnVmbGVuID0gcmVzcF9sZW47CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKIAogCXJlcV9tc2cgPSAoc3RydWN0IGdkbWFfcmVxX2hkciAqKXR4X3dyLSZndDtidWZfdmE7CiAJaWYgKHJlcSkKQEAgLTg5NSw0MyAmIzQzOzEyNTcsMTE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbiwKIAkJZGVzdF92cmNxID0gaHdjLSZndDtwZl9kZXN0X3ZyY3FfaWQ7CiAJfQogCi0JZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSwgZmFsc2UpOwomIzQzOwkvKiBTZXJpYWxpemUgY2FuY2VsbGF0aW9uIHdpdGggc3VibWlzc2lvbi4gQW4gdW5zdWJtaXR0ZWQgcmVxdWVzdAomIzQzOwkgKiBjYW5ub3Qgc3VjY2VlZCwgZXZlbiBpZiBhbiB1bnNvbGljaXRlZCByZXNwb25zZSB3YXMgYWNjZXB0ZWQuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljYW5jZWxsZWQgPSBjdHgtJmd0O3Jlc3BvbmRlZDsKJiM0MzsJaWYgKGNhbmNlbGxlZCkKJiM0MzsJCWVyciA9IGN0eC0mZ3Q7ZXJyb3IgPzogLUVQUk9UTzsKJiM0MzsJZWxzZQomIzQzOwkJZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSwKJiM0MzsJCQkJCSAgIGZhbHNlKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoY2FuY2VsbGVkKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0hXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXG4mIzM0OywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CXdhaXRfbXMgPSBod2MtJmd0O2h3Y190aW1lb3V0OwogCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7Y3R4LSZndDtjb21wX2V2ZW50LAotCQkJCQkgKG1zZWNzX3RvX2ppZmZpZXMoaHdjLSZndDtod2NfdGltZW91dCkpKSkgewotCQlpZiAoaHdjLSZndDtod2NfdGltZW91dCAhPSAwKQotCQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xuJiMzNDssCi0JCQkJY29tbWFuZCwgaHdjLSZndDtod2NfdGltZW91dCk7CiYjNDM7CQkJCQkgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSkpIHsKJiM0MzsJCS8qIENsZWFyIG91dHB1dF9idWYgc28gYSBsYXRlIHJlc3BvbnNlIGNhbm5vdCB3cml0ZSB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7CQkgKiBidWZmZXIsIHRoZW4gY2hlY2sgd2hldGhlciBvbmUgYWxyZWFkeSBhcnJpdmVkCiYjNDM7CQkgKiAoZXJyb3IgIT0gLUVJTlBST0dSRVNTKS4KJiM0MzsJCSAqLwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IE5VTEw7CiYjNDM7CQllcnIgPSBjdHgtJmd0O2Vycm9yOwomIzQzOwkJc3RhdHVzID0gY3R4LSZndDtzdGF0dXNfY29kZTsKJiM0MzsJCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7CiYjNDM7CQkJLyogUHVibGlzaCBhYmFuZG9ubWVudCB3aXRoIGJ1ZmZlciB3aXRoZHJhd2FsIHNvIGEgbGF0ZQomIzQzOwkJCSAqIHJlc3BvbnNlIGNhbiByZWNsYWltIHRoZSBzbG90LiBLZWVwIGl0cyByZWZlcmVuY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJY3R4LSZndDtyZXNwb25kZWQgPSB0cnVlOwomIzQzOwkJCWFiYW5kb25lZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQlpZiAoIWFiYW5kb25lZCkgewomIzQzOwkJCS8qIEEgY29tcGxldGlvbiB3b24gdGhlIHJhY2Ugd2l0aCB0aW1lb3V0OyB1c2UgaXRzIHJlc3VsdC4gKi8KJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQkJZ290byBjaGVja19zdGF0dXM7CiYjNDM7CQl9CiAKLQkJLyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi8KLQkJaWYgKGh3Yy0mZ3Q7aHdjX3RpbWVvdXQgJmd0OyAxKQotCQkJaHdjLSZndDtod2NfdGltZW91dCA9IDE7CiYjNDM7CQlpZiAod2FpdF9tcyAhPSAwKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xuJiMzNDssCiYjNDM7CQkJCWNvbW1hbmQsIHdhaXRfbXMpOwomIzQzOwomIzQzOwkJCS8qIEdlbnVpbmUgdGltZW91dDogc2hvcnRlbiBsYXRlciB3YWl0cyBzbyBzdWJzZXF1ZW50CiYjNDM7CQkJICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGUKJiM0MzsJCQkgKiBmdWxsIHRpbWVvdXQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGh3Yy0mZ3Q7aHdjX3RpbWVvdXQgJmd0OyAxKQomIzQzOwkJCQlod2MtJmd0O2h3Y190aW1lb3V0ID0gMTsKJiM0MzsJCX0KIAogCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIG91dDsKLQl9CiAKLQlpZiAoY3R4LSZndDtlcnJvcikgewotCQllcnIgPSBjdHgtJmd0O2Vycm9yOwotCQlnb3RvIG91dDsKJiM0MzsJCS8qIERyb3Agb25seSB0aGUgc2VuZGVyJiMzOTtzIHJlZmVyZW5jZTsgdGhlIHJlc3BvbnNlLXNpZGUgb25lIGlzCiYjNDM7CQkgKiB3aGF0IGtlZXBzIHRoZSBzbG90IHJlc2VydmVkLgomIzQzOwkJICovCiYjNDM7CQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGN0eC0mZ3Q7c3RhdHVzX2NvZGUgJmFtcDsmYW1wOyBjdHgtJmd0O3N0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykgewotCQlpZiAoY3R4LSZndDtzdGF0dXNfY29kZSA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHsKJiM0MzsJLyogQ2xlYXIgb3V0cHV0X2J1ZiBhbmQgcmVhZCB0aGUgcmVzdWx0IHVuZGVyIHRoZSBsb2NrOyB0aGUgc2xvdCBtYXkKJiM0MzsJICogYmUgcmV1c2VkIGFmdGVyIGh3Y19jdHhfcHV0KCkuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljdHgtJmd0O291dHB1dF9idWYgPSBOVUxMOwomIzQzOwllcnIgPSBjdHgtJmd0O2Vycm9yOwomIzQzOwlzdGF0dXMgPSBjdHgtJmd0O3N0YXR1c19jb2RlOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWh3Y19jdHhfcHV0KGh3YywgY3R4KTsKJiM0MzsKJiM0MztjaGVja19zdGF0dXM6CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsmYW1wOyBzdGF0dXMgIT0gR0RNQV9TVEFUVVNfTU9SRV9FTlRSSUVTKSB7CiYjNDM7CQlpZiAoc3RhdHVzID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIG91dDsKJiM0MzsJCQlnb3RvIGRvbmU7CiAJCX0KJiM0MzsKIAkJaWYgKGNvbW1hbmQgIT0gTUFOQV9RVUVSWV9QSFlfU1RBVCkKIAkJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7Q29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxuJiMzNDssCi0JCQkJY29tbWFuZCwgY3R4LSZndDtzdGF0dXNfY29kZSk7CiYjNDM7CQkJCWNvbW1hbmQsIHN0YXR1cyk7CiAJCWVyciA9IC1FUFJPVE87Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBkb25lOwogCX0KJiM0MzsKJiM0MzsJZXJyID0gMDsKJiM0MzsJZ290byBkb25lOwogb3V0OgotCW1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpOwomIzQzOwkvKiBSZWxlYXNlIGFueSByZWZlcmVuY2VzIHN0aWxsIGhlbGQgYnkgdGhpcyB1bnN1Ym1pdHRlZCByZXF1ZXN0LiAqLwomIzQzOwljdHggPSBod2MtJmd0O2NhbGxlcl9jdHggJiM0MzsgbXNnX2lkOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljdHgtJmd0O291dHB1dF9idWYgPSBOVUxMOwomIzQzOwlkcm9wX3Jlc3BfcmVmID0gY3R4LSZndDtyZXNwX3BlbmRpbmc7CiYjNDM7CWN0eC0mZ3Q7cmVzcF9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CWN0eC0mZ3Q7cmVzcG9uZGVkID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoZHJvcF9yZXNwX3JlZikKJiM0MzsJCXJlZmNvdW50X2RlYygmYW1wO2N0eC0mZ3Q7cmVmY250KTsKJiM0MzsJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzO2RvbmU6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jCmluZGV4IGQyMWI1ZGIwNmU1MDkuLjNjZjZhOWY4ZTMyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuYwpAQCAtMTI5LDkgJiM0MzsxMjksMTIgQEAgdm9pZCBtYW5hX3NtY19pbml0KHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzYy0mZ3Q7YmFzZSA9IGJhc2U7CiB9CiAKJiM0MzsvKiBSZXF1aXJlcyBubyBvdXRzdGFuZGluZyBIV0MgaGFuZG92ZXIuICpzdWJtaXR0ZWQgcmVjb3JkcyBwb3NzaWJsZSBQRgomIzQzOyAqIG93bmVyc2hpcCwgaW5jbHVkaW5nIHdoZW4gc2V0dXAgZmFpbHMgYWZ0ZXIgc3VibWlzc2lvbi4KJiM0MzsgKi8KIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJCSAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLAotCQkgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpCiYjNDM7CQkgICAgICAgdTMyIGVxX21zaXhfaW5kZXgsIGJvb2wgKnN1Ym1pdHRlZCkKIHsKIAl1bmlvbiBzbWNfcHJvdG9faGRyICpoZHI7CiAJdTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7CkBAIC0xNDQsNiAmIzQzOzE0Nyw4IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJaW50IGVycjsKIAlpbnQgaTsKIAomIzQzOwkqc3VibWl0dGVkID0gZmFsc2U7CiYjNDM7CiAJLyogRW5zdXJlIFZGIGFscmVhZHkgaGFzIHBvc3Nlc3Npb24gb2Ygc2hhcmVkIG1lbW9yeSAqLwogCWVyciA9IG1hbmFfc21jX3BvbGxfcmVnaXN0ZXIoc2MtJmd0O2Jhc2UsIGZhbHNlKTsKIAlpZiAoZXJyKSB7CkBAIC0yMjksNiAmIzQzOzIzNCw3IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJLyogV3JpdGUgMjU2LW1lc3NhZ2UgYnVmZmVyIHRvIHNoYXJlZCBtZW1vcnkgKGZpbmFsIDMyLWJpdCB3cml0ZQogCSAqIHRyaWdnZXJzIEhXIHRvIHNldCBwb3NzZXNzaW9uIGJpdCB0byBQRikuCiAJICovCiYjNDM7CSpzdWJtaXR0ZWQgPSB0cnVlOwogCWR3b3JkID0gKHUzMiAqKXNobV9idWY7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFNNQ19BUEVSVFVSRV9EV09SRFM7IGkmIzQzOyYjNDM7KQogCQl3cml0ZWwoKmR3b3JkJiM0MzsmIzQzOywgc2MtJmd0O2Jhc2UgJiM0MzsgaSAqIFNNQ19CQVNJQ19VTklUKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKaW5kZXggMzA4OTUwZjliNTRiMC4uMjJkZDdjOWNlY2M4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKQEAgLTQ2OCw2ICYjNDM7NDY4LDE1IEBAIHN0cnVjdCBnZG1hX2NvbnRleHQgewogCS8qIEhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbCAoSFdDKSAqLwogCXN0cnVjdCBnZG1hX2RldgkJaHdjOwogCiYjNDM7CS8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqLwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdAlod2NfZHJhaW5fd2FpdHE7CiYjNDM7CiYjNDM7CS8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpbgomIzQzOwkgKiBtYW5hX25lZWRfbG9nKCkvbWFuYV9zZXJ2X3Jlc2V0KCkuIFNldHVwIGFuZCBETUEtcmVnaW9uIHJlYWRlcnMKJiM0MzsJICogc3RpbGwgcmVxdWlyZSBsaWZlY3ljbGUgb3JkZXJpbmcuIE5vdCBhbGwgdGltZW91dCB3cml0ZXJzIHVzZSBpdC4KJiM0MzsJICovCiYjNDM7CXNwaW5sb2NrX3QJCWh3Y19sb2NrOwomIzQzOwogCS8qIEF6dXJlIG5ldHdvcmsgYWRhcHRlciAqLwogCXN0cnVjdCBnZG1hX2RldgkJbWFuYTsKIApAQCAtNjgzLDYgJiM0Mzs2OTIsOSBAQCBlbnVtIHsKIC8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIC0gRElNICovCiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOCkKIAomIzQzOy8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIHF1ZXVlIGRlcHRoIGZvciBIV0MgKi8KJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpCiYjNDM7CiAvKiBEcml2ZXIgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcXVldWUgYnVmZmVycyAqLwogI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKQogCkBAIC03MDEsNiAmIzQzOzcxMyw3IEBAIGVudW0gewogCSBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXAogCSBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFwKJiM0MzsJIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKaW5kZXggMTZmZWIzOTYxNmMxYi4uZGZkOTIzMzZiMmI0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKQEAgLTExLDYgJiM0MzsxMSwxMyBAQAogCiAjZGVmaW5lIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIIDEKIAomIzQzOy8qIFVwcGVyIGJvdW5kIG9uIHRoZSBkZXZpY2UtcmVwb3J0ZWQgSFdDIHF1ZXVlIGRlcHRoLiAgVGhlIEhXQyBpcyBhCiYjNDM7ICogY29udHJvbCBjaGFubmVsLCBzbyBhIG1vZGVzdCBkZXB0aCBhbHJlYWR5IGtlZXBzIGVub3VnaCBtYW5hZ2VtZW50CiYjNDM7ICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUEKJiM0MzsgKiBidWZmZXJzIG9mIHFfZGVwdGggKiBtYXhfbXNnX3NpemUgYnl0ZXMgZWFjaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOAomIzQzOwogI2RlZmluZSBIV0NfSU5JVF9EQVRBX0NRSUQJCTEKICNkZWZpbmUgSFdDX0lOSVRfREFUQV9SUUlECQkyCiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfU1FJRAkJMwpAQCAtMTY0LDYgJiM0MzsxNzEsOSBAQCBzdHJ1Y3QgaHdjX3dxIHsKIAl1MTYgcXVldWVfZGVwdGg7CiAKIAlzdHJ1Y3QgaHdjX2NxICpod2NfY3E7CiYjNDM7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgU1EgcG9zdGluZzsgdW51c2VkIGZvciB0aGUgUlEuICovCiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7CkBAIC0xNzEsOCAmIzQzOzE4MSwyNyBAQCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggewogCXZvaWQgKm91dHB1dF9idWY7CiAJdTMyIG91dHB1dF9idWZsZW47CiAKLQl1MzIgZXJyb3I7IC8qIExpbnV4IGVycm9yIGNvZGUgKi8KJiM0MzsJaW50IGVycm9yOyAvKiBMaW51eCBlcnJvciBjb2RlIChuZWdhdGl2ZSBlcnJubyBvciAwKSAqLwogCXUzMiBzdGF0dXNfY29kZTsKJiM0MzsKJiM0MzsJLyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb20KJiM0MzsJICogaGFuZGxlX3Jlc3AoKSAoQ1EgaW50ZXJydXB0KSBhbmQgdGhlIHNlbmRlciB0aW1lb3V0IHBhdGguCiYjNDM7CSAqLwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7CiYjNDM7CS8qIFRyYWNrcyBzZW5kZXIgJiM0MzsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0CiYjNDM7CSAqIChyZWZjb3VudCByZWFjaGVzIDApIHJlbGVhc2VzIHRoZSBiaXRtYXAgc2xvdC4KJiM0MzsJICovCiYjNDM7CXJlZmNvdW50X3QgcmVmY250OwomIzQzOwl1MTYgbXNnX2lkOwomIzQzOwomIzQzOwkvKiBTZXQgYnkgdGhlIGZpcnN0IGhhbmRsZV9yZXNwKCksIG9yIGJ5IHRoZSBzZW5kZXImIzM5O3MgdGltZW91dCBwYXRoLAomIzQzOwkgKiBzbyBhIGxhdGVyIG9yIGR1cGxpY2F0ZSByZXNwb25zZSBpcyBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJYm9vbCByZXNwb25kZWQ7CiYjNDM7CiYjNDM7CS8qIFJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIG91dHN0YW5kaW5nOyBwcm90ZWN0ZWQgYnkgbG9jay4gKi8KJiM0MzsJYm9vbCByZXNwX3BlbmRpbmc7CiB9OwogCiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHsKQEAgLTE4MCw5ICYjNDM7MjA5LDEwIEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCXUxNiBudW1faW5mbGlnaHRfbXNnOwomIzQzOwogCXUzMiBtYXhfcmVxX21zZ19zaXplOwogCi0JdTE2IGh3Y19pbml0X3FfZGVwdGhfbWF4OwomIzQzOwl1MzIgaHdjX2luaXRfcV9kZXB0aF9tYXg7CiAJdTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7CiAJdTMyIGh3Y19pbml0X21heF9yZXNwX21zZ19zaXplOwogCkBAIC0xOTIsNiAmIzQzOzIyMiw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewogCXN0cnVjdCBod2Nfd3EgKnR4cTsKIAlzdHJ1Y3QgaHdjX2NxICpjcTsKIAomIzQzOwkvKiBBZG1pc3Npb24gcGVybWl0cy4gVGltZWQtb3V0IHJlcXVlc3RzIHJldGFpbiB0aGVpcnMgdW50aWwgYQomIzQzOwkgKiByZXNwb25zZSBvciB0ZWFyZG93biByZWxlYXNlcyB0aGUgc2xvdC4KJiM0MzsJICovCiAJc3RydWN0IHNlbWFwaG9yZSBzZW1hOwogCXN0cnVjdCBnZG1hX3Jlc291cmNlIGluZmxpZ2h0X21zZ19yZXM7CiAKQEAgLTE5OSw2ICYjNDM7MjMyLDE1IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewogCXUzMiBwZl9kZXN0X3ZyY3FfaWQ7CiAJdTMyIGh3Y190aW1lb3V0OwogCiYjNDM7CS8qIENoZWNrZWQgYWZ0ZXIgc2xvdCBhY3F1aXNpdGlvbjsgY2xlYXJlZCBvbiB0ZWFyZG93biB0byByZWplY3Qgc2VuZHMuICovCiYjNDM7CWJvb2wgY2hhbm5lbF91cDsKJiM0MzsKJiM0MzsJLyogUEYgbWF5IG93biB0aGUgcXVldWUgbWFwcGluZ3M7IHN0YXRlIGxhc3RzIG9ubHkgZm9yIHRoaXMgY29udGV4dC4gKi8KJiM0MzsJYm9vbCBzZXR1cF9hY3RpdmU7CiYjNDM7CiYjNDM7CS8qIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgY2FsbGVycywgaW5jbHVkaW5nIHdhaXRlcnM7IHVuZGVyIGh3Y19sb2NrLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7CiYjNDM7CiAJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oCmluZGV4IGRiYWJjZmI5NWRhZjMuLmU5NjM4N2Q3OTUyNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hbmEvc2htX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmgKQEAgLTIwLDcgJiM0MzsyMCw3IEBAIHZvaWQgbWFuYV9zbWNfaW5pdChzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJCSAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLAotCQkgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpOwomIzQzOwkJICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpOwogCiBpbnQgbWFuYV9zbWNfdGVhcmRvd25faHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjgzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTUFOQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBNQU5BLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYCBkaXJlY3RvcnkuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBhY3Jvc3MgYSBmZXcgY29yZSBmaWxlczogYGdkbWFfbWFpbi5jYCwgYGh3X2NoYW5uZWwuY2AsIGFuZCBgc2htX2NoYW5uZWwuY2AsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIE1BTkEgaXRzZWxmLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIGxpa2VseSB0byBoaXQgbWUgaW4gbXkgZXhpc3RpbmcgdGVzdCBlbnZpcm9ubWVudHM/CgpNeSB0cmlhZ2UgcGhpbG9zb3BoeSBjb21lcyBpbnRvIHBsYXkgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgZmFsbHMgaW50byB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBhdCBTZWN0aW9uIDIgb2YgbXkgbWV0aG9kb2xvZ3kuIEl0IGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgcG90ZW50aWFsbHkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgYnkgc3l6a2FsbGVyLgoKTGV0JiMzOTtzIHNlZTogTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgaXMgYSBQQ0kgZGV2aWNlLiBTcGVjaWZpY2FsbHkgZm9yIE1pY3Jvc29mdCBBenVyZSBWTXMuIENvdWxkIGFsc28gYmUgYSBIeXBlci1WIG9yIEF6dXJlIFZGIGRldmljZS4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3IgaHlwZXJ2aXNvciBlbnZpcm9ubWVudCwgc29tZXRoaW5nIHRoYXQgaXMgcHJvYmFibHkgbm90IHN1cHBvcnRlZCBpbiBvdXIgc3RhbmRhcmQgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgS2NvbmZpZyBpcyBzZXQgdXAsIHNpbmNlIGl0JiMzOTtzIG1vc3QgbGlrZWx5IG5vdCBhdmFpbGFibGUgaW4gZGVmYXVsdCBrZXJuZWxzLCBvciBlbXVsYXRlZCBieSBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01JQ1JPU09GVF9NQU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc9Mj1jb25maWcgTUFOQV9JTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc6NDpcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcdTAwMjZcdTAwMjYgRVRIRVJORVQgXHUwMDI2XHUwMDI2IFBDSSBcdTAwMjZcdTAwMjYgTUlDUk9TT0ZUX01BTkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoxODpjb25maWcgTUlDUk9TT0ZUX01BTkFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSAmIzQzOz0gbWFuYS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTYtbWFuYS1vYmpzIDo9IGdkbWFfbWFpbi5vIHNobV9jaGFubmVsLm8gaHdfY2hhbm5lbC5vIG1hbmFfZW4ubyBtYW5hX2V0aHRvb2wubyBtYW5hX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE1hbmEgR0RNQSBEcml2ZXIgUHJvYmUqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgZ2RtYV9tYWluLmNgIGZpbGUgd2l0aGluIHRoZSBNaWNyb3NvZnQgTUFOQSBkcml2ZXIgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6b29tIGluIG9uIGhvdyB0aGlzIHRoaW5nIGdldHMgaXRzIGhvb2tzIGludG8gdGhlIFBDSSBidXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFBDSSBJRCBoYW5kbGluZyBhbmQgdGhlIHByb2JlIHNlcXVlbmNlLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hpY2ggZGV2aWNlIElEcyB0aGlzIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBNQU5BIGhhcmR3YXJlIGFuZCBjb3JyZWN0bHkgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBwcm9iaW5nIG1lY2hhbmlzbS4gQW55IHBvdGVudGlhbCBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgaGVyZSB0aGF0IEkmIzM5O20gbWlzc2luZz8gQW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX2dkX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI1Mjk9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUzMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI1MzQ6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUzNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc2NC1cdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6Mjc2NTpcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzY2LVx0LnJlbW92ZVx0XHQ9IG1hbmFfZ2RfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGdkbWFfbWFpbi5jYCBNeXN0ZXJ5KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYW4gaXNzdWUgYW5kIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBvdXQgdGhlIGBtYW5hX2lkX3RhYmxlYCB3aXRoaW4gYGdkbWFfbWFpbi5jYC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgdGFibGUgaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgRE1BIGNoYW5uZWxzLCBvciBldmVuIGludGVycnVwdCBhc3NpZ25tZW50cyDigJMgc29tZXRoaW5nIGZ1bmRhbWVudGFsIHRvIHRoZSBHRE1BJiMzOTtzIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiB0aGF0IHRhYmxlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB0byBuYXJyb3cgZG93biB0aGlzIHByb2JsZW0uIExldCYjMzk7cyBzZWUgaWYgdGhhdCB0YWJsZSBob2xkcyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfaWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjczND1zdGF0aWMgaW50IG1hbmFfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzU1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzU2LVx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGX0RFVklDRV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNzYyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjMtXHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzY0Olx0LmlkX3RhYmxlXHQ9IG1hbmFfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzY1LVx0LnByb2JlXHRcdD0gbWFuYV9nZF9wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yODE3PW1vZHVsZV9leGl0KG1hbmFfZHJpdmVyX2V4aXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI4MTk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1hbmFfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgyMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQzNQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgUENJIERldmljZSBJRHMqKgoKSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlc2UgaWRlbnRpZmllcnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgZXhhY3RseSBhcmUgYFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKWAgYW5kIGBNQU5BX1ZGX0RFVklDRV9JRGA/IFRoZXNlIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgZmFtaWxpYXIuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBhcmUgc28gSSBjYW4gZ28gZnVydGhlciB3aXRoIHRoaXMgdGFzay4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcgYW5kIGZpZ3VyZSBvdXQgdGhlaXIgZGVmaW5pdGlvbnMuIFRoaXMgY291bGQgYmUgdmVuZG9yLXNwZWNpZmljIGluZm9ybWF0aW9uIG9yIHBhcnQgb2YgYSBkcml2ZXIgbW9kZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aG9zZSBjb25zdGFudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NTA6XHRcdH1cbjI3NTE6XHRcbjI3NTI6XHRcdHJldHVybiBlcnIgPyBlcnIgOiBudW12ZnM7XG4yNzUzOlx0fVxuMjc1NDpcdFxuMjc1NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG4yNzU2Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKSB9LFxuMjc1NzpcdFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGMl9ERVZJQ0VfSUQpIH0sXG4yNzU4Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfVkZfREVWSUNFX0lEKSB9LFxuMjc1OTpcdFx0eyB9XG4yNzYwOlx0fTtcbjI3NjE6XHRcbjI3NjI6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4yNzYzOlx0XHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG4yNzY0Olx0XHQuaWRfdGFibGVcdD0gbWFuYV9pZF90YWJsZSxcbjI3NjU6XHRcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG4yNzY2Olx0XHQucmVtb3ZlXHRcdD0gbWFuYV9nZF9yZW1vdmUsXG4yNzY3Olx0XHQuc3VzcGVuZFx0PSBtYW5hX2dkX3N1c3BlbmQsXG4yNzY4Olx0XHQucmVzdW1lXHRcdD0gbWFuYV9nZF9yZXN1bWUsXG4yNzY5Olx0XHQuc2h1dGRvd25cdD0gbWFuYV9nZF9zaHV0ZG93bixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDAKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgRnV6emluZyBhIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMuIEl0IGRlYWxzIHdpdGggJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBoZXJlLiBUaGUgdGV4dCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFUgZHJpdmVycy4gSXQgZ2l2ZXMgZXhhbXBsZXMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgKEFTSUNzIG9yIFBDSWUgY2FyZHMpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIE1pY3Jvc29mdCBNQU5BIGRyaXZlci4gSXQmIzM5O3MgaWRlbnRpZmllZCBhcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQy9BenVyZSBOSUMgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9gLiBDcml0aWNhbGx5LCBpdCAqcmVxdWlyZXMqIE1pY3Jvc29mdCBNQU5BIFBDSWUgaGFyZHdhcmUgb3IgYSBWRiBkZXZpY2UgcnVubmluZyBvbiBBenVyZSBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc24mIzM5O3QgYSB2aXJ0dWFsIGRldmljZSBsaWtlIHZpcnRpbywgbG9vcGJhY2ssIG9yIHNpbWlsYXIuIEl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBwYXRjaCB0b3VjaGVzIGFueXRoaW5nIG91dHNpZGUgb2YgdGhpcyBzcGVjaWZpYyBkcml2ZXIsIHNvIEkgY2hlY2sgdGhlIG1vZGlmaWVkIGZpbGVzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGdkbWFfbWFpbi5jYCwgYGh3X2NoYW5uZWwuY2AsIGBzaG1fY2hhbm5lbC5jYCwgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVyIGZpbGVzOiBgZ2RtYS5oYCwgYGh3X2NoYW5uZWwuaGAsIGFuZCBgc2htX2NoYW5uZWwuaGAuIFRoZXNlIGFyZSBhbGwgKmV4Y2x1c2l2ZWx5KiB3aXRoaW4gdGhlIE1pY3Jvc29mdCBNQU5BIGRyaXZlciBkaXJlY3RvcnkuIFRoYXQgcmVpbmZvcmNlcyB0aGUgaWRlYSB0aGF0IHRoaXMgaXMgYSBzZWxmLWNvbnRhaW5lZCwgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlci4KCkdpdmVuIHRoYXQgTUFOQSBpcyBhIHZlbmRvci1zcGVjaWZpYyBOSUMgZHJpdmVyIGRlc2lnbmVkIGZvciBNaWNyb3NvZnQgQXp1cmUgU21hcnROSUMgaGFyZHdhcmUsIGFuZCBpdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgdGhlIGFjdHVhbCBNQU5BIFBDSSBkZXZpY2UsIGl0IGFsaWducyBkaXJlY3RseSB3aXRoIFNlY3Rpb24gMiYjMzk7cyBkZWZpbml0aW9uLgoKVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gU2VjdGlvbiAyLCB0aGlzIE1BTkEgZHJpdmVyIGNvbnN0aXR1dGVzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCYjMzQ7IGFuZCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bSBkb2luZyBhIHF1aWNrIHNhbml0eSBjaGVjay4gTXkgRm9jdXNTeW1ib2xzIGxpc3QgaXMgZW1wdHksIGFuZCB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgRW5hYmxlQ29uZmlncy4gRXZlcnl0aGluZyBhbGlnbnMuIE5vdywgSSYjMzk7bGwgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgLyBQQ0kgZGV2aWNlIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgb3IgcGxhdGZvcm0tc3BlY2lmaWMgQXp1cmUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyAvIFBDSSBkZXZpY2UgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBBenVyZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoxOS4yNjg3MzA2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIwNjE3MDUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIC8gUENJIGRldmljZSBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIG9yIHBsYXRmb3JtLXNwZWNpZmljIEF6dXJlIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MTkuMjY4NzQwMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzA3NTk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyNGQ1NzcxNzc3NGVkZjM0ZjViZTVlMTE3NWFjYzNkNDMwNDAwZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNDoyMzoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXFxuaW5kZXggZjkyYjJkMGJmOTI2ZS4uNzg0MjRlMWQ4ODRmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXFxuQEAgLTE2Miw2ICsxNjIsOCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcXG4ge1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuK1xcdGJvb2wgbmVlZF9sb2cgPSB0cnVlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMTY5LDExICsxNzEsMTMgQEAgYm9vbCBtYW5hX25lZWRfbG9nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBpbnQgZXJyKVxcbiBcXHRpZiAoIWdjKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4gXFx0aWYgKGh3YyBcXHUwMDI2XFx1MDAyNiBod2MtXFx1MDAzZWh3Y190aW1lb3V0ID09IDApXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0bmVlZF9sb2cgPSBmYWxzZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIG5lZWRfbG9nO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1hbmFfZ2RfcXVlcnlfbWF4X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtMzMxLDcgKzMzNSwxMSBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcXVlcnlfaHdjX3RpbWVvdXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqdGltZW91dF92YWwpXFxuIFxcdGlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKVxcbiBcXHRcXHRyZXR1cm4gZXJyID8gZXJyIDogLUVQUk9UTztcXG4gXFxuLVxcdCp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tcztcXG4rXFx0LyogS2VlcCB0aGUgY3VycmVudCB0aW1lb3V0IG9uIGEgemVybyBxdWVyeSByZXBseS4gQXN5bmNocm9ub3VzXFxuK1xcdCAqIEhXQ19EQVRBX0NGR19IV0NfVElNRU9VVCB1cGRhdGVzIHJlbWFpbiB1bmZpbHRlcmVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlc3AudGltZW91dF9tcylcXG4rXFx0XFx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzg3LDkgKzM5NSwyNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfZGV0ZWN0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcXG4gXFx0XFx0XFx0IHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcClcXG4ge1xcbi1cXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbitcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCBlcnI7XFxuIFxcbi1cXHRyZXR1cm4gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFx0aWYgKCFod2MpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcdGh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMrKztcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKC0taHdjLVxcdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwKVxcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFxcXCJORVRfTUFOQVxcXCIpO1xcbiBcXG5AQCAtNzEwLDYgKzczNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKCFnYykge1xcbkBAIC03MTksMTQgKzc0NiwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRpZiAoIWh3Yykge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiTUFOQSBzZXJ2aWNlOiBubyBIV0NcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJ3Qgd2FpdCAqL1xcbiBcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiTUFOQSByZXNldCBjeWNsZSBzdGFydFxcXFxuXFxcIik7XFxuIFxcbkBAIC0xMjMwLDE1ICsxMjYwLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfY3JlYXRlX2NxKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgKnNwZWMsXFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcXG4ge1xcbitcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKmNxX3RhYmxlID0gUkVBRF9PTkNFKGdjLVxcdTAwM2VjcV90YWJsZSk7XFxuIFxcdHUzMiBpZCA9IHF1ZXVlLVxcdTAwM2VpZDtcXG4gXFxuLVxcdGlmIChpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuK1xcdC8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi9cXG4rXFx0aWYgKCFjcV90YWJsZSB8fCBpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghZ2MtXFx1MDAzZWNxX3RhYmxlW2lkXSlcXG4rXFx0aWYgKCFjcV90YWJsZVtpZF0pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGdjLVxcdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xcbitcXHRjcV90YWJsZVtpZF0gPSBOVUxMO1xcbiB9XFxuIFxcbiBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuQEAgLTEzMzMsNiArMTM2NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxcbiBcXHRpZiAoZ21pLVxcdTAwM2Vucl9wYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2ICFNQU5BX1BBR0VfQUxJR05FRChnbWktXFx1MDAzZXZpcnRfYWRkcikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogVGhlIGNhbGxlciBtdXN0IGtlZXAgdGhlIEhXQyBhbGl2ZSB0aHJvdWdob3V0IHF1ZXVlIGNyZWF0aW9uLiAqL1xcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRyZXFfbXNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBhZ2VfYWRkcl9saXN0LCBudW1fcGFnZSk7XFxuIFxcdGlmIChyZXFfbXNnX3NpemUgXFx1MDAzZSBod2MtXFx1MDAzZW1heF9yZXFfbXNnX3NpemUpXFxuQEAgLTE1MzgsNyArMTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBUaGUgc2V0dXAgY2FsbGVyIG11c3QgZXhjbHVkZSBjb25jdXJyZW50IEhXQyB0ZWFyZG93bi4gKi9cXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFxuIFxcdG1hbmFfZ2RfaW5pdF9yZXFfaGRyKFxcdTAwMjZyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTixcXG4gXFx0XFx0XFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcXG4gXFxuQEAgLTI1MzIsNiArMjU2Nyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmdjLVxcdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZWdpY19tdXRleCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2spO1xcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZ2MpO1xcbiBcXHRnYy1cXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcXG4gXFx0Z2MtXFx1MDAzZWJhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xcbmluZGV4IDI2M2U3YzRlMjkzNDEuLjc1MGVlOGY3Mjk5OTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXFxuQEAgLTksMTcgKzksNDggQEBcXG4gc3RhdGljIGludCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2ICptc2dfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgKnIgPSBcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzO1xcbitcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dTMyIGluZGV4O1xcbiBcXG4tXFx0ZG93bihcXHUwMDI2aHdjLVxcdTAwM2VzZW1hKTtcXG4rXFx0LyogRklGTyBzbG90IGFkbWlzc2lvbiBoYXMgYSBzZXBhcmF0ZSBidWRnZXQgZnJvbSB0aGUgcmVzcG9uc2Ugd2FpdC5cXG4rXFx0ICogRXhwaXJ5IHJlcG9ydHMgLUVUSU1FRE9VVCBldmVuIHdoaWxlIGVhcmxpZXIgcmVxdWVzdHMgbWFrZSBwcm9ncmVzcyxcXG4rXFx0ICogc28gY2FsbGVycyBtYXkgaW5pdGlhdGUgcmVjb3Zlcnkgb24gY29udGVudGlvbiBhbG9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChkb3duX3RpbWVvdXQoXFx1MDAyNmh3Yy1cXHUwMDNlc2VtYSwgbXNlY3NfdG9famlmZmllcyhod2MtXFx1MDAzZWh3Y190aW1lb3V0KSkpXFxuK1xcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLnNpemUpO1xcbitcXHRpZiAoIWh3Yy1cXHUwMDNlY2hhbm5lbF91cCkge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIHNlbWFwaG9yZSBhZG1pdHMgYXQgbW9zdCByLVxcdTAwM2VzaXplIGhvbGRlcnMgYXQgYSB0aW1lLCBzbyBhIHNsb3RcXG4rXFx0ICogYWNxdWlyZWQgYWJvdmUgYWx3YXlzIGhhcyBhIGZyZWUgYml0IHdhaXRpbmcgZm9yIGl0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoci1cXHUwMDNlbWFwLCByLVxcdTAwM2VzaXplKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShpbmRleCBcXHUwMDNlPSByLVxcdTAwM2VzaXplKSkge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbiBcXG4tXFx0Yml0bWFwX3NldChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XFxuK1xcdGN0eCA9IFxcdTAwMjZod2MtXFx1MDAzZWNhbGxlcl9jdHhbaW5kZXhdO1xcbitcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0LyogVGFrZSBib3RoIHJlZmVyZW5jZXMgKHNlbmRlciArIGhhbmRsZV9yZXNwKSBiZWZvcmUgcHVibGlzaGluZyB0aGVcXG4rXFx0ICogc2xvdCwgc28gYW4gZWFybHkgcmVzcG9uc2UgY2Fubm90IGZyZWUgaXQgdW5kZXIgdGhlIHNlbmRlci5cXG4rXFx0ICovXFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZjbnQsIDIpO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IGZhbHNlO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IHRydWU7XFxuK1xcdGN0eC1cXHUwMDNlbXNnX2lkID0gaW5kZXg7XFxuK1xcdGN0eC1cXHUwMDNlZXJyb3IgPSAtRUlOUFJPR1JFU1M7XFxuK1xcbitcXHQvKiBQdWJsaXNoIHRoZSBzbG90IGxhc3QsIGFmdGVyIGl0IGlzIGZ1bGx5IGluaXRpYWxpc2VkLiAqL1xcbitcXHRiaXRtYXBfc2V0KHItXFx1MDAzZW1hcCwgaW5kZXgsIDEpO1xcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG5AQCAtNDAsNiArNzEsMTMgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcHV0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBtc2dfaWQpXFxuIFxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBod2NfY3R4X3B1dChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXFxuK1xcdFxcdFxcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4KVxcbit7XFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcmVmY250KSlcXG4rXFx0XFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cXHUwMDNlbXNnX2lkKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY29uc3Qgc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4LFxcbiBcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIHJlc3BfbGVuKVxcbkBAIC04MSw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqcmVzcF9tc2cgPSByeF9yZXEtXFx1MDAzZWJ1Zl92YTtcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdGJvb2wgcmVsZWFzZTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSkge1xcbkBAIC05MCwyMiArMTI5LDUzIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxcbiBcXHR9XFxuIFxcbiBcXHRjdHggPSBod2MtXFx1MDAzZWNhbGxlcl9jdHggKyBtc2dfaWQ7XFxuLVxcdGVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0Y3R4LVxcdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVxcdTAwM2VzdGF0dXM7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdG1lbWNweShjdHgtXFx1MDAzZW91dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLW91dDpcXG4rXFx0LyogVGhlIHNlbmRlciBoYXMgbm90IHB1Ymxpc2hlZCBpdHMgYnVmZmVyIHlldCwgc28gbm90aGluZyBhc2tlZCBmb3JcXG4rXFx0ICogdGhpcyByZXNwb25zZS4gIEtlZXAgdGhlIHNsb3QgcmVzZXJ2ZWQgYW5kIGRyb3AgdGhlIG1lc3NhZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWN0eC1cXHUwMDNlb3V0cHV0X2J1ZiBcXHUwMDI2XFx1MDAyNiAhY3R4LVxcdTAwM2VyZXNwb25kZWQpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cXHUwMDNlcnhxLCByeF9yZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRha2UgdGhlIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIGF3YXkgZXhhY3RseSBvbmNlOiByZWxlYXNpbmcgaXRcXG4rXFx0ICogaXMgd2hhdCBmcmVlcyBhIHNsb3Qgd2hvc2Ugc2VuZGVyIGhhcyBhbHJlYWR5IGdpdmVuIHVwLlxcbitcXHQgKi9cXG4rXFx0cmVsZWFzZSA9IGN0eC1cXHUwMDNlcmVzcF9wZW5kaW5nO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlcmVzcG9uZGVkKSB7XFxuK1xcdFxcdC8qIFRoZSBzZW5kZXIgdGltZWQgb3V0IGFuZCBhYmFuZG9uZWQgdGhlIHNsb3QsIG9yIGEgcmVzcG9uc2VcXG4rXFx0XFx0ICogd2FzIGFscmVhZHkgYXBwbGllZC4gIENvbnN1bWUgdGhpcyBvbmUgd2l0aG91dCB3cml0aW5nXFxuK1xcdFxcdCAqIGFueXRoaW5nLCB0aGVuIHJlbGVhc2UgdGhlIHNsb3QgaXQgd2FzIGhvbGRpbmcuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuK1xcdFxcdGlmIChyZWxlYXNlKVxcbitcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xcbitcXHRpZiAoIWVycikge1xcbitcXHRcXHRjdHgtXFx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXFx1MDAzZXN0YXR1cztcXG4rXFx0XFx0bWVtY3B5KGN0eC1cXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcXG4rXFx0fVxcbiBcXHRjdHgtXFx1MDAzZWVycm9yID0gZXJyO1xcbiBcXG4tXFx0LyogTXVzdCBwb3N0IHJ4IHdxZSBiZWZvcmUgY29tcGxldGUoKSwgb3RoZXJ3aXNlIHRoZSBuZXh0IHJ4IG1heVxcbi1cXHQgKiBoaXQgbm9fd3FlIGVycm9yLlxcbitcXHQvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZVxcbitcXHQgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLlxcbiBcXHQgKi9cXG4gXFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuLVxcbiBcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAocmVsZWFzZSlcXG4rXFx0XFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxcbkBAIC0xNDYsNyArMjE2LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0Y2FzZSBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIOlxcbi1cXHRcXHRcXHRod2MtXFx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gKHUxNil2YWw7XFxuK1xcdFxcdFxcdC8qIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgYSAyNC1iaXQgZmllbGQuICBLZWVwXFxuK1xcdFxcdFxcdCAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkXFxuK1xcdFxcdFxcdCAqIGFuZCB2YWxpZGF0ZWQgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSByYXRoZXJcXG4rXFx0XFx0XFx0ICogdGhhbiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdTE2LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aHdjLVxcdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IHZhbDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRjYXNlIEhXQ19JTklUX0RBVEFfTUFYX1JFUVVFU1Q6XFxuQEAgLTQ3Niw3ICs1NTEsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcbiBcXHRkbWFfYnVmLVxcdTAwM2VudW1fcmVxcyA9IHFfZGVwdGg7XFxuIFxcbi1cXHRidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTtcXG4rXFx0LyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhc1xcbitcXHQgKiBhbHJlYWR5IGFzc3VtZWQgZm9yIHRoZSBFUSBhbmQgQ1EgcmluZ3MgYWJvdmUuICBUaGUgc2xvdHMgYXJlXFxuK1xcdCAqIGNhcnZlZCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBidWZmZXIsIHNvIGFueSB0YWlsIGlzIHVudXNlZC5cXG4rXFx0ICovXFxuK1xcdGJ1Zl9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKSk7XFxuIFxcbiBcXHRnbWkgPSBcXHUwMDI2ZG1hX2J1Zi1cXHUwMDNlbWVtX2luZm87XFxuIFxcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7XFxuQEAgLTU2MCw2ICs2MzksNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXFxuIFxcdGh3Y193cS1cXHUwMDNlZ2RtYV93cSA9IHF1ZXVlO1xcbiBcXHRod2Nfd3EtXFx1MDAzZXF1ZXVlX2RlcHRoID0gcV9kZXB0aDtcXG4gXFx0aHdjX3dxLVxcdTAwM2Vod2NfY3EgPSBod2NfY3E7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZod2Nfd3EtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0ZXJyID0gbWFuYV9od2NfYWxsb2NfZG1hX2J1Zihod2MsIHFfZGVwdGgsIG1heF9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aHdjX3dxLVxcdTAwM2Vtc2dfYnVmKTtcXG5AQCAtNTc3LDcgKzY1Nyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbitzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdHUzMiBkZXN0X3ZpcnRfcnFfaWQsIHUzMiBkZXN0X3ZpcnRfcmNxX2lkLFxcbiBcXHRcXHRcXHRcXHRib29sIGRlc3RfcGYpXFxuQEAgLTYxNiw3ICs2OTYsMTAgQEAgc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuaW5saW5lX29vYl9kYXRhID0gdHhfb29iO1xcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuY2xpZW50X2RhdGFfdW5pdCA9IDA7XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNmh3Y190eHEtXFx1MDAzZWxvY2spO1xcbiBcXHRlcnIgPSBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoaHdjX3R4cS1cXHUwMDNlZ2RtYV93cSwgXFx1MDAyNnJlcS1cXHUwMDNld3FlX3JlcSwgTlVMTCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZod2NfdHhxLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTY0Miw2ICs3MjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXHRzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLVxcdTAwM2VyeHE7XFxuIFxcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXE7XFxuIFxcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTY1NywxOCArNzQxLDM4IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdGlmICghY3R4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eFtpXS5sb2NrKTtcXG4gXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XFxuK1xcdH1cXG4gXFxuIFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcXG4gXFxuLVxcdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfZXEpO1xcbitcXHQvKiBFbmFibGUgYWRtaXNzaW9uIGZvciB0aGUgdGVzdCBFUSByZXF1ZXN0LiAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0aHdjLVxcdTAwM2VjaGFubmVsX3VwID0gdHJ1ZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVxcdTAwM2VjcS1cXHUwMDNlZ2RtYV9lcSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGh3Yy1cXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXFxuK3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyICptYXhfcmVxX21zZ19zaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1MzIgKm1heF9yZXNwX21zZ19zaXplKVxcbiB7XFxuK1xcdC8qIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpIGZpbGxzIHRoZSBib290c3RyYXAgZmllbGRzIGZyb20gaGFyZFxcbitcXHQgKiBJUlEgb24gR0RNQV9FUUVfSFdDX0lOSVRfREFUQSBhbmQgdGhlbiBzaWduYWxzIGh3Y19pbml0X2VxZV9jb21wIG9uXFxuK1xcdCAqIEdETUFfRVFFX0hXQ19JTklUX0RPTkUuICBUaGUgd2FpdF9mb3JfY29tcGxldGlvbigpIGJlbG93IHBhaXJzIHdpdGhcXG4rXFx0ICogdGhhdCBjb21wbGV0ZSgpLCBzbyBldmVyeSB2YWx1ZSBzdG9yZWQgYmVmb3JlIElOSVRfRE9ORSBpcyBvcmRlcmVkXFxuK1xcdCAqIGFnYWluc3QgdGhlIHJlYWRzIHRoYXQgZm9sbG93IGl0IGhlcmUuXFxuK1xcdCAqL1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcnEgPSBod2MtXFx1MDAzZXJ4cS1cXHUwMDNlZ2RtYV93cTtcXG4gXFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVxcdTAwM2V0eHEtXFx1MDAzZWdkbWFfd3E7XFxuQEAgLTY3Niw2ICs3ODAsMTUgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxcbiBcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtXFx1MDAzZWNxLVxcdTAwM2VnZG1hX2NxO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0LyogRG8gbm90IHJldXNlIGRpbWVuc2lvbnMgb3Igcm91dGluZyBJRHMgZnJvbSBhIHByZXZpb3VzIGVzdGFibGlzaC4gKi9cXG4rXFx0aHdjLVxcdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IDA7XFxuK1xcdGh3Yy1cXHUwMDNlaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZSA9IDA7XFxuK1xcdGh3Yy1cXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemUgPSAwO1xcbitcXHRnYy1cXHUwMDNlaHdjLmRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcXG4rXFx0Z2MtXFx1MDAzZWh3Yy5wZGlkID0gSU5WQUxJRF9QRElEO1xcbitcXHRod2MtXFx1MDAzZXBmX2Rlc3RfdnJxX2lkID0gMDtcXG4rXFx0aHdjLVxcdTAwM2VwZl9kZXN0X3ZyY3FfaWQgPSAwO1xcbitcXG4gXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZod2MtXFx1MDAzZWh3Y19pbml0X2VxZV9jb21wKTtcXG4gXFxuIFxcdGVyciA9IG1hbmFfc21jX3NldHVwX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSxcXG5AQCAtNjgzLDcgKzc5Niw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcXG4gXFx0XFx0XFx0XFx0IGNxLVxcdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlLFxcbiBcXHRcXHRcXHRcXHQgcnEtXFx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCBzcS1cXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZSxcXG4tXFx0XFx0XFx0XFx0IGVxLVxcdTAwM2VlcS5tc2l4X2luZGV4KTtcXG4rXFx0XFx0XFx0XFx0IGVxLVxcdTAwM2VlcS5tc2l4X2luZGV4LCBcXHUwMDI2aHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5AQCAtNjk0LDYgKzgwNywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXFxuIFxcdCptYXhfcmVxX21zZ19zaXplID0gaHdjLVxcdTAwM2Vod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplO1xcbiBcXHQqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtXFx1MDAzZWh3Y19pbml0X21heF9yZXNwX21zZ19zaXplO1xcbiBcXG4rXFx0LyogUmVqZWN0IGEgbWlzc2luZyBkb29yYmVsbCBiZWZvcmUgdGhlIGNoYW5uZWwgdGVzdC4gVGhpcyBuZWl0aGVyXFxuK1xcdCAqIHZhbGlkYXRlcyBpdHMgQkFSIHJhbmdlIG5vciBwcm90ZWN0cyBlYXJsaWVyIElSUSByZWFybWluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChnYy1cXHUwMDNlaHdjLmRvb3JiZWxsID09IElOVkFMSURfRE9PUkJFTEwpIHtcXG4rXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogbm8gZG9vcmJlbGwgaW4gaW5pdCBkYXRhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFxuIFxcdC8qIEJvdGggd2VyZSBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuICovXFxuIFxcdGlmIChXQVJOX09OKGNxLVxcdTAwM2VpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG5AQCAtNzEyLDYgKzgzMywxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSArIFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS5cXG4rXFx0ICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocV9kZXB0aCBcXHUwMDNlIFUxNl9NQVggLyAyKVxcbitcXHRcXHRxX2RlcHRoID0gVTE2X01BWCAvIDI7XFxuK1xcbiBcXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC03NTEsMTIgKzg3OCw0NCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuKy8qIEJyaW5nLXVwIG9ubHk6IHJlcXVpcmVzIG5vIHNlbmRlcnMgb3IgY29uY3VycmVudCBsaWZlY3ljbGUgb3BlcmF0aW9ucy5cXG4rICogVGhpcyBoZWxwZXIgZG9lcyBub3QgdW5wdWJsaXNoIHRoZSBIV0Mgb3IgZHJhaW4gc2VuZGVycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YylcXG4re1xcbitcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGh3Yy1cXHUwMDNlZ2RtYV9kZXYtXFx1MDAzZWdkbWFfY29udGV4dDtcXG4rXFxuK1xcdC8qIFRoZSBDUSBoZWxwZXIgZGVyZWdpc3RlcnMgdGhlIEhXQyBFUSBiZWZvcmUgcmV0dXJuaW5nLiAqL1xcbitcXHRpZiAoaHdjLVxcdTAwM2VjcSkge1xcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NxKGdjLCBod2MtXFx1MDAzZWNxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VjcSA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCk7XFxuK1xcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2V0eHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNldHhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2V0eHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2VyeHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNlcnhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VyeHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcXG4rXFx0aHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcXG4rfVxcbitcXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiB7XFxuIFxcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFxcdTAwMjZnYy1cXHUwMDNlaHdjO1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuLVxcdHUxNiBxX2RlcHRoX21heDtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgKipvbGRfY3FfdGFibGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBxX2RlcHRoX21heDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpO1xcbkBAIC03NjQsMTAgKzkyMywxMSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0Z2QtXFx1MDAzZWdkbWFfY29udGV4dCA9IGdjO1xcbi1cXHRnZC1cXHUwMDNlZHJpdmVyX2RhdGEgPSBod2M7XFxuIFxcdGh3Yy1cXHUwMDNlZ2RtYV9kZXYgPSBnZDtcXG4gXFx0aHdjLVxcdTAwM2VkZXYgPSBnYy1cXHUwMDNlZGV2O1xcbiBcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7XFxuK1xcdGh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMgPSAwO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcXG4gXFxuIFxcdC8qIEhXQydzIGluc3RhbmNlIG51bWJlciBpcyBhbHdheXMgMC4gKi9cXG4gXFx0Z2QtXFx1MDAzZWRldl9pZC5hc191aW50MzIgPSAwO1xcbkBAIC03NzYsNiArOTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0Z2QtXFx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XFxuIFxcdGdkLVxcdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XFxuIFxcbitcXHQvKiBQdWJsaXNoIGZvciBzZXR1cDsgcXVldWUgaW5pdGlhbGl6YXRpb24gYmVsb3cgbXVzdCBwcmVjZWRlIHNlbmRlcnMuICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0Z2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IGh3YztcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbiBcXHQvKiBtYW5hX2h3Y19pbml0X3F1ZXVlcygpIG9ubHkgY3JlYXRlcyB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLFxcbiBcXHQgKiBhbmQgZG9lc24ndCB0b3VjaCB0aGUgSFdDIGRldmljZS5cXG4gXFx0ICovXFxuQEAgLTc5NCw4ICs5NTksMTMyIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChxX2RlcHRoX21heCBcXHUwMDNlIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7XFxuK1xcdFxcdC8qIEJvdW5kIERNQSBhbGxvY2F0aW9ucyBiZWZvcmUgdXNpbmcgdGhlIDI0LWJpdCBkZXB0aC4gKi9cXG4rXFx0XFx0aWYgKHFfZGVwdGhfbWF4IFxcdTAwM2UgSFdfQ0hBTk5FTF9NQVhfUVVFVUVfREVQVEgpXFxuK1xcdFxcdFxcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9NQVhfUVVFVUVfREVQVEg7XFxuK1xcbitcXHRcXHQvKiBLZWVwIGJvb3RzdHJhcCBtZXNzYWdlIHNpemVzIGZvciBtYW5kYXRvcnkgY29tbWFuZHMuXFxuK1xcdFxcdCAqIEluY29tcGF0aWJsZSByZXBvcnRzIHNraXAgcmVidWlsZGluZywgbm90IGNoYW5uZWwgY3JlYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcXG4rXFx0XFx0ICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUgfHxcXG4rXFx0XFx0ICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplIFxcdTAwM2VcXG4rXFx0XFx0XFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XFxuK1xcdFxcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXFx1MDAzZVxcbitcXHRcXHRcXHRVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkhXQzogaW52YWxpZCBkaW1zIHE9JXUgcmVxPSV1IHJlc3A9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdFxcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEg7XFxuK1xcdFxcdFxcdGdvdG8gc2tpcF9yZWluaXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGVycik7XFxuK1xcdFxcdFxcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRod2MtXFx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xcbitcXG4rXFx0XFx0LyogVW5wdWJsaXNoIHRoZSBDUSBhbmQgZHJhaW4gaXRzIEVRIGJlZm9yZSBmcmVlaW5nIHRoZSB0YWJsZS4gKi9cXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcXG4rXFxuK1xcdFxcdG9sZF9jcV90YWJsZSA9IGdjLVxcdTAwM2VjcV90YWJsZTtcXG4rXFx0XFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4rXFx0XFx0Z2MtXFx1MDAzZW1heF9udW1fY3FzID0gMDtcXG4rXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdFxcdHZmcmVlKG9sZF9jcV90YWJsZSk7XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIHFfZGVwdGhfbWF4LFxcbitcXHRcXHRcXHRcXHRcXHQgICBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICBtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWluaXQgSFdDOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0Z290byByZWluaXRfZmFsbGJhY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcXHUwMDI2cV9kZXB0aF9tYXgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAocV9kZXB0aF9tYXggXFx1MDAzYyBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2cgfHxcXG4rXFx0XFx0ICAgICBtYXhfcmVxX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSB8fFxcbitcXHRcXHQgICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpKSB7XFxuK1xcdFxcdFxcdC8qIFRoZSByZWJ1aWx0IGNoYW5uZWwgbXVzdCBzdXBwb3J0IHRoZSBhbGxvY2F0ZWQgZGVwdGhcXG4rXFx0XFx0XFx0ICogYW5kIG1lc3NhZ2Ugc2l6ZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiSFdDOiByZWJ1aWx0IHE9JXUgcmVxPSV1IHJlc3A9JXUsIGJ1aWx0IGZvciAldS8ldS8ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cV9kZXB0aF9tYXgsIG1heF9yZXFfbXNnX3NpemUsXFxuK1xcdFxcdFxcdFxcdG1heF9yZXNwX21zZ19zaXplLCBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2csXFxuK1xcdFxcdFxcdFxcdEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcXG4rXFx0XFx0XFx0XFx0SFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XFxuK1xcdFxcdFxcdGVyciA9IC1FUFJPVE87XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlLWVzdGFibGlzaCBIV0M6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRnb3RvIHNraXBfcmVpbml0O1xcbitcXG4rcmVpbml0X2ZhbGxiYWNrOlxcbitcXHQvKiBBIGZhaWxlZCBoYW5kc2hha2UgbGVhdmVzIHF1ZXVlIG93bmVyc2hpcCB1bmNlcnRhaW4uICovXFxuK1xcdGlmIChod2MtXFx1MDAzZXNldHVwX2FjdGl2ZSkge1xcbitcXHRcXHRpZiAobWFuYV9zbWNfdGVhcmRvd25faHdjKFxcdTAwMjZnYy1cXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIHRlYXIgZG93biBIV0MgYmVmb3JlIGJvb3RzdHJhcCBmYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBmYWlsZWQgZXN0YWJsaXNoIG1heSBub3QgaGF2ZSBhbGxvY2F0ZWQgY3FfdGFibGUuICovXFxuK1xcdGRldl93YXJuKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXFxcblxcXCIpO1xcbitcXG4rXFx0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcXG4rXFxuK1xcdG9sZF9jcV90YWJsZSA9IGdjLVxcdTAwM2VjcV90YWJsZTtcXG4rXFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4rXFx0Z2MtXFx1MDAzZW1heF9udW1fY3FzID0gMDtcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHZmcmVlKG9sZF9jcV90YWJsZSk7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxcbitcXHRcXHRcXHRcXHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcXHUwMDI2cV9kZXB0aF9tYXgsIFxcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChtYXhfcmVxX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSB8fFxcbitcXHQgICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpKSB7XFxuK1xcdFxcdC8qIFRoZSByZXN0b3JlZCBjaGFubmVsIG11c3QgcmVwb3J0IHRoZSBhbGxvY2F0ZWQgbWVzc2FnZSBzaXplcy4gKi9cXG4rXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogYm9vdHN0cmFwIHJlcG9ydHMgcmVxPSV1IHJlc3A9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UTztcXG4rXFx0fVxcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIGJvb3RzdHJhcCBIV0M6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rc2tpcF9yZWluaXQ6XFxuK1xcbiBcXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxcbitcXHRcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gdGVzdCBIV0M6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC04MTAsMTggKzEwOTksNzEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIHtcXG4rXFx0LyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi9cXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmICghaHdjKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHQvKiBnYy1cXHUwMDNlbWF4X251bV9jcXMgaXMgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiBJZiBpdCdzXFxuLVxcdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXFxuK1xcdC8qIE5vbnplcm8gbnVtX2luZmxpZ2h0X21zZyBtZWFucyBxdWV1ZSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQuICovXFxuK1xcdGlmIChod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2cpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGh3Yy1cXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBCbG9jayBuZXcgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSByZWZlcmVuY2VzIGJlZm9yZSBkcmFpbmluZy4gKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXHRnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBDb21wbGV0ZSBvY2N1cGllZCBzbG90cyBhbmQgZHJvcCBwZW5kaW5nIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlcy4gKi9cXG4rXFx0aWYgKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCkge1xcbitcXHRcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4rXFx0XFx0Ym9vbCBkcm9wX3Jlc3BfcmVmO1xcbitcXHRcXHRpbnQgaTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkrKykge1xcbitcXHRcXHRcXHRpZiAoIXRlc3RfYml0KGksIGh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGN0eCA9IFxcdTAwMjZod2MtXFx1MDAzZWNhbGxlcl9jdHhbaV07XFxuK1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdC8qIFByZXNlcnZlIGFuIGFscmVhZHkgcmVjb3JkZWQgcmVzdWx0LiAqL1xcbitcXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlcmVzcG9uZGVkKVxcbitcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWVycm9yID0gLUVOT0RFVjtcXG4rXFx0XFx0XFx0ZHJvcF9yZXNwX3JlZiA9IGN0eC1cXHUwMDNlcmVzcF9wZW5kaW5nO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGNvbXBsZXRlKFxcdTAwMjZjdHgtXFx1MDAzZWNvbXBfZXZlbnQpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChkcm9wX3Jlc3BfcmVmKVxcbitcXHRcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogUGFpciB3aXRoIHRoZSBsYXN0IHNlbmRlcidzIHdha2V1cCB1bmRlciBod2NfbG9jaywgc28gaXQgZmluaXNoZXNcXG4rXFx0ICogYWNjZXNzaW5nIGdjIGJlZm9yZSB0aGUgZHJhaW4gcmV0dXJucy5cXG4gXFx0ICovXFxuLVxcdGlmIChnYy1cXHUwMDNlbWF4X251bV9jcXMgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuLVxcdFxcdGdjLVxcdTAwM2VtYXhfbnVtX2NxcyA9IDA7XFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jayk7XFxuK1xcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXFx1MDAzZWh3Y19kcmFpbl93YWl0cSxcXG4rXFx0XFx0XFx0ICAgIGh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMCwgZ2MtXFx1MDAzZWh3Y19sb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2spO1xcbitcXG4rXFx0aWYgKGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlKSB7XFxuK1xcdFxcdGlmICghbWFuYV9zbWNfdGVhcmRvd25faHdjKFxcdTAwMjZnYy1cXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSlcXG4rXFx0XFx0XFx0aHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHRlYXIgZG93biBIV0NcXFxcblxcXCIpO1xcbiBcXHR9XFxuK1xcdGdjLVxcdTAwM2VtYXhfbnVtX2NxcyA9IDA7XFxuK1xcbitcXHQvKiBEZXJlZ2lzdGVyIHRoZSBIV0MgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHdvcmsgcXVldWVzLiAqL1xcbitcXHRpZiAoaHdjLVxcdTAwM2VjcSlcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cXHUwMDNlY3EpO1xcbiBcXG4gXFx0aWYgKGh3Yy1cXHUwMDNldHhxKVxcbiBcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2V0eHEpO1xcbkBAIC04MjksOCArMTE3MSwxOCBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0aWYgKGh3Yy1cXHUwMDNlcnhxKVxcbiBcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2VyeHEpO1xcbiBcXG4tXFx0aWYgKGh3Yy1cXHUwMDNlY3EpXFxuLVxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXFx1MDAzZWNxKTtcXG4rXFx0aWYgKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCkge1xcbitcXHRcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4rXFx0XFx0aW50IGk7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRjdHggPSBcXHUwMDI2aHdjLVxcdTAwM2VjYWxsZXJfY3R4W2ldO1xcbitcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0a2ZyZWUoaHdjLVxcdTAwM2VjYWxsZXJfY3R4KTtcXG4gXFx0aHdjLVxcdTAwM2VjYWxsZXJfY3R4ID0gTlVMTDtcXG5AQCAtODQ1LDcgKzExOTcsNiBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDA7XFxuIFxcbiBcXHRrZnJlZShod2MpO1xcbi1cXHRnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcXG4gXFx0Z2MtXFx1MDAzZWh3Yy5nZG1hX2NvbnRleHQgPSBOVUxMO1xcbiBcXG4gXFx0dmZyZWUoZ2MtXFx1MDAzZWNxX3RhYmxlKTtcXG5AQCAtODYwLDEzICsxMjExLDIxIEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcXG4gXFx0c3RydWN0IGh3Y193cSAqdHhxID0gaHdjLVxcdTAwM2V0eHE7XFxuIFxcdHN0cnVjdCBnZG1hX3JlcV9oZHIgKnJlcV9tc2c7XFxuIFxcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIGRyb3BfcmVzcF9yZWY7XFxuK1xcdGJvb2wgYWJhbmRvbmVkID0gZmFsc2U7XFxuK1xcdGJvb2wgY2FuY2VsbGVkO1xcbiBcXHR1MzIgZGVzdF92cmNxID0gMDtcXG4gXFx0dTMyIGRlc3RfdnJxID0gMDtcXG4gXFx0dTMyIGNvbW1hbmQ7XFxuK1xcdHUzMiBzdGF0dXM7XFxuK1xcdHUzMiB3YWl0X21zO1xcbiBcXHR1MTYgbXNnX2lkO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFxcdTAwMjZtc2dfaWQpO1xcbitcXHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXFx1MDAyNm1zZ19pZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHR0eF93ciA9IFxcdTAwMjZ0eHEtXFx1MDAzZW1zZ19idWYtXFx1MDAzZXJlcXNbbXNnX2lkXTtcXG4gXFxuQEAgLTg3OCw4ICsxMjM3LDExIEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcXG4gXFx0fVxcbiBcXG4gXFx0Y3R4ID0gaHdjLVxcdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRjdHgtXFx1MDAzZW91dHB1dF9idWYgPSByZXNwO1xcbiBcXHRjdHgtXFx1MDAzZW91dHB1dF9idWZsZW4gPSByZXNwX2xlbjtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRyZXFfbXNnID0gKHN0cnVjdCBnZG1hX3JlcV9oZHIgKil0eF93ci1cXHUwMDNlYnVmX3ZhO1xcbiBcXHRpZiAocmVxKVxcbkBAIC04OTUsNDMgKzEyNTcsMTE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcXG4gXFx0XFx0ZGVzdF92cmNxID0gaHdjLVxcdTAwM2VwZl9kZXN0X3ZyY3FfaWQ7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcXG4rXFx0LyogU2VyaWFsaXplIGNhbmNlbGxhdGlvbiB3aXRoIHN1Ym1pc3Npb24uIEFuIHVuc3VibWl0dGVkIHJlcXVlc3RcXG4rXFx0ICogY2Fubm90IHN1Y2NlZWQsIGV2ZW4gaWYgYW4gdW5zb2xpY2l0ZWQgcmVzcG9uc2Ugd2FzIGFjY2VwdGVkLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjYW5jZWxsZWQgPSBjdHgtXFx1MDAzZXJlc3BvbmRlZDtcXG4rXFx0aWYgKGNhbmNlbGxlZClcXG4rXFx0XFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvciA/OiAtRVBST1RPO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGZhbHNlKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAoY2FuY2VsbGVkKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0d2FpdF9tcyA9IGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQ7XFxuIFxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZjdHgtXFx1MDAzZWNvbXBfZXZlbnQsXFxuLVxcdFxcdFxcdFxcdFxcdCAobXNlY3NfdG9famlmZmllcyhod2MtXFx1MDAzZWh3Y190aW1lb3V0KSkpKSB7XFxuLVxcdFxcdGlmIChod2MtXFx1MDAzZWh3Y190aW1lb3V0ICE9IDApXFxuLVxcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0Y29tbWFuZCwgaHdjLVxcdTAwM2Vod2NfdGltZW91dCk7XFxuK1xcdFxcdFxcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSkge1xcbitcXHRcXHQvKiBDbGVhciBvdXRwdXRfYnVmIHNvIGEgbGF0ZSByZXNwb25zZSBjYW5ub3Qgd3JpdGUgdGhlIGNhbGxlcidzXFxuK1xcdFxcdCAqIGJ1ZmZlciwgdGhlbiBjaGVjayB3aGV0aGVyIG9uZSBhbHJlYWR5IGFycml2ZWRcXG4rXFx0XFx0ICogKGVycm9yICE9IC1FSU5QUk9HUkVTUykuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGN0eC1cXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XFxuK1xcdFxcdGVyciA9IGN0eC1cXHUwMDNlZXJyb3I7XFxuK1xcdFxcdHN0YXR1cyA9IGN0eC1cXHUwMDNlc3RhdHVzX2NvZGU7XFxuK1xcdFxcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XFxuK1xcdFxcdFxcdC8qIFB1Ymxpc2ggYWJhbmRvbm1lbnQgd2l0aCBidWZmZXIgd2l0aGRyYXdhbCBzbyBhIGxhdGVcXG4rXFx0XFx0XFx0ICogcmVzcG9uc2UgY2FuIHJlY2xhaW0gdGhlIHNsb3QuIEtlZXAgaXRzIHJlZmVyZW5jZS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YWJhbmRvbmVkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdGlmICghYWJhbmRvbmVkKSB7XFxuK1xcdFxcdFxcdC8qIEEgY29tcGxldGlvbiB3b24gdGhlIHJhY2Ugd2l0aCB0aW1lb3V0OyB1c2UgaXRzIHJlc3VsdC4gKi9cXG4rXFx0XFx0XFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitcXHRcXHRcXHRnb3RvIGNoZWNrX3N0YXR1cztcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0LyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi9cXG4tXFx0XFx0aWYgKGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQgXFx1MDAzZSAxKVxcbi1cXHRcXHRcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMTtcXG4rXFx0XFx0aWYgKHdhaXRfbXMgIT0gMCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGNvbW1hbmQsIHdhaXRfbXMpO1xcbitcXG4rXFx0XFx0XFx0LyogR2VudWluZSB0aW1lb3V0OiBzaG9ydGVuIGxhdGVyIHdhaXRzIHNvIHN1YnNlcXVlbnRcXG4rXFx0XFx0XFx0ICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGVcXG4rXFx0XFx0XFx0ICogZnVsbCB0aW1lb3V0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0ZXJyID0gLUVUSU1FRE9VVDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4gXFxuLVxcdGlmIChjdHgtXFx1MDAzZWVycm9yKSB7XFxuLVxcdFxcdGVyciA9IGN0eC1cXHUwMDNlZXJyb3I7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHQvKiBEcm9wIG9ubHkgdGhlIHNlbmRlcidzIHJlZmVyZW5jZTsgdGhlIHJlc3BvbnNlLXNpZGUgb25lIGlzXFxuK1xcdFxcdCAqIHdoYXQga2VlcHMgdGhlIHNsb3QgcmVzZXJ2ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VzdGF0dXNfY29kZSAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XFxuK1xcdC8qIENsZWFyIG91dHB1dF9idWYgYW5kIHJlYWQgdGhlIHJlc3VsdCB1bmRlciB0aGUgbG9jazsgdGhlIHNsb3QgbWF5XFxuK1xcdCAqIGJlIHJldXNlZCBhZnRlciBod2NfY3R4X3B1dCgpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdHgtXFx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xcbitcXHRlcnIgPSBjdHgtXFx1MDAzZWVycm9yO1xcbitcXHRzdGF0dXMgPSBjdHgtXFx1MDAzZXN0YXR1c19jb2RlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitcXG4rY2hlY2tfc3RhdHVzOlxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcXG4rXFx0XFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdH1cXG4rXFxuIFxcdFxcdGlmIChjb21tYW5kICE9IE1BTkFfUVVFUllfUEhZX1NUQVQpXFxuIFxcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJDb21tYW5kIDB4JXggZmFpbGVkIHdpdGggc3RhdHVzOiAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRjb21tYW5kLCBjdHgtXFx1MDAzZXN0YXR1c19jb2RlKTtcXG4rXFx0XFx0XFx0XFx0Y29tbWFuZCwgc3RhdHVzKTtcXG4gXFx0XFx0ZXJyID0gLUVQUk9UTztcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbitcXG4rXFx0ZXJyID0gMDtcXG4rXFx0Z290byBkb25lO1xcbiBvdXQ6XFxuLVxcdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xcbitcXHQvKiBSZWxlYXNlIGFueSByZWZlcmVuY2VzIHN0aWxsIGhlbGQgYnkgdGhpcyB1bnN1Ym1pdHRlZCByZXF1ZXN0LiAqL1xcbitcXHRjdHggPSBod2MtXFx1MDAzZWNhbGxlcl9jdHggKyBtc2dfaWQ7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcXG4rXFx0ZHJvcF9yZXNwX3JlZiA9IGN0eC1cXHUwMDNlcmVzcF9wZW5kaW5nO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoZHJvcF9yZXNwX3JlZilcXG4rXFx0XFx0cmVmY291bnRfZGVjKFxcdTAwMjZjdHgtXFx1MDAzZXJlZmNudCk7XFxuK1xcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcXG4rZG9uZTpcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuY1xcbmluZGV4IGQyMWI1ZGIwNmU1MDkuLjNjZjZhOWY4ZTMyYzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcXG5AQCAtMTI5LDkgKzEyOSwxMiBAQCB2b2lkIG1hbmFfc21jX2luaXQoc3RydWN0IHNobV9jaGFubmVsICpzYywgc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRzYy1cXHUwMDNlYmFzZSA9IGJhc2U7XFxuIH1cXG4gXFxuKy8qIFJlcXVpcmVzIG5vIG91dHN0YW5kaW5nIEhXQyBoYW5kb3Zlci4gKnN1Ym1pdHRlZCByZWNvcmRzIHBvc3NpYmxlIFBGXFxuKyAqIG93bmVyc2hpcCwgaW5jbHVkaW5nIHdoZW4gc2V0dXAgZmFpbHMgYWZ0ZXIgc3VibWlzc2lvbi5cXG4rICovXFxuIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXFxuIFxcdFxcdCAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLFxcbi1cXHRcXHQgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpXFxuK1xcdFxcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCwgYm9vbCAqc3VibWl0dGVkKVxcbiB7XFxuIFxcdHVuaW9uIHNtY19wcm90b19oZHIgKmhkcjtcXG4gXFx0dTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7XFxuQEAgLTE0NCw2ICsxNDcsOCBAQCBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdCpzdWJtaXR0ZWQgPSBmYWxzZTtcXG4rXFxuIFxcdC8qIEVuc3VyZSBWRiBhbHJlYWR5IGhhcyBwb3NzZXNzaW9uIG9mIHNoYXJlZCBtZW1vcnkgKi9cXG4gXFx0ZXJyID0gbWFuYV9zbWNfcG9sbF9yZWdpc3RlcihzYy1cXHUwMDNlYmFzZSwgZmFsc2UpO1xcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTIyOSw2ICsyMzQsNyBAQCBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxcbiBcXHQvKiBXcml0ZSAyNTYtbWVzc2FnZSBidWZmZXIgdG8gc2hhcmVkIG1lbW9yeSAoZmluYWwgMzItYml0IHdyaXRlXFxuIFxcdCAqIHRyaWdnZXJzIEhXIHRvIHNldCBwb3NzZXNzaW9uIGJpdCB0byBQRikuXFxuIFxcdCAqL1xcbitcXHQqc3VibWl0dGVkID0gdHJ1ZTtcXG4gXFx0ZHdvcmQgPSAodTMyICopc2htX2J1ZjtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNNQ19BUEVSVFVSRV9EV09SRFM7IGkrKylcXG4gXFx0XFx0d3JpdGVsKCpkd29yZCsrLCBzYy1cXHUwMDNlYmFzZSArIGkgKiBTTUNfQkFTSUNfVU5JVCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG5pbmRleCAzMDg5NTBmOWI1NGIwLi4yMmRkN2M5Y2VjYzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG5AQCAtNDY4LDYgKzQ2OCwxNSBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcXG4gXFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXFxuIFxcdHN0cnVjdCBnZG1hX2RldlxcdFxcdGh3YztcXG4gXFxuK1xcdC8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqL1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGh3Y19kcmFpbl93YWl0cTtcXG4rXFxuK1xcdC8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpblxcbitcXHQgKiBtYW5hX25lZWRfbG9nKCkvbWFuYV9zZXJ2X3Jlc2V0KCkuIFNldHVwIGFuZCBETUEtcmVnaW9uIHJlYWRlcnNcXG4rXFx0ICogc3RpbGwgcmVxdWlyZSBsaWZlY3ljbGUgb3JkZXJpbmcuIE5vdCBhbGwgdGltZW91dCB3cml0ZXJzIHVzZSBpdC5cXG4rXFx0ICovXFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRod2NfbG9jaztcXG4rXFxuIFxcdC8qIEF6dXJlIG5ldHdvcmsgYWRhcHRlciAqL1xcbiBcXHRzdHJ1Y3QgZ2RtYV9kZXZcXHRcXHRtYW5hO1xcbiBcXG5AQCAtNjgzLDYgKzY5Miw5IEBAIGVudW0ge1xcbiAvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiAtIERJTSAqL1xcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcXG4gXFxuKy8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIHF1ZXVlIGRlcHRoIGZvciBIV0MgKi9cXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggQklUKDI5KVxcbitcXG4gLyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxcbiBcXG5AQCAtNzAxLDYgKzcxMyw3IEBAIGVudW0ge1xcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9QUk9CRV9SRUNPVkVSWSB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSEFORExFX1NUQUxMX1NRX1JFQ09WRVJZIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXFxcXG4rXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTiB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmggYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxcbmluZGV4IDE2ZmViMzk2MTZjMWIuLmRmZDkyMzM2YjJiNGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxcbkBAIC0xMSw2ICsxMSwxMyBAQFxcbiBcXG4gI2RlZmluZSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCAxXFxuIFxcbisvKiBVcHBlciBib3VuZCBvbiB0aGUgZGV2aWNlLXJlcG9ydGVkIEhXQyBxdWV1ZSBkZXB0aC4gIFRoZSBIV0MgaXMgYVxcbisgKiBjb250cm9sIGNoYW5uZWwsIHNvIGEgbW9kZXN0IGRlcHRoIGFscmVhZHkga2VlcHMgZW5vdWdoIG1hbmFnZW1lbnRcXG4rICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUFcXG4rICogYnVmZmVycyBvZiBxX2RlcHRoICogbWF4X21zZ19zaXplIGJ5dGVzIGVhY2guXFxuKyAqL1xcbisjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOFxcbitcXG4gI2RlZmluZSBIV0NfSU5JVF9EQVRBX0NRSURcXHRcXHQxXFxuICNkZWZpbmUgSFdDX0lOSVRfREFUQV9SUUlEXFx0XFx0MlxcbiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfU1FJRFxcdFxcdDNcXG5AQCAtMTY0LDYgKzE3MSw5IEBAIHN0cnVjdCBod2Nfd3Ege1xcbiBcXHR1MTYgcXVldWVfZGVwdGg7XFxuIFxcbiBcXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XFxuK1xcbitcXHQvKiBTZXJpYWxpemVzIFNRIHBvc3Rpbmc7IHVudXNlZCBmb3IgdGhlIFJRLiAqL1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xcbkBAIC0xNzEsOCArMTgxLDI3IEBAIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XFxuIFxcdHZvaWQgKm91dHB1dF9idWY7XFxuIFxcdHUzMiBvdXRwdXRfYnVmbGVuO1xcbiBcXG4tXFx0dTMyIGVycm9yOyAvKiBMaW51eCBlcnJvciBjb2RlICovXFxuK1xcdGludCBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAobmVnYXRpdmUgZXJybm8gb3IgMCkgKi9cXG4gXFx0dTMyIHN0YXR1c19jb2RlO1xcbitcXG4rXFx0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cXG4rXFx0ICogaGFuZGxlX3Jlc3AoKSAoQ1EgaW50ZXJydXB0KSBhbmQgdGhlIHNlbmRlciB0aW1lb3V0IHBhdGguXFxuK1xcdCAqL1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK1xcbitcXHQvKiBUcmFja3Mgc2VuZGVyICsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XFxuK1xcdCAqIChyZWZjb3VudCByZWFjaGVzIDApIHJlbGVhc2VzIHRoZSBiaXRtYXAgc2xvdC5cXG4rXFx0ICovXFxuK1xcdHJlZmNvdW50X3QgcmVmY250O1xcbitcXHR1MTYgbXNnX2lkO1xcbitcXG4rXFx0LyogU2V0IGJ5IHRoZSBmaXJzdCBoYW5kbGVfcmVzcCgpLCBvciBieSB0aGUgc2VuZGVyJ3MgdGltZW91dCBwYXRoLFxcbitcXHQgKiBzbyBhIGxhdGVyIG9yIGR1cGxpY2F0ZSByZXNwb25zZSBpcyBkcm9wcGVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCByZXNwb25kZWQ7XFxuK1xcbitcXHQvKiBSZXNwb25zZS1zaWRlIHJlZmVyZW5jZSBvdXRzdGFuZGluZzsgcHJvdGVjdGVkIGJ5IGxvY2suICovXFxuK1xcdGJvb2wgcmVzcF9wZW5kaW5nO1xcbiB9O1xcbiBcXG4gc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XFxuQEAgLTE4MCw5ICsyMDksMTAgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFxuIFxcdHUxNiBudW1faW5mbGlnaHRfbXNnO1xcbitcXG4gXFx0dTMyIG1heF9yZXFfbXNnX3NpemU7XFxuIFxcbi1cXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XFxuK1xcdHUzMiBod2NfaW5pdF9xX2RlcHRoX21heDtcXG4gXFx0dTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XFxuIFxcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFxuQEAgLTE5Miw2ICsyMjIsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcXG4gXFx0c3RydWN0IGh3Y193cSAqdHhxO1xcbiBcXHRzdHJ1Y3QgaHdjX2NxICpjcTtcXG4gXFxuK1xcdC8qIEFkbWlzc2lvbiBwZXJtaXRzLiBUaW1lZC1vdXQgcmVxdWVzdHMgcmV0YWluIHRoZWlycyB1bnRpbCBhXFxuK1xcdCAqIHJlc3BvbnNlIG9yIHRlYXJkb3duIHJlbGVhc2VzIHRoZSBzbG90LlxcbitcXHQgKi9cXG4gXFx0c3RydWN0IHNlbWFwaG9yZSBzZW1hO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xcbiBcXG5AQCAtMTk5LDYgKzIzMiwxNSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcXG4gXFx0dTMyIHBmX2Rlc3RfdnJjcV9pZDtcXG4gXFx0dTMyIGh3Y190aW1lb3V0O1xcbiBcXG4rXFx0LyogQ2hlY2tlZCBhZnRlciBzbG90IGFjcXVpc2l0aW9uOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvIHJlamVjdCBzZW5kcy4gKi9cXG4rXFx0Ym9vbCBjaGFubmVsX3VwO1xcbitcXG4rXFx0LyogUEYgbWF5IG93biB0aGUgcXVldWUgbWFwcGluZ3M7IHN0YXRlIGxhc3RzIG9ubHkgZm9yIHRoaXMgY29udGV4dC4gKi9cXG4rXFx0Ym9vbCBzZXR1cF9hY3RpdmU7XFxuK1xcbitcXHQvKiBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIGNhbGxlcnMsIGluY2x1ZGluZyB3YWl0ZXJzOyB1bmRlciBod2NfbG9jay4gKi9cXG4rXFx0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xcbitcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXFxuaW5kZXggZGJhYmNmYjk1ZGFmMy4uZTk2Mzg3ZDc5NTI1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcXG5AQCAtMjAsNyArMjAsNyBAQCB2b2lkIG1hbmFfc21jX2luaXQoc3RydWN0IHNobV9jaGFubmVsICpzYywgc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXG4gaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcXG4gXFx0XFx0ICAgICAgIHU2NCBjcV9hZGRyLCB1NjQgcnFfYWRkciwgdTY0IHNxX2FkZHIsXFxuLVxcdFxcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCk7XFxuK1xcdFxcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCwgYm9vbCAqc3VibWl0dGVkKTtcXG4gXFxuIGludCBtYW5hX3NtY190ZWFyZG93bl9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92Zik7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoyMC4wMDkxODkwMzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5NDY1Njk1OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyAvIFBDSSBkZXZpY2UgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBBenVyZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjI0ZDU3NzE3Nzc0ZWRmMzRmNWJlNWUxMTc1YWNjM2Q0MzA0MDBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6MjM6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBmOTJiMmQwYmY5MjZlLi43ODQyNGUxZDg4NGYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtMTYyLDYgKzE2Miw4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpXG4ge1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuK1x0Ym9vbCBuZWVkX2xvZyA9IHRydWU7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNjksMTEgKzE3MSwxMyBAQCBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpXG4gXHRpZiAoIWdjKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRpZiAoaHdjIFx1MDAyNlx1MDAyNiBod2MtXHUwMDNlaHdjX3RpbWVvdXQgPT0gMClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRuZWVkX2xvZyA9IGZhbHNlO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gbmVlZF9sb2c7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTMzMSw3ICszMzUsMTEgQEAgc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X2h3Y190aW1lb3V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKnRpbWVvdXRfdmFsKVxuIFx0aWYgKGVyciB8fCByZXNwLmhkci5zdGF0dXMpXG4gXHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRVBST1RPO1xuIFxuLVx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xuK1x0LyogS2VlcCB0aGUgY3VycmVudCB0aW1lb3V0IG9uIGEgemVybyBxdWVyeSByZXBseS4gQXN5bmNocm9ub3VzXG4rXHQgKiBIV0NfREFUQV9DRkdfSFdDX1RJTUVPVVQgdXBkYXRlcyByZW1haW4gdW5maWx0ZXJlZC5cbitcdCAqL1xuK1x0aWYgKHJlc3AudGltZW91dF9tcylcbitcdFx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM4Nyw5ICszOTUsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcbiBcdFx0XHQgdTMyIHJlc3BfbGVuLCB2b2lkICpyZXNwKVxuIHtcbi1cdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgZXJyO1xuIFxuLVx0cmV0dXJuIG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdGlmICghaHdjKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXHRod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMrKztcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcbitcdGVyciA9IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcdGlmICgtLWh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwKVxuK1x0XHR3YWtlX3VwKFx1MDAyNmdjLVx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcIk5FVF9NQU5BXCIpO1xuIFxuQEAgLTcxMCw2ICs3MzYsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghZ2MpIHtcbkBAIC03MTksMTQgKzc0NiwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRpZiAoIWh3Yykge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSBzZXJ2aWNlOiBubyBIV0NcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJ3Qgd2FpdCAqL1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIk1BTkEgcmVzZXQgY3ljbGUgc3RhcnRcXG5cIik7XG4gXG5AQCAtMTIzMCwxNSArMTI2MCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKVxuIHtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlICoqY3FfdGFibGUgPSBSRUFEX09OQ0UoZ2MtXHUwMDNlY3FfdGFibGUpO1xuIFx0dTMyIGlkID0gcXVldWUtXHUwMDNlaWQ7XG4gXG4tXHRpZiAoaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbitcdC8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi9cbitcdGlmICghY3FfdGFibGUgfHwgaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFnYy1cdTAwM2VjcV90YWJsZVtpZF0pXG4rXHRpZiAoIWNxX3RhYmxlW2lkXSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z2MtXHUwMDNlY3FfdGFibGVbaWRdID0gTlVMTDtcbitcdGNxX3RhYmxlW2lkXSA9IE5VTEw7XG4gfVxuIFxuIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCxcbkBAIC0xMzMzLDYgKzEzNjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIFRoZSBjYWxsZXIgbXVzdCBrZWVwIHRoZSBIV0MgYWxpdmUgdGhyb3VnaG91dCBxdWV1ZSBjcmVhdGlvbi4gKi9cbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdHJlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKHJlcSwgcGFnZV9hZGRyX2xpc3QsIG51bV9wYWdlKTtcbiBcdGlmIChyZXFfbXNnX3NpemUgXHUwMDNlIGh3Yy1cdTAwM2VtYXhfcmVxX21zZ19zaXplKVxuQEAgLTE1MzgsNyArMTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuIFx0aW50IGVycjtcbiBcbitcdC8qIFRoZSBzZXR1cCBjYWxsZXIgbXVzdCBleGNsdWRlIGNvbmN1cnJlbnQgSFdDIHRlYXJkb3duLiAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1xuIFx0bWFuYV9nZF9pbml0X3JlcV9oZHIoXHUwMDI2cmVxLmhkciwgR0RNQV9WRVJJRllfVkZfRFJJVkVSX1ZFUlNJT04sXG4gXHRcdFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcbiBcbkBAIC0yNTMyLDYgKzI1NjcsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNmdjLVx1MDAzZWVxX3Rlc3RfZXZlbnRfbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VnaWNfbXV0ZXgpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGdjKTtcbiBcdGdjLVx1MDAzZWJhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRnYy1cdTAwM2ViYXIwX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuaW5kZXggMjYzZTdjNGUyOTM0MS4uNzUwZWU4ZjcyOTk5NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5AQCAtOSwxNyArOSw0OCBAQFxuIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKVxuIHtcbiBcdHN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXM7XG4rXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1MzIgaW5kZXg7XG4gXG4tXHRkb3duKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbitcdC8qIEZJRk8gc2xvdCBhZG1pc3Npb24gaGFzIGEgc2VwYXJhdGUgYnVkZ2V0IGZyb20gdGhlIHJlc3BvbnNlIHdhaXQuXG4rXHQgKiBFeHBpcnkgcmVwb3J0cyAtRVRJTUVET1VUIGV2ZW4gd2hpbGUgZWFybGllciByZXF1ZXN0cyBtYWtlIHByb2dyZXNzLFxuK1x0ICogc28gY2FsbGVycyBtYXkgaW5pdGlhdGUgcmVjb3Zlcnkgb24gY29udGVudGlvbiBhbG9uZS5cbitcdCAqL1xuK1x0aWYgKGRvd25fdGltZW91dChcdTAwMjZod2MtXHUwMDNlc2VtYSwgbXNlY3NfdG9famlmZmllcyhod2MtXHUwMDNlaHdjX3RpbWVvdXQpKSlcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXAsXG4tXHRcdFx0XHQgICAgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMuc2l6ZSk7XG4rXHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHQvKiBUaGUgc2VtYXBob3JlIGFkbWl0cyBhdCBtb3N0IHItXHUwMDNlc2l6ZSBob2xkZXJzIGF0IGEgdGltZSwgc28gYSBzbG90XG4rXHQgKiBhY3F1aXJlZCBhYm92ZSBhbHdheXMgaGFzIGEgZnJlZSBiaXQgd2FpdGluZyBmb3IgaXQgaGVyZS5cbitcdCAqL1xuK1x0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpO1xuK1x0aWYgKFdBUk5fT05fT05DRShpbmRleCBcdTAwM2U9IHItXHUwMDNlc2l6ZSkpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0dXAoXHUwMDI2aHdjLVx1MDAzZXNlbWEpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbiBcbi1cdGJpdG1hcF9zZXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XG4rXHRjdHggPSBcdTAwMjZod2MtXHUwMDNlY2FsbGVyX2N0eFtpbmRleF07XG4rXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHQvKiBUYWtlIGJvdGggcmVmZXJlbmNlcyAoc2VuZGVyICsgaGFuZGxlX3Jlc3ApIGJlZm9yZSBwdWJsaXNoaW5nIHRoZVxuK1x0ICogc2xvdCwgc28gYW4gZWFybHkgcmVzcG9uc2UgY2Fubm90IGZyZWUgaXQgdW5kZXIgdGhlIHNlbmRlci5cbitcdCAqL1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQsIDIpO1xuK1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IGZhbHNlO1xuK1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IHRydWU7XG4rXHRjdHgtXHUwMDNlbXNnX2lkID0gaW5kZXg7XG4rXHRjdHgtXHUwMDNlZXJyb3IgPSAtRUlOUFJPR1JFU1M7XG4rXG4rXHQvKiBQdWJsaXNoIHRoZSBzbG90IGxhc3QsIGFmdGVyIGl0IGlzIGZ1bGx5IGluaXRpYWxpc2VkLiAqL1xuK1x0Yml0bWFwX3NldChyLVx1MDAzZW1hcCwgaW5kZXgsIDEpO1xuIFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbkBAIC00MCw2ICs3MSwxMyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19wdXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IG1zZ19pZClcbiBcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaHdjX2N0eF9wdXQoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuK1x0XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4KVxuK3tcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Y3R4LVx1MDAzZXJlZmNudCkpXG4rXHRcdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBjdHgtXHUwMDNlbXNnX2lkKTtcbit9XG4rXG4gc3RhdGljIGludCBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY29uc3Qgc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4LFxuIFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBnZG1hX3Jlc3BfaGRyICpyZXNwX21zZyxcbiBcdFx0XHRcdCAgICB1MzIgcmVzcF9sZW4pXG5AQCAtODEsNiArMTE5LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnID0gcnhfcmVxLVx1MDAzZWJ1Zl92YTtcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0Ym9vbCByZWxlYXNlO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XG5AQCAtOTAsMjIgKzEyOSw1MyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiBcdH1cbiBcbiBcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xuLVx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFxuLVx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1vdXQ6XG4rXHQvKiBUaGUgc2VuZGVyIGhhcyBub3QgcHVibGlzaGVkIGl0cyBidWZmZXIgeWV0LCBzbyBub3RoaW5nIGFza2VkIGZvclxuK1x0ICogdGhpcyByZXNwb25zZS4gIEtlZXAgdGhlIHNsb3QgcmVzZXJ2ZWQgYW5kIGRyb3AgdGhlIG1lc3NhZ2UuXG4rXHQgKi9cbitcdGlmICghY3R4LVx1MDAzZW91dHB1dF9idWYgXHUwMDI2XHUwMDI2ICFjdHgtXHUwMDNlcmVzcG9uZGVkKSB7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbitcdFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogVGFrZSB0aGUgcmVzcG9uc2Utc2lkZSByZWZlcmVuY2UgYXdheSBleGFjdGx5IG9uY2U6IHJlbGVhc2luZyBpdFxuK1x0ICogaXMgd2hhdCBmcmVlcyBhIHNsb3Qgd2hvc2Ugc2VuZGVyIGhhcyBhbHJlYWR5IGdpdmVuIHVwLlxuK1x0ICovXG4rXHRyZWxlYXNlID0gY3R4LVx1MDAzZXJlc3BfcGVuZGluZztcbitcdGN0eC1cdTAwM2VyZXNwX3BlbmRpbmcgPSBmYWxzZTtcbitcbitcdGlmIChjdHgtXHUwMDNlcmVzcG9uZGVkKSB7XG4rXHRcdC8qIFRoZSBzZW5kZXIgdGltZWQgb3V0IGFuZCBhYmFuZG9uZWQgdGhlIHNsb3QsIG9yIGEgcmVzcG9uc2VcbitcdFx0ICogd2FzIGFscmVhZHkgYXBwbGllZC4gIENvbnN1bWUgdGhpcyBvbmUgd2l0aG91dCB3cml0aW5nXG4rXHRcdCAqIGFueXRoaW5nLCB0aGVuIHJlbGVhc2UgdGhlIHNsb3QgaXQgd2FzIGhvbGRpbmcuXG4rXHRcdCAqL1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG4rXHRcdGlmIChyZWxlYXNlKVxuK1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuK1x0aWYgKCFlcnIpIHtcbitcdFx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuK1x0XHRtZW1jcHkoY3R4LVx1MDAzZW91dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7XG4rXHR9XG4gXHRjdHgtXHUwMDNlZXJyb3IgPSBlcnI7XG4gXG4tXHQvKiBNdXN0IHBvc3Qgcnggd3FlIGJlZm9yZSBjb21wbGV0ZSgpLCBvdGhlcndpc2UgdGhlIG5leHQgcnggbWF5XG4tXHQgKiBoaXQgbm9fd3FlIGVycm9yLlxuK1x0LyogUG9zdCBSWCBXUUUgYmVmb3JlIGNvbXBsZXRpbmcg4oCUIHRoZSBuZXh0IHJlc3BvbnNlIG1heSBhcnJpdmVcbitcdCAqIGltbWVkaWF0ZWx5IGFuZCBuZWVkcyBhIHBvc3RlZCBidWZmZXIuXG4gXHQgKi9cbiBcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG4tXG4gXHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAocmVsZWFzZSlcbitcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxuQEAgLTE0Niw3ICsyMTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIOlxuLVx0XHRcdGh3Yy1cdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9ICh1MTYpdmFsO1xuK1x0XHRcdC8qIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgYSAyNC1iaXQgZmllbGQuICBLZWVwXG4rXHRcdFx0ICogdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlIGhlcmU7IGl0IGlzIGNsYW1wZWRcbitcdFx0XHQgKiBhbmQgdmFsaWRhdGVkIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkgcmF0aGVyXG4rXHRcdFx0ICogdGhhbiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdTE2LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGh3Yy1cdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IHZhbDtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBIV0NfSU5JVF9EQVRBX01BWF9SRVFVRVNUOlxuQEAgLTQ3Niw3ICs1NTEsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXG4gXHRkbWFfYnVmLVx1MDAzZW51bV9yZXFzID0gcV9kZXB0aDtcbiBcbi1cdGJ1Zl9zaXplID0gTUFOQV9QQUdFX0FMSUdOKHFfZGVwdGggKiBtYXhfbXNnX3NpemUpO1xuK1x0LyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhc1xuK1x0ICogYWxyZWFkeSBhc3N1bWVkIGZvciB0aGUgRVEgYW5kIENRIHJpbmdzIGFib3ZlLiAgVGhlIHNsb3RzIGFyZVxuK1x0ICogY2FydmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlciwgc28gYW55IHRhaWwgaXMgdW51c2VkLlxuK1x0ICovXG4rXHRidWZfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSkpO1xuIFxuIFx0Z21pID0gXHUwMDI2ZG1hX2J1Zi1cdTAwM2VtZW1faW5mbztcbiBcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7XG5AQCAtNTYwLDYgKzYzOSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdGh3Y193cS1cdTAwM2VnZG1hX3dxID0gcXVldWU7XG4gXHRod2Nfd3EtXHUwMDNlcXVldWVfZGVwdGggPSBxX2RlcHRoO1xuIFx0aHdjX3dxLVx1MDAzZWh3Y19jcSA9IGh3Y19jcTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh3Y193cS1cdTAwM2Vsb2NrKTtcbiBcbiBcdGVyciA9IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoaHdjLCBxX2RlcHRoLCBtYXhfbXNnX3NpemUsXG4gXHRcdFx0XHQgICAgIFx1MDAyNmh3Y193cS1cdTAwM2Vtc2dfYnVmKTtcbkBAIC01NzcsNyArNjU3LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19jcmVhdGVfd3Eoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxuK3N0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdFx0XHRcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXG4gXHRcdFx0XHR1MzIgZGVzdF92aXJ0X3JxX2lkLCB1MzIgZGVzdF92aXJ0X3JjcV9pZCxcbiBcdFx0XHRcdGJvb2wgZGVzdF9wZilcbkBAIC02MTYsNyArNjk2LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmlubGluZV9vb2JfZGF0YSA9IHR4X29vYjtcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmNsaWVudF9kYXRhX3VuaXQgPSAwO1xuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4gXHRlcnIgPSBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoaHdjX3R4cS1cdTAwM2VnZG1hX3dxLCBcdTAwMjZyZXEtXHUwMDNld3FlX3JlcSwgTlVMTCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZod2NfdHhxLVx1MDAzZWxvY2spO1xuK1xuIFx0aWYgKGVycilcbiBcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcXG5cIiwgZXJyKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtNjQyLDYgKzcyNSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLVx1MDAzZXJ4cTtcbiBcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFx0aW50IGk7XG4gXG5AQCAtNjU3LDE4ICs3NDEsMzggQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSlcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSkge1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHhbaV0ubG9jayk7XG4gXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XG4rXHR9XG4gXG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcbiBcbi1cdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxKTtcbitcdC8qIEVuYWJsZSBhZG1pc3Npb24gZm9yIHRoZSB0ZXN0IEVRIHJlcXVlc3QuICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IHRydWU7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbitcbitcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuK1x0aWYgKGVycikge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxuK3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3Jlc3BfbXNnX3NpemUpXG4ge1xuK1x0LyogbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkgZmlsbHMgdGhlIGJvb3RzdHJhcCBmaWVsZHMgZnJvbSBoYXJkXG4rXHQgKiBJUlEgb24gR0RNQV9FUUVfSFdDX0lOSVRfREFUQSBhbmQgdGhlbiBzaWduYWxzIGh3Y19pbml0X2VxZV9jb21wIG9uXG4rXHQgKiBHRE1BX0VRRV9IV0NfSU5JVF9ET05FLiAgVGhlIHdhaXRfZm9yX2NvbXBsZXRpb24oKSBiZWxvdyBwYWlycyB3aXRoXG4rXHQgKiB0aGF0IGNvbXBsZXRlKCksIHNvIGV2ZXJ5IHZhbHVlIHN0b3JlZCBiZWZvcmUgSU5JVF9ET05FIGlzIG9yZGVyZWRcbitcdCAqIGFnYWluc3QgdGhlIHJlYWRzIHRoYXQgZm9sbG93IGl0IGhlcmUuXG4rXHQgKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpycSA9IGh3Yy1cdTAwM2VyeHEtXHUwMDNlZ2RtYV93cTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpzcSA9IGh3Yy1cdTAwM2V0eHEtXHUwMDNlZ2RtYV93cTtcbkBAIC02NzYsNiArNzgwLDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcSA9IGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2NxO1xuIFx0aW50IGVycjtcbiBcbitcdC8qIERvIG5vdCByZXVzZSBkaW1lbnNpb25zIG9yIHJvdXRpbmcgSURzIGZyb20gYSBwcmV2aW91cyBlc3RhYmxpc2guICovXG4rXHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAwO1xuK1x0aHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemUgPSAwO1xuK1x0aHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXNwX21zZ19zaXplID0gMDtcbitcdGdjLVx1MDAzZWh3Yy5kb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4rXHRnYy1cdTAwM2Vod2MucGRpZCA9IElOVkFMSURfUERJRDtcbitcdGh3Yy1cdTAwM2VwZl9kZXN0X3ZycV9pZCA9IDA7XG4rXHRod2MtXHUwMDNlcGZfZGVzdF92cmNxX2lkID0gMDtcbitcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuIFxuIFx0ZXJyID0gbWFuYV9zbWNfc2V0dXBfaHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSxcbkBAIC02ODMsNyArNzk2LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxuIFx0XHRcdFx0IGNxLVx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGUsXG4gXHRcdFx0XHQgcnEtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZSxcbiBcdFx0XHRcdCBzcS1cdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlLFxuLVx0XHRcdFx0IGVxLVx1MDAzZWVxLm1zaXhfaW5kZXgpO1xuK1x0XHRcdFx0IGVxLVx1MDAzZWVxLm1zaXhfaW5kZXgsIFx1MDAyNmh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02OTQsNiArODA3LDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdCptYXhfcmVxX21zZ19zaXplID0gaHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XG4gXHQqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4rXHQvKiBSZWplY3QgYSBtaXNzaW5nIGRvb3JiZWxsIGJlZm9yZSB0aGUgY2hhbm5lbCB0ZXN0LiBUaGlzIG5laXRoZXJcbitcdCAqIHZhbGlkYXRlcyBpdHMgQkFSIHJhbmdlIG5vciBwcm90ZWN0cyBlYXJsaWVyIElSUSByZWFybWluZy5cbitcdCAqL1xuK1x0aWYgKGdjLVx1MDAzZWh3Yy5kb29yYmVsbCA9PSBJTlZBTElEX0RPT1JCRUxMKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0M6IG5vIGRvb3JiZWxsIGluIGluaXQgZGF0YVxcblwiKTtcbitcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXG4gXHQvKiBCb3RoIHdlcmUgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiAqL1xuIFx0aWYgKFdBUk5fT04oY3EtXHUwMDNlaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcykpXG4gXHRcdHJldHVybiAtRVBST1RPO1xuQEAgLTcxMiw2ICs4MzMsMTIgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHQvKiBDUSBkZXB0aCBpcyBxX2RlcHRoICogMiAoU1EgKyBSUSkgcGFzc2VkIGFzIHUxNiB0byBjcmVhdGVfY3EuXG4rXHQgKiBDYXAgdG8gcHJldmVudCB1MTYgdHJ1bmNhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHFfZGVwdGggXHUwMDNlIFUxNl9NQVggLyAyKVxuK1x0XHRxX2RlcHRoID0gVTE2X01BWCAvIDI7XG4rXG4gXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC03NTEsMTIgKzg3OCw0NCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbisvKiBCcmluZy11cCBvbmx5OiByZXF1aXJlcyBubyBzZW5kZXJzIG9yIGNvbmN1cnJlbnQgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuXG4rICogVGhpcyBoZWxwZXIgZG9lcyBub3QgdW5wdWJsaXNoIHRoZSBIV0Mgb3IgZHJhaW4gc2VuZGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MpXG4re1xuK1x0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0O1xuK1xuK1x0LyogVGhlIENRIGhlbHBlciBkZXJlZ2lzdGVycyB0aGUgSFdDIEVRIGJlZm9yZSByZXR1cm5pbmcuICovXG4rXHRpZiAoaHdjLVx1MDAzZWNxKSB7XG4rXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy1cdTAwM2VjcSk7XG4rXHRcdGh3Yy1cdTAwM2VjcSA9IE5VTEw7XG4rXHR9XG4rXG4rXHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4rXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG4rXG4rXHRpZiAoaHdjLVx1MDAzZXR4cSkge1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG4rXHRcdGh3Yy1cdTAwM2V0eHEgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKGh3Yy1cdTAwM2VyeHEpIHtcbitcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuK1x0XHRod2MtXHUwMDNlcnhxID0gTlVMTDtcbitcdH1cbitcbitcdG1hbmFfZ2RfZnJlZV9yZXNfbWFwKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcbitcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcbit9XG4rXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIHtcbiBcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBcdTAwMjZnYy1cdTAwM2Vod2M7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4tXHR1MTYgcV9kZXB0aF9tYXg7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKm9sZF9jcV90YWJsZTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgcV9kZXB0aF9tYXg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aHdjID0ga3phbGxvY19vYmooKmh3Yyk7XG5AQCAtNzY0LDEwICs5MjMsMTEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdkLVx1MDAzZWdkbWFfY29udGV4dCA9IGdjO1xuLVx0Z2QtXHUwMDNlZHJpdmVyX2RhdGEgPSBod2M7XG4gXHRod2MtXHUwMDNlZ2RtYV9kZXYgPSBnZDtcbiBcdGh3Yy1cdTAwM2VkZXYgPSBnYy1cdTAwM2VkZXY7XG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUztcbitcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9IDA7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmdjLVx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XG4gXG4gXHQvKiBIV0MncyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovXG4gXHRnZC1cdTAwM2VkZXZfaWQuYXNfdWludDMyID0gMDtcbkBAIC03NzYsNiArOTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdGdkLVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gXHRnZC1cdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4gXG4rXHQvKiBQdWJsaXNoIGZvciBzZXR1cDsgcXVldWUgaW5pdGlhbGl6YXRpb24gYmVsb3cgbXVzdCBwcmVjZWRlIHNlbmRlcnMuICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gaHdjO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1xuIFx0LyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyxcbiBcdCAqIGFuZCBkb2Vzbid0IHRvdWNoIHRoZSBIV0MgZGV2aWNlLlxuIFx0ICovXG5AQCAtNzk0LDggKzk1OSwxMzIgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGlmIChxX2RlcHRoX21heCBcdTAwM2UgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgpIHtcbitcdFx0LyogQm91bmQgRE1BIGFsbG9jYXRpb25zIGJlZm9yZSB1c2luZyB0aGUgMjQtYml0IGRlcHRoLiAqL1xuK1x0XHRpZiAocV9kZXB0aF9tYXggXHUwMDNlIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIKVxuK1x0XHRcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9NQVhfUVVFVUVfREVQVEg7XG4rXG4rXHRcdC8qIEtlZXAgYm9vdHN0cmFwIG1lc3NhZ2Ugc2l6ZXMgZm9yIG1hbmRhdG9yeSBjb21tYW5kcy5cbitcdFx0ICogSW5jb21wYXRpYmxlIHJlcG9ydHMgc2tpcCByZWJ1aWxkaW5nLCBub3QgY2hhbm5lbCBjcmVhdGlvbi5cbitcdFx0ICovXG4rXHRcdGlmIChtYXhfcmVxX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSB8fFxuK1x0XHQgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSB8fFxuK1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXFfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XG4rXHRcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFKSB7XG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJIV0M6IGludmFsaWQgZGltcyBxPSV1IHJlcT0ldSByZXNwPSV1XFxuXCIsXG4rXHRcdFx0XHRxX2RlcHRoX21heCwgbWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0XHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xuK1x0XHRcdGdvdG8gc2tpcF9yZWluaXQ7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIkZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4rXHRcdH1cbitcbitcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuK1xuK1x0XHQvKiBVbnB1Ymxpc2ggdGhlIENRIGFuZCBkcmFpbiBpdHMgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHRhYmxlLiAqL1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuK1xuK1x0XHRvbGRfY3FfdGFibGUgPSBnYy1cdTAwM2VjcV90YWJsZTtcbitcdFx0Z2MtXHUwMDNlY3FfdGFibGUgPSBOVUxMO1xuK1x0XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuK1xuK1x0XHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIHFfZGVwdGhfbWF4LFxuK1x0XHRcdFx0XHQgICBtYXhfcmVxX21zZ19zaXplLFxuK1x0XHRcdFx0XHQgICBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlaW5pdCBIV0M6ICVkXFxuXCIsIGVycik7XG4rXHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZtYXhfcmVzcF9tc2dfc2l6ZSk7XG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHFfZGVwdGhfbWF4IFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyB8fFxuK1x0XHQgICAgIG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8XG4rXHRcdCAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHtcbitcdFx0XHQvKiBUaGUgcmVidWlsdCBjaGFubmVsIG11c3Qgc3VwcG9ydCB0aGUgYWxsb2NhdGVkIGRlcHRoXG4rXHRcdFx0ICogYW5kIG1lc3NhZ2Ugc2l6ZXMuXG4rXHRcdFx0ICovXG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJIV0M6IHJlYnVpbHQgcT0ldSByZXE9JXUgcmVzcD0ldSwgYnVpbHQgZm9yICV1LyV1LyV1XFxuXCIsXG4rXHRcdFx0XHRxX2RlcHRoX21heCwgbWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplLCBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbitcdFx0XHRcdEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcbitcdFx0XHRcdEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xuK1x0XHRcdGVyciA9IC1FUFJPVE87XG4rXHRcdH1cbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4rXHRcdH1cbitcdH1cbitcbitcdGdvdG8gc2tpcF9yZWluaXQ7XG4rXG4rcmVpbml0X2ZhbGxiYWNrOlxuK1x0LyogQSBmYWlsZWQgaGFuZHNoYWtlIGxlYXZlcyBxdWV1ZSBvd25lcnNoaXAgdW5jZXJ0YWluLiAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpIHtcbitcdFx0aWYgKG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpKSB7XG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJGYWlsZWQgdG8gdGVhciBkb3duIEhXQyBiZWZvcmUgYm9vdHN0cmFwIGZhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFRoZSBmYWlsZWQgZXN0YWJsaXNoIG1heSBub3QgaGF2ZSBhbGxvY2F0ZWQgY3FfdGFibGUuICovXG4rXHRkZXZfd2Fybihod2MtXHUwMDNlZGV2LCBcIkhXQyByZWluaXQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gYm9vdHN0cmFwIGRlcHRoXFxuXCIpO1xuK1xuK1x0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcbitcbitcdG9sZF9jcV90YWJsZSA9IGdjLVx1MDAzZWNxX3RhYmxlO1xuK1x0Z2MtXHUwMDNlY3FfdGFibGUgPSBOVUxMO1xuK1x0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuK1xuK1x0ZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcbitcdFx0XHRcdCAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcbitcdFx0XHRcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlc3RvcmUgYm9vdHN0cmFwIEhXQzogJWRcXG5cIiwgZXJyKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChnYywgXHUwMDI2cV9kZXB0aF9tYXgsIFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXG4rXHRcdFx0XHRcdCBcdTAwMjZtYXhfcmVzcF9tc2dfc2l6ZSk7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjZcbitcdCAgICAobWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcbitcdCAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHtcbitcdFx0LyogVGhlIHJlc3RvcmVkIGNoYW5uZWwgbXVzdCByZXBvcnQgdGhlIGFsbG9jYXRlZCBtZXNzYWdlIHNpemVzLiAqL1xuK1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiSFdDOiBib290c3RyYXAgcmVwb3J0cyByZXE9JXUgcmVzcD0ldVxcblwiLFxuK1x0XHRcdG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0ZXJyID0gLUVQUk9UTztcbitcdH1cbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitza2lwX3JlaW5pdDpcbitcbiBcdGVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEsXG4tXHRcdFx0XHQgICAgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXG4rXHRcdFx0XHQgICAgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2csXG4gXHRcdFx0XHQgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwiLCBlcnIpO1xuQEAgLTgxMCwxOCArMTA5OSw3MSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuK1x0LyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAoIWh3YylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2MtXHUwMDNlbWF4X251bV9jcXMgaXMgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiBJZiBpdCdzXG4tXHQgKiBub24temVybywgdGhlIEhXQyB3b3JrZWQgYW5kIHdlIHNob3VsZCB0ZWFyIGRvd24gdGhlIEhXQyBoZXJlLlxuK1x0LyogTm9uemVybyBudW1faW5mbGlnaHRfbXNnIG1lYW5zIHF1ZXVlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZC4gKi9cbitcdGlmIChod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZykge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuK1x0LyogQmxvY2sgbmV3IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgcmVmZXJlbmNlcyBiZWZvcmUgZHJhaW5pbmcuICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcbitcdC8qIENvbXBsZXRlIG9jY3VwaWVkIHNsb3RzIGFuZCBkcm9wIHBlbmRpbmcgcmVzcG9uc2Utc2lkZSByZWZlcmVuY2VzLiAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4rXHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0XHRib29sIGRyb3BfcmVzcF9yZWY7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XG4rXHRcdFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaV07XG4rXG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHQvKiBQcmVzZXJ2ZSBhbiBhbHJlYWR5IHJlY29yZGVkIHJlc3VsdC4gKi9cbitcdFx0XHRpZiAoIWN0eC1cdTAwM2VyZXNwb25kZWQpXG4rXHRcdFx0XHRjdHgtXHUwMDNlZXJyb3IgPSAtRU5PREVWO1xuK1x0XHRcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuK1x0XHRcdGN0eC1cdTAwM2VyZXNwX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0XHRjdHgtXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcbitcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0XHRcdGlmIChkcm9wX3Jlc3BfcmVmKVxuK1x0XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBQYWlyIHdpdGggdGhlIGxhc3Qgc2VuZGVyJ3Mgd2FrZXVwIHVuZGVyIGh3Y19sb2NrLCBzbyBpdCBmaW5pc2hlc1xuK1x0ICogYWNjZXNzaW5nIGdjIGJlZm9yZSB0aGUgZHJhaW4gcmV0dXJucy5cbiBcdCAqL1xuLVx0aWYgKGdjLVx1MDAzZW1heF9udW1fY3FzIFx1MDAzZSAwKSB7XG4tXHRcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xuLVx0XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuK1x0XHRcdCAgICBod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMCwgZ2MtXHUwMDNlaHdjX2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcbitcdGlmIChod2MtXHUwMDNlc2V0dXBfYWN0aXZlKSB7XG4rXHRcdGlmICghbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSkpXG4rXHRcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byB0ZWFyIGRvd24gSFdDXFxuXCIpO1xuIFx0fVxuK1x0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuK1xuK1x0LyogRGVyZWdpc3RlciB0aGUgSFdDIEVRIGJlZm9yZSBmcmVlaW5nIHRoZSB3b3JrIHF1ZXVlcy4gKi9cbitcdGlmIChod2MtXHUwMDNlY3EpXG4rXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVx1MDAzZWNxKTtcbiBcbiBcdGlmIChod2MtXHUwMDNldHhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG5AQCAtODI5LDggKzExNzEsMTggQEAgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRpZiAoaHdjLVx1MDAzZXJ4cSlcbiBcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuIFxuLVx0aWYgKGh3Yy1cdTAwM2VjcSlcbi1cdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuK1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4rXHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkrKykge1xuK1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuK1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0a2ZyZWUoaHdjLVx1MDAzZWNhbGxlcl9jdHgpO1xuIFx0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBOVUxMO1xuQEAgLTg0NSw3ICsxMTk3LDYgQEAgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuIFxuIFx0a2ZyZWUoaHdjKTtcbi1cdGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7XG4gXHRnYy1cdTAwM2Vod2MuZ2RtYV9jb250ZXh0ID0gTlVMTDtcbiBcbiBcdHZmcmVlKGdjLVx1MDAzZWNxX3RhYmxlKTtcbkBAIC04NjAsMTMgKzEyMTEsMjEgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0c3RydWN0IGh3Y193cSAqdHhxID0gaHdjLVx1MDAzZXR4cTtcbiBcdHN0cnVjdCBnZG1hX3JlcV9oZHIgKnJlcV9tc2c7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRib29sIGRyb3BfcmVzcF9yZWY7XG4rXHRib29sIGFiYW5kb25lZCA9IGZhbHNlO1xuK1x0Ym9vbCBjYW5jZWxsZWQ7XG4gXHR1MzIgZGVzdF92cmNxID0gMDtcbiBcdHUzMiBkZXN0X3ZycSA9IDA7XG4gXHR1MzIgY29tbWFuZDtcbitcdHUzMiBzdGF0dXM7XG4rXHR1MzIgd2FpdF9tcztcbiBcdHUxNiBtc2dfaWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4rXHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHR0eF93ciA9IFx1MDAyNnR4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbbXNnX2lkXTtcbiBcbkBAIC04NzgsOCArMTIzNywxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IHJlc3A7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZmxlbiA9IHJlc3BfbGVuO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItXHUwMDNlYnVmX3ZhO1xuIFx0aWYgKHJlcSlcbkBAIC04OTUsNDMgKzEyNTcsMTE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcbiBcdFx0ZGVzdF92cmNxID0gaHdjLVx1MDAzZXBmX2Rlc3RfdnJjcV9pZDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcbitcdC8qIFNlcmlhbGl6ZSBjYW5jZWxsYXRpb24gd2l0aCBzdWJtaXNzaW9uLiBBbiB1bnN1Ym1pdHRlZCByZXF1ZXN0XG4rXHQgKiBjYW5ub3Qgc3VjY2VlZCwgZXZlbiBpZiBhbiB1bnNvbGljaXRlZCByZXNwb25zZSB3YXMgYWNjZXB0ZWQuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRjYW5jZWxsZWQgPSBjdHgtXHUwMDNlcmVzcG9uZGVkO1xuK1x0aWYgKGNhbmNlbGxlZClcbitcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yID86IC1FUFJPVE87XG4rXHRlbHNlXG4rXHRcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsXG4rXHRcdFx0XHRcdCAgIGZhbHNlKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGlmIChjYW5jZWxsZWQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiSFdDOiBGYWlsZWQgdG8gcG9zdCBzZW5kIFdRRTogJWRcXG5cIiwgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHR3YWl0X21zID0gaHdjLVx1MDAzZWh3Y190aW1lb3V0O1xuIFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2Y3R4LVx1MDAzZWNvbXBfZXZlbnQsXG4tXHRcdFx0XHRcdCAobXNlY3NfdG9famlmZmllcyhod2MtXHUwMDNlaHdjX3RpbWVvdXQpKSkpIHtcbi1cdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCAhPSAwKVxuLVx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcblwiLFxuLVx0XHRcdFx0Y29tbWFuZCwgaHdjLVx1MDAzZWh3Y190aW1lb3V0KTtcbitcdFx0XHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMod2FpdF9tcykpKSB7XG4rXHRcdC8qIENsZWFyIG91dHB1dF9idWYgc28gYSBsYXRlIHJlc3BvbnNlIGNhbm5vdCB3cml0ZSB0aGUgY2FsbGVyJ3NcbitcdFx0ICogYnVmZmVyLCB0aGVuIGNoZWNrIHdoZXRoZXIgb25lIGFscmVhZHkgYXJyaXZlZFxuK1x0XHQgKiAoZXJyb3IgIT0gLUVJTlBST0dSRVNTKS5cbitcdFx0ICovXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbitcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuK1x0XHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4rXHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4rXHRcdFx0LyogUHVibGlzaCBhYmFuZG9ubWVudCB3aXRoIGJ1ZmZlciB3aXRoZHJhd2FsIHNvIGEgbGF0ZVxuK1x0XHRcdCAqIHJlc3BvbnNlIGNhbiByZWNsYWltIHRoZSBzbG90LiBLZWVwIGl0cyByZWZlcmVuY2UuXG4rXHRcdFx0ICovXG4rXHRcdFx0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4rXHRcdFx0YWJhbmRvbmVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRcdGlmICghYWJhbmRvbmVkKSB7XG4rXHRcdFx0LyogQSBjb21wbGV0aW9uIHdvbiB0aGUgcmFjZSB3aXRoIHRpbWVvdXQ7IHVzZSBpdHMgcmVzdWx0LiAqL1xuK1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0XHRnb3RvIGNoZWNrX3N0YXR1cztcbitcdFx0fVxuIFxuLVx0XHQvKiBSZWR1Y2UgZnVydGhlciB3YWl0aW5nIGlmIEhXQyBubyByZXNwb25zZSAqL1xuLVx0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lb3V0IFx1MDAzZSAxKVxuLVx0XHRcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IDE7XG4rXHRcdGlmICh3YWl0X21zICE9IDApIHtcbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXG5cIixcbitcdFx0XHRcdGNvbW1hbmQsIHdhaXRfbXMpO1xuK1xuK1x0XHRcdC8qIEdlbnVpbmUgdGltZW91dDogc2hvcnRlbiBsYXRlciB3YWl0cyBzbyBzdWJzZXF1ZW50XG4rXHRcdFx0ICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGVcbitcdFx0XHQgKiBmdWxsIHRpbWVvdXQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCBcdTAwM2UgMSlcbitcdFx0XHRcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IDE7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRpZiAoY3R4LVx1MDAzZWVycm9yKSB7XG4tXHRcdGVyciA9IGN0eC1cdTAwM2VlcnJvcjtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdC8qIERyb3Agb25seSB0aGUgc2VuZGVyJ3MgcmVmZXJlbmNlOyB0aGUgcmVzcG9uc2Utc2lkZSBvbmUgaXNcbitcdFx0ICogd2hhdCBrZWVwcyB0aGUgc2xvdCByZXNlcnZlZC5cbitcdFx0ICovXG4rXHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuLVx0aWYgKGN0eC1cdTAwM2VzdGF0dXNfY29kZSBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZXN0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuLVx0XHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xuK1x0LyogQ2xlYXIgb3V0cHV0X2J1ZiBhbmQgcmVhZCB0aGUgcmVzdWx0IHVuZGVyIHRoZSBsb2NrOyB0aGUgc2xvdCBtYXlcbitcdCAqIGJlIHJldXNlZCBhZnRlciBod2NfY3R4X3B1dCgpLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0Y3R4LVx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xuK1x0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuK1x0c3RhdHVzID0gY3R4LVx1MDAzZXN0YXR1c19jb2RlO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK1xuK2NoZWNrX3N0YXR1czpcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZG9uZTtcbitcbitcdGlmIChzdGF0dXMgXHUwMDI2XHUwMDI2IHN0YXR1cyAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcbitcdFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRnb3RvIG91dDtcbitcdFx0XHRnb3RvIGRvbmU7XG4gXHRcdH1cbitcbiBcdFx0aWYgKGNvbW1hbmQgIT0gTUFOQV9RVUVSWV9QSFlfU1RBVClcbiBcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiQ29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxcblwiLFxuLVx0XHRcdFx0Y29tbWFuZCwgY3R4LVx1MDAzZXN0YXR1c19jb2RlKTtcbitcdFx0XHRcdGNvbW1hbmQsIHN0YXR1cyk7XG4gXHRcdGVyciA9IC1FUFJPVE87XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4rXG4rXHRlcnIgPSAwO1xuK1x0Z290byBkb25lO1xuIG91dDpcbi1cdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xuK1x0LyogUmVsZWFzZSBhbnkgcmVmZXJlbmNlcyBzdGlsbCBoZWxkIGJ5IHRoaXMgdW5zdWJtaXR0ZWQgcmVxdWVzdC4gKi9cbitcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbitcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuK1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xuK1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZHJvcF9yZXNwX3JlZilcbitcdFx0cmVmY291bnRfZGVjKFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpO1xuK1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK2RvbmU6XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuY1xuaW5kZXggZDIxYjVkYjA2ZTUwOS4uM2NmNmE5ZjhlMzJjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcbkBAIC0xMjksOSArMTI5LDEyIEBAIHZvaWQgbWFuYV9zbWNfaW5pdChzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRzYy1cdTAwM2ViYXNlID0gYmFzZTtcbiB9XG4gXG4rLyogUmVxdWlyZXMgbm8gb3V0c3RhbmRpbmcgSFdDIGhhbmRvdmVyLiAqc3VibWl0dGVkIHJlY29yZHMgcG9zc2libGUgUEZcbisgKiBvd25lcnNoaXAsIGluY2x1ZGluZyB3aGVuIHNldHVwIGZhaWxzIGFmdGVyIHN1Ym1pc3Npb24uXG4rICovXG4gaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcbiBcdFx0ICAgICAgIHU2NCBjcV9hZGRyLCB1NjQgcnFfYWRkciwgdTY0IHNxX2FkZHIsXG4tXHRcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleClcbitcdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpXG4ge1xuIFx0dW5pb24gc21jX3Byb3RvX2hkciAqaGRyO1xuIFx0dTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7XG5AQCAtMTQ0LDYgKzE0Nyw4IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXG4gXHRpbnQgZXJyO1xuIFx0aW50IGk7XG4gXG4rXHQqc3VibWl0dGVkID0gZmFsc2U7XG4rXG4gXHQvKiBFbnN1cmUgVkYgYWxyZWFkeSBoYXMgcG9zc2Vzc2lvbiBvZiBzaGFyZWQgbWVtb3J5ICovXG4gXHRlcnIgPSBtYW5hX3NtY19wb2xsX3JlZ2lzdGVyKHNjLVx1MDAzZWJhc2UsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yMjksNiArMjM0LDcgQEAgaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcbiBcdC8qIFdyaXRlIDI1Ni1tZXNzYWdlIGJ1ZmZlciB0byBzaGFyZWQgbWVtb3J5IChmaW5hbCAzMi1iaXQgd3JpdGVcbiBcdCAqIHRyaWdnZXJzIEhXIHRvIHNldCBwb3NzZXNzaW9uIGJpdCB0byBQRikuXG4gXHQgKi9cbitcdCpzdWJtaXR0ZWQgPSB0cnVlO1xuIFx0ZHdvcmQgPSAodTMyICopc2htX2J1ZjtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNNQ19BUEVSVFVSRV9EV09SRFM7IGkrKylcbiBcdFx0d3JpdGVsKCpkd29yZCsrLCBzYy1cdTAwM2ViYXNlICsgaSAqIFNNQ19CQVNJQ19VTklUKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG5pbmRleCAzMDg5NTBmOWI1NGIwLi4yMmRkN2M5Y2VjYzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG5AQCAtNDY4LDYgKzQ2OCwxNSBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcbiBcdC8qIEhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbCAoSFdDKSAqL1xuIFx0c3RydWN0IGdkbWFfZGV2XHRcdGh3YztcbiBcbitcdC8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3RcdGh3Y19kcmFpbl93YWl0cTtcbitcbitcdC8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpblxuK1x0ICogbWFuYV9uZWVkX2xvZygpL21hbmFfc2Vydl9yZXNldCgpLiBTZXR1cCBhbmQgRE1BLXJlZ2lvbiByZWFkZXJzXG4rXHQgKiBzdGlsbCByZXF1aXJlIGxpZmVjeWNsZSBvcmRlcmluZy4gTm90IGFsbCB0aW1lb3V0IHdyaXRlcnMgdXNlIGl0LlxuK1x0ICovXG4rXHRzcGlubG9ja190XHRcdGh3Y19sb2NrO1xuK1xuIFx0LyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0bWFuYTtcbiBcbkBAIC02ODMsNiArNjkyLDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbisvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBxdWV1ZSBkZXB0aCBmb3IgSFdDICovXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggQklUKDI5KVxuK1xuIC8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuIFxuQEAgLTcwMSw2ICs3MTMsNyBAQCBlbnVtIHtcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSFdDX1FVRVVFX0RFUFRIIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTiB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbmluZGV4IDE2ZmViMzk2MTZjMWIuLmRmZDkyMzM2YjJiNGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbkBAIC0xMSw2ICsxMSwxMyBAQFxuIFxuICNkZWZpbmUgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEggMVxuIFxuKy8qIFVwcGVyIGJvdW5kIG9uIHRoZSBkZXZpY2UtcmVwb3J0ZWQgSFdDIHF1ZXVlIGRlcHRoLiAgVGhlIEhXQyBpcyBhXG4rICogY29udHJvbCBjaGFubmVsLCBzbyBhIG1vZGVzdCBkZXB0aCBhbHJlYWR5IGtlZXBzIGVub3VnaCBtYW5hZ2VtZW50XG4rICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUFcbisgKiBidWZmZXJzIG9mIHFfZGVwdGggKiBtYXhfbXNnX3NpemUgYnl0ZXMgZWFjaC5cbisgKi9cbisjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOFxuK1xuICNkZWZpbmUgSFdDX0lOSVRfREFUQV9DUUlEXHRcdDFcbiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfUlFJRFx0XHQyXG4gI2RlZmluZSBIV0NfSU5JVF9EQVRBX1NRSURcdFx0M1xuQEAgLTE2NCw2ICsxNzEsOSBAQCBzdHJ1Y3QgaHdjX3dxIHtcbiBcdHUxNiBxdWV1ZV9kZXB0aDtcbiBcbiBcdHN0cnVjdCBod2NfY3EgKmh3Y19jcTtcbitcbitcdC8qIFNlcmlhbGl6ZXMgU1EgcG9zdGluZzsgdW51c2VkIGZvciB0aGUgUlEuICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xuQEAgLTE3MSw4ICsxODEsMjcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcbiBcdHZvaWQgKm91dHB1dF9idWY7XG4gXHR1MzIgb3V0cHV0X2J1ZmxlbjtcbiBcbi1cdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xuK1x0aW50IGVycm9yOyAvKiBMaW51eCBlcnJvciBjb2RlIChuZWdhdGl2ZSBlcnJubyBvciAwKSAqL1xuIFx0dTMyIHN0YXR1c19jb2RlO1xuK1xuK1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbitcdCAqIGhhbmRsZV9yZXNwKCkgKENRIGludGVycnVwdCkgYW5kIHRoZSBzZW5kZXIgdGltZW91dCBwYXRoLlxuK1x0ICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXG4rXHQvKiBUcmFja3Mgc2VuZGVyICsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4rXHQgKiAocmVmY291bnQgcmVhY2hlcyAwKSByZWxlYXNlcyB0aGUgYml0bWFwIHNsb3QuXG4rXHQgKi9cbitcdHJlZmNvdW50X3QgcmVmY250O1xuK1x0dTE2IG1zZ19pZDtcbitcbitcdC8qIFNldCBieSB0aGUgZmlyc3QgaGFuZGxlX3Jlc3AoKSwgb3IgYnkgdGhlIHNlbmRlcidzIHRpbWVvdXQgcGF0aCxcbitcdCAqIHNvIGEgbGF0ZXIgb3IgZHVwbGljYXRlIHJlc3BvbnNlIGlzIGRyb3BwZWQuXG4rXHQgKi9cbitcdGJvb2wgcmVzcG9uZGVkO1xuK1xuK1x0LyogUmVzcG9uc2Utc2lkZSByZWZlcmVuY2Ugb3V0c3RhbmRpbmc7IHByb3RlY3RlZCBieSBsb2NrLiAqL1xuK1x0Ym9vbCByZXNwX3BlbmRpbmc7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbkBAIC0xODAsOSArMjA5LDEwIEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuIFxuIFx0dTE2IG51bV9pbmZsaWdodF9tc2c7XG4rXG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZTtcbiBcbi1cdHUxNiBod2NfaW5pdF9xX2RlcHRoX21heDtcbitcdHUzMiBod2NfaW5pdF9xX2RlcHRoX21heDtcbiBcdHUzMiBod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplO1xuIFx0dTMyIGh3Y19pbml0X21heF9yZXNwX21zZ19zaXplO1xuIFxuQEAgLTE5Miw2ICsyMjIsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbiBcdHN0cnVjdCBod2Nfd3EgKnR4cTtcbiBcdHN0cnVjdCBod2NfY3EgKmNxO1xuIFxuK1x0LyogQWRtaXNzaW9uIHBlcm1pdHMuIFRpbWVkLW91dCByZXF1ZXN0cyByZXRhaW4gdGhlaXJzIHVudGlsIGFcbitcdCAqIHJlc3BvbnNlIG9yIHRlYXJkb3duIHJlbGVhc2VzIHRoZSBzbG90LlxuK1x0ICovXG4gXHRzdHJ1Y3Qgc2VtYXBob3JlIHNlbWE7XG4gXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xuIFxuQEAgLTE5OSw2ICsyMzIsMTUgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG4gXHR1MzIgcGZfZGVzdF92cmNxX2lkO1xuIFx0dTMyIGh3Y190aW1lb3V0O1xuIFxuK1x0LyogQ2hlY2tlZCBhZnRlciBzbG90IGFjcXVpc2l0aW9uOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvIHJlamVjdCBzZW5kcy4gKi9cbitcdGJvb2wgY2hhbm5lbF91cDtcbitcbitcdC8qIFBGIG1heSBvd24gdGhlIHF1ZXVlIG1hcHBpbmdzOyBzdGF0ZSBsYXN0cyBvbmx5IGZvciB0aGlzIGNvbnRleHQuICovXG4rXHRib29sIHNldHVwX2FjdGl2ZTtcbitcbitcdC8qIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgY2FsbGVycywgaW5jbHVkaW5nIHdhaXRlcnM7IHVuZGVyIGh3Y19sb2NrLiAqL1xuK1x0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xuK1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG5pbmRleCBkYmFiY2ZiOTVkYWYzLi5lOTYzODdkNzk1MjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcbkBAIC0yMCw3ICsyMCw3IEBAIHZvaWQgbWFuYV9zbWNfaW5pdChzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcbiBcdFx0ICAgICAgIHU2NCBjcV9hZGRyLCB1NjQgcnFfYWRkciwgdTY0IHNxX2FkZHIsXG4tXHRcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCk7XG4rXHRcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCwgYm9vbCAqc3VibWl0dGVkKTtcbiBcbiBpbnQgbWFuYV9zbWNfdGVhcmRvd25faHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MjAuMDA5MTkzNzQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk2NDU0NTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1BTkEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgTUFOQSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2AgZGlyZWN0b3J5LiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgYWNyb3NzIGEgZmV3IGNvcmUgZmlsZXM6IGBnZG1hX21haW4uY2AsIGBod19jaGFubmVsLmNgLCBhbmQgYHNobV9jaGFubmVsLmNgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYmFzZWQgb24gdGhlIG5hdHVyZSBvZiBNQU5BIGl0c2VsZi4gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSB0byBoaXQgbWUgaW4gbXkgZXhpc3RpbmcgdGVzdCBlbnZpcm9ubWVudHM/XG5cbk15IHRyaWFnZSBwaGlsb3NvcGh5IGNvbWVzIGludG8gcGxheSBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyBpbnRvIHRoZSBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5LCB3aGljaCBtZWFucyBJIHNob3VsZCBsb29rIGF0IFNlY3Rpb24gMiBvZiBteSBtZXRob2RvbG9neS4gSXQgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBwb3RlbnRpYWxseSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBieSBzeXprYWxsZXIuXG5cbkxldCdzIHNlZTogTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgaXMgYSBQQ0kgZGV2aWNlLiBTcGVjaWZpY2FsbHkgZm9yIE1pY3Jvc29mdCBBenVyZSBWTXMuIENvdWxkIGFsc28gYmUgYSBIeXBlci1WIG9yIEF6dXJlIFZGIGRldmljZS4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHRpZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBvciBoeXBlcnZpc29yIGVudmlyb25tZW50LCBzb21ldGhpbmcgdGhhdCBpcyBwcm9iYWJseSBub3Qgc3VwcG9ydGVkIGluIG91ciBzdGFuZGFyZCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBLY29uZmlnIGlzIHNldCB1cCwgc2luY2UgaXQncyBtb3N0IGxpa2VseSBub3QgYXZhaWxhYmxlIGluIGRlZmF1bHQga2VybmVscywgb3IgZW11bGF0ZWQgYnkgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyODMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoyMy45NzM3NDMxMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMzY5MDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUNST1NPRlRfTUFOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnPTI9Y29uZmlnIE1BTkFfSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgUENJIFxcdTAwMjZcXHUwMDI2IE1JQ1JPU09GVF9NQU5BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZy01LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MTg6Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICs9IG1hbmEvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS02LW1hbmEtb2JqcyA6PSBnZG1hX21haW4ubyBzaG1fY2hhbm5lbC5vIGh3X2NoYW5uZWwubyBtYW5hX2VuLm8gbWFuYV9ldGh0b29sLm8gbWFuYV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoyNi42Nzc0NDA3MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTQwMzE1Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1hbmEgR0RNQSBEcml2ZXIgUHJvYmUqKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBnZG1hX21haW4uY2AgZmlsZSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBNQU5BIGRyaXZlciBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoaXMgdGhpbmcgZ2V0cyBpdHMgaG9va3MgaW50byB0aGUgUENJIGJ1cy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBQQ0kgSUQgaGFuZGxpbmcgYW5kIHRoZSBwcm9iZSBzZXF1ZW5jZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoaWNoIGRldmljZSBJRHMgdGhpcyBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBNQU5BIGhhcmR3YXJlIGFuZCBjb3JyZWN0bHkgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBwcm9iaW5nIG1lY2hhbmlzbS4gQW55IHBvdGVudGlhbCBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgaGVyZSB0aGF0IEknbSBtaXNzaW5nPyBBbmQsIG9mIGNvdXJzZSwgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjIzOjMwLjYxNzc2MjI2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyMTc2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9nZF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjUyOT1zdGF0aWMgYm9vbCBtYW5hX2lzX3BmKHVuc2lnbmVkIHNob3J0IGRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI1MzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjUzNDpzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUzNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNzYyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjQtXFx0LmlkX3RhYmxlXFx0PSBtYW5hX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI3NjU6XFx0LnByb2JlXFx0XFx0PSBtYW5hX2dkX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjYtXFx0LnJlbW92ZVxcdFxcdD0gbWFuYV9nZF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjIzOjMwLjczMDk5MDc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYyODMyMjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGdkbWFfbWFpbi5jYCBNeXN0ZXJ5KipcblxuT2theSwgc28gd2UndmUgZ290IGFuIGlzc3VlIGFuZCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgb3V0IHRoZSBgbWFuYV9pZF90YWJsZWAgd2l0aGluIGBnZG1hX21haW4uY2AuIEl0J3MgbGlrZWx5IHRoYXQgdGFibGUgaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgRE1BIGNoYW5uZWxzLCBvciBldmVuIGludGVycnVwdCBhc3NpZ25tZW50cyDigJMgc29tZXRoaW5nIGZ1bmRhbWVudGFsIHRvIHRoZSBHRE1BJ3Mgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW4gdGhhdCB0YWJsZSBhbmQgaG93IGl0J3MgdXNlZCB0byBuYXJyb3cgZG93biB0aGlzIHByb2JsZW0uIExldCdzIHNlZSBpZiB0aGF0IHRhYmxlIGhvbGRzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzIuMzU5MzE0OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMyNTM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9pZF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjczND1zdGF0aWMgaW50IG1hbmFfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzU1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc1Ni1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc2My1cXHQubmFtZVxcdFxcdD0gXFxcIm1hbmFcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI3NjQ6XFx0LmlkX3RhYmxlXFx0PSBtYW5hX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjUtXFx0LnByb2JlXFx0XFx0PSBtYW5hX2dkX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjgxNz1tb2R1bGVfZXhpdChtYW5hX2RyaXZlcl9leGl0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI4MTk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1hbmFfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI4MjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjIzOjMyLjQ1MjU3OTQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzMzOTY2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgUENJIERldmljZSBJRHMqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGVzZSBpZGVudGlmaWVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5IGFyZSBgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpYCBhbmQgYE1BTkFfVkZfREVWSUNFX0lEYD8gVGhlc2UgYXJlbid0IGltbWVkaWF0ZWx5IGZhbWlsaWFyLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIHNvIEkgY2FuIGdvIGZ1cnRoZXIgd2l0aCB0aGlzIHRhc2suIFRpbWUgdG8gZG8gc29tZSBkaWdnaW5nIGFuZCBmaWd1cmUgb3V0IHRoZWlyIGRlZmluaXRpb25zLiBUaGlzIGNvdWxkIGJlIHZlbmRvci1zcGVjaWZpYyBpbmZvcm1hdGlvbiBvciBwYXJ0IG9mIGEgZHJpdmVyIG1vZGVsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gTGV0J3Mgc3RhcnQgd2l0aCB0aG9zZSBjb25zdGFudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDM1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzQuNzI1OTgyNTA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzUwOlxcdFxcdH1cXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IG51bXZmcztcXG4yNzUzOlxcdH1cXG4yNzU0OlxcdFxcbjI3NTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4yNzU2OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpIH0sXFxuMjc1NzpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEYyX0RFVklDRV9JRCkgfSxcXG4yNzU4OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9WRl9ERVZJQ0VfSUQpIH0sXFxuMjc1OTpcXHRcXHR7IH1cXG4yNzYwOlxcdH07XFxuMjc2MTpcXHRcXG4yNzYyOlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4yNzYzOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwibWFuYVxcXCIsXFxuMjc2NDpcXHRcXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuMjc2NTpcXHRcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuMjc2NjpcXHRcXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG4yNzY3OlxcdFxcdC5zdXNwZW5kXFx0PSBtYW5hX2dkX3N1c3BlbmQsXFxuMjc2ODpcXHRcXHQucmVzdW1lXFx0XFx0PSBtYW5hX2dkX3Jlc3VtZSxcXG4yNzY5OlxcdFxcdC5zaHV0ZG93blxcdD0gbWFuYV9nZF9zaHV0ZG93bixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzQuNzI2MjEwMzc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDg2Mzc2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIGEgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMuIEl0IGRlYWxzIHdpdGggXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsXCIgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCBJJ20gbG9va2luZyBmb3IgaGVyZS4gVGhlIHRleHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVIGRyaXZlcnMuIEl0IGdpdmVzIGV4YW1wbGVzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIChBU0lDcyBvciBQQ0llIGNhcmRzKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoaXMgTWljcm9zb2Z0IE1BTkEgZHJpdmVyLiBJdCdzIGlkZW50aWZpZWQgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvQXp1cmUgTklDIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYC4gQ3JpdGljYWxseSwgaXQgKnJlcXVpcmVzKiBNaWNyb3NvZnQgTUFOQSBQQ0llIGhhcmR3YXJlIG9yIGEgVkYgZGV2aWNlIHJ1bm5pbmcgb24gQXp1cmUgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgaXNuJ3QgYSB2aXJ0dWFsIGRldmljZSBsaWtlIHZpcnRpbywgbG9vcGJhY2ssIG9yIHNpbWlsYXIuIEl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIHRvdWNoZXMgYW55dGhpbmcgb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGRyaXZlciwgc28gSSBjaGVjayB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgZ2RtYV9tYWluLmNgLCBgaHdfY2hhbm5lbC5jYCwgYHNobV9jaGFubmVsLmNgLCBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBoZWFkZXIgZmlsZXM6IGBnZG1hLmhgLCBgaHdfY2hhbm5lbC5oYCwgYW5kIGBzaG1fY2hhbm5lbC5oYC4gVGhlc2UgYXJlIGFsbCAqZXhjbHVzaXZlbHkqIHdpdGhpbiB0aGUgTWljcm9zb2Z0IE1BTkEgZHJpdmVyIGRpcmVjdG9yeS4gVGhhdCByZWluZm9yY2VzIHRoZSBpZGVhIHRoYXQgdGhpcyBpcyBhIHNlbGYtY29udGFpbmVkLCBoYXJkd2FyZS1kZXBlbmRlbnQgZHJpdmVyLlxuXG5HaXZlbiB0aGF0IE1BTkEgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgTklDIGRyaXZlciBkZXNpZ25lZCBmb3IgTWljcm9zb2Z0IEF6dXJlIFNtYXJ0TklDIGhhcmR3YXJlLCBhbmQgaXQgY2FuJ3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgdGhlIGFjdHVhbCBNQU5BIFBDSSBkZXZpY2UsIGl0IGFsaWducyBkaXJlY3RseSB3aXRoIFNlY3Rpb24gMidzIGRlZmluaXRpb24uXG5cblRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIFNlY3Rpb24gMiwgdGhpcyBNQU5BIGRyaXZlciBjb25zdGl0dXRlcyBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiBhbmQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIGRvaW5nIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBNeSBGb2N1c1N5bWJvbHMgbGlzdCBpcyBlbXB0eSwgYW5kIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBFbmFibGVDb25maWdzLiBFdmVyeXRoaW5nIGFsaWducy4gTm93LCBJJ2xsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAwMCwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzozOS40NzQ4NTMyNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyAvIFBDSSBkZXZpY2UgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBBenVyZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIC8gUENJIGRldmljZSBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIG9yIHBsYXRmb3JtLXNwZWNpZmljIEF6dXJlIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzkuNDc0ODg4MjM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2b79[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 04:20:28 +0000 UTC FinishedAt: 2026-09-08 04:23:41 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgLyBQQ0kgZGV2aWNlIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgb3IgcGxhdGZvcm0tc3BlY2lmaWMgQXp1cmUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjI0ZDU3NzE3Nzc0ZWRmMzRmNWJlNWUxMTc1YWNjM2Q0MzA0MDBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6MjM6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuaW5kZXggZjkyYjJkMGJmOTI2ZS4uNzg0MjRlMWQ4ODRmMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuQEAgLTE2Miw2ICYjNDM7MTYyLDggQEAgc3RhdGljIGludCBtYW5hX2dkX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiB7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4mIzQzO1x0Ym9vbCBuZWVkX2xvZyA9IHRydWU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChlcnIgIT0gLUVUSU1FRE9VVClcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTY5LDExICYjNDM7MTcxLDEzIEBAIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiBcdGlmICghZ2MpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRpZiAoaHdjIFx1MDAyNlx1MDAyNiBod2MtXHUwMDNlaHdjX3RpbWVvdXQgPT0gMClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0bmVlZF9sb2cgPSBmYWxzZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gbmVlZF9sb2c7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTMzMSw3ICYjNDM7MzM1LDExIEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9od2NfdGltZW91dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICp0aW1lb3V0X3ZhbClcbiBcdGlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKVxuIFx0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVQUk9UTztcbiBcbi1cdCp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tcztcbiYjNDM7XHQvKiBLZWVwIHRoZSBjdXJyZW50IHRpbWVvdXQgb24gYSB6ZXJvIHF1ZXJ5IHJlcGx5LiBBc3luY2hyb25vdXNcbiYjNDM7XHQgKiBIV0NfREFUQV9DRkdfSFdDX1RJTUVPVVQgdXBkYXRlcyByZW1haW4gdW5maWx0ZXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmVzcC50aW1lb3V0X21zKVxuJiM0MztcdFx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM4Nyw5ICYjNDM7Mzk1LDI3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9kZXRlY3RfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgbWFuYV9nZF9zZW5kX3JlcXVlc3Qoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiByZXFfbGVuLCBjb25zdCB2b2lkICpyZXEsXG4gXHRcdFx0IHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcClcbiB7XG4tXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4mIzQzO1x0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IGVycjtcbiBcbi1cdHJldHVybiBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHRpZiAoIWh3Yykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyYjNDM7JiM0Mzs7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoLS1od2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMClcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2Z2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFwmIzM0O05FVF9NQU5BXCYjMzQ7KTtcbiBcbkBAIC03MTAsNiAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghZ2MpIHtcbkBAIC03MTksMTQgJiM0Mzs3NDYsMTcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmICghaHdjKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O01BTkEgc2VydmljZTogbm8gSFdDXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBIV0MgaXMgbm90IHJlc3BvbmRpbmcgaW4gdGhpcyBjYXNlLCBzbyBkb24mIzM5O3Qgd2FpdCAqL1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFOQSByZXNldCBjeWNsZSBzdGFydFxcblwmIzM0Oyk7XG4gXG5AQCAtMTIzMCwxNSAmIzQzOzEyNjAsMTcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9jcmVhdGVfY3EoY29uc3Qgc3RydWN0IGdkbWFfcXVldWVfc3BlYyAqc3BlYyxcbiBzdGF0aWMgdm9pZCBtYW5hX2dkX2Rlc3Ryb3lfY3Eoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgKipjcV90YWJsZSA9IFJFQURfT05DRShnYy1cdTAwM2VjcV90YWJsZSk7XG4gXHR1MzIgaWQgPSBxdWV1ZS1cdTAwM2VpZDtcbiBcbi1cdGlmIChpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuJiM0MztcdC8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi9cbiYjNDM7XHRpZiAoIWNxX3RhYmxlIHx8IGlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghZ2MtXHUwMDNlY3FfdGFibGVbaWRdKVxuJiM0MztcdGlmICghY3FfdGFibGVbaWRdKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xuJiM0MztcdGNxX3RhYmxlW2lkXSA9IE5VTEw7XG4gfVxuIFxuIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCxcbkBAIC0xMzMzLDYgJiM0MzsxMzY1LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsXG4gXHRpZiAoZ21pLVx1MDAzZW5yX3BhZ2VzID09IDAgXHUwMDI2XHUwMDI2ICFNQU5BX1BBR0VfQUxJR05FRChnbWktXHUwMDNldmlydF9hZGRyKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogVGhlIGNhbGxlciBtdXN0IGtlZXAgdGhlIEhXQyBhbGl2ZSB0aHJvdWdob3V0IHF1ZXVlIGNyZWF0aW9uLiAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0cmVxX21zZ19zaXplID0gc3RydWN0X3NpemUocmVxLCBwYWdlX2FkZHJfbGlzdCwgbnVtX3BhZ2UpO1xuIFx0aWYgKHJlcV9tc2dfc2l6ZSBcdTAwM2UgaHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemUpXG5AQCAtMTUzOCw3ICYjNDM7MTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBUaGUgc2V0dXAgY2FsbGVyIG11c3QgZXhjbHVkZSBjb25jdXJyZW50IEhXQyB0ZWFyZG93bi4gKi9cbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XG4gXHRtYW5hX2dkX2luaXRfcmVxX2hkcihcdTAwMjZyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTixcbiBcdFx0XHQgICAgIHNpemVvZihyZXEpLCBzaXplb2YocmVzcCkpO1xuIFxuQEAgLTI1MzIsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNmdjLVx1MDAzZWVxX3Rlc3RfZXZlbnRfbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VnaWNfbXV0ZXgpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7XG4gXHRnYy1cdTAwM2ViYXIwX3BhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xuIFx0Z2MtXHUwMDNlYmFyMF9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbmluZGV4IDI2M2U3YzRlMjkzNDEuLjc1MGVlOGY3Mjk5OTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuQEAgLTksMTcgJiM0Mzs5LDQ4IEBAXG4gc3RhdGljIGludCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2ICptc2dfaWQpXG4ge1xuIFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgKnIgPSBcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3JlcztcbiYjNDM7XHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1MzIgaW5kZXg7XG4gXG4tXHRkb3duKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiYjNDM7XHQvKiBGSUZPIHNsb3QgYWRtaXNzaW9uIGhhcyBhIHNlcGFyYXRlIGJ1ZGdldCBmcm9tIHRoZSByZXNwb25zZSB3YWl0LlxuJiM0MztcdCAqIEV4cGlyeSByZXBvcnRzIC1FVElNRURPVVQgZXZlbiB3aGlsZSBlYXJsaWVyIHJlcXVlc3RzIG1ha2UgcHJvZ3Jlc3MsXG4mIzQzO1x0ICogc28gY2FsbGVycyBtYXkgaW5pdGlhdGUgcmVjb3Zlcnkgb24gY29udGVudGlvbiBhbG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZG93bl90aW1lb3V0KFx1MDAyNmh3Yy1cdTAwM2VzZW1hLCBtc2Vjc190b19qaWZmaWVzKGh3Yy1cdTAwM2Vod2NfdGltZW91dCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXAsXG4tXHRcdFx0XHQgICAgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMuc2l6ZSk7XG4mIzQzO1x0aWYgKCFod2MtXHUwMDNlY2hhbm5lbF91cCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIHNlbWFwaG9yZSBhZG1pdHMgYXQgbW9zdCByLVx1MDAzZXNpemUgaG9sZGVycyBhdCBhIHRpbWUsIHNvIGEgc2xvdFxuJiM0MztcdCAqIGFjcXVpcmVkIGFib3ZlIGFsd2F5cyBoYXMgYSBmcmVlIGJpdCB3YWl0aW5nIGZvciBpdCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChyLVx1MDAzZW1hcCwgci1cdTAwM2VzaXplKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGluZGV4IFx1MDAzZT0gci1cdTAwM2VzaXplKSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiBcbi1cdGJpdG1hcF9zZXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XG4mIzQzO1x0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaW5kZXhdO1xuJiM0MztcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbiYjNDM7XHQvKiBUYWtlIGJvdGggcmVmZXJlbmNlcyAoc2VuZGVyICYjNDM7IGhhbmRsZV9yZXNwKSBiZWZvcmUgcHVibGlzaGluZyB0aGVcbiYjNDM7XHQgKiBzbG90LCBzbyBhbiBlYXJseSByZXNwb25zZSBjYW5ub3QgZnJlZSBpdCB1bmRlciB0aGUgc2VuZGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNlcmVmY250LCAyKTtcbiYjNDM7XHRjdHgtXHUwMDNlcmVzcG9uZGVkID0gZmFsc2U7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0Y3R4LVx1MDAzZW1zZ19pZCA9IGluZGV4O1xuJiM0MztcdGN0eC1cdTAwM2VlcnJvciA9IC1FSU5QUk9HUkVTUztcbiYjNDM7XG4mIzQzO1x0LyogUHVibGlzaCB0aGUgc2xvdCBsYXN0LCBhZnRlciBpdCBpcyBmdWxseSBpbml0aWFsaXNlZC4gKi9cbiYjNDM7XHRiaXRtYXBfc2V0KHItXHUwMDNlbWFwLCBpbmRleCwgMSk7XG4gXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTQwLDYgJiM0Mzs3MSwxMyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19wdXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IG1zZ19pZClcbiBcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiYjNDM7XHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cdTAwM2Vtc2dfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGNvbnN0IHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY2FsbGVyX2N0eCxcbiBcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqcmVzcF9tc2csXG4gXHRcdFx0XHQgICAgdTMyIHJlc3BfbGVuKVxuQEAgLTgxLDYgJiM0MzsxMTksNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqcmVzcF9tc2cgPSByeF9yZXEtXHUwMDNlYnVmX3ZhO1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4mIzQzO1x0Ym9vbCByZWxlYXNlO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XG5AQCAtOTAsMjIgJiM0MzsxMjksNTMgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7XG4tXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4gXG4tXHRjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPSByZXNwX21zZy1cdTAwM2VzdGF0dXM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1vdXQ6XG4mIzQzO1x0LyogVGhlIHNlbmRlciBoYXMgbm90IHB1Ymxpc2hlZCBpdHMgYnVmZmVyIHlldCwgc28gbm90aGluZyBhc2tlZCBmb3JcbiYjNDM7XHQgKiB0aGlzIHJlc3BvbnNlLiAgS2VlcCB0aGUgc2xvdCByZXNlcnZlZCBhbmQgZHJvcCB0aGUgbWVzc2FnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWN0eC1cdTAwM2VvdXRwdXRfYnVmIFx1MDAyNlx1MDAyNiAhY3R4LVx1MDAzZXJlc3BvbmRlZCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRha2UgdGhlIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIGF3YXkgZXhhY3RseSBvbmNlOiByZWxlYXNpbmcgaXRcbiYjNDM7XHQgKiBpcyB3aGF0IGZyZWVzIGEgc2xvdCB3aG9zZSBzZW5kZXIgaGFzIGFscmVhZHkgZ2l2ZW4gdXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVsZWFzZSA9IGN0eC1cdTAwM2VyZXNwX3BlbmRpbmc7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXJlc3BvbmRlZCkge1xuJiM0MztcdFx0LyogVGhlIHNlbmRlciB0aW1lZCBvdXQgYW5kIGFiYW5kb25lZCB0aGUgc2xvdCwgb3IgYSByZXNwb25zZVxuJiM0MztcdFx0ICogd2FzIGFscmVhZHkgYXBwbGllZC4gIENvbnN1bWUgdGhpcyBvbmUgd2l0aG91dCB3cml0aW5nXG4mIzQzO1x0XHQgKiBhbnl0aGluZywgdGhlbiByZWxlYXNlIHRoZSBzbG90IGl0IHdhcyBob2xkaW5nLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtXHUwMDNlcnhxLCByeF9yZXEpO1xuJiM0MztcdFx0aWYgKHJlbGVhc2UpXG4mIzQzO1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7XG4mIzQzO1x0aWYgKCFlcnIpIHtcbiYjNDM7XHRcdGN0eC1cdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRcdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbiYjNDM7XHR9XG4gXHRjdHgtXHUwMDNlZXJyb3IgPSBlcnI7XG4gXG4tXHQvKiBNdXN0IHBvc3Qgcnggd3FlIGJlZm9yZSBjb21wbGV0ZSgpLCBvdGhlcndpc2UgdGhlIG5leHQgcnggbWF5XG4tXHQgKiBoaXQgbm9fd3FlIGVycm9yLlxuJiM0MztcdC8qIFBvc3QgUlggV1FFIGJlZm9yZSBjb21wbGV0aW5nIOKAlCB0aGUgbmV4dCByZXNwb25zZSBtYXkgYXJyaXZlXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkgYW5kIG5lZWRzIGEgcG9zdGVkIGJ1ZmZlci5cbiBcdCAqL1xuIFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbi1cbiBcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZWxlYXNlKVxuJiM0MztcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxuQEAgLTE0Niw3ICYjNDM7MjE2LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSDpcbi1cdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDtcbiYjNDM7XHRcdFx0LyogSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyBhIDI0LWJpdCBmaWVsZC4gIEtlZXBcbiYjNDM7XHRcdFx0ICogdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlIGhlcmU7IGl0IGlzIGNsYW1wZWRcbiYjNDM7XHRcdFx0ICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlclxuJiM0MztcdFx0XHQgKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlZCB0byB1MTYuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSB2YWw7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDpcbkBAIC00NzYsNyAmIzQzOzU1MSwxMSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcbiBcdGRtYV9idWYtXHUwMDNlbnVtX3JlcXMgPSBxX2RlcHRoO1xuIFxuLVx0YnVmX3NpemUgPSBNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSk7XG4mIzQzO1x0LyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhc1xuJiM0MztcdCAqIGFscmVhZHkgYXNzdW1lZCBmb3IgdGhlIEVRIGFuZCBDUSByaW5ncyBhYm92ZS4gIFRoZSBzbG90cyBhcmVcbiYjNDM7XHQgKiBjYXJ2ZWQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLCBzbyBhbnkgdGFpbCBpcyB1bnVzZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnVmX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oTUFOQV9QQUdFX0FMSUdOKHFfZGVwdGggKiBtYXhfbXNnX3NpemUpKTtcbiBcbiBcdGdtaSA9IFx1MDAyNmRtYV9idWYtXHUwMDNlbWVtX2luZm87XG4gXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSwgZmFsc2UpO1xuQEAgLTU2MCw2ICYjNDM7NjM5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19jcmVhdGVfd3Eoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuIFx0aHdjX3dxLVx1MDAzZWdkbWFfd3EgPSBxdWV1ZTtcbiBcdGh3Y193cS1cdTAwM2VxdWV1ZV9kZXB0aCA9IHFfZGVwdGg7XG4gXHRod2Nfd3EtXHUwMDNlaHdjX2NxID0gaHdjX2NxO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh3Y193cS1cdTAwM2Vsb2NrKTtcbiBcbiBcdGVyciA9IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoaHdjLCBxX2RlcHRoLCBtYXhfbXNnX3NpemUsXG4gXHRcdFx0XHQgICAgIFx1MDAyNmh3Y193cS1cdTAwM2Vtc2dfYnVmKTtcbkBAIC01NzcsNyAmIzQzOzY1Nyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxuIFx0XHRcdFx0c3RydWN0IGh3Y193b3JrX3JlcXVlc3QgKnJlcSxcbiBcdFx0XHRcdHUzMiBkZXN0X3ZpcnRfcnFfaWQsIHUzMiBkZXN0X3ZpcnRfcmNxX2lkLFxuIFx0XHRcdFx0Ym9vbCBkZXN0X3BmKVxuQEAgLTYxNiw3ICYjNDM7Njk2LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmlubGluZV9vb2JfZGF0YSA9IHR4X29vYjtcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmNsaWVudF9kYXRhX3VuaXQgPSAwO1xuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZod2NfdHhxLVx1MDAzZWxvY2spO1xuIFx0ZXJyID0gbWFuYV9nZF9wb3N0X2FuZF9yaW5nKGh3Y190eHEtXHUwMDNlZ2RtYV93cSwgXHUwMDI2cmVxLVx1MDAzZXdxZV9yZXEsIE5VTEwpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0aWYgKGVycilcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3N0IFdRRSBvbiBIV0MgU1E6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02NDIsNiAmIzQzOzcyNSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLVx1MDAzZXJ4cTtcbiBcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGVycjtcbiBcdGludCBpO1xuIFxuQEAgLTY1NywxOCAmIzQzOzc0MSwzOCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFx0aWYgKCFjdHgpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcV9kZXB0aDsgJiM0MzsmIzQzO2kpXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcV9kZXB0aDsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmN0eFtpXS5sb2NrKTtcbiBcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eFtpXS5jb21wX2V2ZW50KTtcbiYjNDM7XHR9XG4gXG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcbiBcbi1cdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxKTtcbiYjNDM7XHQvKiBFbmFibGUgYWRtaXNzaW9uIGZvciB0aGUgdGVzdCBFUSByZXF1ZXN0LiAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IHRydWU7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyICpxX2RlcHRoLFxuIFx0XHRcdFx0ICAgICAgdTMyICptYXhfcmVxX21zZ19zaXplLFxuIFx0XHRcdFx0ICAgICAgdTMyICptYXhfcmVzcF9tc2dfc2l6ZSlcbiB7XG4mIzQzO1x0LyogbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkgZmlsbHMgdGhlIGJvb3RzdHJhcCBmaWVsZHMgZnJvbSBoYXJkXG4mIzQzO1x0ICogSVJRIG9uIEdETUFfRVFFX0hXQ19JTklUX0RBVEEgYW5kIHRoZW4gc2lnbmFscyBod2NfaW5pdF9lcWVfY29tcCBvblxuJiM0MztcdCAqIEdETUFfRVFFX0hXQ19JTklUX0RPTkUuICBUaGUgd2FpdF9mb3JfY29tcGxldGlvbigpIGJlbG93IHBhaXJzIHdpdGhcbiYjNDM7XHQgKiB0aGF0IGNvbXBsZXRlKCksIHNvIGV2ZXJ5IHZhbHVlIHN0b3JlZCBiZWZvcmUgSU5JVF9ET05FIGlzIG9yZGVyZWRcbiYjNDM7XHQgKiBhZ2FpbnN0IHRoZSByZWFkcyB0aGF0IGZvbGxvdyBpdCBoZXJlLlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnJxID0gaHdjLVx1MDAzZXJ4cS1cdTAwM2VnZG1hX3dxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVx1MDAzZXR4cS1cdTAwM2VnZG1hX3dxO1xuQEAgLTY3Niw2ICYjNDM7NzgwLDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcSA9IGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2NxO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBEbyBub3QgcmV1c2UgZGltZW5zaW9ucyBvciByb3V0aW5nIElEcyBmcm9tIGEgcHJldmlvdXMgZXN0YWJsaXNoLiAqL1xuJiM0MztcdGh3Yy1cdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IDA7XG4mIzQzO1x0aHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemUgPSAwO1xuJiM0MztcdGh3Yy1cdTAwM2Vod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZSA9IDA7XG4mIzQzO1x0Z2MtXHUwMDNlaHdjLmRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcbiYjNDM7XHRnYy1cdTAwM2Vod2MucGRpZCA9IElOVkFMSURfUERJRDtcbiYjNDM7XHRod2MtXHUwMDNlcGZfZGVzdF92cnFfaWQgPSAwO1xuJiM0MztcdGh3Yy1cdTAwM2VwZl9kZXN0X3ZyY3FfaWQgPSAwO1xuJiM0MztcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuIFxuIFx0ZXJyID0gbWFuYV9zbWNfc2V0dXBfaHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSxcbkBAIC02ODMsNyAmIzQzOzc5Niw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdFx0XHRcdCBjcS1cdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlLFxuIFx0XHRcdFx0IHJxLVx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGUsXG4gXHRcdFx0XHQgc3EtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZSxcbi1cdFx0XHRcdCBlcS1cdTAwM2VlcS5tc2l4X2luZGV4KTtcbiYjNDM7XHRcdFx0XHQgZXEtXHUwMDNlZXEubXNpeF9pbmRleCwgXHUwMDI2aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTY5NCw2ICYjNDM7ODA3LDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdCptYXhfcmVxX21zZ19zaXplID0gaHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XG4gXHQqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4mIzQzO1x0LyogUmVqZWN0IGEgbWlzc2luZyBkb29yYmVsbCBiZWZvcmUgdGhlIGNoYW5uZWwgdGVzdC4gVGhpcyBuZWl0aGVyXG4mIzQzO1x0ICogdmFsaWRhdGVzIGl0cyBCQVIgcmFuZ2Ugbm9yIHByb3RlY3RzIGVhcmxpZXIgSVJRIHJlYXJtaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChnYy1cdTAwM2Vod2MuZG9vcmJlbGwgPT0gSU5WQUxJRF9ET09SQkVMTCkge1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0M6IG5vIGRvb3JiZWxsIGluIGluaXQgZGF0YVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi9cbiBcdGlmIChXQVJOX09OKGNxLVx1MDAzZWlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbkBAIC03MTIsNiAmIzQzOzgzMywxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBDUSBkZXB0aCBpcyBxX2RlcHRoICogMiAoU1EgJiM0MzsgUlEpIHBhc3NlZCBhcyB1MTYgdG8gY3JlYXRlX2NxLlxuJiM0MztcdCAqIENhcCB0byBwcmV2ZW50IHUxNiB0cnVuY2F0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChxX2RlcHRoIFx1MDAzZSBVMTZfTUFYIC8gMilcbiYjNDM7XHRcdHFfZGVwdGggPSBVMTZfTUFYIC8gMjtcbiYjNDM7XG4gXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC03NTEsMTIgJiM0Mzs4NzgsNDQgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzOy8qIEJyaW5nLXVwIG9ubHk6IHJlcXVpcmVzIG5vIHNlbmRlcnMgb3IgY29uY3VycmVudCBsaWZlY3ljbGUgb3BlcmF0aW9ucy5cbiYjNDM7ICogVGhpcyBoZWxwZXIgZG9lcyBub3QgdW5wdWJsaXNoIHRoZSBIV0Mgb3IgZHJhaW4gc2VuZGVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIENRIGhlbHBlciBkZXJlZ2lzdGVycyB0aGUgSFdDIEVRIGJlZm9yZSByZXR1cm5pbmcuICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjcSkge1xuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV9jcShnYywgaHdjLVx1MDAzZWNxKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VjcSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4mIzQzO1x0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZXR4cSkge1xuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2V0eHEpO1xuJiM0MztcdFx0aHdjLVx1MDAzZXR4cSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZXJ4cSkge1xuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuJiM0MztcdFx0aHdjLVx1MDAzZXJ4cSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcyk7XG4mIzQzO1x0aHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemU7XG4gXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gXHUwMDI2Z2MtXHUwMDNlaHdjO1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuLVx0dTE2IHFfZGVwdGhfbWF4O1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlICoqb2xkX2NxX3RhYmxlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIHFfZGVwdGhfbWF4O1xuIFx0aW50IGVycjtcbiBcbiBcdGh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpO1xuQEAgLTc2NCwxMCAmIzQzOzkyMywxMSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Z2QtXHUwMDNlZ2RtYV9jb250ZXh0ID0gZ2M7XG4tXHRnZC1cdTAwM2Vkcml2ZXJfZGF0YSA9IGh3YztcbiBcdGh3Yy1cdTAwM2VnZG1hX2RldiA9IGdkO1xuIFx0aHdjLVx1MDAzZWRldiA9IGdjLVx1MDAzZWRldjtcbiBcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IEhXX0NIQU5ORUxfV0FJVF9SRVNPVVJDRV9USU1FT1VUX01TO1xuJiM0MztcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9IDA7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEpO1xuIFxuIFx0LyogSFdDJiMzOTtzIGluc3RhbmNlIG51bWJlciBpcyBhbHdheXMgMC4gKi9cbiBcdGdkLVx1MDAzZWRldl9pZC5hc191aW50MzIgPSAwO1xuQEAgLTc3Niw2ICYjNDM7OTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdGdkLVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gXHRnZC1cdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4gXG4mIzQzO1x0LyogUHVibGlzaCBmb3Igc2V0dXA7IHF1ZXVlIGluaXRpYWxpemF0aW9uIGJlbG93IG11c3QgcHJlY2VkZSBzZW5kZXJzLiAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gaHdjO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHQvKiBtYW5hX2h3Y19pbml0X3F1ZXVlcygpIG9ubHkgY3JlYXRlcyB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLFxuIFx0ICogYW5kIGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBIV0MgZGV2aWNlLlxuIFx0ICovXG5AQCAtNzk0LDggJiM0Mzs5NTksMTMyIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHFfZGVwdGhfbWF4IFx1MDAzZSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCkge1xuJiM0MztcdFx0LyogQm91bmQgRE1BIGFsbG9jYXRpb25zIGJlZm9yZSB1c2luZyB0aGUgMjQtYml0IGRlcHRoLiAqL1xuJiM0MztcdFx0aWYgKHFfZGVwdGhfbWF4IFx1MDAzZSBIV19DSEFOTkVMX01BWF9RVUVVRV9ERVBUSClcbiYjNDM7XHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX01BWF9RVUVVRV9ERVBUSDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBLZWVwIGJvb3RzdHJhcCBtZXNzYWdlIHNpemVzIGZvciBtYW5kYXRvcnkgY29tbWFuZHMuXG4mIzQzO1x0XHQgKiBJbmNvbXBhdGlibGUgcmVwb3J0cyBza2lwIHJlYnVpbGRpbmcsIG5vdCBjaGFubmVsIGNyZWF0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcbiYjNDM7XHRcdCAgICBtYXhfcmVzcF9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFIHx8XG4mIzQzO1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXFfbXNnX3NpemUgXHUwMDNlXG4mIzQzO1x0XHRcdFUzMl9NQVggLSBNQU5BX1BBR0VfU0laRSB8fFxuJiM0MztcdFx0ICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVzcF9tc2dfc2l6ZSBcdTAwM2VcbiYjNDM7XHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtIV0M6IGludmFsaWQgZGltcyBxPSV1IHJlcT0ldSByZXNwPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDtcbiYjNDM7XHRcdFx0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFVucHVibGlzaCB0aGUgQ1EgYW5kIGRyYWluIGl0cyBFUSBiZWZvcmUgZnJlZWluZyB0aGUgdGFibGUuICovXG4mIzQzO1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuJiM0MztcbiYjNDM7XHRcdG9sZF9jcV90YWJsZSA9IGdjLVx1MDAzZWNxX3RhYmxlO1xuJiM0MztcdFx0Z2MtXHUwMDNlY3FfdGFibGUgPSBOVUxMO1xuJiM0MztcdFx0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXG4mIzQzO1x0XHRcdFx0XHQgICBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgbWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWluaXQgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChxX2RlcHRoX21heCBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cgfHxcbiYjNDM7XHRcdCAgICAgbWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcbiYjNDM7XHRcdCAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHtcbiYjNDM7XHRcdFx0LyogVGhlIHJlYnVpbHQgY2hhbm5lbCBtdXN0IHN1cHBvcnQgdGhlIGFsbG9jYXRlZCBkZXB0aFxuJiM0MztcdFx0XHQgKiBhbmQgbWVzc2FnZSBzaXplcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtIV0M6IHJlYnVpbHQgcT0ldSByZXE9JXUgcmVzcD0ldSwgYnVpbHQgZm9yICV1LyV1LyV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplLCBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbiYjNDM7XHRcdFx0XHRIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXG4mIzQzO1x0XHRcdFx0SFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XG4mIzQzO1x0XHRcdGVyciA9IC1FUFJPVE87XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlLWVzdGFibGlzaCBIV0M6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGVycik7XG4mIzQzO1x0XHRcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XG4mIzQzO3JlaW5pdF9mYWxsYmFjazpcbiYjNDM7XHQvKiBBIGZhaWxlZCBoYW5kc2hha2UgbGVhdmVzIHF1ZXVlIG93bmVyc2hpcCB1bmNlcnRhaW4uICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpIHtcbiYjNDM7XHRcdGlmIChtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHRlYXIgZG93biBIV0MgYmVmb3JlIGJvb3RzdHJhcCBmYWxsYmFja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZhaWxlZCBlc3RhYmxpc2ggbWF5IG5vdCBoYXZlIGFsbG9jYXRlZCBjcV90YWJsZS4gKi9cbiYjNDM7XHRkZXZfd2Fybihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0MgcmVpbml0IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGJvb3RzdHJhcCBkZXB0aFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKGh3Yyk7XG4mIzQzO1xuJiM0MztcdG9sZF9jcV90YWJsZSA9IGdjLVx1MDAzZWNxX3RhYmxlO1xuJiM0MztcdGdjLVx1MDAzZWNxX3RhYmxlID0gTlVMTDtcbiYjNDM7XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0dmZyZWUob2xkX2NxX3RhYmxlKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcbiYjNDM7XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXG4mIzQzO1x0XHRcdFx0ICAgSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LCBcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8XG4mIzQzO1x0ICAgICBtYXhfcmVzcF9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFKSkge1xuJiM0MztcdFx0LyogVGhlIHJlc3RvcmVkIGNoYW5uZWwgbXVzdCByZXBvcnQgdGhlIGFsbG9jYXRlZCBtZXNzYWdlIHNpemVzLiAqL1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0M6IGJvb3RzdHJhcCByZXBvcnRzIHJlcT0ldSByZXNwPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVycik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0Mztza2lwX3JlaW5pdDpcbiYjNDM7XG4gXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxuLVx0XHRcdFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuJiM0MztcdFx0XHRcdCAgICBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbiBcdFx0XHRcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC04MTAsMTggJiM0MzsxMDk5LDcxIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcbiB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4mIzQzO1x0LyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFod2MpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIGdjLVx1MDAzZW1heF9udW1fY3FzIGlzIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gSWYgaXQmIzM5O3Ncbi1cdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXG4mIzQzO1x0LyogTm9uemVybyBudW1faW5mbGlnaHRfbXNnIG1lYW5zIHF1ZXVlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZC4gKi9cbiYjNDM7XHRpZiAoaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEJsb2NrIG5ldyBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIHJlZmVyZW5jZXMgYmVmb3JlIGRyYWluaW5nLiAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIENvbXBsZXRlIG9jY3VwaWVkIHNsb3RzIGFuZCBkcm9wIHBlbmRpbmcgcmVzcG9uc2Utc2lkZSByZWZlcmVuY2VzLiAqL1xuJiM0MztcdGlmIChod2MtXHUwMDNlY2FsbGVyX2N0eCkge1xuJiM0MztcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4mIzQzO1x0XHRib29sIGRyb3BfcmVzcF9yZWY7XG4mIzQzO1x0XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaV07XG4mIzQzO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHQvKiBQcmVzZXJ2ZSBhbiBhbHJlYWR5IHJlY29yZGVkIHJlc3VsdC4gKi9cbiYjNDM7XHRcdFx0aWYgKCFjdHgtXHUwMDNlcmVzcG9uZGVkKVxuJiM0MztcdFx0XHRcdGN0eC1cdTAwM2VlcnJvciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlcmVzcF9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRcdGN0eC1cdTAwM2VyZXNwb25kZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChkcm9wX3Jlc3BfcmVmKVxuJiM0MztcdFx0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBhaXIgd2l0aCB0aGUgbGFzdCBzZW5kZXImIzM5O3Mgd2FrZXVwIHVuZGVyIGh3Y19sb2NrLCBzbyBpdCBmaW5pc2hlc1xuJiM0MztcdCAqIGFjY2Vzc2luZyBnYyBiZWZvcmUgdGhlIGRyYWluIHJldHVybnMuXG4gXHQgKi9cbi1cdGlmIChnYy1cdTAwM2VtYXhfbnVtX2NxcyBcdTAwM2UgMCkge1xuLVx0XHRtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbi1cdFx0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuJiM0MztcdFx0XHQgICAgaHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID09IDAsIGdjLVx1MDAzZWh3Y19sb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZXNldHVwX2FjdGl2ZSkge1xuJiM0MztcdFx0aWYgKCFtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSlcbiYjNDM7XHRcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byB0ZWFyIGRvd24gSFdDXFxuXCYjMzQ7KTtcbiBcdH1cbiYjNDM7XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIERlcmVnaXN0ZXIgdGhlIEhXQyBFUSBiZWZvcmUgZnJlZWluZyB0aGUgd29yayBxdWV1ZXMuICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjcSlcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVx1MDAzZWNxKTtcbiBcbiBcdGlmIChod2MtXHUwMDNldHhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG5AQCAtODI5LDggJiM0MzsxMTcxLDE4IEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aWYgKGh3Yy1cdTAwM2VyeHEpXG4gXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNlcnhxKTtcbiBcbi1cdGlmIChod2MtXHUwMDNlY3EpXG4tXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVx1MDAzZWNxKTtcbiYjNDM7XHRpZiAoaHdjLVx1MDAzZWNhbGxlcl9jdHgpIHtcbiYjNDM7XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuJiM0MztcdFx0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0a2ZyZWUoaHdjLVx1MDAzZWNhbGxlcl9jdHgpO1xuIFx0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBOVUxMO1xuQEAgLTg0NSw3ICYjNDM7MTE5Nyw2IEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiBcbiBcdGtmcmVlKGh3Yyk7XG4tXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0Z2MtXHUwMDNlaHdjLmdkbWFfY29udGV4dCA9IE5VTEw7XG4gXG4gXHR2ZnJlZShnYy1cdTAwM2VjcV90YWJsZSk7XG5AQCAtODYwLDEzICYjNDM7MTIxMSwyMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRzdHJ1Y3QgaHdjX3dxICp0eHEgPSBod2MtXHUwMDNldHhxO1xuIFx0c3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZztcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCBkcm9wX3Jlc3BfcmVmO1xuJiM0MztcdGJvb2wgYWJhbmRvbmVkID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBjYW5jZWxsZWQ7XG4gXHR1MzIgZGVzdF92cmNxID0gMDtcbiBcdHUzMiBkZXN0X3ZycSA9IDA7XG4gXHR1MzIgY29tbWFuZDtcbiYjNDM7XHR1MzIgc3RhdHVzO1xuJiM0MztcdHUzMiB3YWl0X21zO1xuIFx0dTE2IG1zZ19pZDtcbiBcdGludCBlcnI7XG4gXG4tXHRtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHR4X3dyID0gXHUwMDI2dHhxLVx1MDAzZW1zZ19idWYtXHUwMDNlcmVxc1ttc2dfaWRdO1xuIFxuQEAgLTg3OCw4ICYjNDM7MTIzNywxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IHJlc3A7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZmxlbiA9IHJlc3BfbGVuO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJlcV9tc2cgPSAoc3RydWN0IGdkbWFfcmVxX2hkciAqKXR4X3dyLVx1MDAzZWJ1Zl92YTtcbiBcdGlmIChyZXEpXG5AQCAtODk1LDQzICYjNDM7MTI1NywxMTQgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0XHRkZXN0X3ZyY3EgPSBod2MtXHUwMDNlcGZfZGVzdF92cmNxX2lkO1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSwgZmFsc2UpO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBjYW5jZWxsYXRpb24gd2l0aCBzdWJtaXNzaW9uLiBBbiB1bnN1Ym1pdHRlZCByZXF1ZXN0XG4mIzQzO1x0ICogY2Fubm90IHN1Y2NlZWQsIGV2ZW4gaWYgYW4gdW5zb2xpY2l0ZWQgcmVzcG9uc2Ugd2FzIGFjY2VwdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y2FuY2VsbGVkID0gY3R4LVx1MDAzZXJlc3BvbmRlZDtcbiYjNDM7XHRpZiAoY2FuY2VsbGVkKVxuJiM0MztcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yID86IC1FUFJPVE87XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSxcbiYjNDM7XHRcdFx0XHRcdCAgIGZhbHNlKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChjYW5jZWxsZWQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDOiBGYWlsZWQgdG8gcG9zdCBzZW5kIFdRRTogJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdHdhaXRfbXMgPSBod2MtXHUwMDNlaHdjX3RpbWVvdXQ7XG4gXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCxcbi1cdFx0XHRcdFx0IChtc2Vjc190b19qaWZmaWVzKGh3Yy1cdTAwM2Vod2NfdGltZW91dCkpKSkge1xuLVx0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lb3V0ICE9IDApXG4tXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcblwmIzM0Oyxcbi1cdFx0XHRcdGNvbW1hbmQsIGh3Yy1cdTAwM2Vod2NfdGltZW91dCk7XG4mIzQzO1x0XHRcdFx0XHQgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSkpIHtcbiYjNDM7XHRcdC8qIENsZWFyIG91dHB1dF9idWYgc28gYSBsYXRlIHJlc3BvbnNlIGNhbm5vdCB3cml0ZSB0aGUgY2FsbGVyJiMzOTtzXG4mIzQzO1x0XHQgKiBidWZmZXIsIHRoZW4gY2hlY2sgd2hldGhlciBvbmUgYWxyZWFkeSBhcnJpdmVkXG4mIzQzO1x0XHQgKiAoZXJyb3IgIT0gLUVJTlBST0dSRVNTKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbiYjNDM7XHRcdGVyciA9IGN0eC1cdTAwM2VlcnJvcjtcbiYjNDM7XHRcdHN0YXR1cyA9IGN0eC1cdTAwM2VzdGF0dXNfY29kZTtcbiYjNDM7XHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4mIzQzO1x0XHRcdC8qIFB1Ymxpc2ggYWJhbmRvbm1lbnQgd2l0aCBidWZmZXIgd2l0aGRyYXdhbCBzbyBhIGxhdGVcbiYjNDM7XHRcdFx0ICogcmVzcG9uc2UgY2FuIHJlY2xhaW0gdGhlIHNsb3QuIEtlZXAgaXRzIHJlZmVyZW5jZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGN0eC1cdTAwM2VyZXNwb25kZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRhYmFuZG9uZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYWJhbmRvbmVkKSB7XG4mIzQzO1x0XHRcdC8qIEEgY29tcGxldGlvbiB3b24gdGhlIHJhY2Ugd2l0aCB0aW1lb3V0OyB1c2UgaXRzIHJlc3VsdC4gKi9cbiYjNDM7XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3N0YXR1cztcbiYjNDM7XHRcdH1cbiBcbi1cdFx0LyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi9cbi1cdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCBcdTAwM2UgMSlcbi1cdFx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAxO1xuJiM0MztcdFx0aWYgKHdhaXRfbXMgIT0gMCkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0NvbW1hbmQgMHgleCB0aW1lZCBvdXQ6ICV1IG1zXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGNvbW1hbmQsIHdhaXRfbXMpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogR2VudWluZSB0aW1lb3V0OiBzaG9ydGVuIGxhdGVyIHdhaXRzIHNvIHN1YnNlcXVlbnRcbiYjNDM7XHRcdFx0ICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGVcbiYjNDM7XHRcdFx0ICogZnVsbCB0aW1lb3V0LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAxO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbi1cdGlmIChjdHgtXHUwMDNlZXJyb3IpIHtcbi1cdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdC8qIERyb3Agb25seSB0aGUgc2VuZGVyJiMzOTtzIHJlZmVyZW5jZTsgdGhlIHJlc3BvbnNlLXNpZGUgb25lIGlzXG4mIzQzO1x0XHQgKiB3aGF0IGtlZXBzIHRoZSBzbG90IHJlc2VydmVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4gXG4tXHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc3RhdHVzX2NvZGUgIT0gR0RNQV9TVEFUVVNfTU9SRV9FTlRSSUVTKSB7XG4tXHRcdGlmIChjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XG4mIzQzO1x0LyogQ2xlYXIgb3V0cHV0X2J1ZiBhbmQgcmVhZCB0aGUgcmVzdWx0IHVuZGVyIHRoZSBsb2NrOyB0aGUgc2xvdCBtYXlcbiYjNDM7XHQgKiBiZSByZXVzZWQgYWZ0ZXIgaHdjX2N0eF9wdXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbiYjNDM7XHRlcnIgPSBjdHgtXHUwMDNlZXJyb3I7XG4mIzQzO1x0c3RhdHVzID0gY3R4LVx1MDAzZXN0YXR1c19jb2RlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4mIzQzO1xuJiM0MztjaGVja19zdGF0dXM6XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuJiM0MztcdFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4mIzQzO1xuIFx0XHRpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKVxuIFx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7Q29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxcblwmIzM0Oyxcbi1cdFx0XHRcdGNvbW1hbmQsIGN0eC1cdTAwM2VzdGF0dXNfY29kZSk7XG4mIzQzO1x0XHRcdFx0Y29tbWFuZCwgc3RhdHVzKTtcbiBcdFx0ZXJyID0gLUVQUk9UTztcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0Z290byBkb25lO1xuIG91dDpcbi1cdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xuJiM0MztcdC8qIFJlbGVhc2UgYW55IHJlZmVyZW5jZXMgc3RpbGwgaGVsZCBieSB0aGlzIHVuc3VibWl0dGVkIHJlcXVlc3QuICovXG4mIzQzO1x0Y3R4ID0gaHdjLVx1MDAzZWNhbGxlcl9jdHggJiM0MzsgbXNnX2lkO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y3R4LVx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xuJiM0MztcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuJiM0MztcdGN0eC1cdTAwM2VyZXNwX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRjdHgtXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGRyb3BfcmVzcF9yZWYpXG4mIzQzO1x0XHRyZWZjb3VudF9kZWMoXHUwMDI2Y3R4LVx1MDAzZXJlZmNudCk7XG4mIzQzO1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0Mztkb25lOlxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcbmluZGV4IGQyMWI1ZGIwNmU1MDkuLjNjZjZhOWY4ZTMyYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jXG5AQCAtMTI5LDkgJiM0MzsxMjksMTIgQEAgdm9pZCBtYW5hX3NtY19pbml0KHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHNjLVx1MDAzZWJhc2UgPSBiYXNlO1xuIH1cbiBcbiYjNDM7LyogUmVxdWlyZXMgbm8gb3V0c3RhbmRpbmcgSFdDIGhhbmRvdmVyLiAqc3VibWl0dGVkIHJlY29yZHMgcG9zc2libGUgUEZcbiYjNDM7ICogb3duZXJzaGlwLCBpbmNsdWRpbmcgd2hlbiBzZXR1cCBmYWlscyBhZnRlciBzdWJtaXNzaW9uLlxuJiM0MzsgKi9cbiBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxuIFx0XHQgICAgICAgdTY0IGNxX2FkZHIsIHU2NCBycV9hZGRyLCB1NjQgc3FfYWRkcixcbi1cdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4KVxuJiM0MztcdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpXG4ge1xuIFx0dW5pb24gc21jX3Byb3RvX2hkciAqaGRyO1xuIFx0dTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7XG5AQCAtMTQ0LDYgJiM0MzsxNDcsOCBAQCBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxuIFx0aW50IGVycjtcbiBcdGludCBpO1xuIFxuJiM0MztcdCpzdWJtaXR0ZWQgPSBmYWxzZTtcbiYjNDM7XG4gXHQvKiBFbnN1cmUgVkYgYWxyZWFkeSBoYXMgcG9zc2Vzc2lvbiBvZiBzaGFyZWQgbWVtb3J5ICovXG4gXHRlcnIgPSBtYW5hX3NtY19wb2xsX3JlZ2lzdGVyKHNjLVx1MDAzZWJhc2UsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yMjksNiAmIzQzOzIzNCw3IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXG4gXHQvKiBXcml0ZSAyNTYtbWVzc2FnZSBidWZmZXIgdG8gc2hhcmVkIG1lbW9yeSAoZmluYWwgMzItYml0IHdyaXRlXG4gXHQgKiB0cmlnZ2VycyBIVyB0byBzZXQgcG9zc2Vzc2lvbiBiaXQgdG8gUEYpLlxuIFx0ICovXG4mIzQzO1x0KnN1Ym1pdHRlZCA9IHRydWU7XG4gXHRkd29yZCA9ICh1MzIgKilzaG1fYnVmO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgU01DX0FQRVJUVVJFX0RXT1JEUzsgaSYjNDM7JiM0MzspXG4gXHRcdHdyaXRlbCgqZHdvcmQmIzQzOyYjNDM7LCBzYy1cdTAwM2ViYXNlICYjNDM7IGkgKiBTTUNfQkFTSUNfVU5JVCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggMzA4OTUwZjliNTRiMC4uMjJkZDdjOWNlY2M4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTQ2OCw2ICYjNDM7NDY4LDE1IEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0aHdjO1xuIFxuJiM0MztcdC8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqL1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90XHRod2NfZHJhaW5fd2FpdHE7XG4mIzQzO1xuJiM0MztcdC8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpblxuJiM0MztcdCAqIG1hbmFfbmVlZF9sb2coKS9tYW5hX3NlcnZfcmVzZXQoKS4gU2V0dXAgYW5kIERNQS1yZWdpb24gcmVhZGVyc1xuJiM0MztcdCAqIHN0aWxsIHJlcXVpcmUgbGlmZWN5Y2xlIG9yZGVyaW5nLiBOb3QgYWxsIHRpbWVvdXQgd3JpdGVycyB1c2UgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3BpbmxvY2tfdFx0XHRod2NfbG9jaztcbiYjNDM7XG4gXHQvKiBBenVyZSBuZXR3b3JrIGFkYXB0ZXIgKi9cbiBcdHN0cnVjdCBnZG1hX2Rldlx0XHRtYW5hO1xuIFxuQEAgLTY4Myw2ICYjNDM7NjkyLDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqL1xuJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpXG4mIzQzO1xuIC8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuIFxuQEAgLTcwMSw2ICYjNDM7NzEzLDcgQEAgZW51bSB7XG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9QUk9CRV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IQU5ETEVfU1RBTExfU1FfUkVDT1ZFUlkgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxuJiM0MztcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmggYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuaW5kZXggMTZmZWIzOTYxNmMxYi4uZGZkOTIzMzZiMmI0ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuQEAgLTExLDYgJiM0MzsxMSwxMyBAQFxuIFxuICNkZWZpbmUgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEggMVxuIFxuJiM0MzsvKiBVcHBlciBib3VuZCBvbiB0aGUgZGV2aWNlLXJlcG9ydGVkIEhXQyBxdWV1ZSBkZXB0aC4gIFRoZSBIV0MgaXMgYVxuJiM0MzsgKiBjb250cm9sIGNoYW5uZWwsIHNvIGEgbW9kZXN0IGRlcHRoIGFscmVhZHkga2VlcHMgZW5vdWdoIG1hbmFnZW1lbnRcbiYjNDM7ICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUFcbiYjNDM7ICogYnVmZmVycyBvZiBxX2RlcHRoICogbWF4X21zZ19zaXplIGJ5dGVzIGVhY2guXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOFxuJiM0MztcbiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfQ1FJRFx0XHQxXG4gI2RlZmluZSBIV0NfSU5JVF9EQVRBX1JRSURcdFx0MlxuICNkZWZpbmUgSFdDX0lOSVRfREFUQV9TUUlEXHRcdDNcbkBAIC0xNjQsNiAmIzQzOzE3MSw5IEBAIHN0cnVjdCBod2Nfd3Ege1xuIFx0dTE2IHF1ZXVlX2RlcHRoO1xuIFxuIFx0c3RydWN0IGh3Y19jcSAqaHdjX2NxO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJpYWxpemVzIFNRIHBvc3Rpbmc7IHVudXNlZCBmb3IgdGhlIFJRLiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiB9O1xuIFxuIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XG5AQCAtMTcxLDggJiM0MzsxODEsMjcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcbiBcdHZvaWQgKm91dHB1dF9idWY7XG4gXHR1MzIgb3V0cHV0X2J1ZmxlbjtcbiBcbi1cdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xuJiM0MztcdGludCBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAobmVnYXRpdmUgZXJybm8gb3IgMCkgKi9cbiBcdHUzMiBzdGF0dXNfY29kZTtcbiYjNDM7XG4mIzQzO1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbiYjNDM7XHQgKiBoYW5kbGVfcmVzcCgpIChDUSBpbnRlcnJ1cHQpIGFuZCB0aGUgc2VuZGVyIHRpbWVvdXQgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1xuJiM0MztcdC8qIFRyYWNrcyBzZW5kZXIgJiM0MzsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4mIzQzO1x0ICogKHJlZmNvdW50IHJlYWNoZXMgMCkgcmVsZWFzZXMgdGhlIGJpdG1hcCBzbG90LlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY250O1xuJiM0MztcdHUxNiBtc2dfaWQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBieSB0aGUgZmlyc3QgaGFuZGxlX3Jlc3AoKSwgb3IgYnkgdGhlIHNlbmRlciYjMzk7cyB0aW1lb3V0IHBhdGgsXG4mIzQzO1x0ICogc28gYSBsYXRlciBvciBkdXBsaWNhdGUgcmVzcG9uc2UgaXMgZHJvcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHJlc3BvbmRlZDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzcG9uc2Utc2lkZSByZWZlcmVuY2Ugb3V0c3RhbmRpbmc7IHByb3RlY3RlZCBieSBsb2NrLiAqL1xuJiM0MztcdGJvb2wgcmVzcF9wZW5kaW5nO1xuIH07XG4gXG4gc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG5AQCAtMTgwLDkgJiM0MzsyMDksMTAgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG4gXHR1MTYgbnVtX2luZmxpZ2h0X21zZztcbiYjNDM7XG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZTtcbiBcbi1cdHUxNiBod2NfaW5pdF9xX2RlcHRoX21heDtcbiYjNDM7XHR1MzIgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4gXHR1MzIgaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTtcbiBcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcbiBcbkBAIC0xOTIsNiAmIzQzOzIyMiw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFx0c3RydWN0IGh3Y193cSAqdHhxO1xuIFx0c3RydWN0IGh3Y19jcSAqY3E7XG4gXG4mIzQzO1x0LyogQWRtaXNzaW9uIHBlcm1pdHMuIFRpbWVkLW91dCByZXF1ZXN0cyByZXRhaW4gdGhlaXJzIHVudGlsIGFcbiYjNDM7XHQgKiByZXNwb25zZSBvciB0ZWFyZG93biByZWxlYXNlcyB0aGUgc2xvdC5cbiYjNDM7XHQgKi9cbiBcdHN0cnVjdCBzZW1hcGhvcmUgc2VtYTtcbiBcdHN0cnVjdCBnZG1hX3Jlc291cmNlIGluZmxpZ2h0X21zZ19yZXM7XG4gXG5AQCAtMTk5LDYgJiM0MzsyMzIsMTUgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG4gXHR1MzIgcGZfZGVzdF92cmNxX2lkO1xuIFx0dTMyIGh3Y190aW1lb3V0O1xuIFxuJiM0MztcdC8qIENoZWNrZWQgYWZ0ZXIgc2xvdCBhY3F1aXNpdGlvbjsgY2xlYXJlZCBvbiB0ZWFyZG93biB0byByZWplY3Qgc2VuZHMuICovXG4mIzQzO1x0Ym9vbCBjaGFubmVsX3VwO1xuJiM0MztcbiYjNDM7XHQvKiBQRiBtYXkgb3duIHRoZSBxdWV1ZSBtYXBwaW5nczsgc3RhdGUgbGFzdHMgb25seSBmb3IgdGhpcyBjb250ZXh0LiAqL1xuJiM0MztcdGJvb2wgc2V0dXBfYWN0aXZlO1xuJiM0MztcbiYjNDM7XHQvKiBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIGNhbGxlcnMsIGluY2x1ZGluZyB3YWl0ZXJzOyB1bmRlciBod2NfbG9jay4gKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7XG4mIzQzO1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG5pbmRleCBkYmFiY2ZiOTVkYWYzLi5lOTYzODdkNzk1MjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcbkBAIC0yMCw3ICYjNDM7MjAsNyBAQCB2b2lkIG1hbmFfc21jX2luaXQoc3RydWN0IHNobV9jaGFubmVsICpzYywgc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXG4gXHRcdCAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLFxuLVx0XHQgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpO1xuJiM0MztcdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpO1xuIFxuIGludCBtYW5hX3NtY190ZWFyZG93bl9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92Zik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgLyBQQ0kgZGV2aWNlIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgb3IgcGxhdGZvcm0tc3BlY2lmaWMgQXp1cmUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI0ZDU3NzE3Nzc0ZWRmMzRmNWJlNWUxMTc1YWNjM2Q0MzA0MDBlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDQ6MjM6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCmluZGV4IGY5MmIyZDBiZjkyNmUuLjc4NDI0ZTFkODg0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycikKIHsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CWJvb2wgbmVlZF9sb2cgPSB0cnVlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGVyciAhPSAtRVRJTUVET1VUKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2OSwxMSAmIzQzOzE3MSwxMyBAQCBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpCiAJaWYgKCFnYykKIAkJcmV0dXJuIHRydWU7CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmIChod2MgJmFtcDsmYW1wOyBod2MtJmd0O2h3Y190aW1lb3V0ID09IDApCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCW5lZWRfbG9nID0gZmFsc2U7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gbmVlZF9sb2c7CiB9CiAKIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzMxLDcgJiM0MzszMzUsMTEgQEAgc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X2h3Y190aW1lb3V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKnRpbWVvdXRfdmFsKQogCWlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKQogCQlyZXR1cm4gZXJyID8gZXJyIDogLUVQUk9UTzsKIAotCSp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tczsKJiM0MzsJLyogS2VlcCB0aGUgY3VycmVudCB0aW1lb3V0IG9uIGEgemVybyBxdWVyeSByZXBseS4gQXN5bmNocm9ub3VzCiYjNDM7CSAqIEhXQ19EQVRBX0NGR19IV0NfVElNRU9VVCB1cGRhdGVzIHJlbWFpbiB1bmZpbHRlcmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlc3AudGltZW91dF9tcykKJiM0MzsJCSp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tczsKIAogCXJldHVybiAwOwogfQpAQCAtMzg3LDkgJiM0MzszOTUsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLAogCQkJIHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcCkKIHsKLQlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwomIzQzOwlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBlcnI7CiAKLQlyZXR1cm4gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlod2MtJmd0O2FjdGl2ZV9zZW5kZXJzJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKC0taHdjLSZndDthY3RpdmVfc2VuZGVycyA9PSAwKQomIzQzOwkJd2FrZV91cCgmYW1wO2djLSZndDtod2NfZHJhaW5fd2FpdHEpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCAmIzM0O05FVF9NQU5BJiMzNDspOwogCkBAIC03MTAsNiAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghZ2MpIHsKQEAgLTcxOSwxNCAmIzQzOzc0NiwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSBzZXJ2aWNlOiBubyBIV0NcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJiMzOTt0IHdhaXQgKi8KIAlod2MtJmd0O2h3Y190aW1lb3V0ID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwogCiAJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSByZXNldCBjeWNsZSBzdGFydFxuJiMzNDspOwogCkBAIC0xMjMwLDE1ICYjNDM7MTI2MCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLAogc3RhdGljIHZvaWQgbWFuYV9nZF9kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLAogCQkJICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSkKIHsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKipjcV90YWJsZSA9IFJFQURfT05DRShnYy0mZ3Q7Y3FfdGFibGUpOwogCXUzMiBpZCA9IHF1ZXVlLSZndDtpZDsKIAotCWlmIChpZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpCiYjNDM7CS8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi8KJiM0MzsJaWYgKCFjcV90YWJsZSB8fCBpZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpCiAJCXJldHVybjsKIAotCWlmICghZ2MtJmd0O2NxX3RhYmxlW2lkXSkKJiM0MzsJaWYgKCFjcV90YWJsZVtpZF0pCiAJCXJldHVybjsKIAotCWdjLSZndDtjcV90YWJsZVtpZF0gPSBOVUxMOwomIzQzOwljcV90YWJsZVtpZF0gPSBOVUxMOwogfQogCiBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsCkBAIC0xMzMzLDYgJiM0MzsxMzY1LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsCiAJaWYgKGdtaS0mZ3Q7bnJfcGFnZXMgPT0gMCAmYW1wOyZhbXA7ICFNQU5BX1BBR0VfQUxJR05FRChnbWktJmd0O3ZpcnRfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qIFRoZSBjYWxsZXIgbXVzdCBrZWVwIHRoZSBIV0MgYWxpdmUgdGhyb3VnaG91dCBxdWV1ZSBjcmVhdGlvbi4gKi8KIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCXJlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKHJlcSwgcGFnZV9hZGRyX2xpc3QsIG51bV9wYWdlKTsKIAlpZiAocmVxX21zZ19zaXplICZndDsgaHdjLSZndDttYXhfcmVxX21zZ19zaXplKQpAQCAtMTUzOCw3ICYjNDM7MTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YzsKIAlpbnQgZXJyOwogCiYjNDM7CS8qIFRoZSBzZXR1cCBjYWxsZXIgbXVzdCBleGNsdWRlIGNvbmN1cnJlbnQgSFdDIHRlYXJkb3duLiAqLwogCWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CiAJbWFuYV9nZF9pbml0X3JlcV9oZHIoJmFtcDtyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTiwKIAkJCSAgICAgc2l6ZW9mKHJlcSksIHNpemVvZihyZXNwKSk7CiAKQEAgLTI1MzIsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAltdXRleF9pbml0KCZhbXA7Z2MtJmd0O2VxX3Rlc3RfZXZlbnRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtnYy0mZ3Q7Z2ljX211dGV4KTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtnYy0mZ3Q7aHdjX2xvY2spOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7CiAJZ2MtJmd0O2JhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJZ2MtJmd0O2JhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKaW5kZXggMjYzZTdjNGUyOTM0MS4uNzUwZWU4ZjcyOTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYwpAQCAtOSwxNyAmIzQzOzksNDggQEAKIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKQogewogCXN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXM7CiYjNDM7CXN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGluZGV4OwogCi0JZG93bigmYW1wO2h3Yy0mZ3Q7c2VtYSk7CiYjNDM7CS8qIEZJRk8gc2xvdCBhZG1pc3Npb24gaGFzIGEgc2VwYXJhdGUgYnVkZ2V0IGZyb20gdGhlIHJlc3BvbnNlIHdhaXQuCiYjNDM7CSAqIEV4cGlyeSByZXBvcnRzIC1FVElNRURPVVQgZXZlbiB3aGlsZSBlYXJsaWVyIHJlcXVlc3RzIG1ha2UgcHJvZ3Jlc3MsCiYjNDM7CSAqIHNvIGNhbGxlcnMgbWF5IGluaXRpYXRlIHJlY292ZXJ5IG9uIGNvbnRlbnRpb24gYWxvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoZG93bl90aW1lb3V0KCZhbXA7aHdjLSZndDtzZW1hLCBtc2Vjc190b19qaWZmaWVzKGh3Yy0mZ3Q7aHdjX3RpbWVvdXQpKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiAKLQlpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLm1hcCwKLQkJCQkgICAgaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLnNpemUpOwomIzQzOwlpZiAoIWh3Yy0mZ3Q7Y2hhbm5lbF91cCkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXVwKCZhbXA7aHdjLSZndDtzZW1hKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBzZW1hcGhvcmUgYWRtaXRzIGF0IG1vc3Qgci0mZ3Q7c2l6ZSBob2xkZXJzIGF0IGEgdGltZSwgc28gYSBzbG90CiYjNDM7CSAqIGFjcXVpcmVkIGFib3ZlIGFsd2F5cyBoYXMgYSBmcmVlIGJpdCB3YWl0aW5nIGZvciBpdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItJmd0O21hcCwgci0mZ3Q7c2l6ZSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoaW5kZXggJmd0Oz0gci0mZ3Q7c2l6ZSkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl1cCgmYW1wO2h3Yy0mZ3Q7c2VtYSk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQogCi0JYml0bWFwX3NldChod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7CiYjNDM7CWN0eCA9ICZhbXA7aHdjLSZndDtjYWxsZXJfY3R4W2luZGV4XTsKJiM0MzsJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtjdHgtJmd0O2NvbXBfZXZlbnQpOwomIzQzOwkvKiBUYWtlIGJvdGggcmVmZXJlbmNlcyAoc2VuZGVyICYjNDM7IGhhbmRsZV9yZXNwKSBiZWZvcmUgcHVibGlzaGluZyB0aGUKJiM0MzsJICogc2xvdCwgc28gYW4gZWFybHkgcmVzcG9uc2UgY2Fubm90IGZyZWUgaXQgdW5kZXIgdGhlIHNlbmRlci4KJiM0MzsJICovCiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2N0eC0mZ3Q7cmVmY250LCAyKTsKJiM0MzsJY3R4LSZndDtyZXNwb25kZWQgPSBmYWxzZTsKJiM0MzsJY3R4LSZndDtyZXNwX3BlbmRpbmcgPSB0cnVlOwomIzQzOwljdHgtJmd0O21zZ19pZCA9IGluZGV4OwomIzQzOwljdHgtJmd0O2Vycm9yID0gLUVJTlBST0dSRVNTOwomIzQzOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBzbG90IGxhc3QsIGFmdGVyIGl0IGlzIGZ1bGx5IGluaXRpYWxpc2VkLiAqLwomIzQzOwliaXRtYXBfc2V0KHItJmd0O21hcCwgaW5kZXgsIDEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKIApAQCAtNDAsNiAmIzQzOzcxLDEzIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKQogCXVwKCZhbXA7aHdjLSZndDtzZW1hKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywKJiM0MzsJCQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtjdHgtJmd0O3JlZmNudCkpCiYjNDM7CQltYW5hX2h3Y19wdXRfbXNnX2luZGV4KGh3YywgY3R4LSZndDttc2dfaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGNvbnN0IHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY2FsbGVyX2N0eCwKIAkJCQkgICAgY29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnLAogCQkJCSAgICB1MzIgcmVzcF9sZW4pCkBAIC04MSw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sCiB7CiAJY29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnID0gcnhfcmVxLSZndDtidWZfdmE7CiAJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7CiYjNDM7CWJvb2wgcmVsZWFzZTsKIAlpbnQgZXJyOwogCiAJaWYgKCF0ZXN0X2JpdChtc2dfaWQsIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7CkBAIC05MCwyMiAmIzQzOzEyOSw1MyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbiwKIAl9CiAKIAljdHggPSBod2MtJmd0O2NhbGxlcl9jdHggJiM0MzsgbXNnX2lkOwotCWVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CiAKLQljdHgtJmd0O3N0YXR1c19jb2RlID0gcmVzcF9tc2ctJmd0O3N0YXR1czsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3R4LSZndDtsb2NrKTsKIAotCW1lbWNweShjdHgtJmd0O291dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7Ci1vdXQ6CiYjNDM7CS8qIFRoZSBzZW5kZXIgaGFzIG5vdCBwdWJsaXNoZWQgaXRzIGJ1ZmZlciB5ZXQsIHNvIG5vdGhpbmcgYXNrZWQgZm9yCiYjNDM7CSAqIHRoaXMgcmVzcG9uc2UuICBLZWVwIHRoZSBzbG90IHJlc2VydmVkIGFuZCBkcm9wIHRoZSBtZXNzYWdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFjdHgtJmd0O291dHB1dF9idWYgJmFtcDsmYW1wOyAhY3R4LSZndDtyZXNwb25kZWQpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsJCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRha2UgdGhlIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIGF3YXkgZXhhY3RseSBvbmNlOiByZWxlYXNpbmcgaXQKJiM0MzsJICogaXMgd2hhdCBmcmVlcyBhIHNsb3Qgd2hvc2Ugc2VuZGVyIGhhcyBhbHJlYWR5IGdpdmVuIHVwLgomIzQzOwkgKi8KJiM0MzsJcmVsZWFzZSA9IGN0eC0mZ3Q7cmVzcF9wZW5kaW5nOwomIzQzOwljdHgtJmd0O3Jlc3BfcGVuZGluZyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDtyZXNwb25kZWQpIHsKJiM0MzsJCS8qIFRoZSBzZW5kZXIgdGltZWQgb3V0IGFuZCBhYmFuZG9uZWQgdGhlIHNsb3QsIG9yIGEgcmVzcG9uc2UKJiM0MzsJCSAqIHdhcyBhbHJlYWR5IGFwcGxpZWQuICBDb25zdW1lIHRoaXMgb25lIHdpdGhvdXQgd3JpdGluZwomIzQzOwkJICogYW55dGhpbmcsIHRoZW4gcmVsZWFzZSB0aGUgc2xvdCBpdCB3YXMgaG9sZGluZy4KJiM0MzsJCSAqLwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O2xvY2spOwomIzQzOwkJbWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLSZndDtyeHEsIHJ4X3JlcSk7CiYjNDM7CQlpZiAocmVsZWFzZSkKJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJY3R4LSZndDtyZXNwb25kZWQgPSB0cnVlOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJY3R4LSZndDtzdGF0dXNfY29kZSA9IHJlc3BfbXNnLSZndDtzdGF0dXM7CiYjNDM7CQltZW1jcHkoY3R4LSZndDtvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pOwomIzQzOwl9CiAJY3R4LSZndDtlcnJvciA9IGVycjsKIAotCS8qIE11c3QgcG9zdCByeCB3cWUgYmVmb3JlIGNvbXBsZXRlKCksIG90aGVyd2lzZSB0aGUgbmV4dCByeCBtYXkKLQkgKiBoaXQgbm9fd3FlIGVycm9yLgomIzQzOwkvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZQomIzQzOwkgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLgogCSAqLwogCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwotCiAJY29tcGxldGUoJmFtcDtjdHgtJmd0O2NvbXBfZXZlbnQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZWxlYXNlKQomIzQzOwkJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwogfQogCiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLApAQCAtMTQ2LDcgJiM0MzsyMTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZiwKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSDoKLQkJCWh3Yy0mZ3Q7aHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDsKJiM0MzsJCQkvKiBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIGEgMjQtYml0IGZpZWxkLiAgS2VlcAomIzQzOwkJCSAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkCiYjNDM7CQkJICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlcgomIzQzOwkJCSAqIHRoYW4gc2lsZW50bHkgdHJ1bmNhdGVkIHRvIHUxNi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlod2MtJmd0O2h3Y19pbml0X3FfZGVwdGhfbWF4ID0gdmFsOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBIV0NfSU5JVF9EQVRBX01BWF9SRVFVRVNUOgpAQCAtNDc2LDcgJiM0Mzs1NTEsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAKIAlkbWFfYnVmLSZndDtudW1fcmVxcyA9IHFfZGVwdGg7CiAKLQlidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTsKJiM0MzsJLyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhcwomIzQzOwkgKiBhbHJlYWR5IGFzc3VtZWQgZm9yIHRoZSBFUSBhbmQgQ1EgcmluZ3MgYWJvdmUuICBUaGUgc2xvdHMgYXJlCiYjNDM7CSAqIGNhcnZlZCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBidWZmZXIsIHNvIGFueSB0YWlsIGlzIHVudXNlZC4KJiM0MzsJICovCiYjNDM7CWJ1Zl9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKSk7CiAKIAlnbWkgPSAmYW1wO2RtYV9idWYtJmd0O21lbV9pbmZvOwogCWVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7CkBAIC01NjAsNiAmIzQzOzYzOSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywKIAlod2Nfd3EtJmd0O2dkbWFfd3EgPSBxdWV1ZTsKIAlod2Nfd3EtJmd0O3F1ZXVlX2RlcHRoID0gcV9kZXB0aDsKIAlod2Nfd3EtJmd0O2h3Y19jcSA9IGh3Y19jcTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtod2Nfd3EtJmd0O2xvY2spOwogCiAJZXJyID0gbWFuYV9od2NfYWxsb2NfZG1hX2J1Zihod2MsIHFfZGVwdGgsIG1heF9tc2dfc2l6ZSwKIAkJCQkgICAgICZhbXA7aHdjX3dxLSZndDttc2dfYnVmKTsKQEAgLTU3Nyw3ICYjNDM7NjU3LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19jcmVhdGVfd3Eoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSwKJiM0MztzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsCiAJCQkJc3RydWN0IGh3Y193b3JrX3JlcXVlc3QgKnJlcSwKIAkJCQl1MzIgZGVzdF92aXJ0X3JxX2lkLCB1MzIgZGVzdF92aXJ0X3JjcV9pZCwKIAkJCQlib29sIGRlc3RfcGYpCkBAIC02MTYsNyAmIzQzOzY5NiwxMCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsCiAJcmVxLSZndDt3cWVfcmVxLmlubGluZV9vb2JfZGF0YSA9IHR4X29vYjsKIAlyZXEtJmd0O3dxZV9yZXEuY2xpZW50X2RhdGFfdW5pdCA9IDA7CiAKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aHdjX3R4cS0mZ3Q7bG9jayk7CiAJZXJyID0gbWFuYV9nZF9wb3N0X2FuZF9yaW5nKGh3Y190eHEtJmd0O2dkbWFfd3EsICZhbXA7cmVxLSZndDt3cWVfcmVxLCBOVUxMKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtod2NfdHhxLSZndDtsb2NrKTsKJiM0MzsKIAlpZiAoZXJyKQogCQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gcG9zdCBXUUUgb24gSFdDIFNROiAlZFxuJiMzNDssIGVycik7CiAJcmV0dXJuIGVycjsKQEAgLTY0Miw2ICYjNDM7NzI1LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLSZndDtyeHE7CiAJc3RydWN0IGh3Y193b3JrX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWludCBpOwogCkBAIC02NTcsMTggJiM0Mzs3NDEsMzggQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlpZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcV9kZXB0aDsgJiM0MzsmIzQzO2kpCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBxX2RlcHRoOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtjdHhbaV0ubG9jayk7CiAJCWluaXRfY29tcGxldGlvbigmYW1wO2N0eFtpXS5jb21wX2V2ZW50KTsKJiM0MzsJfQogCiAJaHdjLSZndDtjYWxsZXJfY3R4ID0gY3R4OwogCi0JcmV0dXJuIG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLSZndDtjcS0mZ3Q7Z2RtYV9lcSk7CiYjNDM7CS8qIEVuYWJsZSBhZG1pc3Npb24gZm9yIHRoZSB0ZXN0IEVRIHJlcXVlc3QuICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTsKJiM0MzsJaHdjLSZndDtjaGFubmVsX3VwID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLSZndDtjcS0mZ3Q7Z2RtYV9lcSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTsKJiM0MzsJCWh3Yy0mZ3Q7Y2hhbm5lbF91cCA9IGZhbHNlOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLAomIzQzO3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCwKIAkJCQkgICAgICB1MzIgKm1heF9yZXFfbXNnX3NpemUsCiAJCQkJICAgICAgdTMyICptYXhfcmVzcF9tc2dfc2l6ZSkKIHsKJiM0MzsJLyogbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkgZmlsbHMgdGhlIGJvb3RzdHJhcCBmaWVsZHMgZnJvbSBoYXJkCiYjNDM7CSAqIElSUSBvbiBHRE1BX0VRRV9IV0NfSU5JVF9EQVRBIGFuZCB0aGVuIHNpZ25hbHMgaHdjX2luaXRfZXFlX2NvbXAgb24KJiM0MzsJICogR0RNQV9FUUVfSFdDX0lOSVRfRE9ORS4gIFRoZSB3YWl0X2Zvcl9jb21wbGV0aW9uKCkgYmVsb3cgcGFpcnMgd2l0aAomIzQzOwkgKiB0aGF0IGNvbXBsZXRlKCksIHNvIGV2ZXJ5IHZhbHVlIHN0b3JlZCBiZWZvcmUgSU5JVF9ET05FIGlzIG9yZGVyZWQKJiM0MzsJICogYWdhaW5zdCB0aGUgcmVhZHMgdGhhdCBmb2xsb3cgaXQgaGVyZS4KJiM0MzsJICovCiAJc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcnEgPSBod2MtJmd0O3J4cS0mZ3Q7Z2RtYV93cTsKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqc3EgPSBod2MtJmd0O3R4cS0mZ3Q7Z2RtYV93cTsKQEAgLTY3Niw2ICYjNDM7NzgwLDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCwKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtJmd0O2NxLSZndDtnZG1hX2NxOwogCWludCBlcnI7CiAKJiM0MzsJLyogRG8gbm90IHJldXNlIGRpbWVuc2lvbnMgb3Igcm91dGluZyBJRHMgZnJvbSBhIHByZXZpb3VzIGVzdGFibGlzaC4gKi8KJiM0MzsJaHdjLSZndDtod2NfaW5pdF9xX2RlcHRoX21heCA9IDA7CiYjNDM7CWh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZSA9IDA7CiYjNDM7CWh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemUgPSAwOwomIzQzOwlnYy0mZ3Q7aHdjLmRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDsKJiM0MzsJZ2MtJmd0O2h3Yy5wZGlkID0gSU5WQUxJRF9QRElEOwomIzQzOwlod2MtJmd0O3BmX2Rlc3RfdnJxX2lkID0gMDsKJiM0MzsJaHdjLSZndDtwZl9kZXN0X3ZyY3FfaWQgPSAwOwomIzQzOwogCWluaXRfY29tcGxldGlvbigmYW1wO2h3Yy0mZ3Q7aHdjX2luaXRfZXFlX2NvbXApOwogCiAJZXJyID0gbWFuYV9zbWNfc2V0dXBfaHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSwKQEAgLTY4Myw3ICYjNDM7Nzk2LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLAogCQkJCSBjcS0mZ3Q7bWVtX2luZm8uZG1hX2hhbmRsZSwKIAkJCQkgcnEtJmd0O21lbV9pbmZvLmRtYV9oYW5kbGUsCiAJCQkJIHNxLSZndDttZW1faW5mby5kbWFfaGFuZGxlLAotCQkJCSBlcS0mZ3Q7ZXEubXNpeF9pbmRleCk7CiYjNDM7CQkJCSBlcS0mZ3Q7ZXEubXNpeF9pbmRleCwgJmFtcDtod2MtJmd0O3NldHVwX2FjdGl2ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjk0LDYgJiM0Mzs4MDcsMTQgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLAogCSptYXhfcmVxX21zZ19zaXplID0gaHdjLSZndDtod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplOwogCSptYXhfcmVzcF9tc2dfc2l6ZSA9IGh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7CiAKJiM0MzsJLyogUmVqZWN0IGEgbWlzc2luZyBkb29yYmVsbCBiZWZvcmUgdGhlIGNoYW5uZWwgdGVzdC4gVGhpcyBuZWl0aGVyCiYjNDM7CSAqIHZhbGlkYXRlcyBpdHMgQkFSIHJhbmdlIG5vciBwcm90ZWN0cyBlYXJsaWVyIElSUSByZWFybWluZy4KJiM0MzsJICovCiYjNDM7CWlmIChnYy0mZ3Q7aHdjLmRvb3JiZWxsID09IElOVkFMSURfRE9PUkJFTEwpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDOiBubyBkb29yYmVsbCBpbiBpbml0IGRhdGFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiYjNDM7CiAJLyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi8KIAlpZiAoV0FSTl9PTihjcS0mZ3Q7aWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkKIAkJcmV0dXJuIC1FUFJPVE87CkBAIC03MTIsNiAmIzQzOzgzMywxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiB7CiAJaW50IGVycjsKIAomIzQzOwkvKiBDUSBkZXB0aCBpcyBxX2RlcHRoICogMiAoU1EgJiM0MzsgUlEpIHBhc3NlZCBhcyB1MTYgdG8gY3JlYXRlX2NxLgomIzQzOwkgKiBDYXAgdG8gcHJldmVudCB1MTYgdHJ1bmNhdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChxX2RlcHRoICZndDsgVTE2X01BWCAvIDIpCiYjNDM7CQlxX2RlcHRoID0gVTE2X01BWCAvIDI7CiYjNDM7CiAJZXJyID0gbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2coaHdjLCBxX2RlcHRoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNzUxLDEyICYjNDM7ODc4LDQ0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7LyogQnJpbmctdXAgb25seTogcmVxdWlyZXMgbm8gc2VuZGVycyBvciBjb25jdXJyZW50IGxpZmVjeWNsZSBvcGVyYXRpb25zLgomIzQzOyAqIFRoaXMgaGVscGVyIGRvZXMgbm90IHVucHVibGlzaCB0aGUgSFdDIG9yIGRyYWluIHNlbmRlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKQomIzQzO3sKJiM0MzsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQ7CiYjNDM7CiYjNDM7CS8qIFRoZSBDUSBoZWxwZXIgZGVyZWdpc3RlcnMgdGhlIEhXQyBFUSBiZWZvcmUgcmV0dXJuaW5nLiAqLwomIzQzOwlpZiAoaHdjLSZndDtjcSkgewomIzQzOwkJbWFuYV9od2NfZGVzdHJveV9jcShnYywgaHdjLSZndDtjcSk7CiYjNDM7CQlod2MtJmd0O2NxID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShod2MtJmd0O2NhbGxlcl9jdHgpOwomIzQzOwlod2MtJmd0O2NhbGxlcl9jdHggPSBOVUxMOwomIzQzOwomIzQzOwlpZiAoaHdjLSZndDt0eHEpIHsKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3R4cSk7CiYjNDM7CQlod2MtJmd0O3R4cSA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGh3Yy0mZ3Q7cnhxKSB7CiYjNDM7CQltYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLSZndDtyeHEpOwomIzQzOwkJaHdjLSZndDtyeHEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hbmFfZ2RfZnJlZV9yZXNfbWFwKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzKTsKJiM0MzsJaHdjLSZndDtudW1faW5mbGlnaHRfbXNnID0gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiAJdTMyIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplOwogCXN0cnVjdCBnZG1hX2RldiAqZ2QgPSAmYW1wO2djLSZndDtod2M7CiAJc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjOwotCXUxNiBxX2RlcHRoX21heDsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKipvbGRfY3FfdGFibGU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBxX2RlcHRoX21heDsKIAlpbnQgZXJyOwogCiAJaHdjID0ga3phbGxvY19vYmooKmh3Yyk7CkBAIC03NjQsMTAgJiM0Mzs5MjMsMTEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWdkLSZndDtnZG1hX2NvbnRleHQgPSBnYzsKLQlnZC0mZ3Q7ZHJpdmVyX2RhdGEgPSBod2M7CiAJaHdjLSZndDtnZG1hX2RldiA9IGdkOwogCWh3Yy0mZ3Q7ZGV2ID0gZ2MtJmd0O2RldjsKIAlod2MtJmd0O2h3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7CiYjNDM7CWh3Yy0mZ3Q7YWN0aXZlX3NlbmRlcnMgPSAwOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7Z2MtJmd0O2h3Y19kcmFpbl93YWl0cSk7CiAKIAkvKiBIV0MmIzM5O3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqLwogCWdkLSZndDtkZXZfaWQuYXNfdWludDMyID0gMDsKQEAgLTc3Niw2ICYjNDM7OTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAlnZC0mZ3Q7cGRpZCA9IElOVkFMSURfUERJRDsKIAlnZC0mZ3Q7ZG9vcmJlbGwgPSBJTlZBTElEX0RPT1JCRUxMOwogCiYjNDM7CS8qIFB1Ymxpc2ggZm9yIHNldHVwOyBxdWV1ZSBpbml0aWFsaXphdGlvbiBiZWxvdyBtdXN0IHByZWNlZGUgc2VuZGVycy4gKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YSA9IGh3YzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwogCS8qIG1hbmFfaHdjX2luaXRfcXVldWVzKCkgb25seSBjcmVhdGVzIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMsCiAJICogYW5kIGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBIV0MgZGV2aWNlLgogCSAqLwpAQCAtNzk0LDggJiM0Mzs5NTksMTMyIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CWlmIChxX2RlcHRoX21heCAmZ3Q7IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7CiYjNDM7CQkvKiBCb3VuZCBETUEgYWxsb2NhdGlvbnMgYmVmb3JlIHVzaW5nIHRoZSAyNC1iaXQgZGVwdGguICovCiYjNDM7CQlpZiAocV9kZXB0aF9tYXggJmd0OyBIV19DSEFOTkVMX01BWF9RVUVVRV9ERVBUSCkKJiM0MzsJCQlxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIOwomIzQzOwomIzQzOwkJLyogS2VlcCBib290c3RyYXAgbWVzc2FnZSBzaXplcyBmb3IgbWFuZGF0b3J5IGNvbW1hbmRzLgomIzQzOwkJICogSW5jb21wYXRpYmxlIHJlcG9ydHMgc2tpcCByZWJ1aWxkaW5nLCBub3QgY2hhbm5lbCBjcmVhdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8CiYjNDM7CQkgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSB8fAomIzQzOwkJICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplICZndDsKJiM0MzsJCQlVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUgfHwKJiM0MzsJCSAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgJmd0OwomIzQzOwkJCVUzMl9NQVggLSBNQU5BX1BBR0VfU0laRSkgewomIzQzOwkJCWRldl9lcnIoaHdjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7SFdDOiBpbnZhbGlkIGRpbXMgcT0ldSByZXE9JXUgcmVzcD0ldVxuJiMzNDssCiYjNDM7CQkJCXFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLAomIzQzOwkJCQltYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQkJcV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDsKJiM0MzsJCQlnb3RvIHNraXBfcmVpbml0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gdGVhcmRvd24gSFdDIGZvciByZWluaXQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJZXJyKTsKJiM0MzsJCQlnb3RvIHJlaW5pdF9mYWxsYmFjazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWh3Yy0mZ3Q7c2V0dXBfYWN0aXZlID0gZmFsc2U7CiYjNDM7CiYjNDM7CQkvKiBVbnB1Ymxpc2ggdGhlIENRIGFuZCBkcmFpbiBpdHMgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHRhYmxlLiAqLwomIzQzOwkJbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTsKJiM0MzsKJiM0MzsJCW9sZF9jcV90YWJsZSA9IGdjLSZndDtjcV90YWJsZTsKJiM0MzsJCWdjLSZndDtjcV90YWJsZSA9IE5VTEw7CiYjNDM7CQlnYy0mZ3Q7bWF4X251bV9jcXMgPSAwOwomIzQzOwkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQl2ZnJlZShvbGRfY3FfdGFibGUpOwomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBxX2RlcHRoX21heCwKJiM0MzsJCQkJCSAgIG1heF9yZXFfbXNnX3NpemUsCiYjNDM7CQkJCQkgICBtYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVpbml0IEhXQzogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJCWdvdG8gcmVpbml0X2ZhbGxiYWNrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsICZhbXA7cV9kZXB0aF9tYXgsCiYjNDM7CQkJCQkJICZhbXA7bWF4X3JlcV9tc2dfc2l6ZSwKJiM0MzsJCQkJCQkgJmFtcDttYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoIWVyciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHFfZGVwdGhfbWF4ICZsdDsgaHdjLSZndDtudW1faW5mbGlnaHRfbXNnIHx8CiYjNDM7CQkgICAgIG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8CiYjNDM7CQkgICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpKSB7CiYjNDM7CQkJLyogVGhlIHJlYnVpbHQgY2hhbm5lbCBtdXN0IHN1cHBvcnQgdGhlIGFsbG9jYXRlZCBkZXB0aAomIzQzOwkJCSAqIGFuZCBtZXNzYWdlIHNpemVzLgomIzQzOwkJCSAqLwomIzQzOwkJCWRldl9lcnIoaHdjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7SFdDOiByZWJ1aWx0IHE9JXUgcmVxPSV1IHJlc3A9JXUsIGJ1aWx0IGZvciAldS8ldS8ldVxuJiMzNDssCiYjNDM7CQkJCXFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLAomIzQzOwkJCQltYXhfcmVzcF9tc2dfc2l6ZSwgaHdjLSZndDtudW1faW5mbGlnaHRfbXNnLAomIzQzOwkJCQlIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsCiYjNDM7CQkJCUhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpOwomIzQzOwkJCWVyciA9IC1FUFJPVE87CiYjNDM7CQl9CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcbiYjMzQ7LAomIzQzOwkJCQllcnIpOwomIzQzOwkJCWdvdG8gcmVpbml0X2ZhbGxiYWNrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gc2tpcF9yZWluaXQ7CiYjNDM7CiYjNDM7cmVpbml0X2ZhbGxiYWNrOgomIzQzOwkvKiBBIGZhaWxlZCBoYW5kc2hha2UgbGVhdmVzIHF1ZXVlIG93bmVyc2hpcCB1bmNlcnRhaW4uICovCiYjNDM7CWlmIChod2MtJmd0O3NldHVwX2FjdGl2ZSkgewomIzQzOwkJaWYgKG1hbmFfc21jX3RlYXJkb3duX2h3YygmYW1wO2djLSZndDtzaG1fY2hhbm5lbCwgZmFsc2UpKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gdGVhciBkb3duIEhXQyBiZWZvcmUgYm9vdHN0cmFwIGZhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlod2MtJmd0O3NldHVwX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBmYWlsZWQgZXN0YWJsaXNoIG1heSBub3QgaGF2ZSBhbGxvY2F0ZWQgY3FfdGFibGUuICovCiYjNDM7CWRldl93YXJuKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0hXQyByZWluaXQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gYm9vdHN0cmFwIGRlcHRoXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKGh3Yyk7CiYjNDM7CiYjNDM7CW9sZF9jcV90YWJsZSA9IGdjLSZndDtjcV90YWJsZTsKJiM0MzsJZ2MtJmd0O2NxX3RhYmxlID0gTlVMTDsKJiM0MzsJZ2MtJmd0O21heF9udW1fY3FzID0gMDsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXZmcmVlKG9sZF9jcV90YWJsZSk7CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsCiYjNDM7CQkJCSAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSwKJiM0MzsJCQkJICAgSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgYm9vdHN0cmFwIEhXQzogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsICZhbXA7cV9kZXB0aF9tYXgsICZhbXA7bWF4X3JlcV9tc2dfc2l6ZSwKJiM0MzsJCQkJCSAmYW1wO21heF9yZXNwX21zZ19zaXplKTsKJiM0MzsJaWYgKCFlcnIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8CiYjNDM7CSAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHsKJiM0MzsJCS8qIFRoZSByZXN0b3JlZCBjaGFubmVsIG11c3QgcmVwb3J0IHRoZSBhbGxvY2F0ZWQgbWVzc2FnZSBzaXplcy4gKi8KJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDOiBib290c3RyYXAgcmVwb3J0cyByZXE9JXUgcmVzcD0ldVxuJiMzNDssCiYjNDM7CQkJbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpOwomIzQzOwkJZXJyID0gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcbiYjMzQ7LAomIzQzOwkJCWVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzO3NraXBfcmVpbml0OgomIzQzOwogCWVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhLAotCQkJCSAgICBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCwKJiM0MzsJCQkJICAgIGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZywKIAkJCQkgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gdGVzdCBIV0M6ICVkXG4mIzM0OywgZXJyKTsKQEAgLTgxMCwxOCAmIzQzOzEwOTksNzEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCiB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIHsKJiM0MzsJLyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi8KIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFod2MpCiAJCXJldHVybjsKIAotCS8qIGdjLSZndDttYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0JiMzOTtzCi0JICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS4KJiM0MzsJLyogTm9uemVybyBudW1faW5mbGlnaHRfbXNnIG1lYW5zIHF1ZXVlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZC4gKi8KJiM0MzsJaWYgKGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZykgewomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJaHdjLSZndDtjaGFubmVsX3VwID0gZmFsc2U7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBCbG9jayBuZXcgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSByZWZlcmVuY2VzIGJlZm9yZSBkcmFpbmluZy4gKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJLyogQ29tcGxldGUgb2NjdXBpZWQgc2xvdHMgYW5kIGRyb3AgcGVuZGluZyByZXNwb25zZS1zaWRlIHJlZmVyZW5jZXMuICovCiYjNDM7CWlmIChod2MtJmd0O2NhbGxlcl9jdHgpIHsKJiM0MzsJCXN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4OwomIzQzOwkJYm9vbCBkcm9wX3Jlc3BfcmVmOwomIzQzOwkJaW50IGk7CiYjNDM7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgaHdjLSZndDtudW1faW5mbGlnaHRfbXNnOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghdGVzdF9iaXQoaSwgaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLm1hcCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWN0eCA9ICZhbXA7aHdjLSZndDtjYWxsZXJfY3R4W2ldOwomIzQzOwomIzQzOwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJLyogUHJlc2VydmUgYW4gYWxyZWFkeSByZWNvcmRlZCByZXN1bHQuICovCiYjNDM7CQkJaWYgKCFjdHgtJmd0O3Jlc3BvbmRlZCkKJiM0MzsJCQkJY3R4LSZndDtlcnJvciA9IC1FTk9ERVY7CiYjNDM7CQkJZHJvcF9yZXNwX3JlZiA9IGN0eC0mZ3Q7cmVzcF9wZW5kaW5nOwomIzQzOwkJCWN0eC0mZ3Q7cmVzcF9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQkJY3R4LSZndDtyZXNwb25kZWQgPSB0cnVlOwomIzQzOwkJCWNvbXBsZXRlKCZhbXA7Y3R4LSZndDtjb21wX2V2ZW50KTsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKGRyb3BfcmVzcF9yZWYpCiYjNDM7CQkJCWh3Y19jdHhfcHV0KGh3YywgY3R4KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQYWlyIHdpdGggdGhlIGxhc3Qgc2VuZGVyJiMzOTtzIHdha2V1cCB1bmRlciBod2NfbG9jaywgc28gaXQgZmluaXNoZXMKJiM0MzsJICogYWNjZXNzaW5nIGdjIGJlZm9yZSB0aGUgZHJhaW4gcmV0dXJucy4KIAkgKi8KLQlpZiAoZ2MtJmd0O21heF9udW1fY3FzICZndDsgMCkgewotCQltYW5hX3NtY190ZWFyZG93bl9od2MoJmFtcDtnYy0mZ3Q7c2htX2NoYW5uZWwsIGZhbHNlKTsKLQkJZ2MtJmd0O21heF9udW1fY3FzID0gMDsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO2djLSZndDtod2NfbG9jayk7CiYjNDM7CXdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtJmd0O2h3Y19kcmFpbl93YWl0cSwKJiM0MzsJCQkgICAgaHdjLSZndDthY3RpdmVfc2VuZGVycyA9PSAwLCBnYy0mZ3Q7aHdjX2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtnYy0mZ3Q7aHdjX2xvY2spOwomIzQzOwomIzQzOwlpZiAoaHdjLSZndDtzZXR1cF9hY3RpdmUpIHsKJiM0MzsJCWlmICghbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSkpCiYjNDM7CQkJaHdjLSZndDtzZXR1cF9hY3RpdmUgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byB0ZWFyIGRvd24gSFdDXG4mIzM0Oyk7CiAJfQomIzQzOwlnYy0mZ3Q7bWF4X251bV9jcXMgPSAwOwomIzQzOwomIzQzOwkvKiBEZXJlZ2lzdGVyIHRoZSBIV0MgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHdvcmsgcXVldWVzLiAqLwomIzQzOwlpZiAoaHdjLSZndDtjcSkKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0LCBod2MtJmd0O2NxKTsKIAogCWlmIChod2MtJmd0O3R4cSkKIAkJbWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy0mZ3Q7dHhxKTsKQEAgLTgyOSw4ICYjNDM7MTE3MSwxOCBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAlpZiAoaHdjLSZndDtyeHEpCiAJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3J4cSk7CiAKLQlpZiAoaHdjLSZndDtjcSkKLQkJbWFuYV9od2NfZGVzdHJveV9jcShod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQsIGh3Yy0mZ3Q7Y3EpOwomIzQzOwlpZiAoaHdjLSZndDtjYWxsZXJfY3R4KSB7CiYjNDM7CQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIXRlc3RfYml0KGksIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljdHggPSAmYW1wO2h3Yy0mZ3Q7Y2FsbGVyX2N0eFtpXTsKJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWtmcmVlKGh3Yy0mZ3Q7Y2FsbGVyX2N0eCk7CiAJaHdjLSZndDtjYWxsZXJfY3R4ID0gTlVMTDsKQEAgLTg0NSw3ICYjNDM7MTE5Nyw2IEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCWh3Yy0mZ3Q7aHdjX3RpbWVvdXQgPSAwOwogCiAJa2ZyZWUoaHdjKTsKLQlnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhID0gTlVMTDsKIAlnYy0mZ3Q7aHdjLmdkbWFfY29udGV4dCA9IE5VTEw7CiAKIAl2ZnJlZShnYy0mZ3Q7Y3FfdGFibGUpOwpAQCAtODYwLDEzICYjNDM7MTIxMSwyMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sCiAJc3RydWN0IGh3Y193cSAqdHhxID0gaHdjLSZndDt0eHE7CiAJc3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZzsKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJYm9vbCBkcm9wX3Jlc3BfcmVmOwomIzQzOwlib29sIGFiYW5kb25lZCA9IGZhbHNlOwomIzQzOwlib29sIGNhbmNlbGxlZDsKIAl1MzIgZGVzdF92cmNxID0gMDsKIAl1MzIgZGVzdF92cnEgPSAwOwogCXUzMiBjb21tYW5kOwomIzQzOwl1MzIgc3RhdHVzOwomIzQzOwl1MzIgd2FpdF9tczsKIAl1MTYgbXNnX2lkOwogCWludCBlcnI7CiAKLQltYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgJmFtcDttc2dfaWQpOwomIzQzOwllcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgJmFtcDttc2dfaWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKIAogCXR4X3dyID0gJmFtcDt0eHEtJmd0O21zZ19idWYtJmd0O3JlcXNbbXNnX2lkXTsKIApAQCAtODc4LDggJiM0MzsxMjM3LDExIEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbiwKIAl9CiAKIAljdHggPSBod2MtJmd0O2NhbGxlcl9jdHggJiM0MzsgbXNnX2lkOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwogCWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IHJlc3A7CiAJY3R4LSZndDtvdXRwdXRfYnVmbGVuID0gcmVzcF9sZW47CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKIAogCXJlcV9tc2cgPSAoc3RydWN0IGdkbWFfcmVxX2hkciAqKXR4X3dyLSZndDtidWZfdmE7CiAJaWYgKHJlcSkKQEAgLTg5NSw0MyAmIzQzOzEyNTcsMTE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbiwKIAkJZGVzdF92cmNxID0gaHdjLSZndDtwZl9kZXN0X3ZyY3FfaWQ7CiAJfQogCi0JZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSwgZmFsc2UpOwomIzQzOwkvKiBTZXJpYWxpemUgY2FuY2VsbGF0aW9uIHdpdGggc3VibWlzc2lvbi4gQW4gdW5zdWJtaXR0ZWQgcmVxdWVzdAomIzQzOwkgKiBjYW5ub3Qgc3VjY2VlZCwgZXZlbiBpZiBhbiB1bnNvbGljaXRlZCByZXNwb25zZSB3YXMgYWNjZXB0ZWQuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljYW5jZWxsZWQgPSBjdHgtJmd0O3Jlc3BvbmRlZDsKJiM0MzsJaWYgKGNhbmNlbGxlZCkKJiM0MzsJCWVyciA9IGN0eC0mZ3Q7ZXJyb3IgPzogLUVQUk9UTzsKJiM0MzsJZWxzZQomIzQzOwkJZXJyID0gbWFuYV9od2NfcG9zdF90eF93cWUodHhxLCB0eF93ciwgZGVzdF92cnEsIGRlc3RfdnJjcSwKJiM0MzsJCQkJCSAgIGZhbHNlKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoY2FuY2VsbGVkKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0hXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXG4mIzM0OywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CXdhaXRfbXMgPSBod2MtJmd0O2h3Y190aW1lb3V0OwogCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7Y3R4LSZndDtjb21wX2V2ZW50LAotCQkJCQkgKG1zZWNzX3RvX2ppZmZpZXMoaHdjLSZndDtod2NfdGltZW91dCkpKSkgewotCQlpZiAoaHdjLSZndDtod2NfdGltZW91dCAhPSAwKQotCQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xuJiMzNDssCi0JCQkJY29tbWFuZCwgaHdjLSZndDtod2NfdGltZW91dCk7CiYjNDM7CQkJCQkgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSkpIHsKJiM0MzsJCS8qIENsZWFyIG91dHB1dF9idWYgc28gYSBsYXRlIHJlc3BvbnNlIGNhbm5vdCB3cml0ZSB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7CQkgKiBidWZmZXIsIHRoZW4gY2hlY2sgd2hldGhlciBvbmUgYWxyZWFkeSBhcnJpdmVkCiYjNDM7CQkgKiAoZXJyb3IgIT0gLUVJTlBST0dSRVNTKS4KJiM0MzsJCSAqLwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IE5VTEw7CiYjNDM7CQllcnIgPSBjdHgtJmd0O2Vycm9yOwomIzQzOwkJc3RhdHVzID0gY3R4LSZndDtzdGF0dXNfY29kZTsKJiM0MzsJCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7CiYjNDM7CQkJLyogUHVibGlzaCBhYmFuZG9ubWVudCB3aXRoIGJ1ZmZlciB3aXRoZHJhd2FsIHNvIGEgbGF0ZQomIzQzOwkJCSAqIHJlc3BvbnNlIGNhbiByZWNsYWltIHRoZSBzbG90LiBLZWVwIGl0cyByZWZlcmVuY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJY3R4LSZndDtyZXNwb25kZWQgPSB0cnVlOwomIzQzOwkJCWFiYW5kb25lZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQlpZiAoIWFiYW5kb25lZCkgewomIzQzOwkJCS8qIEEgY29tcGxldGlvbiB3b24gdGhlIHJhY2Ugd2l0aCB0aW1lb3V0OyB1c2UgaXRzIHJlc3VsdC4gKi8KJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQkJZ290byBjaGVja19zdGF0dXM7CiYjNDM7CQl9CiAKLQkJLyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi8KLQkJaWYgKGh3Yy0mZ3Q7aHdjX3RpbWVvdXQgJmd0OyAxKQotCQkJaHdjLSZndDtod2NfdGltZW91dCA9IDE7CiYjNDM7CQlpZiAod2FpdF9tcyAhPSAwKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xuJiMzNDssCiYjNDM7CQkJCWNvbW1hbmQsIHdhaXRfbXMpOwomIzQzOwomIzQzOwkJCS8qIEdlbnVpbmUgdGltZW91dDogc2hvcnRlbiBsYXRlciB3YWl0cyBzbyBzdWJzZXF1ZW50CiYjNDM7CQkJICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGUKJiM0MzsJCQkgKiBmdWxsIHRpbWVvdXQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGh3Yy0mZ3Q7aHdjX3RpbWVvdXQgJmd0OyAxKQomIzQzOwkJCQlod2MtJmd0O2h3Y190aW1lb3V0ID0gMTsKJiM0MzsJCX0KIAogCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIG91dDsKLQl9CiAKLQlpZiAoY3R4LSZndDtlcnJvcikgewotCQllcnIgPSBjdHgtJmd0O2Vycm9yOwotCQlnb3RvIG91dDsKJiM0MzsJCS8qIERyb3Agb25seSB0aGUgc2VuZGVyJiMzOTtzIHJlZmVyZW5jZTsgdGhlIHJlc3BvbnNlLXNpZGUgb25lIGlzCiYjNDM7CQkgKiB3aGF0IGtlZXBzIHRoZSBzbG90IHJlc2VydmVkLgomIzQzOwkJICovCiYjNDM7CQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGN0eC0mZ3Q7c3RhdHVzX2NvZGUgJmFtcDsmYW1wOyBjdHgtJmd0O3N0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykgewotCQlpZiAoY3R4LSZndDtzdGF0dXNfY29kZSA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHsKJiM0MzsJLyogQ2xlYXIgb3V0cHV0X2J1ZiBhbmQgcmVhZCB0aGUgcmVzdWx0IHVuZGVyIHRoZSBsb2NrOyB0aGUgc2xvdCBtYXkKJiM0MzsJICogYmUgcmV1c2VkIGFmdGVyIGh3Y19jdHhfcHV0KCkuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljdHgtJmd0O291dHB1dF9idWYgPSBOVUxMOwomIzQzOwllcnIgPSBjdHgtJmd0O2Vycm9yOwomIzQzOwlzdGF0dXMgPSBjdHgtJmd0O3N0YXR1c19jb2RlOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWh3Y19jdHhfcHV0KGh3YywgY3R4KTsKJiM0MzsKJiM0MztjaGVja19zdGF0dXM6CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsmYW1wOyBzdGF0dXMgIT0gR0RNQV9TVEFUVVNfTU9SRV9FTlRSSUVTKSB7CiYjNDM7CQlpZiAoc3RhdHVzID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIG91dDsKJiM0MzsJCQlnb3RvIGRvbmU7CiAJCX0KJiM0MzsKIAkJaWYgKGNvbW1hbmQgIT0gTUFOQV9RVUVSWV9QSFlfU1RBVCkKIAkJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7Q29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxuJiMzNDssCi0JCQkJY29tbWFuZCwgY3R4LSZndDtzdGF0dXNfY29kZSk7CiYjNDM7CQkJCWNvbW1hbmQsIHN0YXR1cyk7CiAJCWVyciA9IC1FUFJPVE87Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBkb25lOwogCX0KJiM0MzsKJiM0MzsJZXJyID0gMDsKJiM0MzsJZ290byBkb25lOwogb3V0OgotCW1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpOwomIzQzOwkvKiBSZWxlYXNlIGFueSByZWZlcmVuY2VzIHN0aWxsIGhlbGQgYnkgdGhpcyB1bnN1Ym1pdHRlZCByZXF1ZXN0LiAqLwomIzQzOwljdHggPSBod2MtJmd0O2NhbGxlcl9jdHggJiM0MzsgbXNnX2lkOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljdHgtJmd0O291dHB1dF9idWYgPSBOVUxMOwomIzQzOwlkcm9wX3Jlc3BfcmVmID0gY3R4LSZndDtyZXNwX3BlbmRpbmc7CiYjNDM7CWN0eC0mZ3Q7cmVzcF9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CWN0eC0mZ3Q7cmVzcG9uZGVkID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoZHJvcF9yZXNwX3JlZikKJiM0MzsJCXJlZmNvdW50X2RlYygmYW1wO2N0eC0mZ3Q7cmVmY250KTsKJiM0MzsJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzO2RvbmU6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jCmluZGV4IGQyMWI1ZGIwNmU1MDkuLjNjZjZhOWY4ZTMyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuYwpAQCAtMTI5LDkgJiM0MzsxMjksMTIgQEAgdm9pZCBtYW5hX3NtY19pbml0KHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzYy0mZ3Q7YmFzZSA9IGJhc2U7CiB9CiAKJiM0MzsvKiBSZXF1aXJlcyBubyBvdXRzdGFuZGluZyBIV0MgaGFuZG92ZXIuICpzdWJtaXR0ZWQgcmVjb3JkcyBwb3NzaWJsZSBQRgomIzQzOyAqIG93bmVyc2hpcCwgaW5jbHVkaW5nIHdoZW4gc2V0dXAgZmFpbHMgYWZ0ZXIgc3VibWlzc2lvbi4KJiM0MzsgKi8KIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJCSAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLAotCQkgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpCiYjNDM7CQkgICAgICAgdTMyIGVxX21zaXhfaW5kZXgsIGJvb2wgKnN1Ym1pdHRlZCkKIHsKIAl1bmlvbiBzbWNfcHJvdG9faGRyICpoZHI7CiAJdTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7CkBAIC0xNDQsNiAmIzQzOzE0Nyw4IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJaW50IGVycjsKIAlpbnQgaTsKIAomIzQzOwkqc3VibWl0dGVkID0gZmFsc2U7CiYjNDM7CiAJLyogRW5zdXJlIFZGIGFscmVhZHkgaGFzIHBvc3Nlc3Npb24gb2Ygc2hhcmVkIG1lbW9yeSAqLwogCWVyciA9IG1hbmFfc21jX3BvbGxfcmVnaXN0ZXIoc2MtJmd0O2Jhc2UsIGZhbHNlKTsKIAlpZiAoZXJyKSB7CkBAIC0yMjksNiAmIzQzOzIzNCw3IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJLyogV3JpdGUgMjU2LW1lc3NhZ2UgYnVmZmVyIHRvIHNoYXJlZCBtZW1vcnkgKGZpbmFsIDMyLWJpdCB3cml0ZQogCSAqIHRyaWdnZXJzIEhXIHRvIHNldCBwb3NzZXNzaW9uIGJpdCB0byBQRikuCiAJICovCiYjNDM7CSpzdWJtaXR0ZWQgPSB0cnVlOwogCWR3b3JkID0gKHUzMiAqKXNobV9idWY7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFNNQ19BUEVSVFVSRV9EV09SRFM7IGkmIzQzOyYjNDM7KQogCQl3cml0ZWwoKmR3b3JkJiM0MzsmIzQzOywgc2MtJmd0O2Jhc2UgJiM0MzsgaSAqIFNNQ19CQVNJQ19VTklUKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKaW5kZXggMzA4OTUwZjliNTRiMC4uMjJkZDdjOWNlY2M4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKQEAgLTQ2OCw2ICYjNDM7NDY4LDE1IEBAIHN0cnVjdCBnZG1hX2NvbnRleHQgewogCS8qIEhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbCAoSFdDKSAqLwogCXN0cnVjdCBnZG1hX2RldgkJaHdjOwogCiYjNDM7CS8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqLwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdAlod2NfZHJhaW5fd2FpdHE7CiYjNDM7CiYjNDM7CS8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpbgomIzQzOwkgKiBtYW5hX25lZWRfbG9nKCkvbWFuYV9zZXJ2X3Jlc2V0KCkuIFNldHVwIGFuZCBETUEtcmVnaW9uIHJlYWRlcnMKJiM0MzsJICogc3RpbGwgcmVxdWlyZSBsaWZlY3ljbGUgb3JkZXJpbmcuIE5vdCBhbGwgdGltZW91dCB3cml0ZXJzIHVzZSBpdC4KJiM0MzsJICovCiYjNDM7CXNwaW5sb2NrX3QJCWh3Y19sb2NrOwomIzQzOwogCS8qIEF6dXJlIG5ldHdvcmsgYWRhcHRlciAqLwogCXN0cnVjdCBnZG1hX2RldgkJbWFuYTsKIApAQCAtNjgzLDYgJiM0Mzs2OTIsOSBAQCBlbnVtIHsKIC8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIC0gRElNICovCiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOCkKIAomIzQzOy8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIHF1ZXVlIGRlcHRoIGZvciBIV0MgKi8KJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpCiYjNDM7CiAvKiBEcml2ZXIgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcXVldWUgYnVmZmVycyAqLwogI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKQogCkBAIC03MDEsNiAmIzQzOzcxMyw3IEBAIGVudW0gewogCSBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXAogCSBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFwKJiM0MzsJIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKaW5kZXggMTZmZWIzOTYxNmMxYi4uZGZkOTIzMzZiMmI0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKQEAgLTExLDYgJiM0MzsxMSwxMyBAQAogCiAjZGVmaW5lIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIIDEKIAomIzQzOy8qIFVwcGVyIGJvdW5kIG9uIHRoZSBkZXZpY2UtcmVwb3J0ZWQgSFdDIHF1ZXVlIGRlcHRoLiAgVGhlIEhXQyBpcyBhCiYjNDM7ICogY29udHJvbCBjaGFubmVsLCBzbyBhIG1vZGVzdCBkZXB0aCBhbHJlYWR5IGtlZXBzIGVub3VnaCBtYW5hZ2VtZW50CiYjNDM7ICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUEKJiM0MzsgKiBidWZmZXJzIG9mIHFfZGVwdGggKiBtYXhfbXNnX3NpemUgYnl0ZXMgZWFjaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOAomIzQzOwogI2RlZmluZSBIV0NfSU5JVF9EQVRBX0NRSUQJCTEKICNkZWZpbmUgSFdDX0lOSVRfREFUQV9SUUlECQkyCiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfU1FJRAkJMwpAQCAtMTY0LDYgJiM0MzsxNzEsOSBAQCBzdHJ1Y3QgaHdjX3dxIHsKIAl1MTYgcXVldWVfZGVwdGg7CiAKIAlzdHJ1Y3QgaHdjX2NxICpod2NfY3E7CiYjNDM7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgU1EgcG9zdGluZzsgdW51c2VkIGZvciB0aGUgUlEuICovCiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7CkBAIC0xNzEsOCAmIzQzOzE4MSwyNyBAQCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggewogCXZvaWQgKm91dHB1dF9idWY7CiAJdTMyIG91dHB1dF9idWZsZW47CiAKLQl1MzIgZXJyb3I7IC8qIExpbnV4IGVycm9yIGNvZGUgKi8KJiM0MzsJaW50IGVycm9yOyAvKiBMaW51eCBlcnJvciBjb2RlIChuZWdhdGl2ZSBlcnJubyBvciAwKSAqLwogCXUzMiBzdGF0dXNfY29kZTsKJiM0MzsKJiM0MzsJLyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb20KJiM0MzsJICogaGFuZGxlX3Jlc3AoKSAoQ1EgaW50ZXJydXB0KSBhbmQgdGhlIHNlbmRlciB0aW1lb3V0IHBhdGguCiYjNDM7CSAqLwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7CiYjNDM7CS8qIFRyYWNrcyBzZW5kZXIgJiM0MzsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0CiYjNDM7CSAqIChyZWZjb3VudCByZWFjaGVzIDApIHJlbGVhc2VzIHRoZSBiaXRtYXAgc2xvdC4KJiM0MzsJICovCiYjNDM7CXJlZmNvdW50X3QgcmVmY250OwomIzQzOwl1MTYgbXNnX2lkOwomIzQzOwomIzQzOwkvKiBTZXQgYnkgdGhlIGZpcnN0IGhhbmRsZV9yZXNwKCksIG9yIGJ5IHRoZSBzZW5kZXImIzM5O3MgdGltZW91dCBwYXRoLAomIzQzOwkgKiBzbyBhIGxhdGVyIG9yIGR1cGxpY2F0ZSByZXNwb25zZSBpcyBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJYm9vbCByZXNwb25kZWQ7CiYjNDM7CiYjNDM7CS8qIFJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIG91dHN0YW5kaW5nOyBwcm90ZWN0ZWQgYnkgbG9jay4gKi8KJiM0MzsJYm9vbCByZXNwX3BlbmRpbmc7CiB9OwogCiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHsKQEAgLTE4MCw5ICYjNDM7MjA5LDEwIEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCXUxNiBudW1faW5mbGlnaHRfbXNnOwomIzQzOwogCXUzMiBtYXhfcmVxX21zZ19zaXplOwogCi0JdTE2IGh3Y19pbml0X3FfZGVwdGhfbWF4OwomIzQzOwl1MzIgaHdjX2luaXRfcV9kZXB0aF9tYXg7CiAJdTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7CiAJdTMyIGh3Y19pbml0X21heF9yZXNwX21zZ19zaXplOwogCkBAIC0xOTIsNiAmIzQzOzIyMiw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewogCXN0cnVjdCBod2Nfd3EgKnR4cTsKIAlzdHJ1Y3QgaHdjX2NxICpjcTsKIAomIzQzOwkvKiBBZG1pc3Npb24gcGVybWl0cy4gVGltZWQtb3V0IHJlcXVlc3RzIHJldGFpbiB0aGVpcnMgdW50aWwgYQomIzQzOwkgKiByZXNwb25zZSBvciB0ZWFyZG93biByZWxlYXNlcyB0aGUgc2xvdC4KJiM0MzsJICovCiAJc3RydWN0IHNlbWFwaG9yZSBzZW1hOwogCXN0cnVjdCBnZG1hX3Jlc291cmNlIGluZmxpZ2h0X21zZ19yZXM7CiAKQEAgLTE5OSw2ICYjNDM7MjMyLDE1IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewogCXUzMiBwZl9kZXN0X3ZyY3FfaWQ7CiAJdTMyIGh3Y190aW1lb3V0OwogCiYjNDM7CS8qIENoZWNrZWQgYWZ0ZXIgc2xvdCBhY3F1aXNpdGlvbjsgY2xlYXJlZCBvbiB0ZWFyZG93biB0byByZWplY3Qgc2VuZHMuICovCiYjNDM7CWJvb2wgY2hhbm5lbF91cDsKJiM0MzsKJiM0MzsJLyogUEYgbWF5IG93biB0aGUgcXVldWUgbWFwcGluZ3M7IHN0YXRlIGxhc3RzIG9ubHkgZm9yIHRoaXMgY29udGV4dC4gKi8KJiM0MzsJYm9vbCBzZXR1cF9hY3RpdmU7CiYjNDM7CiYjNDM7CS8qIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgY2FsbGVycywgaW5jbHVkaW5nIHdhaXRlcnM7IHVuZGVyIGh3Y19sb2NrLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7CiYjNDM7CiAJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oCmluZGV4IGRiYWJjZmI5NWRhZjMuLmU5NjM4N2Q3OTUyNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hbmEvc2htX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmgKQEAgLTIwLDcgJiM0MzsyMCw3IEBAIHZvaWQgbWFuYV9zbWNfaW5pdChzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsCiAJCSAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLAotCQkgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpOwomIzQzOwkJICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpOwogCiBpbnQgbWFuYV9zbWNfdGVhcmRvd25faHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjgzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTUFOQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBNQU5BLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYCBkaXJlY3RvcnkuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBhY3Jvc3MgYSBmZXcgY29yZSBmaWxlczogYGdkbWFfbWFpbi5jYCwgYGh3X2NoYW5uZWwuY2AsIGFuZCBgc2htX2NoYW5uZWwuY2AsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIE1BTkEgaXRzZWxmLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIGxpa2VseSB0byBoaXQgbWUgaW4gbXkgZXhpc3RpbmcgdGVzdCBlbnZpcm9ubWVudHM/CgpNeSB0cmlhZ2UgcGhpbG9zb3BoeSBjb21lcyBpbnRvIHBsYXkgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgZmFsbHMgaW50byB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBhdCBTZWN0aW9uIDIgb2YgbXkgbWV0aG9kb2xvZ3kuIEl0IGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgcG90ZW50aWFsbHkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgYnkgc3l6a2FsbGVyLgoKTGV0JiMzOTtzIHNlZTogTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgaXMgYSBQQ0kgZGV2aWNlLiBTcGVjaWZpY2FsbHkgZm9yIE1pY3Jvc29mdCBBenVyZSBWTXMuIENvdWxkIGFsc28gYmUgYSBIeXBlci1WIG9yIEF6dXJlIFZGIGRldmljZS4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3IgaHlwZXJ2aXNvciBlbnZpcm9ubWVudCwgc29tZXRoaW5nIHRoYXQgaXMgcHJvYmFibHkgbm90IHN1cHBvcnRlZCBpbiBvdXIgc3RhbmRhcmQgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgS2NvbmZpZyBpcyBzZXQgdXAsIHNpbmNlIGl0JiMzOTtzIG1vc3QgbGlrZWx5IG5vdCBhdmFpbGFibGUgaW4gZGVmYXVsdCBrZXJuZWxzLCBvciBlbXVsYXRlZCBieSBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01JQ1JPU09GVF9NQU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc9Mj1jb25maWcgTUFOQV9JTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc6NDpcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcdTAwMjZcdTAwMjYgRVRIRVJORVQgXHUwMDI2XHUwMDI2IFBDSSBcdTAwMjZcdTAwMjYgTUlDUk9TT0ZUX01BTkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoxODpjb25maWcgTUlDUk9TT0ZUX01BTkFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSAmIzQzOz0gbWFuYS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTYtbWFuYS1vYmpzIDo9IGdkbWFfbWFpbi5vIHNobV9jaGFubmVsLm8gaHdfY2hhbm5lbC5vIG1hbmFfZW4ubyBtYW5hX2V0aHRvb2wubyBtYW5hX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE1hbmEgR0RNQSBEcml2ZXIgUHJvYmUqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgZ2RtYV9tYWluLmNgIGZpbGUgd2l0aGluIHRoZSBNaWNyb3NvZnQgTUFOQSBkcml2ZXIgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6b29tIGluIG9uIGhvdyB0aGlzIHRoaW5nIGdldHMgaXRzIGhvb2tzIGludG8gdGhlIFBDSSBidXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFBDSSBJRCBoYW5kbGluZyBhbmQgdGhlIHByb2JlIHNlcXVlbmNlLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hpY2ggZGV2aWNlIElEcyB0aGlzIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBNQU5BIGhhcmR3YXJlIGFuZCBjb3JyZWN0bHkgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBwcm9iaW5nIG1lY2hhbmlzbS4gQW55IHBvdGVudGlhbCBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgaGVyZSB0aGF0IEkmIzM5O20gbWlzc2luZz8gQW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX2dkX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI1Mjk9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUzMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI1MzQ6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUzNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc2NC1cdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6Mjc2NTpcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzY2LVx0LnJlbW92ZVx0XHQ9IG1hbmFfZ2RfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODAyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGdkbWFfbWFpbi5jYCBNeXN0ZXJ5KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYW4gaXNzdWUgYW5kIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBvdXQgdGhlIGBtYW5hX2lkX3RhYmxlYCB3aXRoaW4gYGdkbWFfbWFpbi5jYC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgdGFibGUgaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgRE1BIGNoYW5uZWxzLCBvciBldmVuIGludGVycnVwdCBhc3NpZ25tZW50cyDigJMgc29tZXRoaW5nIGZ1bmRhbWVudGFsIHRvIHRoZSBHRE1BJiMzOTtzIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiB0aGF0IHRhYmxlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB0byBuYXJyb3cgZG93biB0aGlzIHByb2JsZW0uIExldCYjMzk7cyBzZWUgaWYgdGhhdCB0YWJsZSBob2xkcyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfaWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjczND1zdGF0aWMgaW50IG1hbmFfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzU1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzU2LVx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGX0RFVklDRV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNzYyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjMtXHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzY0Olx0LmlkX3RhYmxlXHQ9IG1hbmFfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNzY1LVx0LnByb2JlXHRcdD0gbWFuYV9nZF9wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yODE3PW1vZHVsZV9leGl0KG1hbmFfZHJpdmVyX2V4aXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI4MTk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1hbmFfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgyMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQzNQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgUENJIERldmljZSBJRHMqKgoKSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlc2UgaWRlbnRpZmllcnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgZXhhY3RseSBhcmUgYFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKWAgYW5kIGBNQU5BX1ZGX0RFVklDRV9JRGA/IFRoZXNlIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgZmFtaWxpYXIuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBhcmUgc28gSSBjYW4gZ28gZnVydGhlciB3aXRoIHRoaXMgdGFzay4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcgYW5kIGZpZ3VyZSBvdXQgdGhlaXIgZGVmaW5pdGlvbnMuIFRoaXMgY291bGQgYmUgdmVuZG9yLXNwZWNpZmljIGluZm9ybWF0aW9uIG9yIHBhcnQgb2YgYSBkcml2ZXIgbW9kZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aG9zZSBjb25zdGFudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NTA6XHRcdH1cbjI3NTE6XHRcbjI3NTI6XHRcdHJldHVybiBlcnIgPyBlcnIgOiBudW12ZnM7XG4yNzUzOlx0fVxuMjc1NDpcdFxuMjc1NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG4yNzU2Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKSB9LFxuMjc1NzpcdFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGMl9ERVZJQ0VfSUQpIH0sXG4yNzU4Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfVkZfREVWSUNFX0lEKSB9LFxuMjc1OTpcdFx0eyB9XG4yNzYwOlx0fTtcbjI3NjE6XHRcbjI3NjI6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4yNzYzOlx0XHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG4yNzY0Olx0XHQuaWRfdGFibGVcdD0gbWFuYV9pZF90YWJsZSxcbjI3NjU6XHRcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG4yNzY2Olx0XHQucmVtb3ZlXHRcdD0gbWFuYV9nZF9yZW1vdmUsXG4yNzY3Olx0XHQuc3VzcGVuZFx0PSBtYW5hX2dkX3N1c3BlbmQsXG4yNzY4Olx0XHQucmVzdW1lXHRcdD0gbWFuYV9nZF9yZXN1bWUsXG4yNzY5Olx0XHQuc2h1dGRvd25cdD0gbWFuYV9nZF9zaHV0ZG93bixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDAKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgRnV6emluZyBhIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMuIEl0IGRlYWxzIHdpdGggJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBoZXJlLiBUaGUgdGV4dCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFUgZHJpdmVycy4gSXQgZ2l2ZXMgZXhhbXBsZXMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgKEFTSUNzIG9yIFBDSWUgY2FyZHMpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIE1pY3Jvc29mdCBNQU5BIGRyaXZlci4gSXQmIzM5O3MgaWRlbnRpZmllZCBhcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQy9BenVyZSBOSUMgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9gLiBDcml0aWNhbGx5LCBpdCAqcmVxdWlyZXMqIE1pY3Jvc29mdCBNQU5BIFBDSWUgaGFyZHdhcmUgb3IgYSBWRiBkZXZpY2UgcnVubmluZyBvbiBBenVyZSBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc24mIzM5O3QgYSB2aXJ0dWFsIGRldmljZSBsaWtlIHZpcnRpbywgbG9vcGJhY2ssIG9yIHNpbWlsYXIuIEl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBwYXRjaCB0b3VjaGVzIGFueXRoaW5nIG91dHNpZGUgb2YgdGhpcyBzcGVjaWZpYyBkcml2ZXIsIHNvIEkgY2hlY2sgdGhlIG1vZGlmaWVkIGZpbGVzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGdkbWFfbWFpbi5jYCwgYGh3X2NoYW5uZWwuY2AsIGBzaG1fY2hhbm5lbC5jYCwgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVyIGZpbGVzOiBgZ2RtYS5oYCwgYGh3X2NoYW5uZWwuaGAsIGFuZCBgc2htX2NoYW5uZWwuaGAuIFRoZXNlIGFyZSBhbGwgKmV4Y2x1c2l2ZWx5KiB3aXRoaW4gdGhlIE1pY3Jvc29mdCBNQU5BIGRyaXZlciBkaXJlY3RvcnkuIFRoYXQgcmVpbmZvcmNlcyB0aGUgaWRlYSB0aGF0IHRoaXMgaXMgYSBzZWxmLWNvbnRhaW5lZCwgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlci4KCkdpdmVuIHRoYXQgTUFOQSBpcyBhIHZlbmRvci1zcGVjaWZpYyBOSUMgZHJpdmVyIGRlc2lnbmVkIGZvciBNaWNyb3NvZnQgQXp1cmUgU21hcnROSUMgaGFyZHdhcmUsIGFuZCBpdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgdGhlIGFjdHVhbCBNQU5BIFBDSSBkZXZpY2UsIGl0IGFsaWducyBkaXJlY3RseSB3aXRoIFNlY3Rpb24gMiYjMzk7cyBkZWZpbml0aW9uLgoKVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gU2VjdGlvbiAyLCB0aGlzIE1BTkEgZHJpdmVyIGNvbnN0aXR1dGVzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCYjMzQ7IGFuZCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bSBkb2luZyBhIHF1aWNrIHNhbml0eSBjaGVjay4gTXkgRm9jdXNTeW1ib2xzIGxpc3QgaXMgZW1wdHksIGFuZCB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgRW5hYmxlQ29uZmlncy4gRXZlcnl0aGluZyBhbGlnbnMuIE5vdywgSSYjMzk7bGwgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgLyBQQ0kgZGV2aWNlIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgb3IgcGxhdGZvcm0tc3BlY2lmaWMgQXp1cmUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyAvIFBDSSBkZXZpY2UgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBBenVyZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoxOS4yNjg3MzA2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIwNjE3MDUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIC8gUENJIGRldmljZSBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIG9yIHBsYXRmb3JtLXNwZWNpZmljIEF6dXJlIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MTkuMjY4NzQwMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzA3NTk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyNGQ1NzcxNzc3NGVkZjM0ZjViZTVlMTE3NWFjYzNkNDMwNDAwZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNDoyMzoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXFxuaW5kZXggZjkyYjJkMGJmOTI2ZS4uNzg0MjRlMWQ4ODRmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXFxuQEAgLTE2Miw2ICsxNjIsOCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcXG4ge1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuK1xcdGJvb2wgbmVlZF9sb2cgPSB0cnVlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMTY5LDExICsxNzEsMTMgQEAgYm9vbCBtYW5hX25lZWRfbG9nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBpbnQgZXJyKVxcbiBcXHRpZiAoIWdjKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4gXFx0aWYgKGh3YyBcXHUwMDI2XFx1MDAyNiBod2MtXFx1MDAzZWh3Y190aW1lb3V0ID09IDApXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0bmVlZF9sb2cgPSBmYWxzZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIG5lZWRfbG9nO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1hbmFfZ2RfcXVlcnlfbWF4X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtMzMxLDcgKzMzNSwxMSBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcXVlcnlfaHdjX3RpbWVvdXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqdGltZW91dF92YWwpXFxuIFxcdGlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKVxcbiBcXHRcXHRyZXR1cm4gZXJyID8gZXJyIDogLUVQUk9UTztcXG4gXFxuLVxcdCp0aW1lb3V0X3ZhbCA9IHJlc3AudGltZW91dF9tcztcXG4rXFx0LyogS2VlcCB0aGUgY3VycmVudCB0aW1lb3V0IG9uIGEgemVybyBxdWVyeSByZXBseS4gQXN5bmNocm9ub3VzXFxuK1xcdCAqIEhXQ19EQVRBX0NGR19IV0NfVElNRU9VVCB1cGRhdGVzIHJlbWFpbiB1bmZpbHRlcmVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlc3AudGltZW91dF9tcylcXG4rXFx0XFx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzg3LDkgKzM5NSwyNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfZGV0ZWN0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcXG4gXFx0XFx0XFx0IHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcClcXG4ge1xcbi1cXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbitcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCBlcnI7XFxuIFxcbi1cXHRyZXR1cm4gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFx0aWYgKCFod2MpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcdGh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMrKztcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKC0taHdjLVxcdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwKVxcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFxcXCJORVRfTUFOQVxcXCIpO1xcbiBcXG5AQCAtNzEwLDYgKzczNiw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKCFnYykge1xcbkBAIC03MTksMTQgKzc0NiwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRpZiAoIWh3Yykge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiTUFOQSBzZXJ2aWNlOiBubyBIV0NcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJ3Qgd2FpdCAqL1xcbiBcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiTUFOQSByZXNldCBjeWNsZSBzdGFydFxcXFxuXFxcIik7XFxuIFxcbkBAIC0xMjMwLDE1ICsxMjYwLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfY3JlYXRlX2NxKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgKnNwZWMsXFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcXG4ge1xcbitcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKmNxX3RhYmxlID0gUkVBRF9PTkNFKGdjLVxcdTAwM2VjcV90YWJsZSk7XFxuIFxcdHUzMiBpZCA9IHF1ZXVlLVxcdTAwM2VpZDtcXG4gXFxuLVxcdGlmIChpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuK1xcdC8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi9cXG4rXFx0aWYgKCFjcV90YWJsZSB8fCBpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghZ2MtXFx1MDAzZWNxX3RhYmxlW2lkXSlcXG4rXFx0aWYgKCFjcV90YWJsZVtpZF0pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGdjLVxcdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xcbitcXHRjcV90YWJsZVtpZF0gPSBOVUxMO1xcbiB9XFxuIFxcbiBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuQEAgLTEzMzMsNiArMTM2NSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxcbiBcXHRpZiAoZ21pLVxcdTAwM2Vucl9wYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2ICFNQU5BX1BBR0VfQUxJR05FRChnbWktXFx1MDAzZXZpcnRfYWRkcikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogVGhlIGNhbGxlciBtdXN0IGtlZXAgdGhlIEhXQyBhbGl2ZSB0aHJvdWdob3V0IHF1ZXVlIGNyZWF0aW9uLiAqL1xcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRyZXFfbXNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBhZ2VfYWRkcl9saXN0LCBudW1fcGFnZSk7XFxuIFxcdGlmIChyZXFfbXNnX3NpemUgXFx1MDAzZSBod2MtXFx1MDAzZW1heF9yZXFfbXNnX3NpemUpXFxuQEAgLTE1MzgsNyArMTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBUaGUgc2V0dXAgY2FsbGVyIG11c3QgZXhjbHVkZSBjb25jdXJyZW50IEhXQyB0ZWFyZG93bi4gKi9cXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFxuIFxcdG1hbmFfZ2RfaW5pdF9yZXFfaGRyKFxcdTAwMjZyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTixcXG4gXFx0XFx0XFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcXG4gXFxuQEAgLTI1MzIsNiArMjU2Nyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmdjLVxcdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZWdpY19tdXRleCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2spO1xcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZ2MpO1xcbiBcXHRnYy1cXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcXG4gXFx0Z2MtXFx1MDAzZWJhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xcbmluZGV4IDI2M2U3YzRlMjkzNDEuLjc1MGVlOGY3Mjk5OTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXFxuQEAgLTksMTcgKzksNDggQEBcXG4gc3RhdGljIGludCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2ICptc2dfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgKnIgPSBcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzO1xcbitcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dTMyIGluZGV4O1xcbiBcXG4tXFx0ZG93bihcXHUwMDI2aHdjLVxcdTAwM2VzZW1hKTtcXG4rXFx0LyogRklGTyBzbG90IGFkbWlzc2lvbiBoYXMgYSBzZXBhcmF0ZSBidWRnZXQgZnJvbSB0aGUgcmVzcG9uc2Ugd2FpdC5cXG4rXFx0ICogRXhwaXJ5IHJlcG9ydHMgLUVUSU1FRE9VVCBldmVuIHdoaWxlIGVhcmxpZXIgcmVxdWVzdHMgbWFrZSBwcm9ncmVzcyxcXG4rXFx0ICogc28gY2FsbGVycyBtYXkgaW5pdGlhdGUgcmVjb3Zlcnkgb24gY29udGVudGlvbiBhbG9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChkb3duX3RpbWVvdXQoXFx1MDAyNmh3Yy1cXHUwMDNlc2VtYSwgbXNlY3NfdG9famlmZmllcyhod2MtXFx1MDAzZWh3Y190aW1lb3V0KSkpXFxuK1xcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLnNpemUpO1xcbitcXHRpZiAoIWh3Yy1cXHUwMDNlY2hhbm5lbF91cCkge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIHNlbWFwaG9yZSBhZG1pdHMgYXQgbW9zdCByLVxcdTAwM2VzaXplIGhvbGRlcnMgYXQgYSB0aW1lLCBzbyBhIHNsb3RcXG4rXFx0ICogYWNxdWlyZWQgYWJvdmUgYWx3YXlzIGhhcyBhIGZyZWUgYml0IHdhaXRpbmcgZm9yIGl0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoci1cXHUwMDNlbWFwLCByLVxcdTAwM2VzaXplKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShpbmRleCBcXHUwMDNlPSByLVxcdTAwM2VzaXplKSkge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbiBcXG4tXFx0Yml0bWFwX3NldChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XFxuK1xcdGN0eCA9IFxcdTAwMjZod2MtXFx1MDAzZWNhbGxlcl9jdHhbaW5kZXhdO1xcbitcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0LyogVGFrZSBib3RoIHJlZmVyZW5jZXMgKHNlbmRlciArIGhhbmRsZV9yZXNwKSBiZWZvcmUgcHVibGlzaGluZyB0aGVcXG4rXFx0ICogc2xvdCwgc28gYW4gZWFybHkgcmVzcG9uc2UgY2Fubm90IGZyZWUgaXQgdW5kZXIgdGhlIHNlbmRlci5cXG4rXFx0ICovXFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZjbnQsIDIpO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IGZhbHNlO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IHRydWU7XFxuK1xcdGN0eC1cXHUwMDNlbXNnX2lkID0gaW5kZXg7XFxuK1xcdGN0eC1cXHUwMDNlZXJyb3IgPSAtRUlOUFJPR1JFU1M7XFxuK1xcbitcXHQvKiBQdWJsaXNoIHRoZSBzbG90IGxhc3QsIGFmdGVyIGl0IGlzIGZ1bGx5IGluaXRpYWxpc2VkLiAqL1xcbitcXHRiaXRtYXBfc2V0KHItXFx1MDAzZW1hcCwgaW5kZXgsIDEpO1xcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG5AQCAtNDAsNiArNzEsMTMgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcHV0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBtc2dfaWQpXFxuIFxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBod2NfY3R4X3B1dChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXFxuK1xcdFxcdFxcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4KVxcbit7XFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcmVmY250KSlcXG4rXFx0XFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cXHUwMDNlbXNnX2lkKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY29uc3Qgc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4LFxcbiBcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIHJlc3BfbGVuKVxcbkBAIC04MSw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqcmVzcF9tc2cgPSByeF9yZXEtXFx1MDAzZWJ1Zl92YTtcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdGJvb2wgcmVsZWFzZTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSkge1xcbkBAIC05MCwyMiArMTI5LDUzIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxcbiBcXHR9XFxuIFxcbiBcXHRjdHggPSBod2MtXFx1MDAzZWNhbGxlcl9jdHggKyBtc2dfaWQ7XFxuLVxcdGVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0Y3R4LVxcdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVxcdTAwM2VzdGF0dXM7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdG1lbWNweShjdHgtXFx1MDAzZW91dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLW91dDpcXG4rXFx0LyogVGhlIHNlbmRlciBoYXMgbm90IHB1Ymxpc2hlZCBpdHMgYnVmZmVyIHlldCwgc28gbm90aGluZyBhc2tlZCBmb3JcXG4rXFx0ICogdGhpcyByZXNwb25zZS4gIEtlZXAgdGhlIHNsb3QgcmVzZXJ2ZWQgYW5kIGRyb3AgdGhlIG1lc3NhZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWN0eC1cXHUwMDNlb3V0cHV0X2J1ZiBcXHUwMDI2XFx1MDAyNiAhY3R4LVxcdTAwM2VyZXNwb25kZWQpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cXHUwMDNlcnhxLCByeF9yZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRha2UgdGhlIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlIGF3YXkgZXhhY3RseSBvbmNlOiByZWxlYXNpbmcgaXRcXG4rXFx0ICogaXMgd2hhdCBmcmVlcyBhIHNsb3Qgd2hvc2Ugc2VuZGVyIGhhcyBhbHJlYWR5IGdpdmVuIHVwLlxcbitcXHQgKi9cXG4rXFx0cmVsZWFzZSA9IGN0eC1cXHUwMDNlcmVzcF9wZW5kaW5nO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlcmVzcG9uZGVkKSB7XFxuK1xcdFxcdC8qIFRoZSBzZW5kZXIgdGltZWQgb3V0IGFuZCBhYmFuZG9uZWQgdGhlIHNsb3QsIG9yIGEgcmVzcG9uc2VcXG4rXFx0XFx0ICogd2FzIGFscmVhZHkgYXBwbGllZC4gIENvbnN1bWUgdGhpcyBvbmUgd2l0aG91dCB3cml0aW5nXFxuK1xcdFxcdCAqIGFueXRoaW5nLCB0aGVuIHJlbGVhc2UgdGhlIHNsb3QgaXQgd2FzIGhvbGRpbmcuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuK1xcdFxcdGlmIChyZWxlYXNlKVxcbitcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xcbitcXHRpZiAoIWVycikge1xcbitcXHRcXHRjdHgtXFx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXFx1MDAzZXN0YXR1cztcXG4rXFx0XFx0bWVtY3B5KGN0eC1cXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcXG4rXFx0fVxcbiBcXHRjdHgtXFx1MDAzZWVycm9yID0gZXJyO1xcbiBcXG4tXFx0LyogTXVzdCBwb3N0IHJ4IHdxZSBiZWZvcmUgY29tcGxldGUoKSwgb3RoZXJ3aXNlIHRoZSBuZXh0IHJ4IG1heVxcbi1cXHQgKiBoaXQgbm9fd3FlIGVycm9yLlxcbitcXHQvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZVxcbitcXHQgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLlxcbiBcXHQgKi9cXG4gXFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuLVxcbiBcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAocmVsZWFzZSlcXG4rXFx0XFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxcbkBAIC0xNDYsNyArMjE2LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0Y2FzZSBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIOlxcbi1cXHRcXHRcXHRod2MtXFx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gKHUxNil2YWw7XFxuK1xcdFxcdFxcdC8qIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgYSAyNC1iaXQgZmllbGQuICBLZWVwXFxuK1xcdFxcdFxcdCAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkXFxuK1xcdFxcdFxcdCAqIGFuZCB2YWxpZGF0ZWQgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSByYXRoZXJcXG4rXFx0XFx0XFx0ICogdGhhbiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdTE2LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aHdjLVxcdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IHZhbDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRjYXNlIEhXQ19JTklUX0RBVEFfTUFYX1JFUVVFU1Q6XFxuQEAgLTQ3Niw3ICs1NTEsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcbiBcXHRkbWFfYnVmLVxcdTAwM2VudW1fcmVxcyA9IHFfZGVwdGg7XFxuIFxcbi1cXHRidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTtcXG4rXFx0LyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhc1xcbitcXHQgKiBhbHJlYWR5IGFzc3VtZWQgZm9yIHRoZSBFUSBhbmQgQ1EgcmluZ3MgYWJvdmUuICBUaGUgc2xvdHMgYXJlXFxuK1xcdCAqIGNhcnZlZCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBidWZmZXIsIHNvIGFueSB0YWlsIGlzIHVudXNlZC5cXG4rXFx0ICovXFxuK1xcdGJ1Zl9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKSk7XFxuIFxcbiBcXHRnbWkgPSBcXHUwMDI2ZG1hX2J1Zi1cXHUwMDNlbWVtX2luZm87XFxuIFxcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7XFxuQEAgLTU2MCw2ICs2MzksNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXFxuIFxcdGh3Y193cS1cXHUwMDNlZ2RtYV93cSA9IHF1ZXVlO1xcbiBcXHRod2Nfd3EtXFx1MDAzZXF1ZXVlX2RlcHRoID0gcV9kZXB0aDtcXG4gXFx0aHdjX3dxLVxcdTAwM2Vod2NfY3EgPSBod2NfY3E7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZod2Nfd3EtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0ZXJyID0gbWFuYV9od2NfYWxsb2NfZG1hX2J1Zihod2MsIHFfZGVwdGgsIG1heF9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aHdjX3dxLVxcdTAwM2Vtc2dfYnVmKTtcXG5AQCAtNTc3LDcgKzY1Nyw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbitzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdHUzMiBkZXN0X3ZpcnRfcnFfaWQsIHUzMiBkZXN0X3ZpcnRfcmNxX2lkLFxcbiBcXHRcXHRcXHRcXHRib29sIGRlc3RfcGYpXFxuQEAgLTYxNiw3ICs2OTYsMTAgQEAgc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuaW5saW5lX29vYl9kYXRhID0gdHhfb29iO1xcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuY2xpZW50X2RhdGFfdW5pdCA9IDA7XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNmh3Y190eHEtXFx1MDAzZWxvY2spO1xcbiBcXHRlcnIgPSBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoaHdjX3R4cS1cXHUwMDNlZ2RtYV93cSwgXFx1MDAyNnJlcS1cXHUwMDNld3FlX3JlcSwgTlVMTCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZod2NfdHhxLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTY0Miw2ICs3MjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXHRzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLVxcdTAwM2VyeHE7XFxuIFxcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXE7XFxuIFxcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTY1NywxOCArNzQxLDM4IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdGlmICghY3R4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eFtpXS5sb2NrKTtcXG4gXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XFxuK1xcdH1cXG4gXFxuIFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcXG4gXFxuLVxcdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfZXEpO1xcbitcXHQvKiBFbmFibGUgYWRtaXNzaW9uIGZvciB0aGUgdGVzdCBFUSByZXF1ZXN0LiAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0aHdjLVxcdTAwM2VjaGFubmVsX3VwID0gdHJ1ZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVxcdTAwM2VjcS1cXHUwMDNlZ2RtYV9lcSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGh3Yy1cXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXFxuK3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyICptYXhfcmVxX21zZ19zaXplLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1MzIgKm1heF9yZXNwX21zZ19zaXplKVxcbiB7XFxuK1xcdC8qIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpIGZpbGxzIHRoZSBib290c3RyYXAgZmllbGRzIGZyb20gaGFyZFxcbitcXHQgKiBJUlEgb24gR0RNQV9FUUVfSFdDX0lOSVRfREFUQSBhbmQgdGhlbiBzaWduYWxzIGh3Y19pbml0X2VxZV9jb21wIG9uXFxuK1xcdCAqIEdETUFfRVFFX0hXQ19JTklUX0RPTkUuICBUaGUgd2FpdF9mb3JfY29tcGxldGlvbigpIGJlbG93IHBhaXJzIHdpdGhcXG4rXFx0ICogdGhhdCBjb21wbGV0ZSgpLCBzbyBldmVyeSB2YWx1ZSBzdG9yZWQgYmVmb3JlIElOSVRfRE9ORSBpcyBvcmRlcmVkXFxuK1xcdCAqIGFnYWluc3QgdGhlIHJlYWRzIHRoYXQgZm9sbG93IGl0IGhlcmUuXFxuK1xcdCAqL1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcnEgPSBod2MtXFx1MDAzZXJ4cS1cXHUwMDNlZ2RtYV93cTtcXG4gXFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVxcdTAwM2V0eHEtXFx1MDAzZWdkbWFfd3E7XFxuQEAgLTY3Niw2ICs3ODAsMTUgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxcbiBcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtXFx1MDAzZWNxLVxcdTAwM2VnZG1hX2NxO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0LyogRG8gbm90IHJldXNlIGRpbWVuc2lvbnMgb3Igcm91dGluZyBJRHMgZnJvbSBhIHByZXZpb3VzIGVzdGFibGlzaC4gKi9cXG4rXFx0aHdjLVxcdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IDA7XFxuK1xcdGh3Yy1cXHUwMDNlaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZSA9IDA7XFxuK1xcdGh3Yy1cXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemUgPSAwO1xcbitcXHRnYy1cXHUwMDNlaHdjLmRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcXG4rXFx0Z2MtXFx1MDAzZWh3Yy5wZGlkID0gSU5WQUxJRF9QRElEO1xcbitcXHRod2MtXFx1MDAzZXBmX2Rlc3RfdnJxX2lkID0gMDtcXG4rXFx0aHdjLVxcdTAwM2VwZl9kZXN0X3ZyY3FfaWQgPSAwO1xcbitcXG4gXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZod2MtXFx1MDAzZWh3Y19pbml0X2VxZV9jb21wKTtcXG4gXFxuIFxcdGVyciA9IG1hbmFfc21jX3NldHVwX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSxcXG5AQCAtNjgzLDcgKzc5Niw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcXG4gXFx0XFx0XFx0XFx0IGNxLVxcdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlLFxcbiBcXHRcXHRcXHRcXHQgcnEtXFx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCBzcS1cXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZSxcXG4tXFx0XFx0XFx0XFx0IGVxLVxcdTAwM2VlcS5tc2l4X2luZGV4KTtcXG4rXFx0XFx0XFx0XFx0IGVxLVxcdTAwM2VlcS5tc2l4X2luZGV4LCBcXHUwMDI2aHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5AQCAtNjk0LDYgKzgwNywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXFxuIFxcdCptYXhfcmVxX21zZ19zaXplID0gaHdjLVxcdTAwM2Vod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplO1xcbiBcXHQqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtXFx1MDAzZWh3Y19pbml0X21heF9yZXNwX21zZ19zaXplO1xcbiBcXG4rXFx0LyogUmVqZWN0IGEgbWlzc2luZyBkb29yYmVsbCBiZWZvcmUgdGhlIGNoYW5uZWwgdGVzdC4gVGhpcyBuZWl0aGVyXFxuK1xcdCAqIHZhbGlkYXRlcyBpdHMgQkFSIHJhbmdlIG5vciBwcm90ZWN0cyBlYXJsaWVyIElSUSByZWFybWluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChnYy1cXHUwMDNlaHdjLmRvb3JiZWxsID09IElOVkFMSURfRE9PUkJFTEwpIHtcXG4rXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogbm8gZG9vcmJlbGwgaW4gaW5pdCBkYXRhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFxuIFxcdC8qIEJvdGggd2VyZSBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuICovXFxuIFxcdGlmIChXQVJOX09OKGNxLVxcdTAwM2VpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG5AQCAtNzEyLDYgKzgzMywxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSArIFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS5cXG4rXFx0ICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocV9kZXB0aCBcXHUwMDNlIFUxNl9NQVggLyAyKVxcbitcXHRcXHRxX2RlcHRoID0gVTE2X01BWCAvIDI7XFxuK1xcbiBcXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC03NTEsMTIgKzg3OCw0NCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuKy8qIEJyaW5nLXVwIG9ubHk6IHJlcXVpcmVzIG5vIHNlbmRlcnMgb3IgY29uY3VycmVudCBsaWZlY3ljbGUgb3BlcmF0aW9ucy5cXG4rICogVGhpcyBoZWxwZXIgZG9lcyBub3QgdW5wdWJsaXNoIHRoZSBIV0Mgb3IgZHJhaW4gc2VuZGVycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YylcXG4re1xcbitcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGh3Yy1cXHUwMDNlZ2RtYV9kZXYtXFx1MDAzZWdkbWFfY29udGV4dDtcXG4rXFxuK1xcdC8qIFRoZSBDUSBoZWxwZXIgZGVyZWdpc3RlcnMgdGhlIEhXQyBFUSBiZWZvcmUgcmV0dXJuaW5nLiAqL1xcbitcXHRpZiAoaHdjLVxcdTAwM2VjcSkge1xcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NxKGdjLCBod2MtXFx1MDAzZWNxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VjcSA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCk7XFxuK1xcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2V0eHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNldHhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2V0eHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2VyeHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNlcnhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VyeHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcXG4rXFx0aHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcXG4rfVxcbitcXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiB7XFxuIFxcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFxcdTAwMjZnYy1cXHUwMDNlaHdjO1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuLVxcdHUxNiBxX2RlcHRoX21heDtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgKipvbGRfY3FfdGFibGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBxX2RlcHRoX21heDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpO1xcbkBAIC03NjQsMTAgKzkyMywxMSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0Z2QtXFx1MDAzZWdkbWFfY29udGV4dCA9IGdjO1xcbi1cXHRnZC1cXHUwMDNlZHJpdmVyX2RhdGEgPSBod2M7XFxuIFxcdGh3Yy1cXHUwMDNlZ2RtYV9kZXYgPSBnZDtcXG4gXFx0aHdjLVxcdTAwM2VkZXYgPSBnYy1cXHUwMDNlZGV2O1xcbiBcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7XFxuK1xcdGh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMgPSAwO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcXG4gXFxuIFxcdC8qIEhXQydzIGluc3RhbmNlIG51bWJlciBpcyBhbHdheXMgMC4gKi9cXG4gXFx0Z2QtXFx1MDAzZWRldl9pZC5hc191aW50MzIgPSAwO1xcbkBAIC03NzYsNiArOTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0Z2QtXFx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XFxuIFxcdGdkLVxcdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XFxuIFxcbitcXHQvKiBQdWJsaXNoIGZvciBzZXR1cDsgcXVldWUgaW5pdGlhbGl6YXRpb24gYmVsb3cgbXVzdCBwcmVjZWRlIHNlbmRlcnMuICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0Z2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IGh3YztcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbiBcXHQvKiBtYW5hX2h3Y19pbml0X3F1ZXVlcygpIG9ubHkgY3JlYXRlcyB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLFxcbiBcXHQgKiBhbmQgZG9lc24ndCB0b3VjaCB0aGUgSFdDIGRldmljZS5cXG4gXFx0ICovXFxuQEAgLTc5NCw4ICs5NTksMTMyIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChxX2RlcHRoX21heCBcXHUwMDNlIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7XFxuK1xcdFxcdC8qIEJvdW5kIERNQSBhbGxvY2F0aW9ucyBiZWZvcmUgdXNpbmcgdGhlIDI0LWJpdCBkZXB0aC4gKi9cXG4rXFx0XFx0aWYgKHFfZGVwdGhfbWF4IFxcdTAwM2UgSFdfQ0hBTk5FTF9NQVhfUVVFVUVfREVQVEgpXFxuK1xcdFxcdFxcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9NQVhfUVVFVUVfREVQVEg7XFxuK1xcbitcXHRcXHQvKiBLZWVwIGJvb3RzdHJhcCBtZXNzYWdlIHNpemVzIGZvciBtYW5kYXRvcnkgY29tbWFuZHMuXFxuK1xcdFxcdCAqIEluY29tcGF0aWJsZSByZXBvcnRzIHNraXAgcmVidWlsZGluZywgbm90IGNoYW5uZWwgY3JlYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcXG4rXFx0XFx0ICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUgfHxcXG4rXFx0XFx0ICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplIFxcdTAwM2VcXG4rXFx0XFx0XFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XFxuK1xcdFxcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXFx1MDAzZVxcbitcXHRcXHRcXHRVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkhXQzogaW52YWxpZCBkaW1zIHE9JXUgcmVxPSV1IHJlc3A9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdFxcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEg7XFxuK1xcdFxcdFxcdGdvdG8gc2tpcF9yZWluaXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGVycik7XFxuK1xcdFxcdFxcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRod2MtXFx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xcbitcXG4rXFx0XFx0LyogVW5wdWJsaXNoIHRoZSBDUSBhbmQgZHJhaW4gaXRzIEVRIGJlZm9yZSBmcmVlaW5nIHRoZSB0YWJsZS4gKi9cXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcXG4rXFxuK1xcdFxcdG9sZF9jcV90YWJsZSA9IGdjLVxcdTAwM2VjcV90YWJsZTtcXG4rXFx0XFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4rXFx0XFx0Z2MtXFx1MDAzZW1heF9udW1fY3FzID0gMDtcXG4rXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdFxcdHZmcmVlKG9sZF9jcV90YWJsZSk7XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIHFfZGVwdGhfbWF4LFxcbitcXHRcXHRcXHRcXHRcXHQgICBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICBtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWluaXQgSFdDOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0Z290byByZWluaXRfZmFsbGJhY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcXHUwMDI2cV9kZXB0aF9tYXgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAocV9kZXB0aF9tYXggXFx1MDAzYyBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2cgfHxcXG4rXFx0XFx0ICAgICBtYXhfcmVxX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSB8fFxcbitcXHRcXHQgICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpKSB7XFxuK1xcdFxcdFxcdC8qIFRoZSByZWJ1aWx0IGNoYW5uZWwgbXVzdCBzdXBwb3J0IHRoZSBhbGxvY2F0ZWQgZGVwdGhcXG4rXFx0XFx0XFx0ICogYW5kIG1lc3NhZ2Ugc2l6ZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiSFdDOiByZWJ1aWx0IHE9JXUgcmVxPSV1IHJlc3A9JXUsIGJ1aWx0IGZvciAldS8ldS8ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cV9kZXB0aF9tYXgsIG1heF9yZXFfbXNnX3NpemUsXFxuK1xcdFxcdFxcdFxcdG1heF9yZXNwX21zZ19zaXplLCBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2csXFxuK1xcdFxcdFxcdFxcdEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcXG4rXFx0XFx0XFx0XFx0SFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XFxuK1xcdFxcdFxcdGVyciA9IC1FUFJPVE87XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlLWVzdGFibGlzaCBIV0M6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRnb3RvIHNraXBfcmVpbml0O1xcbitcXG4rcmVpbml0X2ZhbGxiYWNrOlxcbitcXHQvKiBBIGZhaWxlZCBoYW5kc2hha2UgbGVhdmVzIHF1ZXVlIG93bmVyc2hpcCB1bmNlcnRhaW4uICovXFxuK1xcdGlmIChod2MtXFx1MDAzZXNldHVwX2FjdGl2ZSkge1xcbitcXHRcXHRpZiAobWFuYV9zbWNfdGVhcmRvd25faHdjKFxcdTAwMjZnYy1cXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIHRlYXIgZG93biBIV0MgYmVmb3JlIGJvb3RzdHJhcCBmYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBmYWlsZWQgZXN0YWJsaXNoIG1heSBub3QgaGF2ZSBhbGxvY2F0ZWQgY3FfdGFibGUuICovXFxuK1xcdGRldl93YXJuKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXFxcblxcXCIpO1xcbitcXG4rXFx0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcXG4rXFxuK1xcdG9sZF9jcV90YWJsZSA9IGdjLVxcdTAwM2VjcV90YWJsZTtcXG4rXFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4rXFx0Z2MtXFx1MDAzZW1heF9udW1fY3FzID0gMDtcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHZmcmVlKG9sZF9jcV90YWJsZSk7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxcbitcXHRcXHRcXHRcXHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcXHUwMDI2cV9kZXB0aF9tYXgsIFxcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChtYXhfcmVxX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSB8fFxcbitcXHQgICAgIG1heF9yZXNwX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpKSB7XFxuK1xcdFxcdC8qIFRoZSByZXN0b3JlZCBjaGFubmVsIG11c3QgcmVwb3J0IHRoZSBhbGxvY2F0ZWQgbWVzc2FnZSBzaXplcy4gKi9cXG4rXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogYm9vdHN0cmFwIHJlcG9ydHMgcmVxPSV1IHJlc3A9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UTztcXG4rXFx0fVxcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIGJvb3RzdHJhcCBIV0M6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rc2tpcF9yZWluaXQ6XFxuK1xcbiBcXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxcbitcXHRcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gdGVzdCBIV0M6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC04MTAsMTggKzEwOTksNzEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIHtcXG4rXFx0LyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi9cXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmICghaHdjKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHQvKiBnYy1cXHUwMDNlbWF4X251bV9jcXMgaXMgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiBJZiBpdCdzXFxuLVxcdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXFxuK1xcdC8qIE5vbnplcm8gbnVtX2luZmxpZ2h0X21zZyBtZWFucyBxdWV1ZSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQuICovXFxuK1xcdGlmIChod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2cpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGh3Yy1cXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBCbG9jayBuZXcgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSByZWZlcmVuY2VzIGJlZm9yZSBkcmFpbmluZy4gKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXHRnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBDb21wbGV0ZSBvY2N1cGllZCBzbG90cyBhbmQgZHJvcCBwZW5kaW5nIHJlc3BvbnNlLXNpZGUgcmVmZXJlbmNlcy4gKi9cXG4rXFx0aWYgKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCkge1xcbitcXHRcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4rXFx0XFx0Ym9vbCBkcm9wX3Jlc3BfcmVmO1xcbitcXHRcXHRpbnQgaTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkrKykge1xcbitcXHRcXHRcXHRpZiAoIXRlc3RfYml0KGksIGh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGN0eCA9IFxcdTAwMjZod2MtXFx1MDAzZWNhbGxlcl9jdHhbaV07XFxuK1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdC8qIFByZXNlcnZlIGFuIGFscmVhZHkgcmVjb3JkZWQgcmVzdWx0LiAqL1xcbitcXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlcmVzcG9uZGVkKVxcbitcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWVycm9yID0gLUVOT0RFVjtcXG4rXFx0XFx0XFx0ZHJvcF9yZXNwX3JlZiA9IGN0eC1cXHUwMDNlcmVzcF9wZW5kaW5nO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGNvbXBsZXRlKFxcdTAwMjZjdHgtXFx1MDAzZWNvbXBfZXZlbnQpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChkcm9wX3Jlc3BfcmVmKVxcbitcXHRcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogUGFpciB3aXRoIHRoZSBsYXN0IHNlbmRlcidzIHdha2V1cCB1bmRlciBod2NfbG9jaywgc28gaXQgZmluaXNoZXNcXG4rXFx0ICogYWNjZXNzaW5nIGdjIGJlZm9yZSB0aGUgZHJhaW4gcmV0dXJucy5cXG4gXFx0ICovXFxuLVxcdGlmIChnYy1cXHUwMDNlbWF4X251bV9jcXMgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuLVxcdFxcdGdjLVxcdTAwM2VtYXhfbnVtX2NxcyA9IDA7XFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jayk7XFxuK1xcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXFx1MDAzZWh3Y19kcmFpbl93YWl0cSxcXG4rXFx0XFx0XFx0ICAgIGh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMCwgZ2MtXFx1MDAzZWh3Y19sb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2spO1xcbitcXG4rXFx0aWYgKGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlKSB7XFxuK1xcdFxcdGlmICghbWFuYV9zbWNfdGVhcmRvd25faHdjKFxcdTAwMjZnYy1cXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKSlcXG4rXFx0XFx0XFx0aHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHRlYXIgZG93biBIV0NcXFxcblxcXCIpO1xcbiBcXHR9XFxuK1xcdGdjLVxcdTAwM2VtYXhfbnVtX2NxcyA9IDA7XFxuK1xcbitcXHQvKiBEZXJlZ2lzdGVyIHRoZSBIV0MgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHdvcmsgcXVldWVzLiAqL1xcbitcXHRpZiAoaHdjLVxcdTAwM2VjcSlcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cXHUwMDNlY3EpO1xcbiBcXG4gXFx0aWYgKGh3Yy1cXHUwMDNldHhxKVxcbiBcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2V0eHEpO1xcbkBAIC04MjksOCArMTE3MSwxOCBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0aWYgKGh3Yy1cXHUwMDNlcnhxKVxcbiBcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2VyeHEpO1xcbiBcXG4tXFx0aWYgKGh3Yy1cXHUwMDNlY3EpXFxuLVxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXFx1MDAzZWNxKTtcXG4rXFx0aWYgKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCkge1xcbitcXHRcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4rXFx0XFx0aW50IGk7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRjdHggPSBcXHUwMDI2aHdjLVxcdTAwM2VjYWxsZXJfY3R4W2ldO1xcbitcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0a2ZyZWUoaHdjLVxcdTAwM2VjYWxsZXJfY3R4KTtcXG4gXFx0aHdjLVxcdTAwM2VjYWxsZXJfY3R4ID0gTlVMTDtcXG5AQCAtODQ1LDcgKzExOTcsNiBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDA7XFxuIFxcbiBcXHRrZnJlZShod2MpO1xcbi1cXHRnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcXG4gXFx0Z2MtXFx1MDAzZWh3Yy5nZG1hX2NvbnRleHQgPSBOVUxMO1xcbiBcXG4gXFx0dmZyZWUoZ2MtXFx1MDAzZWNxX3RhYmxlKTtcXG5AQCAtODYwLDEzICsxMjExLDIxIEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcXG4gXFx0c3RydWN0IGh3Y193cSAqdHhxID0gaHdjLVxcdTAwM2V0eHE7XFxuIFxcdHN0cnVjdCBnZG1hX3JlcV9oZHIgKnJlcV9tc2c7XFxuIFxcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIGRyb3BfcmVzcF9yZWY7XFxuK1xcdGJvb2wgYWJhbmRvbmVkID0gZmFsc2U7XFxuK1xcdGJvb2wgY2FuY2VsbGVkO1xcbiBcXHR1MzIgZGVzdF92cmNxID0gMDtcXG4gXFx0dTMyIGRlc3RfdnJxID0gMDtcXG4gXFx0dTMyIGNvbW1hbmQ7XFxuK1xcdHUzMiBzdGF0dXM7XFxuK1xcdHUzMiB3YWl0X21zO1xcbiBcXHR1MTYgbXNnX2lkO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFxcdTAwMjZtc2dfaWQpO1xcbitcXHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXFx1MDAyNm1zZ19pZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHR0eF93ciA9IFxcdTAwMjZ0eHEtXFx1MDAzZW1zZ19idWYtXFx1MDAzZXJlcXNbbXNnX2lkXTtcXG4gXFxuQEAgLTg3OCw4ICsxMjM3LDExIEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcXG4gXFx0fVxcbiBcXG4gXFx0Y3R4ID0gaHdjLVxcdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRjdHgtXFx1MDAzZW91dHB1dF9idWYgPSByZXNwO1xcbiBcXHRjdHgtXFx1MDAzZW91dHB1dF9idWZsZW4gPSByZXNwX2xlbjtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRyZXFfbXNnID0gKHN0cnVjdCBnZG1hX3JlcV9oZHIgKil0eF93ci1cXHUwMDNlYnVmX3ZhO1xcbiBcXHRpZiAocmVxKVxcbkBAIC04OTUsNDMgKzEyNTcsMTE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcXG4gXFx0XFx0ZGVzdF92cmNxID0gaHdjLVxcdTAwM2VwZl9kZXN0X3ZyY3FfaWQ7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcXG4rXFx0LyogU2VyaWFsaXplIGNhbmNlbGxhdGlvbiB3aXRoIHN1Ym1pc3Npb24uIEFuIHVuc3VibWl0dGVkIHJlcXVlc3RcXG4rXFx0ICogY2Fubm90IHN1Y2NlZWQsIGV2ZW4gaWYgYW4gdW5zb2xpY2l0ZWQgcmVzcG9uc2Ugd2FzIGFjY2VwdGVkLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjYW5jZWxsZWQgPSBjdHgtXFx1MDAzZXJlc3BvbmRlZDtcXG4rXFx0aWYgKGNhbmNlbGxlZClcXG4rXFx0XFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvciA/OiAtRVBST1RPO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGZhbHNlKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAoY2FuY2VsbGVkKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0d2FpdF9tcyA9IGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQ7XFxuIFxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZjdHgtXFx1MDAzZWNvbXBfZXZlbnQsXFxuLVxcdFxcdFxcdFxcdFxcdCAobXNlY3NfdG9famlmZmllcyhod2MtXFx1MDAzZWh3Y190aW1lb3V0KSkpKSB7XFxuLVxcdFxcdGlmIChod2MtXFx1MDAzZWh3Y190aW1lb3V0ICE9IDApXFxuLVxcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0Y29tbWFuZCwgaHdjLVxcdTAwM2Vod2NfdGltZW91dCk7XFxuK1xcdFxcdFxcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSkge1xcbitcXHRcXHQvKiBDbGVhciBvdXRwdXRfYnVmIHNvIGEgbGF0ZSByZXNwb25zZSBjYW5ub3Qgd3JpdGUgdGhlIGNhbGxlcidzXFxuK1xcdFxcdCAqIGJ1ZmZlciwgdGhlbiBjaGVjayB3aGV0aGVyIG9uZSBhbHJlYWR5IGFycml2ZWRcXG4rXFx0XFx0ICogKGVycm9yICE9IC1FSU5QUk9HUkVTUykuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGN0eC1cXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XFxuK1xcdFxcdGVyciA9IGN0eC1cXHUwMDNlZXJyb3I7XFxuK1xcdFxcdHN0YXR1cyA9IGN0eC1cXHUwMDNlc3RhdHVzX2NvZGU7XFxuK1xcdFxcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XFxuK1xcdFxcdFxcdC8qIFB1Ymxpc2ggYWJhbmRvbm1lbnQgd2l0aCBidWZmZXIgd2l0aGRyYXdhbCBzbyBhIGxhdGVcXG4rXFx0XFx0XFx0ICogcmVzcG9uc2UgY2FuIHJlY2xhaW0gdGhlIHNsb3QuIEtlZXAgaXRzIHJlZmVyZW5jZS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YWJhbmRvbmVkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdGlmICghYWJhbmRvbmVkKSB7XFxuK1xcdFxcdFxcdC8qIEEgY29tcGxldGlvbiB3b24gdGhlIHJhY2Ugd2l0aCB0aW1lb3V0OyB1c2UgaXRzIHJlc3VsdC4gKi9cXG4rXFx0XFx0XFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitcXHRcXHRcXHRnb3RvIGNoZWNrX3N0YXR1cztcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0LyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi9cXG4tXFx0XFx0aWYgKGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQgXFx1MDAzZSAxKVxcbi1cXHRcXHRcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMTtcXG4rXFx0XFx0aWYgKHdhaXRfbXMgIT0gMCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGNvbW1hbmQsIHdhaXRfbXMpO1xcbitcXG4rXFx0XFx0XFx0LyogR2VudWluZSB0aW1lb3V0OiBzaG9ydGVuIGxhdGVyIHdhaXRzIHNvIHN1YnNlcXVlbnRcXG4rXFx0XFx0XFx0ICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGVcXG4rXFx0XFx0XFx0ICogZnVsbCB0aW1lb3V0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0ZXJyID0gLUVUSU1FRE9VVDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4gXFxuLVxcdGlmIChjdHgtXFx1MDAzZWVycm9yKSB7XFxuLVxcdFxcdGVyciA9IGN0eC1cXHUwMDNlZXJyb3I7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHQvKiBEcm9wIG9ubHkgdGhlIHNlbmRlcidzIHJlZmVyZW5jZTsgdGhlIHJlc3BvbnNlLXNpZGUgb25lIGlzXFxuK1xcdFxcdCAqIHdoYXQga2VlcHMgdGhlIHNsb3QgcmVzZXJ2ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VzdGF0dXNfY29kZSAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XFxuK1xcdC8qIENsZWFyIG91dHB1dF9idWYgYW5kIHJlYWQgdGhlIHJlc3VsdCB1bmRlciB0aGUgbG9jazsgdGhlIHNsb3QgbWF5XFxuK1xcdCAqIGJlIHJldXNlZCBhZnRlciBod2NfY3R4X3B1dCgpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdHgtXFx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xcbitcXHRlcnIgPSBjdHgtXFx1MDAzZWVycm9yO1xcbitcXHRzdGF0dXMgPSBjdHgtXFx1MDAzZXN0YXR1c19jb2RlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitcXG4rY2hlY2tfc3RhdHVzOlxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcXG4rXFx0XFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdH1cXG4rXFxuIFxcdFxcdGlmIChjb21tYW5kICE9IE1BTkFfUVVFUllfUEhZX1NUQVQpXFxuIFxcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJDb21tYW5kIDB4JXggZmFpbGVkIHdpdGggc3RhdHVzOiAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRjb21tYW5kLCBjdHgtXFx1MDAzZXN0YXR1c19jb2RlKTtcXG4rXFx0XFx0XFx0XFx0Y29tbWFuZCwgc3RhdHVzKTtcXG4gXFx0XFx0ZXJyID0gLUVQUk9UTztcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbitcXG4rXFx0ZXJyID0gMDtcXG4rXFx0Z290byBkb25lO1xcbiBvdXQ6XFxuLVxcdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xcbitcXHQvKiBSZWxlYXNlIGFueSByZWZlcmVuY2VzIHN0aWxsIGhlbGQgYnkgdGhpcyB1bnN1Ym1pdHRlZCByZXF1ZXN0LiAqL1xcbitcXHRjdHggPSBod2MtXFx1MDAzZWNhbGxlcl9jdHggKyBtc2dfaWQ7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcXG4rXFx0ZHJvcF9yZXNwX3JlZiA9IGN0eC1cXHUwMDNlcmVzcF9wZW5kaW5nO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRjdHgtXFx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoZHJvcF9yZXNwX3JlZilcXG4rXFx0XFx0cmVmY291bnRfZGVjKFxcdTAwMjZjdHgtXFx1MDAzZXJlZmNudCk7XFxuK1xcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcXG4rZG9uZTpcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuY1xcbmluZGV4IGQyMWI1ZGIwNmU1MDkuLjNjZjZhOWY4ZTMyYzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcXG5AQCAtMTI5LDkgKzEyOSwxMiBAQCB2b2lkIG1hbmFfc21jX2luaXQoc3RydWN0IHNobV9jaGFubmVsICpzYywgc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRzYy1cXHUwMDNlYmFzZSA9IGJhc2U7XFxuIH1cXG4gXFxuKy8qIFJlcXVpcmVzIG5vIG91dHN0YW5kaW5nIEhXQyBoYW5kb3Zlci4gKnN1Ym1pdHRlZCByZWNvcmRzIHBvc3NpYmxlIFBGXFxuKyAqIG93bmVyc2hpcCwgaW5jbHVkaW5nIHdoZW4gc2V0dXAgZmFpbHMgYWZ0ZXIgc3VibWlzc2lvbi5cXG4rICovXFxuIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXFxuIFxcdFxcdCAgICAgICB1NjQgY3FfYWRkciwgdTY0IHJxX2FkZHIsIHU2NCBzcV9hZGRyLFxcbi1cXHRcXHQgICAgICAgdTMyIGVxX21zaXhfaW5kZXgpXFxuK1xcdFxcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCwgYm9vbCAqc3VibWl0dGVkKVxcbiB7XFxuIFxcdHVuaW9uIHNtY19wcm90b19oZHIgKmhkcjtcXG4gXFx0dTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7XFxuQEAgLTE0NCw2ICsxNDcsOCBAQCBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdCpzdWJtaXR0ZWQgPSBmYWxzZTtcXG4rXFxuIFxcdC8qIEVuc3VyZSBWRiBhbHJlYWR5IGhhcyBwb3NzZXNzaW9uIG9mIHNoYXJlZCBtZW1vcnkgKi9cXG4gXFx0ZXJyID0gbWFuYV9zbWNfcG9sbF9yZWdpc3RlcihzYy1cXHUwMDNlYmFzZSwgZmFsc2UpO1xcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTIyOSw2ICsyMzQsNyBAQCBpbnQgbWFuYV9zbWNfc2V0dXBfaHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYsIHU2NCBlcV9hZGRyLFxcbiBcXHQvKiBXcml0ZSAyNTYtbWVzc2FnZSBidWZmZXIgdG8gc2hhcmVkIG1lbW9yeSAoZmluYWwgMzItYml0IHdyaXRlXFxuIFxcdCAqIHRyaWdnZXJzIEhXIHRvIHNldCBwb3NzZXNzaW9uIGJpdCB0byBQRikuXFxuIFxcdCAqL1xcbitcXHQqc3VibWl0dGVkID0gdHJ1ZTtcXG4gXFx0ZHdvcmQgPSAodTMyICopc2htX2J1ZjtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNNQ19BUEVSVFVSRV9EV09SRFM7IGkrKylcXG4gXFx0XFx0d3JpdGVsKCpkd29yZCsrLCBzYy1cXHUwMDNlYmFzZSArIGkgKiBTTUNfQkFTSUNfVU5JVCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG5pbmRleCAzMDg5NTBmOWI1NGIwLi4yMmRkN2M5Y2VjYzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG5AQCAtNDY4LDYgKzQ2OCwxNSBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcXG4gXFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXFxuIFxcdHN0cnVjdCBnZG1hX2RldlxcdFxcdGh3YztcXG4gXFxuK1xcdC8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqL1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGh3Y19kcmFpbl93YWl0cTtcXG4rXFxuK1xcdC8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpblxcbitcXHQgKiBtYW5hX25lZWRfbG9nKCkvbWFuYV9zZXJ2X3Jlc2V0KCkuIFNldHVwIGFuZCBETUEtcmVnaW9uIHJlYWRlcnNcXG4rXFx0ICogc3RpbGwgcmVxdWlyZSBsaWZlY3ljbGUgb3JkZXJpbmcuIE5vdCBhbGwgdGltZW91dCB3cml0ZXJzIHVzZSBpdC5cXG4rXFx0ICovXFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRod2NfbG9jaztcXG4rXFxuIFxcdC8qIEF6dXJlIG5ldHdvcmsgYWRhcHRlciAqL1xcbiBcXHRzdHJ1Y3QgZ2RtYV9kZXZcXHRcXHRtYW5hO1xcbiBcXG5AQCAtNjgzLDYgKzY5Miw5IEBAIGVudW0ge1xcbiAvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiAtIERJTSAqL1xcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcXG4gXFxuKy8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIHF1ZXVlIGRlcHRoIGZvciBIV0MgKi9cXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggQklUKDI5KVxcbitcXG4gLyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxcbiBcXG5AQCAtNzAxLDYgKzcxMyw3IEBAIGVudW0ge1xcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9QUk9CRV9SRUNPVkVSWSB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSEFORExFX1NUQUxMX1NRX1JFQ09WRVJZIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXFxcXG4rXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTiB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmggYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxcbmluZGV4IDE2ZmViMzk2MTZjMWIuLmRmZDkyMzM2YjJiNGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxcbkBAIC0xMSw2ICsxMSwxMyBAQFxcbiBcXG4gI2RlZmluZSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCAxXFxuIFxcbisvKiBVcHBlciBib3VuZCBvbiB0aGUgZGV2aWNlLXJlcG9ydGVkIEhXQyBxdWV1ZSBkZXB0aC4gIFRoZSBIV0MgaXMgYVxcbisgKiBjb250cm9sIGNoYW5uZWwsIHNvIGEgbW9kZXN0IGRlcHRoIGFscmVhZHkga2VlcHMgZW5vdWdoIG1hbmFnZW1lbnRcXG4rICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUFcXG4rICogYnVmZmVycyBvZiBxX2RlcHRoICogbWF4X21zZ19zaXplIGJ5dGVzIGVhY2guXFxuKyAqL1xcbisjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOFxcbitcXG4gI2RlZmluZSBIV0NfSU5JVF9EQVRBX0NRSURcXHRcXHQxXFxuICNkZWZpbmUgSFdDX0lOSVRfREFUQV9SUUlEXFx0XFx0MlxcbiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfU1FJRFxcdFxcdDNcXG5AQCAtMTY0LDYgKzE3MSw5IEBAIHN0cnVjdCBod2Nfd3Ege1xcbiBcXHR1MTYgcXVldWVfZGVwdGg7XFxuIFxcbiBcXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XFxuK1xcbitcXHQvKiBTZXJpYWxpemVzIFNRIHBvc3Rpbmc7IHVudXNlZCBmb3IgdGhlIFJRLiAqL1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xcbkBAIC0xNzEsOCArMTgxLDI3IEBAIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XFxuIFxcdHZvaWQgKm91dHB1dF9idWY7XFxuIFxcdHUzMiBvdXRwdXRfYnVmbGVuO1xcbiBcXG4tXFx0dTMyIGVycm9yOyAvKiBMaW51eCBlcnJvciBjb2RlICovXFxuK1xcdGludCBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAobmVnYXRpdmUgZXJybm8gb3IgMCkgKi9cXG4gXFx0dTMyIHN0YXR1c19jb2RlO1xcbitcXG4rXFx0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cXG4rXFx0ICogaGFuZGxlX3Jlc3AoKSAoQ1EgaW50ZXJydXB0KSBhbmQgdGhlIHNlbmRlciB0aW1lb3V0IHBhdGguXFxuK1xcdCAqL1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK1xcbitcXHQvKiBUcmFja3Mgc2VuZGVyICsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XFxuK1xcdCAqIChyZWZjb3VudCByZWFjaGVzIDApIHJlbGVhc2VzIHRoZSBiaXRtYXAgc2xvdC5cXG4rXFx0ICovXFxuK1xcdHJlZmNvdW50X3QgcmVmY250O1xcbitcXHR1MTYgbXNnX2lkO1xcbitcXG4rXFx0LyogU2V0IGJ5IHRoZSBmaXJzdCBoYW5kbGVfcmVzcCgpLCBvciBieSB0aGUgc2VuZGVyJ3MgdGltZW91dCBwYXRoLFxcbitcXHQgKiBzbyBhIGxhdGVyIG9yIGR1cGxpY2F0ZSByZXNwb25zZSBpcyBkcm9wcGVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCByZXNwb25kZWQ7XFxuK1xcbitcXHQvKiBSZXNwb25zZS1zaWRlIHJlZmVyZW5jZSBvdXRzdGFuZGluZzsgcHJvdGVjdGVkIGJ5IGxvY2suICovXFxuK1xcdGJvb2wgcmVzcF9wZW5kaW5nO1xcbiB9O1xcbiBcXG4gc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XFxuQEAgLTE4MCw5ICsyMDksMTAgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFxuIFxcdHUxNiBudW1faW5mbGlnaHRfbXNnO1xcbitcXG4gXFx0dTMyIG1heF9yZXFfbXNnX3NpemU7XFxuIFxcbi1cXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XFxuK1xcdHUzMiBod2NfaW5pdF9xX2RlcHRoX21heDtcXG4gXFx0dTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XFxuIFxcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFxuQEAgLTE5Miw2ICsyMjIsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcXG4gXFx0c3RydWN0IGh3Y193cSAqdHhxO1xcbiBcXHRzdHJ1Y3QgaHdjX2NxICpjcTtcXG4gXFxuK1xcdC8qIEFkbWlzc2lvbiBwZXJtaXRzLiBUaW1lZC1vdXQgcmVxdWVzdHMgcmV0YWluIHRoZWlycyB1bnRpbCBhXFxuK1xcdCAqIHJlc3BvbnNlIG9yIHRlYXJkb3duIHJlbGVhc2VzIHRoZSBzbG90LlxcbitcXHQgKi9cXG4gXFx0c3RydWN0IHNlbWFwaG9yZSBzZW1hO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xcbiBcXG5AQCAtMTk5LDYgKzIzMiwxNSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcXG4gXFx0dTMyIHBmX2Rlc3RfdnJjcV9pZDtcXG4gXFx0dTMyIGh3Y190aW1lb3V0O1xcbiBcXG4rXFx0LyogQ2hlY2tlZCBhZnRlciBzbG90IGFjcXVpc2l0aW9uOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvIHJlamVjdCBzZW5kcy4gKi9cXG4rXFx0Ym9vbCBjaGFubmVsX3VwO1xcbitcXG4rXFx0LyogUEYgbWF5IG93biB0aGUgcXVldWUgbWFwcGluZ3M7IHN0YXRlIGxhc3RzIG9ubHkgZm9yIHRoaXMgY29udGV4dC4gKi9cXG4rXFx0Ym9vbCBzZXR1cF9hY3RpdmU7XFxuK1xcbitcXHQvKiBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIGNhbGxlcnMsIGluY2x1ZGluZyB3YWl0ZXJzOyB1bmRlciBod2NfbG9jay4gKi9cXG4rXFx0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xcbitcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXFxuaW5kZXggZGJhYmNmYjk1ZGFmMy4uZTk2Mzg3ZDc5NTI1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcXG5AQCAtMjAsNyArMjAsNyBAQCB2b2lkIG1hbmFfc21jX2luaXQoc3RydWN0IHNobV9jaGFubmVsICpzYywgc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXG4gaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcXG4gXFx0XFx0ICAgICAgIHU2NCBjcV9hZGRyLCB1NjQgcnFfYWRkciwgdTY0IHNxX2FkZHIsXFxuLVxcdFxcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCk7XFxuK1xcdFxcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCwgYm9vbCAqc3VibWl0dGVkKTtcXG4gXFxuIGludCBtYW5hX3NtY190ZWFyZG93bl9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92Zik7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoyMC4wMDkxODkwMzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5NDY1Njk1OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyAvIFBDSSBkZXZpY2UgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBBenVyZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjI0ZDU3NzE3Nzc0ZWRmMzRmNWJlNWUxMTc1YWNjM2Q0MzA0MDBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6MjM6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBmOTJiMmQwYmY5MjZlLi43ODQyNGUxZDg4NGYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtMTYyLDYgKzE2Miw4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpXG4ge1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuK1x0Ym9vbCBuZWVkX2xvZyA9IHRydWU7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNjksMTEgKzE3MSwxMyBAQCBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpXG4gXHRpZiAoIWdjKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRpZiAoaHdjIFx1MDAyNlx1MDAyNiBod2MtXHUwMDNlaHdjX3RpbWVvdXQgPT0gMClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRuZWVkX2xvZyA9IGZhbHNlO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gbmVlZF9sb2c7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTMzMSw3ICszMzUsMTEgQEAgc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X2h3Y190aW1lb3V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKnRpbWVvdXRfdmFsKVxuIFx0aWYgKGVyciB8fCByZXNwLmhkci5zdGF0dXMpXG4gXHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRVBST1RPO1xuIFxuLVx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xuK1x0LyogS2VlcCB0aGUgY3VycmVudCB0aW1lb3V0IG9uIGEgemVybyBxdWVyeSByZXBseS4gQXN5bmNocm9ub3VzXG4rXHQgKiBIV0NfREFUQV9DRkdfSFdDX1RJTUVPVVQgdXBkYXRlcyByZW1haW4gdW5maWx0ZXJlZC5cbitcdCAqL1xuK1x0aWYgKHJlc3AudGltZW91dF9tcylcbitcdFx0KnRpbWVvdXRfdmFsID0gcmVzcC50aW1lb3V0X21zO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM4Nyw5ICszOTUsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcbiBcdFx0XHQgdTMyIHJlc3BfbGVuLCB2b2lkICpyZXNwKVxuIHtcbi1cdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgZXJyO1xuIFxuLVx0cmV0dXJuIG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdGlmICghaHdjKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXHRod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMrKztcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcbitcdGVyciA9IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcdGlmICgtLWh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwKVxuK1x0XHR3YWtlX3VwKFx1MDAyNmdjLVx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcIk5FVF9NQU5BXCIpO1xuIFxuQEAgLTcxMCw2ICs3MzYsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghZ2MpIHtcbkBAIC03MTksMTQgKzc0NiwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRpZiAoIWh3Yykge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSBzZXJ2aWNlOiBubyBIV0NcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJ3Qgd2FpdCAqL1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIk1BTkEgcmVzZXQgY3ljbGUgc3RhcnRcXG5cIik7XG4gXG5AQCAtMTIzMCwxNSArMTI2MCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKVxuIHtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlICoqY3FfdGFibGUgPSBSRUFEX09OQ0UoZ2MtXHUwMDNlY3FfdGFibGUpO1xuIFx0dTMyIGlkID0gcXVldWUtXHUwMDNlaWQ7XG4gXG4tXHRpZiAoaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbitcdC8qIEhXQyByZS1lc3RhYmxpc2htZW50IGNhbiBmYWlsIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBDUSB0YWJsZS4gKi9cbitcdGlmICghY3FfdGFibGUgfHwgaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFnYy1cdTAwM2VjcV90YWJsZVtpZF0pXG4rXHRpZiAoIWNxX3RhYmxlW2lkXSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z2MtXHUwMDNlY3FfdGFibGVbaWRdID0gTlVMTDtcbitcdGNxX3RhYmxlW2lkXSA9IE5VTEw7XG4gfVxuIFxuIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCxcbkBAIC0xMzMzLDYgKzEzNjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIFRoZSBjYWxsZXIgbXVzdCBrZWVwIHRoZSBIV0MgYWxpdmUgdGhyb3VnaG91dCBxdWV1ZSBjcmVhdGlvbi4gKi9cbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdHJlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKHJlcSwgcGFnZV9hZGRyX2xpc3QsIG51bV9wYWdlKTtcbiBcdGlmIChyZXFfbXNnX3NpemUgXHUwMDNlIGh3Yy1cdTAwM2VtYXhfcmVxX21zZ19zaXplKVxuQEAgLTE1MzgsNyArMTU3MSw5IEBAIGludCBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuIFx0aW50IGVycjtcbiBcbitcdC8qIFRoZSBzZXR1cCBjYWxsZXIgbXVzdCBleGNsdWRlIGNvbmN1cnJlbnQgSFdDIHRlYXJkb3duLiAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1xuIFx0bWFuYV9nZF9pbml0X3JlcV9oZHIoXHUwMDI2cmVxLmhkciwgR0RNQV9WRVJJRllfVkZfRFJJVkVSX1ZFUlNJT04sXG4gXHRcdFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcbiBcbkBAIC0yNTMyLDYgKzI1NjcsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNmdjLVx1MDAzZWVxX3Rlc3RfZXZlbnRfbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VnaWNfbXV0ZXgpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGdjKTtcbiBcdGdjLVx1MDAzZWJhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRnYy1cdTAwM2ViYXIwX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuaW5kZXggMjYzZTdjNGUyOTM0MS4uNzUwZWU4ZjcyOTk5NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5AQCAtOSwxNyArOSw0OCBAQFxuIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKVxuIHtcbiBcdHN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXM7XG4rXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1MzIgaW5kZXg7XG4gXG4tXHRkb3duKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbitcdC8qIEZJRk8gc2xvdCBhZG1pc3Npb24gaGFzIGEgc2VwYXJhdGUgYnVkZ2V0IGZyb20gdGhlIHJlc3BvbnNlIHdhaXQuXG4rXHQgKiBFeHBpcnkgcmVwb3J0cyAtRVRJTUVET1VUIGV2ZW4gd2hpbGUgZWFybGllciByZXF1ZXN0cyBtYWtlIHByb2dyZXNzLFxuK1x0ICogc28gY2FsbGVycyBtYXkgaW5pdGlhdGUgcmVjb3Zlcnkgb24gY29udGVudGlvbiBhbG9uZS5cbitcdCAqL1xuK1x0aWYgKGRvd25fdGltZW91dChcdTAwMjZod2MtXHUwMDNlc2VtYSwgbXNlY3NfdG9famlmZmllcyhod2MtXHUwMDNlaHdjX3RpbWVvdXQpKSlcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXAsXG4tXHRcdFx0XHQgICAgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMuc2l6ZSk7XG4rXHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHQvKiBUaGUgc2VtYXBob3JlIGFkbWl0cyBhdCBtb3N0IHItXHUwMDNlc2l6ZSBob2xkZXJzIGF0IGEgdGltZSwgc28gYSBzbG90XG4rXHQgKiBhY3F1aXJlZCBhYm92ZSBhbHdheXMgaGFzIGEgZnJlZSBiaXQgd2FpdGluZyBmb3IgaXQgaGVyZS5cbitcdCAqL1xuK1x0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpO1xuK1x0aWYgKFdBUk5fT05fT05DRShpbmRleCBcdTAwM2U9IHItXHUwMDNlc2l6ZSkpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0dXAoXHUwMDI2aHdjLVx1MDAzZXNlbWEpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbiBcbi1cdGJpdG1hcF9zZXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XG4rXHRjdHggPSBcdTAwMjZod2MtXHUwMDNlY2FsbGVyX2N0eFtpbmRleF07XG4rXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHQvKiBUYWtlIGJvdGggcmVmZXJlbmNlcyAoc2VuZGVyICsgaGFuZGxlX3Jlc3ApIGJlZm9yZSBwdWJsaXNoaW5nIHRoZVxuK1x0ICogc2xvdCwgc28gYW4gZWFybHkgcmVzcG9uc2UgY2Fubm90IGZyZWUgaXQgdW5kZXIgdGhlIHNlbmRlci5cbitcdCAqL1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQsIDIpO1xuK1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IGZhbHNlO1xuK1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IHRydWU7XG4rXHRjdHgtXHUwMDNlbXNnX2lkID0gaW5kZXg7XG4rXHRjdHgtXHUwMDNlZXJyb3IgPSAtRUlOUFJPR1JFU1M7XG4rXG4rXHQvKiBQdWJsaXNoIHRoZSBzbG90IGxhc3QsIGFmdGVyIGl0IGlzIGZ1bGx5IGluaXRpYWxpc2VkLiAqL1xuK1x0Yml0bWFwX3NldChyLVx1MDAzZW1hcCwgaW5kZXgsIDEpO1xuIFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbkBAIC00MCw2ICs3MSwxMyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19wdXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IG1zZ19pZClcbiBcdHVwKFx1MDAyNmh3Yy1cdTAwM2VzZW1hKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaHdjX2N0eF9wdXQoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuK1x0XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4KVxuK3tcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Y3R4LVx1MDAzZXJlZmNudCkpXG4rXHRcdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBjdHgtXHUwMDNlbXNnX2lkKTtcbit9XG4rXG4gc3RhdGljIGludCBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY29uc3Qgc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4LFxuIFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBnZG1hX3Jlc3BfaGRyICpyZXNwX21zZyxcbiBcdFx0XHRcdCAgICB1MzIgcmVzcF9sZW4pXG5AQCAtODEsNiArMTE5LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGdkbWFfcmVzcF9oZHIgKnJlc3BfbXNnID0gcnhfcmVxLVx1MDAzZWJ1Zl92YTtcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0Ym9vbCByZWxlYXNlO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XG5AQCAtOTAsMjIgKzEyOSw1MyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiBcdH1cbiBcbiBcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xuLVx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFxuLVx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1vdXQ6XG4rXHQvKiBUaGUgc2VuZGVyIGhhcyBub3QgcHVibGlzaGVkIGl0cyBidWZmZXIgeWV0LCBzbyBub3RoaW5nIGFza2VkIGZvclxuK1x0ICogdGhpcyByZXNwb25zZS4gIEtlZXAgdGhlIHNsb3QgcmVzZXJ2ZWQgYW5kIGRyb3AgdGhlIG1lc3NhZ2UuXG4rXHQgKi9cbitcdGlmICghY3R4LVx1MDAzZW91dHB1dF9idWYgXHUwMDI2XHUwMDI2ICFjdHgtXHUwMDNlcmVzcG9uZGVkKSB7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbitcdFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogVGFrZSB0aGUgcmVzcG9uc2Utc2lkZSByZWZlcmVuY2UgYXdheSBleGFjdGx5IG9uY2U6IHJlbGVhc2luZyBpdFxuK1x0ICogaXMgd2hhdCBmcmVlcyBhIHNsb3Qgd2hvc2Ugc2VuZGVyIGhhcyBhbHJlYWR5IGdpdmVuIHVwLlxuK1x0ICovXG4rXHRyZWxlYXNlID0gY3R4LVx1MDAzZXJlc3BfcGVuZGluZztcbitcdGN0eC1cdTAwM2VyZXNwX3BlbmRpbmcgPSBmYWxzZTtcbitcbitcdGlmIChjdHgtXHUwMDNlcmVzcG9uZGVkKSB7XG4rXHRcdC8qIFRoZSBzZW5kZXIgdGltZWQgb3V0IGFuZCBhYmFuZG9uZWQgdGhlIHNsb3QsIG9yIGEgcmVzcG9uc2VcbitcdFx0ICogd2FzIGFscmVhZHkgYXBwbGllZC4gIENvbnN1bWUgdGhpcyBvbmUgd2l0aG91dCB3cml0aW5nXG4rXHRcdCAqIGFueXRoaW5nLCB0aGVuIHJlbGVhc2UgdGhlIHNsb3QgaXQgd2FzIGhvbGRpbmcuXG4rXHRcdCAqL1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG4rXHRcdGlmIChyZWxlYXNlKVxuK1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuK1x0aWYgKCFlcnIpIHtcbitcdFx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuK1x0XHRtZW1jcHkoY3R4LVx1MDAzZW91dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7XG4rXHR9XG4gXHRjdHgtXHUwMDNlZXJyb3IgPSBlcnI7XG4gXG4tXHQvKiBNdXN0IHBvc3Qgcnggd3FlIGJlZm9yZSBjb21wbGV0ZSgpLCBvdGhlcndpc2UgdGhlIG5leHQgcnggbWF5XG4tXHQgKiBoaXQgbm9fd3FlIGVycm9yLlxuK1x0LyogUG9zdCBSWCBXUUUgYmVmb3JlIGNvbXBsZXRpbmcg4oCUIHRoZSBuZXh0IHJlc3BvbnNlIG1heSBhcnJpdmVcbitcdCAqIGltbWVkaWF0ZWx5IGFuZCBuZWVkcyBhIHBvc3RlZCBidWZmZXIuXG4gXHQgKi9cbiBcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG4tXG4gXHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAocmVsZWFzZSlcbitcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxuQEAgLTE0Niw3ICsyMTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIOlxuLVx0XHRcdGh3Yy1cdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9ICh1MTYpdmFsO1xuK1x0XHRcdC8qIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgYSAyNC1iaXQgZmllbGQuICBLZWVwXG4rXHRcdFx0ICogdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlIGhlcmU7IGl0IGlzIGNsYW1wZWRcbitcdFx0XHQgKiBhbmQgdmFsaWRhdGVkIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkgcmF0aGVyXG4rXHRcdFx0ICogdGhhbiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdTE2LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGh3Yy1cdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heCA9IHZhbDtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBIV0NfSU5JVF9EQVRBX01BWF9SRVFVRVNUOlxuQEAgLTQ3Niw3ICs1NTEsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXG4gXHRkbWFfYnVmLVx1MDAzZW51bV9yZXFzID0gcV9kZXB0aDtcbiBcbi1cdGJ1Zl9zaXplID0gTUFOQV9QQUdFX0FMSUdOKHFfZGVwdGggKiBtYXhfbXNnX3NpemUpO1xuK1x0LyogbWFuYV9nZF9hbGxvY19tZW1vcnkoKSBvbmx5IGFjY2VwdHMgYSBwb3dlci1vZi10d28gbGVuZ3RoLCBhc1xuK1x0ICogYWxyZWFkeSBhc3N1bWVkIGZvciB0aGUgRVEgYW5kIENRIHJpbmdzIGFib3ZlLiAgVGhlIHNsb3RzIGFyZVxuK1x0ICogY2FydmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlciwgc28gYW55IHRhaWwgaXMgdW51c2VkLlxuK1x0ICovXG4rXHRidWZfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSkpO1xuIFxuIFx0Z21pID0gXHUwMDI2ZG1hX2J1Zi1cdTAwM2VtZW1faW5mbztcbiBcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7XG5AQCAtNTYwLDYgKzYzOSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdGh3Y193cS1cdTAwM2VnZG1hX3dxID0gcXVldWU7XG4gXHRod2Nfd3EtXHUwMDNlcXVldWVfZGVwdGggPSBxX2RlcHRoO1xuIFx0aHdjX3dxLVx1MDAzZWh3Y19jcSA9IGh3Y19jcTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh3Y193cS1cdTAwM2Vsb2NrKTtcbiBcbiBcdGVyciA9IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoaHdjLCBxX2RlcHRoLCBtYXhfbXNnX3NpemUsXG4gXHRcdFx0XHQgICAgIFx1MDAyNmh3Y193cS1cdTAwM2Vtc2dfYnVmKTtcbkBAIC01NzcsNyArNjU3LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19jcmVhdGVfd3Eoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxuK3N0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdFx0XHRcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXG4gXHRcdFx0XHR1MzIgZGVzdF92aXJ0X3JxX2lkLCB1MzIgZGVzdF92aXJ0X3JjcV9pZCxcbiBcdFx0XHRcdGJvb2wgZGVzdF9wZilcbkBAIC02MTYsNyArNjk2LDEwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmlubGluZV9vb2JfZGF0YSA9IHR4X29vYjtcbiBcdHJlcS1cdTAwM2V3cWVfcmVxLmNsaWVudF9kYXRhX3VuaXQgPSAwO1xuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4gXHRlcnIgPSBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoaHdjX3R4cS1cdTAwM2VnZG1hX3dxLCBcdTAwMjZyZXEtXHUwMDNld3FlX3JlcSwgTlVMTCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZod2NfdHhxLVx1MDAzZWxvY2spO1xuK1xuIFx0aWYgKGVycilcbiBcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcXG5cIiwgZXJyKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtNjQyLDYgKzcyNSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRzdHJ1Y3QgaHdjX3dxICpod2NfcnhxID0gaHdjLVx1MDAzZXJ4cTtcbiBcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFx0aW50IGk7XG4gXG5AQCAtNjU3LDE4ICs3NDEsMzggQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSlcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSkge1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHhbaV0ubG9jayk7XG4gXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XG4rXHR9XG4gXG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcbiBcbi1cdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxKTtcbitcdC8qIEVuYWJsZSBhZG1pc3Npb24gZm9yIHRoZSB0ZXN0IEVRIHJlcXVlc3QuICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IHRydWU7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbitcbitcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuK1x0aWYgKGVycikge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxuK3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3Jlc3BfbXNnX3NpemUpXG4ge1xuK1x0LyogbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkgZmlsbHMgdGhlIGJvb3RzdHJhcCBmaWVsZHMgZnJvbSBoYXJkXG4rXHQgKiBJUlEgb24gR0RNQV9FUUVfSFdDX0lOSVRfREFUQSBhbmQgdGhlbiBzaWduYWxzIGh3Y19pbml0X2VxZV9jb21wIG9uXG4rXHQgKiBHRE1BX0VRRV9IV0NfSU5JVF9ET05FLiAgVGhlIHdhaXRfZm9yX2NvbXBsZXRpb24oKSBiZWxvdyBwYWlycyB3aXRoXG4rXHQgKiB0aGF0IGNvbXBsZXRlKCksIHNvIGV2ZXJ5IHZhbHVlIHN0b3JlZCBiZWZvcmUgSU5JVF9ET05FIGlzIG9yZGVyZWRcbitcdCAqIGFnYWluc3QgdGhlIHJlYWRzIHRoYXQgZm9sbG93IGl0IGhlcmUuXG4rXHQgKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpycSA9IGh3Yy1cdTAwM2VyeHEtXHUwMDNlZ2RtYV93cTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpzcSA9IGh3Yy1cdTAwM2V0eHEtXHUwMDNlZ2RtYV93cTtcbkBAIC02NzYsNiArNzgwLDE1IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcSA9IGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2NxO1xuIFx0aW50IGVycjtcbiBcbitcdC8qIERvIG5vdCByZXVzZSBkaW1lbnNpb25zIG9yIHJvdXRpbmcgSURzIGZyb20gYSBwcmV2aW91cyBlc3RhYmxpc2guICovXG4rXHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAwO1xuK1x0aHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemUgPSAwO1xuK1x0aHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXNwX21zZ19zaXplID0gMDtcbitcdGdjLVx1MDAzZWh3Yy5kb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4rXHRnYy1cdTAwM2Vod2MucGRpZCA9IElOVkFMSURfUERJRDtcbitcdGh3Yy1cdTAwM2VwZl9kZXN0X3ZycV9pZCA9IDA7XG4rXHRod2MtXHUwMDNlcGZfZGVzdF92cmNxX2lkID0gMDtcbitcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuIFxuIFx0ZXJyID0gbWFuYV9zbWNfc2V0dXBfaHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSxcbkBAIC02ODMsNyArNzk2LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxuIFx0XHRcdFx0IGNxLVx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGUsXG4gXHRcdFx0XHQgcnEtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZSxcbiBcdFx0XHRcdCBzcS1cdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlLFxuLVx0XHRcdFx0IGVxLVx1MDAzZWVxLm1zaXhfaW5kZXgpO1xuK1x0XHRcdFx0IGVxLVx1MDAzZWVxLm1zaXhfaW5kZXgsIFx1MDAyNmh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC02OTQsNiArODA3LDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdCptYXhfcmVxX21zZ19zaXplID0gaHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XG4gXHQqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4rXHQvKiBSZWplY3QgYSBtaXNzaW5nIGRvb3JiZWxsIGJlZm9yZSB0aGUgY2hhbm5lbCB0ZXN0LiBUaGlzIG5laXRoZXJcbitcdCAqIHZhbGlkYXRlcyBpdHMgQkFSIHJhbmdlIG5vciBwcm90ZWN0cyBlYXJsaWVyIElSUSByZWFybWluZy5cbitcdCAqL1xuK1x0aWYgKGdjLVx1MDAzZWh3Yy5kb29yYmVsbCA9PSBJTlZBTElEX0RPT1JCRUxMKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0M6IG5vIGRvb3JiZWxsIGluIGluaXQgZGF0YVxcblwiKTtcbitcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXG4gXHQvKiBCb3RoIHdlcmUgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiAqL1xuIFx0aWYgKFdBUk5fT04oY3EtXHUwMDNlaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcykpXG4gXHRcdHJldHVybiAtRVBST1RPO1xuQEAgLTcxMiw2ICs4MzMsMTIgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHQvKiBDUSBkZXB0aCBpcyBxX2RlcHRoICogMiAoU1EgKyBSUSkgcGFzc2VkIGFzIHUxNiB0byBjcmVhdGVfY3EuXG4rXHQgKiBDYXAgdG8gcHJldmVudCB1MTYgdHJ1bmNhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHFfZGVwdGggXHUwMDNlIFUxNl9NQVggLyAyKVxuK1x0XHRxX2RlcHRoID0gVTE2X01BWCAvIDI7XG4rXG4gXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC03NTEsMTIgKzg3OCw0NCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbisvKiBCcmluZy11cCBvbmx5OiByZXF1aXJlcyBubyBzZW5kZXJzIG9yIGNvbmN1cnJlbnQgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuXG4rICogVGhpcyBoZWxwZXIgZG9lcyBub3QgdW5wdWJsaXNoIHRoZSBIV0Mgb3IgZHJhaW4gc2VuZGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MpXG4re1xuK1x0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0O1xuK1xuK1x0LyogVGhlIENRIGhlbHBlciBkZXJlZ2lzdGVycyB0aGUgSFdDIEVRIGJlZm9yZSByZXR1cm5pbmcuICovXG4rXHRpZiAoaHdjLVx1MDAzZWNxKSB7XG4rXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy1cdTAwM2VjcSk7XG4rXHRcdGh3Yy1cdTAwM2VjcSA9IE5VTEw7XG4rXHR9XG4rXG4rXHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4rXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG4rXG4rXHRpZiAoaHdjLVx1MDAzZXR4cSkge1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG4rXHRcdGh3Yy1cdTAwM2V0eHEgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKGh3Yy1cdTAwM2VyeHEpIHtcbitcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuK1x0XHRod2MtXHUwMDNlcnhxID0gTlVMTDtcbitcdH1cbitcbitcdG1hbmFfZ2RfZnJlZV9yZXNfbWFwKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcbitcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcbit9XG4rXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIHtcbiBcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBcdTAwMjZnYy1cdTAwM2Vod2M7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4tXHR1MTYgcV9kZXB0aF9tYXg7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKm9sZF9jcV90YWJsZTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgcV9kZXB0aF9tYXg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aHdjID0ga3phbGxvY19vYmooKmh3Yyk7XG5AQCAtNzY0LDEwICs5MjMsMTEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdkLVx1MDAzZWdkbWFfY29udGV4dCA9IGdjO1xuLVx0Z2QtXHUwMDNlZHJpdmVyX2RhdGEgPSBod2M7XG4gXHRod2MtXHUwMDNlZ2RtYV9kZXYgPSBnZDtcbiBcdGh3Yy1cdTAwM2VkZXYgPSBnYy1cdTAwM2VkZXY7XG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUztcbitcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9IDA7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmdjLVx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XG4gXG4gXHQvKiBIV0MncyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovXG4gXHRnZC1cdTAwM2VkZXZfaWQuYXNfdWludDMyID0gMDtcbkBAIC03NzYsNiArOTM2LDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdGdkLVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gXHRnZC1cdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4gXG4rXHQvKiBQdWJsaXNoIGZvciBzZXR1cDsgcXVldWUgaW5pdGlhbGl6YXRpb24gYmVsb3cgbXVzdCBwcmVjZWRlIHNlbmRlcnMuICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gaHdjO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1xuIFx0LyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyxcbiBcdCAqIGFuZCBkb2Vzbid0IHRvdWNoIHRoZSBIV0MgZGV2aWNlLlxuIFx0ICovXG5AQCAtNzk0LDggKzk1OSwxMzIgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGlmIChxX2RlcHRoX21heCBcdTAwM2UgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgpIHtcbitcdFx0LyogQm91bmQgRE1BIGFsbG9jYXRpb25zIGJlZm9yZSB1c2luZyB0aGUgMjQtYml0IGRlcHRoLiAqL1xuK1x0XHRpZiAocV9kZXB0aF9tYXggXHUwMDNlIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIKVxuK1x0XHRcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9NQVhfUVVFVUVfREVQVEg7XG4rXG4rXHRcdC8qIEtlZXAgYm9vdHN0cmFwIG1lc3NhZ2Ugc2l6ZXMgZm9yIG1hbmRhdG9yeSBjb21tYW5kcy5cbitcdFx0ICogSW5jb21wYXRpYmxlIHJlcG9ydHMgc2tpcCByZWJ1aWxkaW5nLCBub3QgY2hhbm5lbCBjcmVhdGlvbi5cbitcdFx0ICovXG4rXHRcdGlmIChtYXhfcmVxX21zZ19zaXplICE9IEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSB8fFxuK1x0XHQgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSB8fFxuK1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXFfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XG4rXHRcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFKSB7XG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJIV0M6IGludmFsaWQgZGltcyBxPSV1IHJlcT0ldSByZXNwPSV1XFxuXCIsXG4rXHRcdFx0XHRxX2RlcHRoX21heCwgbWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0XHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xuK1x0XHRcdGdvdG8gc2tpcF9yZWluaXQ7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIkZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4rXHRcdH1cbitcbitcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuK1xuK1x0XHQvKiBVbnB1Ymxpc2ggdGhlIENRIGFuZCBkcmFpbiBpdHMgRVEgYmVmb3JlIGZyZWVpbmcgdGhlIHRhYmxlLiAqL1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuK1xuK1x0XHRvbGRfY3FfdGFibGUgPSBnYy1cdTAwM2VjcV90YWJsZTtcbitcdFx0Z2MtXHUwMDNlY3FfdGFibGUgPSBOVUxMO1xuK1x0XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuK1xuK1x0XHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIHFfZGVwdGhfbWF4LFxuK1x0XHRcdFx0XHQgICBtYXhfcmVxX21zZ19zaXplLFxuK1x0XHRcdFx0XHQgICBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlaW5pdCBIV0M6ICVkXFxuXCIsIGVycik7XG4rXHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZtYXhfcmVzcF9tc2dfc2l6ZSk7XG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHFfZGVwdGhfbWF4IFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyB8fFxuK1x0XHQgICAgIG1heF9yZXFfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFIHx8XG4rXHRcdCAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHtcbitcdFx0XHQvKiBUaGUgcmVidWlsdCBjaGFubmVsIG11c3Qgc3VwcG9ydCB0aGUgYWxsb2NhdGVkIGRlcHRoXG4rXHRcdFx0ICogYW5kIG1lc3NhZ2Ugc2l6ZXMuXG4rXHRcdFx0ICovXG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJIV0M6IHJlYnVpbHQgcT0ldSByZXE9JXUgcmVzcD0ldSwgYnVpbHQgZm9yICV1LyV1LyV1XFxuXCIsXG4rXHRcdFx0XHRxX2RlcHRoX21heCwgbWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplLCBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbitcdFx0XHRcdEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcbitcdFx0XHRcdEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xuK1x0XHRcdGVyciA9IC1FUFJPVE87XG4rXHRcdH1cbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4rXHRcdH1cbitcdH1cbitcbitcdGdvdG8gc2tpcF9yZWluaXQ7XG4rXG4rcmVpbml0X2ZhbGxiYWNrOlxuK1x0LyogQSBmYWlsZWQgaGFuZHNoYWtlIGxlYXZlcyBxdWV1ZSBvd25lcnNoaXAgdW5jZXJ0YWluLiAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpIHtcbitcdFx0aWYgKG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpKSB7XG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJGYWlsZWQgdG8gdGVhciBkb3duIEhXQyBiZWZvcmUgYm9vdHN0cmFwIGZhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFRoZSBmYWlsZWQgZXN0YWJsaXNoIG1heSBub3QgaGF2ZSBhbGxvY2F0ZWQgY3FfdGFibGUuICovXG4rXHRkZXZfd2Fybihod2MtXHUwMDNlZGV2LCBcIkhXQyByZWluaXQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gYm9vdHN0cmFwIGRlcHRoXFxuXCIpO1xuK1xuK1x0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcbitcbitcdG9sZF9jcV90YWJsZSA9IGdjLVx1MDAzZWNxX3RhYmxlO1xuK1x0Z2MtXHUwMDNlY3FfdGFibGUgPSBOVUxMO1xuK1x0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuK1xuK1x0ZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcbitcdFx0XHRcdCAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcbitcdFx0XHRcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlc3RvcmUgYm9vdHN0cmFwIEhXQzogJWRcXG5cIiwgZXJyKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChnYywgXHUwMDI2cV9kZXB0aF9tYXgsIFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXG4rXHRcdFx0XHRcdCBcdTAwMjZtYXhfcmVzcF9tc2dfc2l6ZSk7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjZcbitcdCAgICAobWF4X3JlcV9tc2dfc2l6ZSAhPSBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUgfHxcbitcdCAgICAgbWF4X3Jlc3BfbXNnX3NpemUgIT0gSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSkpIHtcbitcdFx0LyogVGhlIHJlc3RvcmVkIGNoYW5uZWwgbXVzdCByZXBvcnQgdGhlIGFsbG9jYXRlZCBtZXNzYWdlIHNpemVzLiAqL1xuK1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiSFdDOiBib290c3RyYXAgcmVwb3J0cyByZXE9JXUgcmVzcD0ldVxcblwiLFxuK1x0XHRcdG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0ZXJyID0gLUVQUk9UTztcbitcdH1cbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitza2lwX3JlaW5pdDpcbitcbiBcdGVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEsXG4tXHRcdFx0XHQgICAgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXG4rXHRcdFx0XHQgICAgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2csXG4gXHRcdFx0XHQgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwiLCBlcnIpO1xuQEAgLTgxMCwxOCArMTA5OSw3MSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuK1x0LyogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBzZXR1cCBhbmQgdGVhcmRvd24gb3BlcmF0aW9ucy4gKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAoIWh3YylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2MtXHUwMDNlbWF4X251bV9jcXMgaXMgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiBJZiBpdCdzXG4tXHQgKiBub24temVybywgdGhlIEhXQyB3b3JrZWQgYW5kIHdlIHNob3VsZCB0ZWFyIGRvd24gdGhlIEhXQyBoZXJlLlxuK1x0LyogTm9uemVybyBudW1faW5mbGlnaHRfbXNnIG1lYW5zIHF1ZXVlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZC4gKi9cbitcdGlmIChod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZykge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuK1x0LyogQmxvY2sgbmV3IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgcmVmZXJlbmNlcyBiZWZvcmUgZHJhaW5pbmcuICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0Z2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcbitcdC8qIENvbXBsZXRlIG9jY3VwaWVkIHNsb3RzIGFuZCBkcm9wIHBlbmRpbmcgcmVzcG9uc2Utc2lkZSByZWZlcmVuY2VzLiAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4rXHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0XHRib29sIGRyb3BfcmVzcF9yZWY7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XG4rXHRcdFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaV07XG4rXG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHQvKiBQcmVzZXJ2ZSBhbiBhbHJlYWR5IHJlY29yZGVkIHJlc3VsdC4gKi9cbitcdFx0XHRpZiAoIWN0eC1cdTAwM2VyZXNwb25kZWQpXG4rXHRcdFx0XHRjdHgtXHUwMDNlZXJyb3IgPSAtRU5PREVWO1xuK1x0XHRcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuK1x0XHRcdGN0eC1cdTAwM2VyZXNwX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0XHRjdHgtXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcbitcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0XHRcdGlmIChkcm9wX3Jlc3BfcmVmKVxuK1x0XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBQYWlyIHdpdGggdGhlIGxhc3Qgc2VuZGVyJ3Mgd2FrZXVwIHVuZGVyIGh3Y19sb2NrLCBzbyBpdCBmaW5pc2hlc1xuK1x0ICogYWNjZXNzaW5nIGdjIGJlZm9yZSB0aGUgZHJhaW4gcmV0dXJucy5cbiBcdCAqL1xuLVx0aWYgKGdjLVx1MDAzZW1heF9udW1fY3FzIFx1MDAzZSAwKSB7XG4tXHRcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xuLVx0XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuK1x0XHRcdCAgICBod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMCwgZ2MtXHUwMDNlaHdjX2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcbitcdGlmIChod2MtXHUwMDNlc2V0dXBfYWN0aXZlKSB7XG4rXHRcdGlmICghbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSkpXG4rXHRcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byB0ZWFyIGRvd24gSFdDXFxuXCIpO1xuIFx0fVxuK1x0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuK1xuK1x0LyogRGVyZWdpc3RlciB0aGUgSFdDIEVRIGJlZm9yZSBmcmVlaW5nIHRoZSB3b3JrIHF1ZXVlcy4gKi9cbitcdGlmIChod2MtXHUwMDNlY3EpXG4rXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVx1MDAzZWNxKTtcbiBcbiBcdGlmIChod2MtXHUwMDNldHhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG5AQCAtODI5LDggKzExNzEsMTggQEAgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRpZiAoaHdjLVx1MDAzZXJ4cSlcbiBcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuIFxuLVx0aWYgKGh3Yy1cdTAwM2VjcSlcbi1cdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuK1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4rXHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkrKykge1xuK1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuK1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0a2ZyZWUoaHdjLVx1MDAzZWNhbGxlcl9jdHgpO1xuIFx0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBOVUxMO1xuQEAgLTg0NSw3ICsxMTk3LDYgQEAgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuIFxuIFx0a2ZyZWUoaHdjKTtcbi1cdGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7XG4gXHRnYy1cdTAwM2Vod2MuZ2RtYV9jb250ZXh0ID0gTlVMTDtcbiBcbiBcdHZmcmVlKGdjLVx1MDAzZWNxX3RhYmxlKTtcbkBAIC04NjAsMTMgKzEyMTEsMjEgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0c3RydWN0IGh3Y193cSAqdHhxID0gaHdjLVx1MDAzZXR4cTtcbiBcdHN0cnVjdCBnZG1hX3JlcV9oZHIgKnJlcV9tc2c7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRib29sIGRyb3BfcmVzcF9yZWY7XG4rXHRib29sIGFiYW5kb25lZCA9IGZhbHNlO1xuK1x0Ym9vbCBjYW5jZWxsZWQ7XG4gXHR1MzIgZGVzdF92cmNxID0gMDtcbiBcdHUzMiBkZXN0X3ZycSA9IDA7XG4gXHR1MzIgY29tbWFuZDtcbitcdHUzMiBzdGF0dXM7XG4rXHR1MzIgd2FpdF9tcztcbiBcdHUxNiBtc2dfaWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4rXHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHR0eF93ciA9IFx1MDAyNnR4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbbXNnX2lkXTtcbiBcbkBAIC04NzgsOCArMTIzNywxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IHJlc3A7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZmxlbiA9IHJlc3BfbGVuO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItXHUwMDNlYnVmX3ZhO1xuIFx0aWYgKHJlcSlcbkBAIC04OTUsNDMgKzEyNTcsMTE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcbiBcdFx0ZGVzdF92cmNxID0gaHdjLVx1MDAzZXBmX2Rlc3RfdnJjcV9pZDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcbitcdC8qIFNlcmlhbGl6ZSBjYW5jZWxsYXRpb24gd2l0aCBzdWJtaXNzaW9uLiBBbiB1bnN1Ym1pdHRlZCByZXF1ZXN0XG4rXHQgKiBjYW5ub3Qgc3VjY2VlZCwgZXZlbiBpZiBhbiB1bnNvbGljaXRlZCByZXNwb25zZSB3YXMgYWNjZXB0ZWQuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRjYW5jZWxsZWQgPSBjdHgtXHUwMDNlcmVzcG9uZGVkO1xuK1x0aWYgKGNhbmNlbGxlZClcbitcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yID86IC1FUFJPVE87XG4rXHRlbHNlXG4rXHRcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsXG4rXHRcdFx0XHRcdCAgIGZhbHNlKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGlmIChjYW5jZWxsZWQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiSFdDOiBGYWlsZWQgdG8gcG9zdCBzZW5kIFdRRTogJWRcXG5cIiwgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHR3YWl0X21zID0gaHdjLVx1MDAzZWh3Y190aW1lb3V0O1xuIFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2Y3R4LVx1MDAzZWNvbXBfZXZlbnQsXG4tXHRcdFx0XHRcdCAobXNlY3NfdG9famlmZmllcyhod2MtXHUwMDNlaHdjX3RpbWVvdXQpKSkpIHtcbi1cdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCAhPSAwKVxuLVx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcblwiLFxuLVx0XHRcdFx0Y29tbWFuZCwgaHdjLVx1MDAzZWh3Y190aW1lb3V0KTtcbitcdFx0XHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMod2FpdF9tcykpKSB7XG4rXHRcdC8qIENsZWFyIG91dHB1dF9idWYgc28gYSBsYXRlIHJlc3BvbnNlIGNhbm5vdCB3cml0ZSB0aGUgY2FsbGVyJ3NcbitcdFx0ICogYnVmZmVyLCB0aGVuIGNoZWNrIHdoZXRoZXIgb25lIGFscmVhZHkgYXJyaXZlZFxuK1x0XHQgKiAoZXJyb3IgIT0gLUVJTlBST0dSRVNTKS5cbitcdFx0ICovXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbitcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuK1x0XHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4rXHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4rXHRcdFx0LyogUHVibGlzaCBhYmFuZG9ubWVudCB3aXRoIGJ1ZmZlciB3aXRoZHJhd2FsIHNvIGEgbGF0ZVxuK1x0XHRcdCAqIHJlc3BvbnNlIGNhbiByZWNsYWltIHRoZSBzbG90LiBLZWVwIGl0cyByZWZlcmVuY2UuXG4rXHRcdFx0ICovXG4rXHRcdFx0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4rXHRcdFx0YWJhbmRvbmVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRcdGlmICghYWJhbmRvbmVkKSB7XG4rXHRcdFx0LyogQSBjb21wbGV0aW9uIHdvbiB0aGUgcmFjZSB3aXRoIHRpbWVvdXQ7IHVzZSBpdHMgcmVzdWx0LiAqL1xuK1x0XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0XHRnb3RvIGNoZWNrX3N0YXR1cztcbitcdFx0fVxuIFxuLVx0XHQvKiBSZWR1Y2UgZnVydGhlciB3YWl0aW5nIGlmIEhXQyBubyByZXNwb25zZSAqL1xuLVx0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lb3V0IFx1MDAzZSAxKVxuLVx0XHRcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IDE7XG4rXHRcdGlmICh3YWl0X21zICE9IDApIHtcbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXG5cIixcbitcdFx0XHRcdGNvbW1hbmQsIHdhaXRfbXMpO1xuK1xuK1x0XHRcdC8qIEdlbnVpbmUgdGltZW91dDogc2hvcnRlbiBsYXRlciB3YWl0cyBzbyBzdWJzZXF1ZW50XG4rXHRcdFx0ICogY29tbWFuZHMgZmFpbCBmYXN0IGluc3RlYWQgb2YgZWFjaCBkcmFpbmluZyB0aGVcbitcdFx0XHQgKiBmdWxsIHRpbWVvdXQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGh3Yy1cdTAwM2Vod2NfdGltZW91dCBcdTAwM2UgMSlcbitcdFx0XHRcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IDE7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRpZiAoY3R4LVx1MDAzZWVycm9yKSB7XG4tXHRcdGVyciA9IGN0eC1cdTAwM2VlcnJvcjtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdC8qIERyb3Agb25seSB0aGUgc2VuZGVyJ3MgcmVmZXJlbmNlOyB0aGUgcmVzcG9uc2Utc2lkZSBvbmUgaXNcbitcdFx0ICogd2hhdCBrZWVwcyB0aGUgc2xvdCByZXNlcnZlZC5cbitcdFx0ICovXG4rXHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbitcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuLVx0aWYgKGN0eC1cdTAwM2VzdGF0dXNfY29kZSBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZXN0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuLVx0XHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xuK1x0LyogQ2xlYXIgb3V0cHV0X2J1ZiBhbmQgcmVhZCB0aGUgcmVzdWx0IHVuZGVyIHRoZSBsb2NrOyB0aGUgc2xvdCBtYXlcbitcdCAqIGJlIHJldXNlZCBhZnRlciBod2NfY3R4X3B1dCgpLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0Y3R4LVx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xuK1x0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuK1x0c3RhdHVzID0gY3R4LVx1MDAzZXN0YXR1c19jb2RlO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK1xuK2NoZWNrX3N0YXR1czpcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZG9uZTtcbitcbitcdGlmIChzdGF0dXMgXHUwMDI2XHUwMDI2IHN0YXR1cyAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcbitcdFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRnb3RvIG91dDtcbitcdFx0XHRnb3RvIGRvbmU7XG4gXHRcdH1cbitcbiBcdFx0aWYgKGNvbW1hbmQgIT0gTUFOQV9RVUVSWV9QSFlfU1RBVClcbiBcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiQ29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxcblwiLFxuLVx0XHRcdFx0Y29tbWFuZCwgY3R4LVx1MDAzZXN0YXR1c19jb2RlKTtcbitcdFx0XHRcdGNvbW1hbmQsIHN0YXR1cyk7XG4gXHRcdGVyciA9IC1FUFJPVE87XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4rXG4rXHRlcnIgPSAwO1xuK1x0Z290byBkb25lO1xuIG91dDpcbi1cdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xuK1x0LyogUmVsZWFzZSBhbnkgcmVmZXJlbmNlcyBzdGlsbCBoZWxkIGJ5IHRoaXMgdW5zdWJtaXR0ZWQgcmVxdWVzdC4gKi9cbitcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbitcdGRyb3BfcmVzcF9yZWYgPSBjdHgtXHUwMDNlcmVzcF9wZW5kaW5nO1xuK1x0Y3R4LVx1MDAzZXJlc3BfcGVuZGluZyA9IGZhbHNlO1xuK1x0Y3R4LVx1MDAzZXJlc3BvbmRlZCA9IHRydWU7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZHJvcF9yZXNwX3JlZilcbitcdFx0cmVmY291bnRfZGVjKFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpO1xuK1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK2RvbmU6XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9zaG1fY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvc2htX2NoYW5uZWwuY1xuaW5kZXggZDIxYjVkYjA2ZTUwOS4uM2NmNmE5ZjhlMzJjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL3NobV9jaGFubmVsLmNcbkBAIC0xMjksOSArMTI5LDEyIEBAIHZvaWQgbWFuYV9zbWNfaW5pdChzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRzYy1cdTAwM2ViYXNlID0gYmFzZTtcbiB9XG4gXG4rLyogUmVxdWlyZXMgbm8gb3V0c3RhbmRpbmcgSFdDIGhhbmRvdmVyLiAqc3VibWl0dGVkIHJlY29yZHMgcG9zc2libGUgUEZcbisgKiBvd25lcnNoaXAsIGluY2x1ZGluZyB3aGVuIHNldHVwIGZhaWxzIGFmdGVyIHN1Ym1pc3Npb24uXG4rICovXG4gaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcbiBcdFx0ICAgICAgIHU2NCBjcV9hZGRyLCB1NjQgcnFfYWRkciwgdTY0IHNxX2FkZHIsXG4tXHRcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleClcbitcdFx0ICAgICAgIHUzMiBlcV9tc2l4X2luZGV4LCBib29sICpzdWJtaXR0ZWQpXG4ge1xuIFx0dW5pb24gc21jX3Byb3RvX2hkciAqaGRyO1xuIFx0dTE2IGFsbF9hZGRyX2g0Yml0cyA9IDA7XG5AQCAtMTQ0LDYgKzE0Nyw4IEBAIGludCBtYW5hX3NtY19zZXR1cF9od2Moc3RydWN0IHNobV9jaGFubmVsICpzYywgYm9vbCByZXNldF92ZiwgdTY0IGVxX2FkZHIsXG4gXHRpbnQgZXJyO1xuIFx0aW50IGk7XG4gXG4rXHQqc3VibWl0dGVkID0gZmFsc2U7XG4rXG4gXHQvKiBFbnN1cmUgVkYgYWxyZWFkeSBoYXMgcG9zc2Vzc2lvbiBvZiBzaGFyZWQgbWVtb3J5ICovXG4gXHRlcnIgPSBtYW5hX3NtY19wb2xsX3JlZ2lzdGVyKHNjLVx1MDAzZWJhc2UsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yMjksNiArMjM0LDcgQEAgaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcbiBcdC8qIFdyaXRlIDI1Ni1tZXNzYWdlIGJ1ZmZlciB0byBzaGFyZWQgbWVtb3J5IChmaW5hbCAzMi1iaXQgd3JpdGVcbiBcdCAqIHRyaWdnZXJzIEhXIHRvIHNldCBwb3NzZXNzaW9uIGJpdCB0byBQRikuXG4gXHQgKi9cbitcdCpzdWJtaXR0ZWQgPSB0cnVlO1xuIFx0ZHdvcmQgPSAodTMyICopc2htX2J1ZjtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNNQ19BUEVSVFVSRV9EV09SRFM7IGkrKylcbiBcdFx0d3JpdGVsKCpkd29yZCsrLCBzYy1cdTAwM2ViYXNlICsgaSAqIFNNQ19CQVNJQ19VTklUKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG5pbmRleCAzMDg5NTBmOWI1NGIwLi4yMmRkN2M5Y2VjYzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG5AQCAtNDY4LDYgKzQ2OCwxNSBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcbiBcdC8qIEhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbCAoSFdDKSAqL1xuIFx0c3RydWN0IGdkbWFfZGV2XHRcdGh3YztcbiBcbitcdC8qIFNlbmRlciBkcmFpbjsgdGhlIGZpbmFsIHdha2V1cCBydW5zIHVuZGVyIGh3Y19sb2NrLiAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3RcdGh3Y19kcmFpbl93YWl0cTtcbitcbitcdC8qIFByb3RlY3RzIEhXQyBwdWJsaWNhdGlvbiwgc2VuZGVyIHJlZmVyZW5jZXMsIGFuZCBzaG9ydCBhY2Nlc3NlcyBpblxuK1x0ICogbWFuYV9uZWVkX2xvZygpL21hbmFfc2Vydl9yZXNldCgpLiBTZXR1cCBhbmQgRE1BLXJlZ2lvbiByZWFkZXJzXG4rXHQgKiBzdGlsbCByZXF1aXJlIGxpZmVjeWNsZSBvcmRlcmluZy4gTm90IGFsbCB0aW1lb3V0IHdyaXRlcnMgdXNlIGl0LlxuK1x0ICovXG4rXHRzcGlubG9ja190XHRcdGh3Y19sb2NrO1xuK1xuIFx0LyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0bWFuYTtcbiBcbkBAIC02ODMsNiArNjkyLDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbisvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBxdWV1ZSBkZXB0aCBmb3IgSFdDICovXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggQklUKDI5KVxuK1xuIC8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuIFxuQEAgLTcwMSw2ICs3MTMsNyBAQCBlbnVtIHtcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSFdDX1FVRVVFX0RFUFRIIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTiB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OT05fQ09OVElHVU9VU19CVUZGRVJTKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbmluZGV4IDE2ZmViMzk2MTZjMWIuLmRmZDkyMzM2YjJiNGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbkBAIC0xMSw2ICsxMSwxMyBAQFxuIFxuICNkZWZpbmUgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEggMVxuIFxuKy8qIFVwcGVyIGJvdW5kIG9uIHRoZSBkZXZpY2UtcmVwb3J0ZWQgSFdDIHF1ZXVlIGRlcHRoLiAgVGhlIEhXQyBpcyBhXG4rICogY29udHJvbCBjaGFubmVsLCBzbyBhIG1vZGVzdCBkZXB0aCBhbHJlYWR5IGtlZXBzIGVub3VnaCBtYW5hZ2VtZW50XG4rICogY29tbWFuZHMgaW4gZmxpZ2h0LCB3aGlsZSB0aGUgZGVwdGggZGlyZWN0bHkgc2NhbGVzIHR3byBjb2hlcmVudCBETUFcbisgKiBidWZmZXJzIG9mIHFfZGVwdGggKiBtYXhfbXNnX3NpemUgYnl0ZXMgZWFjaC5cbisgKi9cbisjZGVmaW5lIEhXX0NIQU5ORUxfTUFYX1FVRVVFX0RFUFRIIDEyOFxuK1xuICNkZWZpbmUgSFdDX0lOSVRfREFUQV9DUUlEXHRcdDFcbiAjZGVmaW5lIEhXQ19JTklUX0RBVEFfUlFJRFx0XHQyXG4gI2RlZmluZSBIV0NfSU5JVF9EQVRBX1NRSURcdFx0M1xuQEAgLTE2NCw2ICsxNzEsOSBAQCBzdHJ1Y3QgaHdjX3dxIHtcbiBcdHUxNiBxdWV1ZV9kZXB0aDtcbiBcbiBcdHN0cnVjdCBod2NfY3EgKmh3Y19jcTtcbitcbitcdC8qIFNlcmlhbGl6ZXMgU1EgcG9zdGluZzsgdW51c2VkIGZvciB0aGUgUlEuICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xuQEAgLTE3MSw4ICsxODEsMjcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcbiBcdHZvaWQgKm91dHB1dF9idWY7XG4gXHR1MzIgb3V0cHV0X2J1ZmxlbjtcbiBcbi1cdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xuK1x0aW50IGVycm9yOyAvKiBMaW51eCBlcnJvciBjb2RlIChuZWdhdGl2ZSBlcnJubyBvciAwKSAqL1xuIFx0dTMyIHN0YXR1c19jb2RlO1xuK1xuK1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbitcdCAqIGhhbmRsZV9yZXNwKCkgKENRIGludGVycnVwdCkgYW5kIHRoZSBzZW5kZXIgdGltZW91dCBwYXRoLlxuK1x0ICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXG4rXHQvKiBUcmFja3Mgc2VuZGVyICsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4rXHQgKiAocmVmY291bnQgcmVhY2hlcyAwKSByZWxlYXNlcyB0aGUgYml0bWFwIHNsb3QuXG4rXHQgKi9cbitcdHJlZmNvdW50X3QgcmVmY250O1xuK1x0dTE2IG1zZ19pZDtcbitcbitcdC8qIFNldCBieSB0aGUgZmlyc3QgaGFuZGxlX3Jlc3AoKSwgb3IgYnkgdGhlIHNlbmRlcidzIHRpbWVvdXQgcGF0aCxcbitcdCAqIHNvIGEgbGF0ZXIgb3IgZHVwbGljYXRlIHJlc3BvbnNlIGlzIGRyb3BwZWQuXG4rXHQgKi9cbitcdGJvb2wgcmVzcG9uZGVkO1xuK1xuK1x0LyogUmVzcG9uc2Utc2lkZSByZWZlcmVuY2Ugb3V0c3RhbmRpbmc7IHByb3RlY3RlZCBieSBsb2NrLiAqL1xuK1x0Ym9vbCByZXNwX3BlbmRpbmc7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbkBAIC0xODAsOSArMjA5LDEwIEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuIFxuIFx0dTE2IG51bV9pbmZsaWdodF9tc2c7XG4rXG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZTtcbiBcbi1cdHUxNiBod2NfaW5pdF9xX2RlcHRoX21heDtcbitcdHUzMiBod2NfaW5pdF9xX2RlcHRoX21heDtcbiBcdHUzMiBod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplO1xuIFx0dTMyIGh3Y19pbml0X21heF9yZXNwX21zZ19zaXplO1xuIFxuQEAgLTE5Miw2ICsyMjIsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbiBcdHN0cnVjdCBod2Nfd3EgKnR4cTtcbiBcdHN0cnVjdCBod2NfY3EgKmNxO1xuIFxuK1x0LyogQWRtaXNzaW9uIHBlcm1pdHMuIFRpbWVkLW91dCByZXF1ZXN0cyByZXRhaW4gdGhlaXJzIHVudGlsIGFcbitcdCAqIHJlc3BvbnNlIG9yIHRlYXJkb3duIHJlbGVhc2VzIHRoZSBzbG90LlxuK1x0ICovXG4gXHRzdHJ1Y3Qgc2VtYXBob3JlIHNlbWE7XG4gXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xuIFxuQEAgLTE5OSw2ICsyMzIsMTUgQEAgc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCB7XG4gXHR1MzIgcGZfZGVzdF92cmNxX2lkO1xuIFx0dTMyIGh3Y190aW1lb3V0O1xuIFxuK1x0LyogQ2hlY2tlZCBhZnRlciBzbG90IGFjcXVpc2l0aW9uOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvIHJlamVjdCBzZW5kcy4gKi9cbitcdGJvb2wgY2hhbm5lbF91cDtcbitcbitcdC8qIFBGIG1heSBvd24gdGhlIHF1ZXVlIG1hcHBpbmdzOyBzdGF0ZSBsYXN0cyBvbmx5IGZvciB0aGlzIGNvbnRleHQuICovXG4rXHRib29sIHNldHVwX2FjdGl2ZTtcbitcbitcdC8qIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgY2FsbGVycywgaW5jbHVkaW5nIHdhaXRlcnM7IHVuZGVyIGh3Y19sb2NrLiAqL1xuK1x0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xuK1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG5pbmRleCBkYmFiY2ZiOTVkYWYzLi5lOTYzODdkNzk1MjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9zaG1fY2hhbm5lbC5oXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL3NobV9jaGFubmVsLmhcbkBAIC0yMCw3ICsyMCw3IEBAIHZvaWQgbWFuYV9zbWNfaW5pdChzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gaW50IG1hbmFfc21jX3NldHVwX2h3YyhzdHJ1Y3Qgc2htX2NoYW5uZWwgKnNjLCBib29sIHJlc2V0X3ZmLCB1NjQgZXFfYWRkcixcbiBcdFx0ICAgICAgIHU2NCBjcV9hZGRyLCB1NjQgcnFfYWRkciwgdTY0IHNxX2FkZHIsXG4tXHRcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCk7XG4rXHRcdCAgICAgICB1MzIgZXFfbXNpeF9pbmRleCwgYm9vbCAqc3VibWl0dGVkKTtcbiBcbiBpbnQgbWFuYV9zbWNfdGVhcmRvd25faHdjKHN0cnVjdCBzaG1fY2hhbm5lbCAqc2MsIGJvb2wgcmVzZXRfdmYpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MjAuMDA5MTkzNzQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk2NDU0NTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1BTkEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgTUFOQSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2AgZGlyZWN0b3J5LiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgYWNyb3NzIGEgZmV3IGNvcmUgZmlsZXM6IGBnZG1hX21haW4uY2AsIGBod19jaGFubmVsLmNgLCBhbmQgYHNobV9jaGFubmVsLmNgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYmFzZWQgb24gdGhlIG5hdHVyZSBvZiBNQU5BIGl0c2VsZi4gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSB0byBoaXQgbWUgaW4gbXkgZXhpc3RpbmcgdGVzdCBlbnZpcm9ubWVudHM/XG5cbk15IHRyaWFnZSBwaGlsb3NvcGh5IGNvbWVzIGludG8gcGxheSBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyBpbnRvIHRoZSBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5LCB3aGljaCBtZWFucyBJIHNob3VsZCBsb29rIGF0IFNlY3Rpb24gMiBvZiBteSBtZXRob2RvbG9neS4gSXQgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBwb3RlbnRpYWxseSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBieSBzeXprYWxsZXIuXG5cbkxldCdzIHNlZTogTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgaXMgYSBQQ0kgZGV2aWNlLiBTcGVjaWZpY2FsbHkgZm9yIE1pY3Jvc29mdCBBenVyZSBWTXMuIENvdWxkIGFsc28gYmUgYSBIeXBlci1WIG9yIEF6dXJlIFZGIGRldmljZS4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHRpZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBvciBoeXBlcnZpc29yIGVudmlyb25tZW50LCBzb21ldGhpbmcgdGhhdCBpcyBwcm9iYWJseSBub3Qgc3VwcG9ydGVkIGluIG91ciBzdGFuZGFyZCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBLY29uZmlnIGlzIHNldCB1cCwgc2luY2UgaXQncyBtb3N0IGxpa2VseSBub3QgYXZhaWxhYmxlIGluIGRlZmF1bHQga2VybmVscywgb3IgZW11bGF0ZWQgYnkgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyODMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoyMy45NzM3NDMxMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMzY5MDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUNST1NPRlRfTUFOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnPTI9Y29uZmlnIE1BTkFfSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgUENJIFxcdTAwMjZcXHUwMDI2IE1JQ1JPU09GVF9NQU5BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZy01LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MTg6Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICs9IG1hbmEvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS02LW1hbmEtb2JqcyA6PSBnZG1hX21haW4ubyBzaG1fY2hhbm5lbC5vIGh3X2NoYW5uZWwubyBtYW5hX2VuLm8gbWFuYV9ldGh0b29sLm8gbWFuYV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzoyNi42Nzc0NDA3MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTQwMzE1Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1hbmEgR0RNQSBEcml2ZXIgUHJvYmUqKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBnZG1hX21haW4uY2AgZmlsZSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBNQU5BIGRyaXZlciBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoaXMgdGhpbmcgZ2V0cyBpdHMgaG9va3MgaW50byB0aGUgUENJIGJ1cy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBQQ0kgSUQgaGFuZGxpbmcgYW5kIHRoZSBwcm9iZSBzZXF1ZW5jZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoaWNoIGRldmljZSBJRHMgdGhpcyBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBNQU5BIGhhcmR3YXJlIGFuZCBjb3JyZWN0bHkgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBwcm9iaW5nIG1lY2hhbmlzbS4gQW55IHBvdGVudGlhbCBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgaGVyZSB0aGF0IEknbSBtaXNzaW5nPyBBbmQsIG9mIGNvdXJzZSwgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjIzOjMwLjYxNzc2MjI2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyMTc2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9nZF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjUyOT1zdGF0aWMgYm9vbCBtYW5hX2lzX3BmKHVuc2lnbmVkIHNob3J0IGRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI1MzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjUzNDpzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUzNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNzYyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjQtXFx0LmlkX3RhYmxlXFx0PSBtYW5hX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI3NjU6XFx0LnByb2JlXFx0XFx0PSBtYW5hX2dkX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjYtXFx0LnJlbW92ZVxcdFxcdD0gbWFuYV9nZF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjIzOjMwLjczMDk5MDc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYyODMyMjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGdkbWFfbWFpbi5jYCBNeXN0ZXJ5KipcblxuT2theSwgc28gd2UndmUgZ290IGFuIGlzc3VlIGFuZCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgb3V0IHRoZSBgbWFuYV9pZF90YWJsZWAgd2l0aGluIGBnZG1hX21haW4uY2AuIEl0J3MgbGlrZWx5IHRoYXQgdGFibGUgaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgRE1BIGNoYW5uZWxzLCBvciBldmVuIGludGVycnVwdCBhc3NpZ25tZW50cyDigJMgc29tZXRoaW5nIGZ1bmRhbWVudGFsIHRvIHRoZSBHRE1BJ3Mgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW4gdGhhdCB0YWJsZSBhbmQgaG93IGl0J3MgdXNlZCB0byBuYXJyb3cgZG93biB0aGlzIHByb2JsZW0uIExldCdzIHNlZSBpZiB0aGF0IHRhYmxlIGhvbGRzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODAyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzIuMzU5MzE0OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMyNTM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9pZF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjczND1zdGF0aWMgaW50IG1hbmFfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzU1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc1Ni1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjc2My1cXHQubmFtZVxcdFxcdD0gXFxcIm1hbmFcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI3NjQ6XFx0LmlkX3RhYmxlXFx0PSBtYW5hX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3NjUtXFx0LnByb2JlXFx0XFx0PSBtYW5hX2dkX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjgxNz1tb2R1bGVfZXhpdChtYW5hX2RyaXZlcl9leGl0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI4MTk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1hbmFfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI4MjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjIzOjMyLjQ1MjU3OTQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzMzOTY2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgUENJIERldmljZSBJRHMqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGVzZSBpZGVudGlmaWVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5IGFyZSBgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpYCBhbmQgYE1BTkFfVkZfREVWSUNFX0lEYD8gVGhlc2UgYXJlbid0IGltbWVkaWF0ZWx5IGZhbWlsaWFyLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIHNvIEkgY2FuIGdvIGZ1cnRoZXIgd2l0aCB0aGlzIHRhc2suIFRpbWUgdG8gZG8gc29tZSBkaWdnaW5nIGFuZCBmaWd1cmUgb3V0IHRoZWlyIGRlZmluaXRpb25zLiBUaGlzIGNvdWxkIGJlIHZlbmRvci1zcGVjaWZpYyBpbmZvcm1hdGlvbiBvciBwYXJ0IG9mIGEgZHJpdmVyIG1vZGVsLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gTGV0J3Mgc3RhcnQgd2l0aCB0aG9zZSBjb25zdGFudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDM1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzQuNzI1OTgyNTA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzUwOlxcdFxcdH1cXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IG51bXZmcztcXG4yNzUzOlxcdH1cXG4yNzU0OlxcdFxcbjI3NTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4yNzU2OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpIH0sXFxuMjc1NzpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEYyX0RFVklDRV9JRCkgfSxcXG4yNzU4OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9WRl9ERVZJQ0VfSUQpIH0sXFxuMjc1OTpcXHRcXHR7IH1cXG4yNzYwOlxcdH07XFxuMjc2MTpcXHRcXG4yNzYyOlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4yNzYzOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwibWFuYVxcXCIsXFxuMjc2NDpcXHRcXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuMjc2NTpcXHRcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuMjc2NjpcXHRcXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG4yNzY3OlxcdFxcdC5zdXNwZW5kXFx0PSBtYW5hX2dkX3N1c3BlbmQsXFxuMjc2ODpcXHRcXHQucmVzdW1lXFx0XFx0PSBtYW5hX2dkX3Jlc3VtZSxcXG4yNzY5OlxcdFxcdC5zaHV0ZG93blxcdD0gbWFuYV9nZF9zaHV0ZG93bixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzQuNzI2MjEwMzc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDg2Mzc2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIGEgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMuIEl0IGRlYWxzIHdpdGggXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsXCIgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCBJJ20gbG9va2luZyBmb3IgaGVyZS4gVGhlIHRleHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVIGRyaXZlcnMuIEl0IGdpdmVzIGV4YW1wbGVzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YCB3aGljaCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIChBU0lDcyBvciBQQ0llIGNhcmRzKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoaXMgTWljcm9zb2Z0IE1BTkEgZHJpdmVyLiBJdCdzIGlkZW50aWZpZWQgYXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvQXp1cmUgTklDIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYC4gQ3JpdGljYWxseSwgaXQgKnJlcXVpcmVzKiBNaWNyb3NvZnQgTUFOQSBQQ0llIGhhcmR3YXJlIG9yIGEgVkYgZGV2aWNlIHJ1bm5pbmcgb24gQXp1cmUgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgaXNuJ3QgYSB2aXJ0dWFsIGRldmljZSBsaWtlIHZpcnRpbywgbG9vcGJhY2ssIG9yIHNpbWlsYXIuIEl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIHRvdWNoZXMgYW55dGhpbmcgb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGRyaXZlciwgc28gSSBjaGVjayB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgZ2RtYV9tYWluLmNgLCBgaHdfY2hhbm5lbC5jYCwgYHNobV9jaGFubmVsLmNgLCBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBoZWFkZXIgZmlsZXM6IGBnZG1hLmhgLCBgaHdfY2hhbm5lbC5oYCwgYW5kIGBzaG1fY2hhbm5lbC5oYC4gVGhlc2UgYXJlIGFsbCAqZXhjbHVzaXZlbHkqIHdpdGhpbiB0aGUgTWljcm9zb2Z0IE1BTkEgZHJpdmVyIGRpcmVjdG9yeS4gVGhhdCByZWluZm9yY2VzIHRoZSBpZGVhIHRoYXQgdGhpcyBpcyBhIHNlbGYtY29udGFpbmVkLCBoYXJkd2FyZS1kZXBlbmRlbnQgZHJpdmVyLlxuXG5HaXZlbiB0aGF0IE1BTkEgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgTklDIGRyaXZlciBkZXNpZ25lZCBmb3IgTWljcm9zb2Z0IEF6dXJlIFNtYXJ0TklDIGhhcmR3YXJlLCBhbmQgaXQgY2FuJ3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgdGhlIGFjdHVhbCBNQU5BIFBDSSBkZXZpY2UsIGl0IGFsaWducyBkaXJlY3RseSB3aXRoIFNlY3Rpb24gMidzIGRlZmluaXRpb24uXG5cblRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIFNlY3Rpb24gMiwgdGhpcyBNQU5BIGRyaXZlciBjb25zdGl0dXRlcyBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiBhbmQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIGRvaW5nIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBNeSBGb2N1c1N5bWJvbHMgbGlzdCBpcyBlbXB0eSwgYW5kIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBFbmFibGVDb25maWdzLiBFdmVyeXRoaW5nIGFsaWducy4gTm93LCBJJ2xsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAwMCwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDoyMzozOS40NzQ4NTMyNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyAvIFBDSSBkZXZpY2UgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBBenVyZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIC8gUENJIGRldmljZSBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIG9yIHBsYXRmb3JtLXNwZWNpZmljIEF6dXJlIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6MjM6MzkuNDc0ODg4MjM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2b79[1] Phase: Running StartedAt: 2026-09-08 04:23:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2b79[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 04:23:46 +0000 UTC FinishedAt: 2026-09-08 04:23:53 +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,}