ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNTBiZTdkMC4uMWVlZjk2MCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTkyLDE0ICs5Miw2MCBAQAogIyBzZXQgc29tZSBkZWZpbmVzIHdoZW4gbmVlZGVkLgogIyBLbm93biBvbmVzIGFyZSAtREVOQUJMRV9QT0xMLCAtREVOQUJMRV9FUE9MTCwgYW5kIC1EVVNFX01ZX0VQT0xMCiAjIC0gdXNlIC1EVFBST1hZIHRvIGNvbXBpbGUgd2l0aCB0cmFuc3BhcmVudCBwcm94eSBzdXBwb3J0LgorIyAtIHVzZSAtRENPTkZJR19IQVBfQ1RUUFJPWFkgdG8gZW5hYmxlIGZ1bGwgdHJhbnNwYXJlbnQgcHJveHkgc3VwcG9ydAogREVGSU5FID0gLURUUFJPWFkKIAorCisjIyMjIGJ1aWxkIG9wdGlvbnMKKworIyBkbyBub3QgY2hhbmdlIHRoaXMgb25lLCBlbmFibGUgVVNFXyogdmFyaWFibGVzIGluc3RlYWQuCitPUFRJT05TID0KKworaWZuZXEgKCQoVVNFX0NUVFBST1hZKSwpCitPUFRJT05TICs9IC1EQ09ORklHX0hBUF9DVFRQUk9YWQorZW5kaWYKKworaWZuZXEgKCQoVVNFX1RQUk9YWSksKQorT1BUSU9OUyArPSAtRFRQUk9YWQorZW5kaWYKKworaWZuZXEgKCQoVVNFX1BPTEwpLCkKK09QVElPTlMgKz0gLURFTkFCTEVfUE9MTAorZW5kaWYKKworaWZuZXEgKCQoVVNFX0VQT0xMKSwpCitPUFRJT05TICs9IC1ERU5BQkxFX0VQT0xMCitlbmRpZgorCitpZm5lcSAoJChVU0VfTVlfRVBPTEwpLCkKK09QVElPTlMgKz0gLURVU0VfTVlfRVBPTEwKK2VuZGlmCisKK2lmbmVxICgkKFVTRV9ORVRGSUxURVIpLCkKK09QVElPTlMgKz0gLURORVRGSUxURVIKK2VuZGlmCisKK2lmbmVxICgkKFVTRV9FUE9MTF9XT1JLQVJPVU5EKSwpCitPUFRJT05TICs9IC1ERVBPTExfQ1RMX01PRF9XT1JLQVJPVU5ECitlbmRpZgorCitpZm5lcSAoJChVU0VfR0VUU09DS05BTUUpLCkKK09QVElPTlMgKz0gLURVU0VfR0VUU09DS05BTUUKK2VuZGlmCisKK2lmbmVxICgkKFVTRV9SRUdQQVJNKSwpCitPUFRJT05TICs9IC1EQ09ORklHX0hBUF9VU0VfUkVHUEFSTQorZW5kaWYKKworIyMjIyBlbmQgb2YgYnVpbGQgb3B0aW9ucworCisKICMgZ2xvYmFsIG9wdGlvbnMKIFRBUkdFVF9PUFRTPSQoQ09QVFMuJChUQVJHRVQpKQogUkVHRVhfT1BUUz0kKENPUFRTLiQoUkVHRVgpKQogQ1BVX09QVFM9JChDT1BUUy4kKENQVSkpCiAKLUNPUFRTPS1JaW5jbHVkZSAkKEFERElOQykgJChDUFVfT1BUUykgJChUQVJHRVRfT1BUUykgJChSRUdFWF9PUFRTKSAkKFNNQUxMX09QVFMpICQoREVGSU5FKQorQ09QVFM9LUlpbmNsdWRlICQoQURESU5DKSAkKENQVV9PUFRTKSAkKFRBUkdFVF9PUFRTKSAkKFJFR0VYX09QVFMpICQoU01BTExfT1BUUykgJChERUZJTkUpICQoT1BUSU9OUykKIExJQlM9JChMSUJTLiQoVEFSR0VUKSkgJChMSUJTLiQoUkVHRVgpKSAkKEFERExJQikKIAogQ0ZMQUdTID0gLVdhbGwgJChDT1BUUykgJChERUJVRykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uL2NvbXBhdC5oIGIvaW5jbHVkZS9jb21tb24vY29tcGF0LmgKaW5kZXggNTg5MDhkNy4uODI2MWY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24vY29tcGF0LmgKKysrIGIvaW5jbHVkZS9jb21tb24vY29tcGF0LmgKQEAgLTQ5LDYgKzQ5LDE5IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KICNlbmRpZgogCisvKiBXZSdsbCB0cnkgdG8gZW5hYmxlIFNPX1JFVVNFUE9SVCBvbiBMaW51eCAyLjQgYW5kIDIuNiBpZiBub3QgZGVmaW5lZC4KKyAqIFRoZXJlIGFyZSB0d28gZmFtaWxpZXMgb2YgdmFsdWVzIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBUaG9zZQorICogYXJlIGF0IGxlYXN0IHZhbGlkIG9uIExpbnV4IDIuNCBhbmQgMi42LCByZWFzb24gd2h5IHdlJ2xsIHJlbHkgb24gdGhlCisgKiBORVRGSUxURVIgZGVmaW5lLgorICovCisjaWYgIWRlZmluZWQoU09fUkVVU0VQT1JUKSAmJiBkZWZpbmVkKE5FVEZJTFRFUikKKyNpZiAgICAoU09fUkVVU0VBRERSID09IDIpCisjZGVmaW5lIFNPX1JFVVNFUE9SVCAxNQorI2VsaWYgIChTT19SRVVTRUFERFIgPT0gMHgwMDA0KQorI2RlZmluZSBTT19SRVVTRVBPUlQgMHgwMjAwCisjZW5kaWYgLyogU09fUkVVU0VBRERSICovCisjZW5kaWYgLyogU09fUkVVU0VQT1JUICovCisKICNpZiBkZWZpbmVkKF9fZGlldGxpYmNfXykKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW1wb3J0L2lwX3Rwcm94eS5oIGIvaW5jbHVkZS9pbXBvcnQvaXBfdHByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzZjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW1wb3J0L2lwX3Rwcm94eS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBUcmFuc3BhcmVudCBwcm94eSBzdXBwb3J0IGZvciBMaW51eC9pcHRhYmxlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEJhbGFCaXQgSVQgTHRkLgorICogQXV0aG9yOiBCYWzhenMgU2NoZWlkbGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfSVBfVFBST1hZX0gKKyNkZWZpbmUgX0lQX1RQUk9YWV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWZuZGVmIElQX1JFQ1ZPUklHQUREUlMKKyNkZWZpbmUgSVBfUkVDVk9SSUdBRERSUwkxMTI3MworI2RlZmluZSBJUF9PUklHQUREUlMJSVBfUkVDVk9SSUdBRERSUworc3RydWN0IGluX29yaWdhZGRycyB7CisgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlvYV9zcmNhZGRyOworICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpb2FfZHN0YWRkcjsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgaW50IGlvYV9zcmNwb3J0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbnQgaW9hX2RzdHBvcnQ7Cit9OworI2VuZGlmCisjZW5kaWYKKworLyogCisgKiB1c2VkIGluIHNldHNvY2tvcHQoU09MX0lQLCBJUF9UUFJPWFkpIHNob3VsZCBub3QgY29sbGlkZSAKKyAqIHdpdGggdmFsdWVzIGluIDxsaW51eC9pbi5oPiAKKyAqLworCisjZGVmaW5lIElQX1RQUk9YWQkgICAxMTI3NAorCisvKiB0cHJveHkgb3BlcmF0aW9ucyAqLworZW51bSB7CisJVFBST1hZX1ZFUlNJT04gPSAwLAorCVRQUk9YWV9BU1NJR04sCisJVFBST1hZX1VOQVNTSUdOLAorCVRQUk9YWV9RVUVSWSwKKwlUUFJPWFlfRkxBR1MsCisJVFBST1hZX0FMTE9DLAorCVRQUk9YWV9DT05ORUNUCit9OworCisvKiBiaXRmaWVsZHMgaW4gSVBfVFBST1hZX0ZMQUdTICovCisjZGVmaW5lIElUUF9DT05ORUNUICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElUUF9MSVNURU4gICAgICAweDAwMDAwMDAyCisjZGVmaW5lIElUUF9FU1RBQkxJU0hFRCAweDAwMDAwMDA0CisKKyNkZWZpbmUgSVRQX09OQ0UgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSVRQX01BUksgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVRQX0FQUExJRUQgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSVRQX1VOSURJUiAgICAgIDB4MDAwODAwMDAKKworc3RydWN0IGluX3Rwcm94eV9hZGRyeworCXN0cnVjdCBpbl9hZGRyCWZhZGRyOworCXVfaW50MTZfdAlmcG9ydDsKK307CisKK3N0cnVjdCBpbl90cHJveHkgeworCS8qIGZpeGVkIHBhcnQsIHNob3VsZCBub3QgY2hhbmdlIGJldHdlZW4gdmVyc2lvbnMgKi8KKwl1X2ludDMyX3Qgb3A7CisJLyogZXh0ZW5zaWJsZSBwYXJ0ICovCisJdW5pb24gX2luX2FyZ3MgeworCQl1X2ludDMyX3QJCXZlcnNpb247CisJCXN0cnVjdCBpbl90cHJveHlfYWRkcglhZGRyOworCQl1X2ludDMyX3QJCWZsYWdzOworCX0gdjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90eXBlcy9iYWNrZW5kLmggYi9pbmNsdWRlL3R5cGVzL2JhY2tlbmQuaAppbmRleCBhNmEzOTNhLi5mNzBhMzcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3R5cGVzL2JhY2tlbmQuaAorKysgYi9pbmNsdWRlL3R5cGVzL2JhY2tlbmQuaApAQCAtNTMsNiArNTMsMTIgQEAKICNkZWZpbmUgUFJfT19BQlJUX0NMT1NFIDB4MDA4MDAwMDAgICAgICAvKiBpbW1lZGlhdGVseSBhYm9ydCByZXF1ZXN0IHdoZW4gY2xpZW50IGNsb3NlcyAqLwogI2RlZmluZSBQUl9PX1NTTDNfQ0hLICAgMHgwMTAwMDAwMCAgICAgIC8qIHVzZSBTU0x2MyBDTElFTlRfSEVMTE8gcGFja2V0cyBmb3Igc2VydmVyIGhlYWx0aCAqLwogCisjZGVmaW5lCVBSX09fVFBYWV9BRERSICAweDAyMDAwMDAwCS8qIGJpbmQgdG8gdGhpcyBub24tbG9jYWwgYWRkcmVzcyB3aGVuIGNvbm5lY3QoKWluZyAqLworI2RlZmluZQlQUl9PX1RQWFlfQ0lQCTB4MDQwMDAwMDAJLyogYmluZCB0byB0aGUgY2xpZW50J3MgSVAgYWRkcmVzcyB3aGVuIGNvbm5lY3QoKWluZyAqLworI2RlZmluZQlQUl9PX1RQWFlfQ0xJCTB4MDYwMDAwMDAJLyogYmluZCB0byB0aGUgY2xpZW50J3MgSVArcG9ydCB3aGVuIGNvbm5lY3QoKWluZyAqLworI2RlZmluZQlQUl9PX1RQWFlfTUFTSwkweDA2MDAwMDAwCS8qIGJpbmQgdG8gYSBub24tbG9jYWwgYWRkcmVzcyB3aGVuIGNvbm5lY3QoKWluZyAqLworCisKICNlbmRpZiAvKiBfVFlQRVNfQkFDS0VORF9IICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3R5cGVzL2dsb2JhbC5oIGIvaW5jbHVkZS90eXBlcy9nbG9iYWwuaAppbmRleCA2ODFhYzA1Li40MGM2Yzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3R5cGVzL2dsb2JhbC5oCisrKyBiL2luY2x1ZGUvdHlwZXMvZ2xvYmFsLmgKQEAgLTM4LDIyICszOCwyNyBAQAogI2RlZmluZQlNT0RFX1NUQVJUSU5HCTEyOAogI2RlZmluZQlNT0RFX0ZPUkVHUk9VTkQJMjU2CiAKKy8qIGxpc3Qgb2YgbGFzdCBjaGVja3MgdG8gcGVyZm9ybSwgZGVwZW5kaW5nIG9uIGNvbmZpZyBvcHRpb25zICovCisjZGVmaW5lIExTVENIS19DQVBfQklORAkweDAwMDAwMDAxCS8qIGNoZWNrIHRoYXQgd2UgY2FuIGJpbmQgdG8gYW55IHBvcnQgKi8KKyNkZWZpbmUgTFNUQ0hLX0NUVFBST1hZCTB4MDAwMDAwMDIJLyogY2hlY2sgdGhhdCB0cHJveHkgaXMgZW5hYmxlZCAqLworI2RlZmluZSBMU1RDSEtfTkVUQURNCTB4MDAwMDAwMDQJLyogY2hlY2sgdGhhdCB3ZSBoYXZlIENBUF9ORVRfQURNSU4gKi8KIAogLyogRklYTUUgOiB0aGlzIHdpbGwgaGF2ZSB0byBiZSByZWRlZmluZWQgY29ycmVjdGx5ICovCiBzdHJ1Y3QgZ2xvYmFsIHsKLSAgICBpbnQgdWlkOwotICAgIGludCBnaWQ7Ci0gICAgaW50IG5icHJvYzsKLSAgICBpbnQgbWF4Y29ubjsKLSAgICBpbnQgbWF4c29jazsJCS8qIG1heCAjIG9mIHNvY2tldHMgKi8KLSAgICBpbnQgcmxpbWl0X25vZmlsZTsJCS8qIGRlZmF1bHQgdWxpbWl0LW4gdmFsdWUgOiAwPXVuc2V0ICovCi0gICAgaW50IHJsaW1pdF9tZW1tYXg7CQkvKiBkZWZhdWx0IHVsaW1pdC1kIGluIG1lZ3MgdmFsdWUgOiAwPXVuc2V0ICovCi0gICAgaW50IG1vZGU7Ci0gICAgY2hhciAqY2hyb290OwotICAgIGNoYXIgKnBpZGZpbGU7Ci0gICAgaW50IGxvZ2ZhYzEsIGxvZ2ZhYzI7Ci0gICAgaW50IGxvZ2xldjEsIGxvZ2xldjI7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGxvZ3NydjEsIGxvZ3NydjI7CisJaW50IHVpZDsKKwlpbnQgZ2lkOworCWludCBuYnByb2M7CisJaW50IG1heGNvbm47CisJaW50IG1heHNvY2s7CQkvKiBtYXggIyBvZiBzb2NrZXRzICovCisJaW50IHJsaW1pdF9ub2ZpbGU7CS8qIGRlZmF1bHQgdWxpbWl0LW4gdmFsdWUgOiAwPXVuc2V0ICovCisJaW50IHJsaW1pdF9tZW1tYXg7CS8qIGRlZmF1bHQgdWxpbWl0LWQgaW4gbWVncyB2YWx1ZSA6IDA9dW5zZXQgKi8KKwlpbnQgbW9kZTsKKwlpbnQgbGFzdF9jaGVja3M7CisJY2hhciAqY2hyb290OworCWNoYXIgKnBpZGZpbGU7CisJaW50IGxvZ2ZhYzEsIGxvZ2ZhYzI7CisJaW50IGxvZ2xldjEsIGxvZ2xldjI7CisJc3RydWN0IHNvY2thZGRyX2luIGxvZ3NydjEsIGxvZ3NydjI7CiB9OwogCiBleHRlcm4gc3RydWN0IGdsb2JhbCBnbG9iYWw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3R5cGVzL3Byb3h5LmggYi9pbmNsdWRlL3R5cGVzL3Byb3h5LmgKaW5kZXggZjMzMDRlNi4uODUyM2E2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90eXBlcy9wcm94eS5oCisrKyBiL2luY2x1ZGUvdHlwZXMvcHJveHkuaApAQCAtMTAyLDYgKzEwMiw5IEBACiAJaW50IG9wdGlvbnM7CQkJCS8qIFBSX09fUkVESVNQLCBQUl9PX1RSQU5TUCwgLi4uICovCiAJaW50IG1vZGU7CQkJCS8qIG1vZGUgPSBQUl9NT0RFX1RDUCwgUFJfTU9ERV9IVFRQIG9yIFBSX01PREVfSEVBTFRIICovCiAJc3RydWN0IHNvY2thZGRyX2luIHNvdXJjZV9hZGRyOwkJLyogdGhlIGFkZHJlc3MgdG8gd2hpY2ggd2Ugd2FudCB0byBiaW5kIGZvciBjb25uZWN0KCkgKi8KKyNpZmRlZiBDT05GSUdfSEFQX0NUVFBST1hZCisJc3RydWN0IHNvY2thZGRyX2luIHRwcm94eV9hZGRyOwkJLyogbm9uLWxvY2FsIGFkZHJlc3Mgd2Ugd2FudCB0byBiaW5kIHRvIGZvciBjb25uZWN0KCkgKi8KKyNlbmRpZgogCXN0cnVjdCBwcm94eSAqbmV4dDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9nc3J2MSwgbG9nc3J2MjsJLyogMiBzeXNsb2cgc2VydmVycyAqLwogCXNpZ25lZCBjaGFyIGxvZ2ZhYzEsIGxvZ2ZhYzI7CQkvKiBsb2cgZmFjaWxpdHkgZm9yIGJvdGggc2VydmVycy4gLTEgPSBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90eXBlcy9zZXJ2ZXIuaCBiL2luY2x1ZGUvdHlwZXMvc2VydmVyLmgKaW5kZXggMzdiOGFmMS4uNzBlMWY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90eXBlcy9zZXJ2ZXIuaAorKysgYi9pbmNsdWRlL3R5cGVzL3NlcnZlci5oCkBAIC0zNSwxMSArMzUsMTYgQEAKIAogCiAvKiBzZXJ2ZXIgZmxhZ3MgKi8KLSNkZWZpbmUgU1JWX1JVTk5JTkcJMQkvKiB0aGUgc2VydmVyIGlzIFVQICovCi0jZGVmaW5lIFNSVl9CQUNLVVAJMgkvKiB0aGlzIHNlcnZlciBpcyBhIGJhY2t1cCBzZXJ2ZXIgKi8KLSNkZWZpbmUJU1JWX01BUFBPUlRTCTQJLyogdGhpcyBzZXJ2ZXIgdXNlcyBtYXBwZWQgcG9ydHMgKi8KLSNkZWZpbmUJU1JWX0JJTkRfU1JDCTgJLyogdGhpcyBzZXJ2ZXIgdXNlcyBhIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzICovCi0jZGVmaW5lCVNSVl9DSEVDS0VECTE2CS8qIHRoaXMgc2VydmVyIG5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KKyNkZWZpbmUgU1JWX1JVTk5JTkcJMHgwMDAxCS8qIHRoZSBzZXJ2ZXIgaXMgVVAgKi8KKyNkZWZpbmUgU1JWX0JBQ0tVUAkweDAwMDIJLyogdGhpcyBzZXJ2ZXIgaXMgYSBiYWNrdXAgc2VydmVyICovCisjZGVmaW5lIFNSVl9NQVBQT1JUUwkweDAwMDQJLyogdGhpcyBzZXJ2ZXIgdXNlcyBtYXBwZWQgcG9ydHMgKi8KKyNkZWZpbmUgU1JWX0JJTkRfU1JDCTB4MDAwOAkvKiB0aGlzIHNlcnZlciB1c2VzIGEgc3BlY2lmaWMgc291cmNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1JWX0NIRUNLRUQJMHgwMDEwCS8qIHRoaXMgc2VydmVyIG5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KKworI2RlZmluZSBTUlZfVFBST1hZX0FERFIJMHgwMDIwCS8qIGJpbmQgdG8gdGhpcyBub24tbG9jYWwgYWRkcmVzcyB0byByZWFjaCB0aGlzIHNlcnZlciAqLworI2RlZmluZSBTUlZfVFBST1hZX0NJUAkweDAwNDAJLyogYmluZCB0byB0aGUgY2xpZW50J3MgSVAgYWRkcmVzcyB0byByZWFjaCB0aGlzIHNlcnZlciAqLworI2RlZmluZSBTUlZfVFBST1hZX0NMSQkweDAwNjAJLyogYmluZCB0byB0aGUgY2xpZW50J3MgSVArcG9ydCB0byByZWFjaCB0aGlzIHNlcnZlciAqLworI2RlZmluZSBTUlZfVFBST1hZX01BU0sJMHgwMDYwCS8qIGJpbmQgdG8gYSBub24tbG9jYWwgYWRkcmVzcyB0byByZWFjaCB0aGlzIHNlcnZlciAqLwogCiAvKiBmdW5jdGlvbiB3aGljaCBhY3Qgb24gc2VydmVycyBuZWVkIHRvIHJldHVybiB2YXJpb3VzIGVycm9ycyAqLwogI2RlZmluZSBTUlZfU1RBVFVTX09LICAgICAgIDAgICAvKiBldmVyeXRoaW5nIGlzIE9LLiAqLwpAQCAtNjAsNiArNjUsOSBAQAogCXN0cnVjdCB0YXNrICpxdWV1ZV9tZ3Q7CQkvKiB0aGUgdGFzayBhc3NvY2lhdGVkIHRvIHRoZSBxdWV1ZSBwcm9jZXNzaW5nICovCiAJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CQkvKiB0aGUgYWRkcmVzcyB0byBjb25uZWN0IHRvICovCiAJc3RydWN0IHNvY2thZGRyX2luIHNvdXJjZV9hZGRyOwkvKiB0aGUgYWRkcmVzcyB0byB3aGljaCB3ZSB3YW50IHRvIGJpbmQgZm9yIGNvbm5lY3QoKSAqLworI2lmZGVmIENPTkZJR19IQVBfQ1RUUFJPWFkKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gdHByb3h5X2FkZHI7CS8qIG5vbi1sb2NhbCBhZGRyZXNzIHdlIHdhbnQgdG8gYmluZCB0byBmb3IgY29ubmVjdCgpICovCisjZW5kaWYKIAlzaG9ydCBjaGVja19wb3J0OwkJCS8qIHRoZSBwb3J0IHRvIHVzZSBmb3IgdGhlIGhlYWx0aCBjaGVja3MgKi8KIAlpbnQgaGVhbHRoOwkJCQkvKiAwLT5yaXNlLTEgPSBiYWQ7IHJpc2UtPnJpc2UrZmFsbC0xID0gZ29vZCAqLwogCWludCByaXNlLCBmYWxsOwkJCS8qIHRpbWUgaW4gaXRlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90eXBlcy9zZXNzaW9uLmggYi9pbmNsdWRlL3R5cGVzL3Nlc3Npb24uaAppbmRleCA2NmIxZGIzLi5kZDEyZDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3R5cGVzL3Nlc3Npb24uaAorKysgYi9pbmNsdWRlL3R5cGVzL3Nlc3Npb24uaApAQCAtMTAzLDcgKzEwMyw5IEBACiBzdHJ1Y3Qgc2Vzc2lvbiB7CiAJc3RydWN0IHRhc2sgKnRhc2s7CQkJLyogdGhlIHRhc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbiAqLwogCS8qIGFwcGxpY2F0aW9uIHNwZWNpZmljIGJlbG93ICovCi0Jc3RydWN0IHByb3h5ICpwcm94eTsJCQkvKiB0aGUgcHJveHkgdGhpcyBzb2NrZXQgYmVsb25ncyB0byAqLworCXN0cnVjdCBwcm94eSAqZmU7CQkJLyogdGhlIHByb3h5IHRoaXMgc2Vzc2lvbiBkZXBlbmRzIG9uIGZvciB0aGUgY2xpZW50IHNpZGUgKi8KKwlzdHJ1Y3QgcHJveHkgKmZpOwkJCS8qIHRoZSBwcm94eSB0aGlzIHNlc3Npb24gZGVwZW5kcyBvbiBmb3IgdGhlIGZpbHRlcmluZyBydWxlcyAqLworCXN0cnVjdCBwcm94eSAqYmU7CQkJLyogdGhlIHByb3h5IHRoaXMgc2Vzc2lvbiBkZXBlbmRzIG9uIGZvciB0aGUgc2VydmVyIHNpZGUgKi8KIAlpbnQgY2xpX2ZkOwkJCQkvKiB0aGUgY2xpZW50IHNpZGUgZmQgKi8KIAlpbnQgc3J2X2ZkOwkJCQkvKiB0aGUgc2VydmVyIHNpZGUgZmQgKi8KIAlpbnQgY2xpX3N0YXRlOwkJCQkvKiBzdGF0ZSBvZiB0aGUgY2xpZW50IHNpZGUgKi8KQEAgLTE0NCw3ICsxNDYsNyBAQAogCQkJc3RydWN0IHNlcnZlciAqc3Y7CiAJCQlzaG9ydCBweF9zdCwgc3Zfc3Q7CS8qIERBVEFfU1RfSU5JVCBvciBEQVRBX1NUX0RBVEEgKi8KIAkJfSBzdGF0czsKLQl9IGRhdGFfY3R4OworCX0gZGF0YV9jdHg7CQkJCS8qIHVzZWQgYnkgcHJvZHVjZV9jb250ZW50IHRvIGR1bXAgdGhlIHN0YXRzIHJpZ2h0IG5vdyAqLwogCXVuc2lnbmVkIGludCB1bmlxX2lkOwkJCS8qIHVuaXF1ZSBJRCB1c2VkIGZvciB0aGUgdHJhY2VzICovCiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC5jIGIvc3JjL2JhY2tlbmQuYwppbmRleCAyODg0ZWE1Li5lMDEwNjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC5jCisrKyBiL3NyYy9iYWNrZW5kLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSA8Y29tbW9uL2NvbXBhdC5oPgogI2luY2x1ZGUgPGNvbW1vbi9jb25maWcuaD4KQEAgLTM1LDYgKzM2LDkgQEAKICNpbmNsdWRlIDxwcm90by9zdHJlYW1fc29jay5oPgogI2luY2x1ZGUgPHByb3RvL3Rhc2suaD4KIAorI2lmZGVmIENPTkZJR19IQVBfQ1RUUFJPWFkKKyNpbmNsdWRlIDxpbXBvcnQvaXBfdHByb3h5Lmg+CisjZW5kaWYKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmVjb3VudHMgdGhlIG51bWJlciBvZiB1c2FibGUgYWN0aXZlIGFuZCBiYWNrdXAgc2VydmVycyBmb3IKQEAgLTE1MSwxNiArMTU1LDE2IEBACiAJCXJldHVybiBTUlZfU1RBVFVTX0lOVEVSTkFMOwogCiAJaWYgKCEocy0+ZmxhZ3MgJiBTTl9BU1NJR05FRCkpIHsKLQkJaWYgKChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQkFMQU5DRSkgJiYgIShzLT5mbGFncyAmIFNOX0RJUkVDVCkpIHsKLQkJCWlmICghcy0+cHJveHktPnNydl9hY3QgJiYgIXMtPnByb3h5LT5zcnZfYmNrKQorCQlpZiAoKHMtPmJlLT5vcHRpb25zICYgUFJfT19CQUxBTkNFKSAmJiAhKHMtPmZsYWdzICYgU05fRElSRUNUKSkgeworCQkJaWYgKCFzLT5iZS0+c3J2X2FjdCAmJiAhcy0+YmUtPnNydl9iY2spCiAJCQkJcmV0dXJuIFNSVl9TVEFUVVNfTk9TUlY7CiAKLQkJCWlmIChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQkFMQU5DRV9SUikgewotCQkJCXMtPnNydiA9IGdldF9zZXJ2ZXJfcnJfd2l0aF9jb25ucyhzLT5wcm94eSk7CisJCQlpZiAocy0+YmUtPm9wdGlvbnMgJiBQUl9PX0JBTEFOQ0VfUlIpIHsKKwkJCQlzLT5zcnYgPSBnZXRfc2VydmVyX3JyX3dpdGhfY29ubnMocy0+YmUpOwogCQkJCWlmICghcy0+c3J2KQogCQkJCQlyZXR1cm4gU1JWX1NUQVRVU19GVUxMOwogCQkJfQotCQkJZWxzZSBpZiAocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0JBTEFOQ0VfU0gpIHsKKwkJCWVsc2UgaWYgKHMtPmJlLT5vcHRpb25zICYgUFJfT19CQUxBTkNFX1NIKSB7CiAJCQkJaW50IGxlbjsKIAkJCiAJCQkJaWYgKHMtPmNsaV9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUKQpAQCAtMTcwLDcgKzE3NCw3IEBACiAJCQkJZWxzZSAvKiB1bmtub3duIElQIGZhbWlseSAqLwogCQkJCQlyZXR1cm4gU1JWX1NUQVRVU19JTlRFUk5BTDsKIAkJCi0JCQkJcy0+c3J2ID0gZ2V0X3NlcnZlcl9zaChzLT5wcm94eSwKKwkJCQlzLT5zcnYgPSBnZXRfc2VydmVyX3NoKHMtPmJlLAogCQkJCQkJICAgICAgICh2b2lkICopJigoc3RydWN0IHNvY2thZGRyX2luICopJnMtPmNsaV9hZGRyKS0+c2luX2FkZHIsCiAJCQkJCQkgICAgICAgbGVuKTsKIAkJCX0KQEAgLTIwMiw3ICsyMDYsNyBAQAogCWZwcmludGYoc3RkZXJyLCJhc3NpZ25fc2VydmVyX2FkZHJlc3MgOiBzPSVwXG4iLHMpOwogI2VuZGlmCiAKLQlpZiAocy0+ZmxhZ3MgJiBTTl9ESVJFQ1QgfHwgcy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0JBTEFOQ0UpIHsKKwlpZiAocy0+ZmxhZ3MgJiBTTl9ESVJFQ1QgfHwgcy0+YmUtPm9wdGlvbnMgJiBQUl9PX0JBTEFOQ0UpIHsKIAkJLyogQSBzZXJ2ZXIgaXMgbmVjZXNzYXJpbHkga25vd24gZm9yIHRoaXMgc2Vzc2lvbiAqLwogCQlpZiAoIShzLT5mbGFncyAmIFNOX0FTU0lHTkVEKSkKIAkJCXJldHVybiBTUlZfU1RBVFVTX0lOVEVSTkFMOwpAQCAtMjE1LDE3ICsyMTksMTcgQEAKIAkJCXN0cnVjdCBzb2NrYWRkcl9pbiBzb2NrbmFtZTsKIAkJCXNvY2tsZW5fdCBuYW1lbGVuID0gc2l6ZW9mKHNvY2tuYW1lKTsKIAotCQkJaWYgKCEocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1RSQU5TUCkgfHwKKwkJCWlmICghKHMtPmZlLT5vcHRpb25zICYgUFJfT19UUkFOU1ApIHx8CiAJCQkgICAgZ2V0X29yaWdpbmFsX2RzdChzLT5jbGlfZmQsIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc29ja25hbWUsICZuYW1lbGVuKSA9PSAtMSkKIAkJCQlnZXRzb2NrbmFtZShzLT5jbGlfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc29ja25hbWUsICZuYW1lbGVuKTsKIAkJCXMtPnNydl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMobnRvaHMocy0+c3J2X2FkZHIuc2luX3BvcnQpICsgbnRvaHMoc29ja25hbWUuc2luX3BvcnQpKTsKIAkJfQogCX0KLQllbHNlIGlmICgqKGludCAqKSZzLT5wcm94eS0+ZGlzcGF0Y2hfYWRkci5zaW5fYWRkcikgeworCWVsc2UgaWYgKCooaW50ICopJnMtPmJlLT5kaXNwYXRjaF9hZGRyLnNpbl9hZGRyKSB7CiAJCS8qIGNvbm5lY3QgdG8gdGhlIGRlZmluZWQgZGlzcGF0Y2ggYWRkciAqLwotCQlzLT5zcnZfYWRkciA9IHMtPnByb3h5LT5kaXNwYXRjaF9hZGRyOworCQlzLT5zcnZfYWRkciA9IHMtPmJlLT5kaXNwYXRjaF9hZGRyOwogCX0KLQllbHNlIGlmIChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fVFJBTlNQKSB7CisJZWxzZSBpZiAocy0+ZmUtPm9wdGlvbnMgJiBQUl9PX1RSQU5TUCkgewogCQkvKiBpbiB0cmFuc3BhcmVudCBtb2RlLCB1c2UgdGhlIG9yaWdpbmFsIGRlc3QgYWRkciBpZiBubyBkaXNwYXRjaCBzcGVjaWZpZWQgKi8KIAkJc29ja2xlbl90IHNhbGVuID0gc2l6ZW9mKHMtPnNydl9hZGRyKTsKIApAQCAtMzM1LDE3ICszMzksMTcgQEAKIAkJcWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGdldCBhIHNlcnZlciBzb2NrZXQuXG4iKTsKIAogCQlpZiAoZXJybm8gPT0gRU5GSUxFKQotCQkJc2VuZF9sb2cocy0+cHJveHksIExPR19FTUVSRywKKwkJCXNlbmRfbG9nKHMtPmJlLCBMT0dfRU1FUkcsCiAJCQkJICJQcm94eSAlcyByZWFjaGVkIHN5c3RlbSBGRCBsaW1pdCBhdCAlZC4gUGxlYXNlIGNoZWNrIHN5c3RlbSB0dW5hYmxlcy5cbiIsCi0JCQkJIHMtPnByb3h5LT5pZCwgbWF4ZmQpOworCQkJCSBzLT5iZS0+aWQsIG1heGZkKTsKIAkJZWxzZSBpZiAoZXJybm8gPT0gRU1GSUxFKQotCQkJc2VuZF9sb2cocy0+cHJveHksIExPR19FTUVSRywKKwkJCXNlbmRfbG9nKHMtPmJlLCBMT0dfRU1FUkcsCiAJCQkJICJQcm94eSAlcyByZWFjaGVkIHByb2Nlc3MgRkQgbGltaXQgYXQgJWQuIFBsZWFzZSBjaGVjayAndWxpbWl0LW4nIGFuZCByZXN0YXJ0LlxuIiwKLQkJCQkgcy0+cHJveHktPmlkLCBtYXhmZCk7CisJCQkJIHMtPmJlLT5pZCwgbWF4ZmQpOwogCQllbHNlIGlmIChlcnJubyA9PSBFTk9CVUZTIHx8IGVycm5vID09IEVOT01FTSkKLQkJCXNlbmRfbG9nKHMtPnByb3h5LCBMT0dfRU1FUkcsCisJCQlzZW5kX2xvZyhzLT5iZSwgTE9HX0VNRVJHLAogCQkJCSAiUHJveHkgJXMgcmVhY2hlZCBzeXN0ZW0gbWVtb3J5IGxpbWl0IGF0ICVkIHNvY2tldHMuIFBsZWFzZSBjaGVjayBzeXN0ZW0gdHVuYWJsZXMuXG4iLAotCQkJCSBzLT5wcm94eS0+aWQsIG1heGZkKTsKKwkJCQkgcy0+YmUtPmlkLCBtYXhmZCk7CiAJCS8qIHRoaXMgaXMgYSByZXNvdXJjZSBlcnJvciAqLwogCQlyZXR1cm4gU05fRVJSX1JFU09VUkNFOwogCX0KQEAgLTM2Niw3ICszNzAsNyBAQAogCQlyZXR1cm4gU05fRVJSX0lOVEVSTkFMOwogCX0KIAotCWlmIChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fVENQX1NSVl9LQSkKKwlpZiAocy0+YmUtPm9wdGlvbnMgJiBQUl9PX1RDUF9TUlZfS0EpCiAJCXNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgKGNoYXIgKikgJm9uZSwgc2l6ZW9mKG9uZSkpOwogCiAJLyogYWxsb3cgc3BlY2lmaWMgYmluZGluZyA6CkBAIC0zNzcsMjQgKzM4MSw5NiBAQAogCQlzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFyICopICZvbmUsIHNpemVvZihvbmUpKTsKIAkJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcy0+c3J2LT5zb3VyY2VfYWRkciwgc2l6ZW9mKHMtPnNydi0+c291cmNlX2FkZHIpKSA9PSAtMSkgewogCQkJQWxlcnQoIkNhbm5vdCBiaW5kIHRvIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0KCkgZm9yIHNlcnZlciAlcy8lcy4gQWJvcnRpbmcuXG4iLAotCQkJICAgICAgcy0+cHJveHktPmlkLCBzLT5zcnYtPmlkKTsKKwkJCSAgICAgIHMtPmJlLT5pZCwgcy0+c3J2LT5pZCk7CiAJCQljbG9zZShmZCk7Ci0JCQlzZW5kX2xvZyhzLT5wcm94eSwgTE9HX0VNRVJHLAorCQkJc2VuZF9sb2cocy0+YmUsIExPR19FTUVSRywKIAkJCQkgIkNhbm5vdCBiaW5kIHRvIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0KCkgZm9yIHNlcnZlciAlcy8lcy5cbiIsCi0JCQkJIHMtPnByb3h5LT5pZCwgcy0+c3J2LT5pZCk7CisJCQkJIHMtPmJlLT5pZCwgcy0+c3J2LT5pZCk7CiAJCQlyZXR1cm4gU05fRVJSX1JFU09VUkNFOwogCQl9CisjaWZkZWYgQ09ORklHX0hBUF9DVFRQUk9YWQorCQlpZiAocy0+c3J2LT5zdGF0ZSAmIFNSVl9UUFJPWFlfTUFTSykgeworCQkJc3RydWN0IGluX3Rwcm94eSBpdHAxLCBpdHAyOworCQkJbWVtc2V0KCZpdHAxLCAwLCBzaXplb2YoaXRwMSkpOworCisJCQlpdHAxLm9wID0gVFBST1hZX0FTU0lHTjsKKwkJCXN3aXRjaCAocy0+c3J2LT5zdGF0ZSAmIFNSVl9UUFJPWFlfTUFTSykgeworCQkJY2FzZSBTUlZfVFBST1hZX0FERFI6CisJCQkJaXRwMS52LmFkZHIuZmFkZHIgPSBzLT5zcnYtPnRwcm94eV9hZGRyLnNpbl9hZGRyOworCQkJCWl0cDEudi5hZGRyLmZwb3J0ID0gcy0+c3J2LT50cHJveHlfYWRkci5zaW5fcG9ydDsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1JWX1RQUk9YWV9DTEk6CisJCQkJaXRwMS52LmFkZHIuZnBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzLT5jbGlfYWRkciktPnNpbl9wb3J0OworCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBTUlZfVFBST1hZX0NJUDoKKwkJCQkvKiBGSVhNRTogd2hhdCBjYW4gd2UgZG8gaWYgdGhlIGNsaWVudCBjb25uZWN0cyBpbiBJUHY2ID8gKi8KKwkJCQlpdHAxLnYuYWRkci5mYWRkciA9ICgoc3RydWN0IHNvY2thZGRyX2luICopJnMtPmNsaV9hZGRyKS0+c2luX2FkZHI7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHNldCBjb25uZWN0IGZsYWcgb24gc29ja2V0ICovCisJCQlpdHAyLm9wID0gVFBST1hZX0ZMQUdTOworCQkJaXRwMi52LmZsYWdzID0gSVRQX0NPTk5FQ1QgfCBJVFBfT05DRTsKKworCQkJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfVFBST1hZLCAmaXRwMSwgc2l6ZW9mKGl0cDEpKSA9PSAtMSB8fAorCQkJICAgIHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfVFBST1hZLCAmaXRwMiwgc2l6ZW9mKGl0cDIpKSA9PSAtMSkgeworCQkJCUFsZXJ0KCJDYW5ub3QgYmluZCB0byB0cHJveHkgc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3QoKSBmb3Igc2VydmVyICVzLyVzLiBBYm9ydGluZy5cbiIsCisJCQkJICAgICAgcy0+YmUtPmlkLCBzLT5zcnYtPmlkKTsKKwkJCQljbG9zZShmZCk7CisJCQkJc2VuZF9sb2cocy0+YmUsIExPR19FTUVSRywKKwkJCQkJICJDYW5ub3QgYmluZCB0byB0cHJveHkgc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3QoKSBmb3Igc2VydmVyICVzLyVzLlxuIiwKKwkJCQkJIHMtPmJlLT5pZCwgcy0+c3J2LT5pZCk7CisJCQkJcmV0dXJuIFNOX0VSUl9SRVNPVVJDRTsKKwkJCX0KKwkJfQorI2VuZGlmCiAJfQotCWVsc2UgaWYgKHMtPnByb3h5LT5vcHRpb25zICYgUFJfT19CSU5EX1NSQykgeworCWVsc2UgaWYgKHMtPmJlLT5vcHRpb25zICYgUFJfT19CSU5EX1NSQykgewogCQlzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFyICopICZvbmUsIHNpemVvZihvbmUpKTsKLQkJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcy0+cHJveHktPnNvdXJjZV9hZGRyLCBzaXplb2Yocy0+cHJveHktPnNvdXJjZV9hZGRyKSkgPT0gLTEpIHsKLQkJCUFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBwcm94eSAlcy4gQWJvcnRpbmcuXG4iLCBzLT5wcm94eS0+aWQpOworCQlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzLT5iZS0+c291cmNlX2FkZHIsIHNpemVvZihzLT5iZS0+c291cmNlX2FkZHIpKSA9PSAtMSkgeworCQkJQWxlcnQoIkNhbm5vdCBiaW5kIHRvIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0KCkgZm9yIHByb3h5ICVzLiBBYm9ydGluZy5cbiIsIHMtPmJlLT5pZCk7CiAJCQljbG9zZShmZCk7Ci0JCQlzZW5kX2xvZyhzLT5wcm94eSwgTE9HX0VNRVJHLAorCQkJc2VuZF9sb2cocy0+YmUsIExPR19FTUVSRywKIAkJCQkgIkNhbm5vdCBiaW5kIHRvIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0KCkgZm9yIHNlcnZlciAlcy8lcy5cbiIsCi0JCQkJIHMtPnByb3h5LT5pZCwgcy0+c3J2LT5pZCk7CisJCQkJIHMtPmJlLT5pZCwgcy0+c3J2LT5pZCk7CiAJCQlyZXR1cm4gU05fRVJSX1JFU09VUkNFOwogCQl9CisjaWZkZWYgQ09ORklHX0hBUF9DVFRQUk9YWQorCQlpZiAocy0+YmUtPm9wdGlvbnMgJiBQUl9PX1RQWFlfTUFTSykgeworCQkJc3RydWN0IGluX3Rwcm94eSBpdHAxLCBpdHAyOworCQkJbWVtc2V0KCZpdHAxLCAwLCBzaXplb2YoaXRwMSkpOworCisJCQlpdHAxLm9wID0gVFBST1hZX0FTU0lHTjsKKwkJCXN3aXRjaCAocy0+YmUtPm9wdGlvbnMgJiBQUl9PX1RQWFlfTUFTSykgeworCQkJY2FzZSBQUl9PX1RQWFlfQUREUjoKKwkJCQlpdHAxLnYuYWRkci5mYWRkciA9IHMtPnNydi0+dHByb3h5X2FkZHIuc2luX2FkZHI7CisJCQkJaXRwMS52LmFkZHIuZnBvcnQgPSBzLT5zcnYtPnRwcm94eV9hZGRyLnNpbl9wb3J0OworCQkJCWJyZWFrOworCQkJY2FzZSBQUl9PX1RQWFlfQ0xJOgorCQkJCWl0cDEudi5hZGRyLmZwb3J0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcy0+Y2xpX2FkZHIpLT5zaW5fcG9ydDsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWNhc2UgUFJfT19UUFhZX0NJUDoKKwkJCQkvKiBGSVhNRTogd2hhdCBjYW4gd2UgZG8gaWYgdGhlIGNsaWVudCBjb25uZWN0cyBpbiBJUHY2ID8gKi8KKwkJCQlpdHAxLnYuYWRkci5mYWRkciA9ICgoc3RydWN0IHNvY2thZGRyX2luICopJnMtPmNsaV9hZGRyKS0+c2luX2FkZHI7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHNldCBjb25uZWN0IGZsYWcgb24gc29ja2V0ICovCisJCQlpdHAyLm9wID0gVFBST1hZX0ZMQUdTOworCQkJaXRwMi52LmZsYWdzID0gSVRQX0NPTk5FQ1QgfCBJVFBfT05DRTsKKworCQkJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfVFBST1hZLCAmaXRwMSwgc2l6ZW9mKGl0cDEpKSA9PSAtMSB8fAorCQkJICAgIHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfVFBST1hZLCAmaXRwMiwgc2l6ZW9mKGl0cDIpKSA9PSAtMSkgeworCQkJCUFsZXJ0KCJDYW5ub3QgYmluZCB0byB0cHJveHkgc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3QoKSBmb3IgcHJveHkgJXMuIEFib3J0aW5nLlxuIiwKKwkJCQkgICAgICBzLT5iZS0+aWQpOworCQkJCWNsb3NlKGZkKTsKKwkJCQlzZW5kX2xvZyhzLT5iZSwgTE9HX0VNRVJHLAorCQkJCQkgIkNhbm5vdCBiaW5kIHRvIHRwcm94eSBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBzZXJ2ZXIgJXMvJXMuXG4iLAorCQkJCQkgcy0+YmUtPmlkLCBzLT5zcnYtPmlkKTsKKwkJCQlyZXR1cm4gU05fRVJSX1JFU09VUkNFOworCQkJfQorCQl9CisjZW5kaWYKIAl9CiAJCiAJaWYgKChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnMtPnNydl9hZGRyLCBzaXplb2Yocy0+c3J2X2FkZHIpKSA9PSAtMSkgJiYKQEAgLTQwOSw5ICs0ODUsOSBAQAogCiAJCQlxZnByaW50ZihzdGRlcnIsIkNhbm5vdCBjb25uZWN0OiAlcy5cbiIsbXNnKTsKIAkJCWNsb3NlKGZkKTsKLQkJCXNlbmRfbG9nKHMtPnByb3h5LCBMT0dfRU1FUkcsCisJCQlzZW5kX2xvZyhzLT5iZSwgTE9HX0VNRVJHLAogCQkJCSAiQ29ubmVjdCgpIGZhaWxlZCBmb3Igc2VydmVyICVzLyVzOiAlcy5cbiIsCi0JCQkJIHMtPnByb3h5LT5pZCwgcy0+c3J2LT5pZCwgbXNnKTsKKwkJCQkgcy0+YmUtPmlkLCBzLT5zcnYtPmlkLCBtc2cpOwogCQkJcmV0dXJuIFNOX0VSUl9SRVNPVVJDRTsKIAkJfSBlbHNlIGlmIChlcnJubyA9PSBFVElNRURPVVQpIHsKIAkJCS8vcWZwcmludGYoc3RkZXJyLCJDb25uZWN0KCk6IEVUSU1FRE9VVCIpOwpAQCAtNDQ3LDggKzUyMyw4IEBACiAJCQlzLT5zcnYtPmN1cl9zZXNzX21heCA9IHMtPnNydi0+Y3VyX3Nlc3M7CiAJfQogCi0JaWYgKHMtPnByb3h5LT5jb250aW1lb3V0KQotCQl0dl9kZWxheWZyb20oJnMtPnJlcS0+Y2V4LCAmbm93LCBzLT5wcm94eS0+Y29udGltZW91dCk7CisJaWYgKHMtPmJlLT5jb250aW1lb3V0KQorCQl0dl9kZWxheWZyb20oJnMtPnJlcS0+Y2V4LCAmbm93LCBzLT5iZS0+Y29udGltZW91dCk7CiAJZWxzZQogCQl0dl9ldGVybml0eSgmcy0+cmVxLT5jZXgpOwogCXJldHVybiBTTl9FUlJfTk9ORTsgIC8qIGNvbm5lY3Rpb24gaXMgT0sgKi8KQEAgLTQ2OSwxNSArNTQ1LDE1IEBACiAJCS8qIGlmIG5vdCByZXRyeWFibGUgYW55bW9yZSwgbGV0J3MgYWJvcnQgKi8KIAkJdHZfZXRlcm5pdHkoJnQtPnJlcS0+Y2V4KTsKIAkJc3J2X2Nsb3NlX3dpdGhfZXJyKHQsIGNvbm5fZXJyLCBTTl9GSU5TVF9DLAotCQkJCSAgIDUwMywgdC0+cHJveHktPmVycm1zZy5sZW41MDMsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAzKTsKKwkJCQkgICA1MDMsIHQtPmZlLT5lcnJtc2cubGVuNTAzLCB0LT5mZS0+ZXJybXNnLm1zZzUwMyk7CiAJCWlmICh0LT5zcnYpCiAJCQl0LT5zcnYtPmZhaWxlZF9jb25ucysrOwotCQl0LT5wcm94eS0+ZmFpbGVkX2Nvbm5zKys7CisJCXQtPmJlLT5mYWlsZWRfY29ubnMrKzsKIAogCQkvKiBXZSB1c2VkIHRvIGhhdmUgYSBmcmVlIGNvbm5lY3Rpb24gc2xvdC4gU2luY2Ugd2UnbGwgbmV2ZXIgdXNlIGl0LAogCQkgKiB3ZSBoYXZlIHRvIGluZm9ybSB0aGUgc2VydmVyIHRoYXQgaXQgbWF5IGJlIHVzZWQgYnkgYW5vdGhlciBzZXNzaW9uLgogCQkgKi8KLQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCQlpZiAobWF5X2RlcXVldWVfdGFza3ModC0+c3J2LCB0LT5iZSkpCiAJCQl0YXNrX3dha2V1cCgmcnEsIHQtPnNydi0+cXVldWVfbWd0KTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNTExLDEyICs1ODcsMTIgQEAKIAkJY2FzZSBTTl9FUlJfSU5URVJOQUw6CiAJCQl0dl9ldGVybml0eSgmdC0+cmVxLT5jZXgpOwogCQkJc3J2X2Nsb3NlX3dpdGhfZXJyKHQsIFNOX0VSUl9JTlRFUk5BTCwgU05fRklOU1RfQywKLQkJCQkJICAgNTAwLCB0LT5wcm94eS0+ZXJybXNnLmxlbjUwMCwgdC0+cHJveHktPmVycm1zZy5tc2c1MDApOworCQkJCQkgICA1MDAsIHQtPmZlLT5lcnJtc2cubGVuNTAwLCB0LT5mZS0+ZXJybXNnLm1zZzUwMCk7CiAJCQlpZiAodC0+c3J2KQogCQkJCXQtPnNydi0+ZmFpbGVkX2Nvbm5zKys7Ci0JCQl0LT5wcm94eS0+ZmFpbGVkX2Nvbm5zKys7CisJCQl0LT5iZS0+ZmFpbGVkX2Nvbm5zKys7CiAJCQkvKiByZWxlYXNlIG90aGVyIHNlc3Npb25zIHdhaXRpbmcgZm9yIHRoaXMgc2VydmVyICovCi0JCQlpZiAobWF5X2RlcXVldWVfdGFza3ModC0+c3J2LCB0LT5wcm94eSkpCisJCQlpZiAobWF5X2RlcXVldWVfdGFza3ModC0+c3J2LCB0LT5iZSkpCiAJCQkJdGFza193YWtldXAoJnJxLCB0LT5zcnYtPnF1ZXVlX21ndCk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNTI0LDE4ICs2MDAsMTggQEAKIAkJaWYgKHNydl9jb3VudF9yZXRyeV9kb3duKHQsIGNvbm5fZXJyKSkgewogCQkJcmV0dXJuIDE7CiAJCX0KLQl9IHdoaWxlICh0LT5zcnYgPT0gTlVMTCB8fCB0LT5jb25uX3JldHJpZXMgPiAwIHx8ICEodC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1JFRElTUCkpOworCX0gd2hpbGUgKHQtPnNydiA9PSBOVUxMIHx8IHQtPmNvbm5fcmV0cmllcyA+IDAgfHwgISh0LT5iZS0+b3B0aW9ucyAmIFBSX09fUkVESVNQKSk7CiAKIAkvKiBXZSdyZSBvbiBvdXIgbGFzdCBjaGFuY2UsIGFuZCB0aGUgUkVESVNQIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgogCSAqIFdlIHdpbGwgaWdub3JlIGNvb2tpZSBhbmQgZm9yY2UgdG8gYmFsYW5jZSBvciB1c2UgdGhlIGRpc3BhdGNoZXIuCiAJICovCiAJLyogbGV0J3MgdHJ5IHRvIG9mZmVyIHRoaXMgc2xvdCB0byBhbnlib2R5ICovCi0JaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJdGFza193YWtldXAoJnJxLCB0LT5zcnYtPnF1ZXVlX21ndCk7CiAKIAlpZiAodC0+c3J2KQogCQl0LT5zcnYtPmZhaWxlZF9jb25ucysrOwotCXQtPnByb3h5LT5mYWlsZWRfY29ubnMrKzsKKwl0LT5iZS0+ZmFpbGVkX2Nvbm5zKys7CiAKIAl0LT5mbGFncyAmPSB+KFNOX0RJUkVDVCB8IFNOX0FTU0lHTkVEIHwgU05fQUREUl9TRVQpOwogCXQtPnNydiA9IE5VTEw7IC8qIGl0J3MgbGVmdCB0byB0aGUgZGlzcGF0Y2hlciB0byBjaG9vc2UgYSBzZXJ2ZXIgKi8KQEAgLTU3MSwxNyArNjQ3LDE3IEBACiAJCS8qIG5vdGU6IGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0LT5zcnYgPT0gTlVMTCBoZXJlICovCiAJCXR2X2V0ZXJuaXR5KCZ0LT5yZXEtPmNleCk7CiAJCXNydl9jbG9zZV93aXRoX2Vycih0LCBTTl9FUlJfU1JWVE8sIFNOX0ZJTlNUX0MsCi0JCQkJICAgNTAzLCB0LT5wcm94eS0+ZXJybXNnLmxlbjUwMywgdC0+cHJveHktPmVycm1zZy5tc2c1MDMpOworCQkJCSAgIDUwMywgdC0+ZmUtPmVycm1zZy5sZW41MDMsIHQtPmZlLT5lcnJtc2cubXNnNTAzKTsKIAkJaWYgKHQtPnNydikKIAkJCXQtPnNydi0+ZmFpbGVkX2Nvbm5zKys7Ci0JCXQtPnByb3h5LT5mYWlsZWRfY29ubnMrKzsKKwkJdC0+YmUtPmZhaWxlZF9jb25ucysrOwogCiAJCXJldHVybiAxOwogCiAJY2FzZSBTUlZfU1RBVFVTX1FVRVVFRDoKIAkJLyogRklYTUUtMjAwNjA1MDMgOiB3ZSBzaG91bGQgdXNlIHRoZSBxdWV1ZSB0aW1lb3V0IGluc3RlYWQgKi8KLQkJaWYgKHQtPnByb3h5LT5jb250aW1lb3V0KQotCQkJdHZfZGVsYXlmcm9tKCZ0LT5yZXEtPmNleCwgJm5vdywgdC0+cHJveHktPmNvbnRpbWVvdXQpOworCQlpZiAodC0+YmUtPmNvbnRpbWVvdXQpCisJCQl0dl9kZWxheWZyb20oJnQtPnJlcS0+Y2V4LCAmbm93LCB0LT5iZS0+Y29udGltZW91dCk7CiAJCWVsc2UKIAkJCXR2X2V0ZXJuaXR5KCZ0LT5yZXEtPmNleCk7CiAJCXQtPnNydl9zdGF0ZSA9IFNWX1NUSURMRTsKQEAgLTU5MywxMyArNjY5LDEzIEBACiAJZGVmYXVsdDoKIAkJdHZfZXRlcm5pdHkoJnQtPnJlcS0+Y2V4KTsKIAkJc3J2X2Nsb3NlX3dpdGhfZXJyKHQsIFNOX0VSUl9JTlRFUk5BTCwgU05fRklOU1RfQywKLQkJCQkgICA1MDAsIHQtPnByb3h5LT5lcnJtc2cubGVuNTAwLCB0LT5wcm94eS0+ZXJybXNnLm1zZzUwMCk7CisJCQkJICAgNTAwLCB0LT5mZS0+ZXJybXNnLmxlbjUwMCwgdC0+ZmUtPmVycm1zZy5tc2c1MDApOwogCQlpZiAodC0+c3J2KQogCQkJdC0+c3J2LT5mYWlsZWRfY29ubnMrKzsKLQkJdC0+cHJveHktPmZhaWxlZF9jb25ucysrOworCQl0LT5iZS0+ZmFpbGVkX2Nvbm5zKys7CiAKIAkJLyogcmVsZWFzZSBvdGhlciBzZXNzaW9ucyB3YWl0aW5nIGZvciB0aGlzIHNlcnZlciAqLwotCQlpZiAobWF5X2RlcXVldWVfdGFza3ModC0+c3J2LCB0LT5wcm94eSkpCisJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvY2ZncGFyc2UuYyBiL3NyYy9jZmdwYXJzZS5jCmluZGV4IDAzNGEyZjEuLjk1OTIyNDcgMTAwNjQ0Ci0tLSBhL3NyYy9jZmdwYXJzZS5jCisrKyBiL3NyYy9jZmdwYXJzZS5jCkBAIC0xMTUzLDYgKzExNTMsMzAgQEAKIAkJCQluZXdzcnYtPnN0YXRlIHw9IFNSVl9CSU5EX1NSQzsKIAkJCQluZXdzcnYtPnNvdXJjZV9hZGRyID0gKnN0cjJzYShhcmdzW2N1cl9hcmcgKyAxXSk7CiAJCQkJY3VyX2FyZyArPSAyOworI2lmZGVmIENPTkZJR19IQVBfQ1RUUFJPWFkKKwkJCQlpZiAoIXN0cmNtcChhcmdzW2N1cl9hcmddLCAidXNlc3JjIikpIHsgIC8qIGFkZHJlc3MgdG8gdXNlIG91dHNpZGUgKi8KKwkJCQkJaWYgKG5ld3Nydi0+c291cmNlX2FkZHIuc2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHsKKwkJCQkJCUFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiAnJXMnIHJlcXVpcmVzIGFuIGV4cGxpY2l0ICdzb3VyY2UnIGFkZHJlc3MuXG4iLAorCQkJCQkJICAgICAgZmlsZSwgbGluZW51bSwgInVzZXNyYyIpOworCQkJCQkJcmV0dXJuIC0xOworCQkJCQl9CisJCQkJCWlmICghKmFyZ3NbY3VyX2FyZyArIDFdKSB7CisJCQkJCQlBbGVydCgicGFyc2luZyBbJXM6JWRdIDogJyVzJyBleHBlY3RzIDxhZGRyPls6PHBvcnQ+XSwgJ2NsaWVudCcsIG9yICdjbGllbnRpcCcgYXMgYXJndW1lbnQuXG4iLAorCQkJCQkJICAgICAgZmlsZSwgbGluZW51bSwgInVzZXNyYyIpOworCQkJCQkJcmV0dXJuIC0xOworCQkJCQl9CisJCQkJCWlmICghc3RyY21wKGFyZ3NbY3VyX2FyZyArIDFdLCAiY2xpZW50IikpIHsKKwkJCQkJCW5ld3Nydi0+c3RhdGUgfD0gU1JWX1RQUk9YWV9DTEk7CisJCQkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmdzW2N1cl9hcmcgKyAxXSwgImNsaWVudGlwIikpIHsKKwkJCQkJCW5ld3Nydi0+c3RhdGUgfD0gU1JWX1RQUk9YWV9DSVA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXdzcnYtPnN0YXRlIHw9IFNSVl9UUFJPWFlfQUREUjsKKwkJCQkJCW5ld3Nydi0+dHByb3h5X2FkZHIgPSAqc3RyMnNhKGFyZ3NbY3VyX2FyZyArIDFdKTsKKwkJCQkJfQorCQkJCQlnbG9iYWwubGFzdF9jaGVja3MgfD0gTFNUQ0hLX0NUVFBST1hZIHwgTFNUQ0hLX05FVEFETTsKKwkJCQkJY3VyX2FyZyArPSAyOworCQkJCX0KKyNlbmRpZgogCQkJfQogCQkJZWxzZSB7CiAJCQkJQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IHNlcnZlciAlcyBvbmx5IHN1cHBvcnRzIG9wdGlvbnMgJ2JhY2t1cCcsICdjb29raWUnLCAnY2hlY2snLCAnaW50ZXInLCAncmlzZScsICdmYWxsJywgJ3BvcnQnLCAnc291cmNlJywgJ21pbmNvbm4nLCAnbWF4Y29ubicgYW5kICd3ZWlnaHQnLlxuIiwKQEAgLTEyNDEsNiArMTI2NSwzMCBAQAogCQogCQljdXJwcm94eS0+c291cmNlX2FkZHIgPSAqc3RyMnNhKGFyZ3NbMV0pOwogCQljdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX0JJTkRfU1JDOworI2lmZGVmIENPTkZJR19IQVBfQ1RUUFJPWFkKKwkJaWYgKCFzdHJjbXAoYXJnc1syXSwgInVzZXNyYyIpKSB7ICAvKiBhZGRyZXNzIHRvIHVzZSBvdXRzaWRlICovCisJCQlpZiAoY3VycHJveHktPnNvdXJjZV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CisJCQkJQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6ICclcycgcmVxdWlyZXMgYW4gZXhwbGljaXQgJ3NvdXJjZScgYWRkcmVzcy5cbiIsCisJCQkJICAgICAgZmlsZSwgbGluZW51bSwgInVzZXNyYyIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWlmICghKmFyZ3NbM10pIHsKKwkJCQlBbGVydCgicGFyc2luZyBbJXM6JWRdIDogJyVzJyBleHBlY3RzIDxhZGRyPls6PHBvcnQ+XSwgJ2NsaWVudCcsIG9yICdjbGllbnRpcCcgYXMgYXJndW1lbnQuXG4iLAorCQkJCSAgICAgIGZpbGUsIGxpbmVudW0sICJ1c2VzcmMiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWlmICghc3RyY21wKGFyZ3NbM10sICJjbGllbnQiKSkgeworCQkJCWN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fVFBYWV9DTEk7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnc1szXSwgImNsaWVudGlwIikpIHsKKwkJCQljdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX1RQWFlfQ0lQOworCQkJfSBlbHNlIHsKKwkJCQljdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX1RQWFlfQUREUjsKKwkJCQljdXJwcm94eS0+dHByb3h5X2FkZHIgPSAqc3RyMnNhKGFyZ3NbM10pOworCQkJfQorCQkJZ2xvYmFsLmxhc3RfY2hlY2tzIHw9IExTVENIS19DVFRQUk9YWSB8IExTVENIS19ORVRBRE07CisJCX0KKyNlbmRpZgogCX0KIAllbHNlIGlmICghc3RyY21wKGFyZ3NbMF0sICJjbGlleHAiKSB8fCAhc3RyY21wKGFyZ3NbMF0sICJyZXFyZXAiKSkgeyAgLyogcmVwbGFjZSByZXF1ZXN0IGhlYWRlciBmcm9tIGEgcmVnZXggKi8KIAkJcmVnZXhfdCAqcHJlZzsKZGlmZiAtLWdpdCBhL3NyYy9jaGVja3MuYyBiL3NyYy9jaGVja3MuYwppbmRleCA5NjQzYTJiLi44NDY2Yjc1IDEwMDY0NAotLS0gYS9zcmMvY2hlY2tzLmMKKysrIGIvc3JjL2NoZWNrcy5jCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgPHByb3RvL3NlcnZlci5oPgogI2luY2x1ZGUgPHByb3RvL3Rhc2suaD4KIAorI2lmZGVmIENPTkZJR19IQVBfQ1RUUFJPWFkKKyNpbmNsdWRlIDxpbXBvcnQvaXBfdHByb3h5Lmg+CisjZW5kaWYKKwogCiAvKiBTZXRzIHNlcnZlciA8cz4gZG93biwgbm90aWZpZXMgYnkgYWxsIGF2YWlsYWJsZSBtZWFucywgcmVjb3VudHMgdGhlCiAgKiByZW1haW5pbmcgc2VydmVycyBvbiB0aGUgcHJveHkgYW5kIHRyYW5zZmVycyBxdWV1ZWQgc2Vzc2lvbnMgd2hlbmV2ZXIKQEAgLTYwLDcgKzY0LDcgQEAKIAkJeGZlcnJlZCA9IDA7CiAJCUZPUkVBQ0hfSVRFTV9TQUZFKHBjLCBwY19iY2ssICZzLT5wZW5kY29ubnMsIHBjX2VuZCwgc3RydWN0IHBlbmRjb25uICosIGxpc3QpIHsKIAkJCXNlc3MgPSBwYy0+c2VzczsKLQkJCWlmICgoc2Vzcy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1JFRElTUCkpIHsKKwkJCWlmICgoc2Vzcy0+YmUtPm9wdGlvbnMgJiBQUl9PX1JFRElTUCkpIHsKIAkJCQkvKiBUaGUgUkVESVNQIG9wdGlvbiB3YXMgc3BlY2lmaWVkLiBXZSB3aWxsIGlnbm9yZQogCQkJCSAqIGNvb2tpZSBhbmQgZm9yY2UgdG8gYmFsYW5jZSBvciB1c2UgdGhlIGRpc3BhdGNoZXIuCiAJCQkJICovCkBAIC0yNjAsNiArMjY0LDI3IEBACiAJCQkJCQkgICAgICBzLT5wcm94eS0+aWQsIHMtPmlkKTsKIAkJCQkJCXMtPnJlc3VsdCA9IC0xOwogCQkJCQl9CisjaWZkZWYgQ09ORklHX0hBUF9DVFRQUk9YWQorCQkJCQlpZiAoKHMtPnN0YXRlICYgU1JWX1RQUk9YWV9NQVNLKSA9PSBTUlZfVFBST1hZX0FERFIpIHsKKwkJCQkJCXN0cnVjdCBpbl90cHJveHkgaXRwMSwgaXRwMjsKKwkJCQkJCW1lbXNldCgmaXRwMSwgMCwgc2l6ZW9mKGl0cDEpKTsKKwkJCQkJCQorCQkJCQkJaXRwMS5vcCA9IFRQUk9YWV9BU1NJR047CisJCQkJCQlpdHAxLnYuYWRkci5mYWRkciA9IHMtPnRwcm94eV9hZGRyLnNpbl9hZGRyOworCQkJCQkJaXRwMS52LmFkZHIuZnBvcnQgPSBzLT50cHJveHlfYWRkci5zaW5fcG9ydDsKKworCQkJCQkJLyogc2V0IGNvbm5lY3QgZmxhZyBvbiBzb2NrZXQgKi8KKwkJCQkJCWl0cDIub3AgPSBUUFJPWFlfRkxBR1M7CisJCQkJCQlpdHAyLnYuZmxhZ3MgPSBJVFBfQ09OTkVDVCB8IElUUF9PTkNFOworCisJCQkJCQlpZiAoc2V0c29ja29wdChmZCwgU09MX0lQLCBJUF9UUFJPWFksICZpdHAxLCBzaXplb2YoaXRwMSkpID09IC0xIHx8CisJCQkJCQkgICAgc2V0c29ja29wdChmZCwgU09MX0lQLCBJUF9UUFJPWFksICZpdHAyLCBzaXplb2YoaXRwMikpID09IC0xKSB7CisJCQkJCQkJQWxlcnQoIkNhbm5vdCBiaW5kIHRvIHRwcm94eSBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBzZXJ2ZXIgJXMvJXMuIEFib3J0aW5nLlxuIiwKKwkJCQkJCQkgICAgICBzLT5wcm94eS0+aWQsIHMtPmlkKTsKKwkJCQkJCQlzLT5yZXN1bHQgPSAtMTsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmCiAJCQkJfQogCQkJCWVsc2UgaWYgKHMtPnByb3h5LT5vcHRpb25zICYgUFJfT19CSU5EX1NSQykgewogCQkJCQlzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFyICopICZvbmUsIHNpemVvZihvbmUpKTsKQEAgLTI2OCw2ICsyOTMsMjcgQEAKIAkJCQkJCSAgICAgIHMtPnByb3h5LT5pZCk7CiAJCQkJCQlzLT5yZXN1bHQgPSAtMTsKIAkJCQkJfQorI2lmZGVmIENPTkZJR19IQVBfQ1RUUFJPWFkKKwkJCQkJaWYgKChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fVFBYWV9NQVNLKSA9PSBQUl9PX1RQWFlfQUREUikgeworCQkJCQkJc3RydWN0IGluX3Rwcm94eSBpdHAxLCBpdHAyOworCQkJCQkJbWVtc2V0KCZpdHAxLCAwLCBzaXplb2YoaXRwMSkpOworCQkJCQkJCisJCQkJCQlpdHAxLm9wID0gVFBST1hZX0FTU0lHTjsKKwkJCQkJCWl0cDEudi5hZGRyLmZhZGRyID0gcy0+dHByb3h5X2FkZHIuc2luX2FkZHI7CisJCQkJCQlpdHAxLnYuYWRkci5mcG9ydCA9IHMtPnRwcm94eV9hZGRyLnNpbl9wb3J0OworCQkJCQkJCisJCQkJCQkvKiBzZXQgY29ubmVjdCBmbGFnIG9uIHNvY2tldCAqLworCQkJCQkJaXRwMi5vcCA9IFRQUk9YWV9GTEFHUzsKKwkJCQkJCWl0cDIudi5mbGFncyA9IElUUF9DT05ORUNUIHwgSVRQX09OQ0U7CisJCQkJCQkKKwkJCQkJCWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfSVAsIElQX1RQUk9YWSwgJml0cDEsIHNpemVvZihpdHAxKSkgPT0gLTEgfHwKKwkJCQkJCSAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfSVAsIElQX1RQUk9YWSwgJml0cDIsIHNpemVvZihpdHAyKSkgPT0gLTEpIHsKKwkJCQkJCQlBbGVydCgiQ2Fubm90IGJpbmQgdG8gdHByb3h5IHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0KCkgZm9yIHByb3h5ICVzLiBBYm9ydGluZy5cbiIsCisJCQkJCQkJICAgICAgcy0+cHJveHktPmlkKTsKKwkJCQkJCQlzLT5yZXN1bHQgPSAtMTsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmCiAJCQkJfQogCiAJCQkJaWYgKCFzLT5yZXN1bHQpIHsKZGlmZiAtLWdpdCBhL3NyYy9jbGllbnQuYyBiL3NyYy9jbGllbnQuYwppbmRleCBlMTg5MGYwLi4yNmVmMTg2IDEwMDY0NAotLS0gYS9zcmMvY2xpZW50LmMKKysrIGIvc3JjL2NsaWVudC5jCkBAIC0xNTYsNyArMTU2LDExIEBACiAJCXQtPmNvbnRleHQgPSBzOwogCiAJCXMtPnRhc2sgPSB0OworI2lmZGVmIEJVSUxEX1dJVEhfUFJPWFkKIAkJcy0+cHJveHkgPSBwOworI2VuZGlmCisJCXMtPmJlID0gcy0+ZmUgPSBzLT5maSA9IHA7CisKIAkJcy0+Y2xpX3N0YXRlID0gKHAtPm1vZGUgPT0gUFJfTU9ERV9IVFRQKSA/ICBDTF9TVEhFQURFUlMgOiBDTF9TVERBVEE7IC8qIG5vIEhUVFAgaGVhZGVycyBmb3Igbm9uLUhUVFAgcHJveGllcyAqLwogCQlzLT5zcnZfc3RhdGUgPSBTVl9TVElETEU7CiAJCXMtPnJlcSA9IHMtPnJlcCA9IE5VTEw7IC8qIHdpbGwgYmUgYWxsb2NhdGVkIGxhdGVyICovCkBAIC0yMjksNyArMjMzLDcgQEAKIAkJCXNvY2tsZW5fdCBuYW1lbGVuID0gc2l6ZW9mKHNvY2tuYW1lKTsKIAogCQkJaWYgKGFkZHIuc3NfZmFtaWx5ICE9IEFGX0lORVQgfHwKLQkJCSAgICAhKHMtPnByb3h5LT5vcHRpb25zICYgUFJfT19UUkFOU1ApIHx8CisJCQkgICAgIShzLT5mZS0+b3B0aW9ucyAmIFBSX09fVFJBTlNQKSB8fAogCQkJICAgIGdldF9vcmlnaW5hbF9kc3QoY2ZkLCAoc3RydWN0IHNvY2thZGRyX2luICopJnNvY2tuYW1lLCAmbmFtZWxlbikgPT0gLTEpCiAJCQkJZ2V0c29ja25hbWUoY2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNvY2tuYW1lLCAmbmFtZWxlbik7CiAKQEAgLTI3MCw3ICsyNzQsNyBAQAogCQkJc29ja2xlbl90IG5hbWVsZW4gPSBzaXplb2Yoc29ja25hbWUpOwogCQkJaW50IGxlbjsKIAkJCWlmIChhZGRyLnNzX2ZhbWlseSAhPSBBRl9JTkVUIHx8Ci0JCQkgICAgIShzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fVFJBTlNQKSB8fAorCQkJICAgICEocy0+ZmUtPm9wdGlvbnMgJiBQUl9PX1RSQU5TUCkgfHwKIAkJCSAgICBnZXRfb3JpZ2luYWxfZHN0KGNmZCwgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzb2NrbmFtZSwgJm5hbWVsZW4pID09IC0xKQogCQkJCWdldHNvY2tuYW1lKGNmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzb2NrbmFtZSwgJm5hbWVsZW4pOwogCkBAIC0zMTQsOSArMzE4LDkgQEAKIAkJaWYgKHMtPmNsaV9zdGF0ZSA9PSBDTF9TVEhFQURFUlMpIC8qIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgaGVhZGVyIHJld3JpdGluZyAqLwogCQkJcy0+cmVxLT5ybGltIC09IE1BWFJFV1JJVEU7CiAKLQkJcy0+cmVxLT5ydG8gPSBzLT5wcm94eS0+Y2xpdGltZW91dDsKLQkJcy0+cmVxLT53dG8gPSBzLT5wcm94eS0+c3J2dGltZW91dDsKLQkJcy0+cmVxLT5jdG8gPSBzLT5wcm94eS0+c3J2dGltZW91dDsKKwkJcy0+cmVxLT5ydG8gPSBzLT5mZS0+Y2xpdGltZW91dDsKKwkJcy0+cmVxLT53dG8gPSBzLT5iZS0+c3J2dGltZW91dDsKKwkJcy0+cmVxLT5jdG8gPSBzLT5iZS0+c3J2dGltZW91dDsKIAogCQlpZiAoKHMtPnJlcCA9IHBvb2xfYWxsb2MoYnVmZmVyKSkgPT0gTlVMTCkgeyAvKiBubyBtZW1vcnkgKi8KIAkJCXBvb2xfZnJlZShidWZmZXIsIHMtPnJlcSk7CkBAIC0zMzIsOCArMzM2LDggQEAKIAogCQlidWZmZXJfaW5pdChzLT5yZXApOwogCi0JCXMtPnJlcC0+cnRvID0gcy0+cHJveHktPnNydnRpbWVvdXQ7Ci0JCXMtPnJlcC0+d3RvID0gcy0+cHJveHktPmNsaXRpbWVvdXQ7CisJCXMtPnJlcC0+cnRvID0gcy0+YmUtPnNydnRpbWVvdXQ7CisJCXMtPnJlcC0+d3RvID0gcy0+YmUtPmNsaXRpbWVvdXQ7CiAJCXMtPnJlcC0+Y3RvID0gMDsKIAogCQlmZHRhYltjZmRdLm93bmVyID0gdDsKQEAgLTM3MSwxMSArMzc1LDExIEBACiAJCXR2X2V0ZXJuaXR5KCZzLT5yZXAtPnJleCk7CiAJCXR2X2V0ZXJuaXR5KCZzLT5yZXAtPndleCk7CiAKLQkJaWYgKHMtPnByb3h5LT5jbGl0aW1lb3V0KSB7CisJCWlmIChzLT5mZS0+Y2xpdGltZW91dCkgewogCQkJaWYgKE1ZX0ZEX0lTU0VUKGNmZCwgU3RhdGljUmVhZEV2ZW50KSkKLQkJCQl0dl9kZWxheWZyb20oJnMtPnJlcS0+cmV4LCAmbm93LCBzLT5wcm94eS0+Y2xpdGltZW91dCk7CisJCQkJdHZfZGVsYXlmcm9tKCZzLT5yZXEtPnJleCwgJm5vdywgcy0+ZmUtPmNsaXRpbWVvdXQpOwogCQkJaWYgKE1ZX0ZEX0lTU0VUKGNmZCwgU3RhdGljV3JpdGVFdmVudCkpCi0JCQkJdHZfZGVsYXlmcm9tKCZzLT5yZXAtPndleCwgJm5vdywgcy0+cHJveHktPmNsaXRpbWVvdXQpOworCQkJCXR2X2RlbGF5ZnJvbSgmcy0+cmVwLT53ZXgsICZub3csIHMtPmZlLT5jbGl0aW1lb3V0KTsKIAkJfQogCiAJCXR2X21pbigmdC0+ZXhwaXJlLCAmcy0+cmVxLT5yZXgsICZzLT5yZXAtPndleCk7CmRpZmYgLS1naXQgYS9zcmMvbG9nLmMgYi9zcmMvbG9nLmMKaW5kZXggM2YwNjI1ZS4uZmFjNWQxZiAxMDA2NDQKLS0tIGEvc3JjL2xvZy5jCisrKyBiL3NyYy9sb2cuYwpAQCAtMjg3LDcgKzI4NywxMSBAQAogdm9pZCBzZXNzX2xvZyhzdHJ1Y3Qgc2Vzc2lvbiAqcykKIHsKIAljaGFyIHBuW0lORVQ2X0FERFJTVFJMRU4gKyBzdHJsZW4oIjo2NTUzNSIpXTsKLQlzdHJ1Y3QgcHJveHkgKnAgPSBzLT5wcm94eTsKKyNpZiAxICAvKiBGSVhNRTogdGhpcyBzaG91bGQgZGlzYXBwZWFyICovCisJc3RydWN0IHByb3h5ICpwID0gcy0+ZmU7CisjZW5kaWYKKwlzdHJ1Y3QgcHJveHkgKmZlID0gcy0+ZmU7CisJc3RydWN0IHByb3h5ICpiZSA9IHMtPmJlOwogCWludCBsb2c7CiAJY2hhciAqdXJpOwogCWNoYXIgKnB4aWQ7CkBAIC0zMDAsNyArMzA0LDcgQEAKIAkgKiBjb21wdXRlZC4KIAkgKi8KIAotCWxvZyA9IHAtPnRvX2xvZyAmIH5zLT5sb2dzLmxvZ3dhaXQ7CisJbG9nID0gZmUtPnRvX2xvZyAmIH5zLT5sb2dzLmxvZ3dhaXQ7CiAKIAlpZiAocy0+Y2xpX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQpCiAJCWluZXRfbnRvcChBRl9JTkVULApAQCAtMzEyLDggKzMxNiw4IEBACiAJCQkgIHBuLCBzaXplb2YocG4pKTsKIAogCXVyaSA9IChsb2cgJiBMV19SRVEpID8gcy0+bG9ncy51cmkgPyBzLT5sb2dzLnVyaSA6ICI8QkFEUkVRPiIgOiAiIjsKLQlweGlkID0gcC0+aWQ7Ci0Jc3J2ID0gKHAtPnRvX2xvZyAmIExXX1NWSUQpID8KKwlweGlkID0gYmUtPmlkOworCXNydiA9IChiZS0+dG9fbG9nICYgTFdfU1ZJRCkgPwogCQkocy0+ZGF0YV9zb3VyY2UgIT0gREFUQV9TUkNfU1RBVFMpID8KIAkJKHMtPnNydiAhPSBOVUxMKSA/IHMtPnNydi0+aWQgOiAiPE5PU1JWPiIgOiAiPFNUQVRTPiIgOiAiLSI7CiAKZGlmZiAtLWdpdCBhL3NyYy9wcm90b19odHRwLmMgYi9zcmMvcHJvdG9faHR0cC5jCmluZGV4IGM0YWZlOWMuLjEyNDU5NGIgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b19odHRwLmMKKysrIGIvc3JjL3Byb3RvX2h0dHAuYwpAQCAtODgsOCArODgsOCBAQAogCU1ZX0ZEX0NMUihzLT5jbGlfZmQsIFN0YXRpY1JlYWRFdmVudCk7CiAJTVlfRkRfU0VUKHMtPmNsaV9mZCwgU3RhdGljV3JpdGVFdmVudCk7CiAJdHZfZXRlcm5pdHkoJnMtPnJlcS0+cmV4KTsKLQlpZiAocy0+cHJveHktPmNsaXRpbWVvdXQpCi0JCXR2X2RlbGF5ZnJvbSgmcy0+cmVwLT53ZXgsICZub3csIHMtPnByb3h5LT5jbGl0aW1lb3V0KTsKKwlpZiAocy0+ZmUtPmNsaXRpbWVvdXQpCisJCXR2X2RlbGF5ZnJvbSgmcy0+cmVwLT53ZXgsICZub3csIHMtPmZlLT5jbGl0aW1lb3V0KTsKIAllbHNlCiAJCXR2X2V0ZXJuaXR5KCZzLT5yZXAtPndleCk7CiAJc2h1dGRvd24ocy0+Y2xpX2ZkLCBTSFVUX1JEKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7CiAJaWYgKHN0YXR1cyA+IDApIHsKIAkJdC0+bG9ncy5zdGF0dXMgPSBzdGF0dXM7Ci0JCWlmICh0LT5wcm94eS0+bW9kZSA9PSBQUl9NT0RFX0hUVFApCisJCWlmICh0LT5mZS0+bW9kZSA9PSBQUl9NT0RFX0hUVFApCiAJCQljbGllbnRfcmV0dXJuKHQsIG1zZ2xlbiwgbXNnKTsKIAl9CiAJaWYgKCEodC0+ZmxhZ3MgJiBTTl9FUlJfTUFTSykpCkBAIC0xNzYsMTIgKzE3NiwxMiBAQAogCQlyZXR1cm4gdHZfcmVtYWluMigmbm93LCAmdC0+ZXhwaXJlKTsgLyogbm90aGluZyBtb3JlIHRvIGRvICovCiAJfQogCi0Jcy0+cHJveHktPm5iY29ubi0tOworCXMtPmZlLT5uYmNvbm4tLTsKIAlhY3Rjb25uLS07CiAgICAgCiAJaWYgKChnbG9iYWwubW9kZSAmIE1PREVfREVCVUcpICYmICghKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkgfHwgKGdsb2JhbC5tb2RlICYgTU9ERV9WRVJCT1NFKSkpIHsKIAkJaW50IGxlbjsKLQkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuY2xvc2VkWyUwNHg6JTA0eF1cbiIsIHMtPnVuaXFfaWQsIHMtPnByb3h5LT5pZCwgKHVuc2lnbmVkIHNob3J0KXMtPmNsaV9mZCwgKHVuc2lnbmVkIHNob3J0KXMtPnNydl9mZCk7CisJCWxlbiA9IHNwcmludGYodHJhc2gsICIlMDh4OiVzLmNsb3NlZFslMDR4OiUwNHhdXG4iLCBzLT51bmlxX2lkLCBzLT5iZS0+aWQsICh1bnNpZ25lZCBzaG9ydClzLT5jbGlfZmQsICh1bnNpZ25lZCBzaG9ydClzLT5zcnZfZmQpOwogCQl3cml0ZSgxLCB0cmFzaCwgbGVuKTsKIAl9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCS8qIGxldCdzIGRvIGEgZmluYWwgbG9nIGlmIHdlIG5lZWQgaXQgKi8KIAlpZiAocy0+bG9ncy5sb2d3YWl0ICYmIAogCSAgICAhKHMtPmZsYWdzICYgU05fTU9OSVRPUikgJiYKLQkgICAgKCEocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX05VTExOT0xPRykgfHwgcy0+cmVxLT50b3RhbCkpCisJICAgICghKHMtPmZlLT5vcHRpb25zICYgUFJfT19OVUxMTk9MT0cpIHx8IHMtPnJlcS0+dG90YWwpKQogCQlzZXNzX2xvZyhzKTsKIAogCS8qIHRoZSB0YXNrIE1VU1Qgbm90IGJlIGluIHRoZSBydW4gcXVldWUgYW55bW9yZSAqLwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCQkJCS8qIG5vIG5lZWQgdG8gZ28gZnVydGhlciAqLwogCQkJCQl0LT5sb2dzLnN0YXR1cyA9IDQwMzsKIAkJCQkJdC0+bG9ncy50X3JlcXVlc3QgPSB0dl9kaWZmKCZ0LT5sb2dzLnR2X2FjY2VwdCwgJm5vdyk7IC8qIGxldCdzIGxvZyB0aGUgcmVxdWVzdCB0aW1lICovCi0JCQkJCWNsaWVudF9yZXRuY2xvc2UodCwgdC0+cHJveHktPmVycm1zZy5sZW40MDMsIHQtPnByb3h5LT5lcnJtc2cubXNnNDAzKTsKKwkJCQkJY2xpZW50X3JldG5jbG9zZSh0LCB0LT5mZS0+ZXJybXNnLmxlbjQwMywgdC0+ZmUtPmVycm1zZy5tc2c0MDMpOwogCQkJCQlpZiAoISh0LT5mbGFncyAmIFNOX0VSUl9NQVNLKSkKIAkJCQkJCXQtPmZsYWdzIHw9IFNOX0VSUl9QUlhDT05EOwogCQkJCQlpZiAoISh0LT5mbGFncyAmIFNOX0ZJTlNUX01BU0spKQpAQCAtMjk5LDggKzI5OSw4IEBACiAJCQkJICogdGVzdCwgd2UgaW5jbHVkZSB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGluIHRoZQogCQkJCSAqIGNvbXBhcmlzb24uCiAJCQkJICovCi0JCQkJaWYgKCh0LT5wcm94eS0+bW9uaXRvcl91cmlfbGVuICE9IDApICYmCi0JCQkJICAgICh0LT5yZXFfbGluZS5sZW4gPj0gdC0+cHJveHktPm1vbml0b3JfdXJpX2xlbikpIHsKKwkJCQlpZiAoKHQtPmJlLT5tb25pdG9yX3VyaV9sZW4gIT0gMCkgJiYKKwkJCQkgICAgKHQtPnJlcV9saW5lLmxlbiA+PSB0LT5iZS0+bW9uaXRvcl91cmlfbGVuKSkgewogCQkJCQljaGFyICpwID0gdC0+cmVxX2xpbmUuc3RyOwogCQkJCQlpbnQgaWR4ID0gMDsKIApAQCAtMzA5LDggKzMwOSw4IEBACiAJCQkJCQlpZHgrKzsKIAkJCQkJcCArPSBpZHg7CiAKLQkJCQkJaWYgKHQtPnJlcV9saW5lLmxlbiAtIGlkeCA+PSB0LT5wcm94eS0+bW9uaXRvcl91cmlfbGVuICYmCi0JCQkJCSAgICAhbWVtY21wKHAsIHQtPnByb3h5LT5tb25pdG9yX3VyaSwgdC0+cHJveHktPm1vbml0b3JfdXJpX2xlbikpIHsKKwkJCQkJaWYgKHQtPnJlcV9saW5lLmxlbiAtIGlkeCA+PSB0LT5iZS0+bW9uaXRvcl91cmlfbGVuICYmCisJCQkJCSAgICAhbWVtY21wKHAsIHQtPmJlLT5tb25pdG9yX3VyaSwgdC0+YmUtPm1vbml0b3JfdXJpX2xlbikpIHsKIAkJCQkJCS8qCiAJCQkJCQkgKiBXZSBoYXZlIGZvdW5kIHRoZSBtb25pdG9yIFVSSQogCQkJCQkJICovCkBAIC0zMjUsMTAgKzMyNSwxMCBAQAogCQkJCQl9CiAJCQkJfQogCi0JCQkJaWYgKHQtPnByb3h5LT51cmlfYXV0aCAhPSBOVUxMCi0JCQkJICAgICYmIHQtPnJlcV9saW5lLmxlbiA+PSB0LT5wcm94eS0+dXJpX2F1dGgtPnVyaV9sZW4gKyA0KSB7ICAgLyogKzQgZm9yICJHRVQgLyIgKi8KKwkJCQlpZiAodC0+ZmktPnVyaV9hdXRoICE9IE5VTEwKKwkJCQkgICAgJiYgdC0+cmVxX2xpbmUubGVuID49IHQtPmZpLT51cmlfYXV0aC0+dXJpX2xlbiArIDQpIHsgICAvKiArNCBmb3IgIkdFVCAvIiAqLwogCQkJCQlpZiAoIW1lbWNtcCh0LT5yZXFfbGluZS5zdHIgKyA0LAotCQkJCQkJICAgIHQtPnByb3h5LT51cmlfYXV0aC0+dXJpX3ByZWZpeCwgdC0+cHJveHktPnVyaV9hdXRoLT51cmlfbGVuKQorCQkJCQkJICAgIHQtPmZpLT51cmlfYXV0aC0+dXJpX3ByZWZpeCwgdC0+ZmktPnVyaV9hdXRoLT51cmlfbGVuKQogCQkJCQkgICAgJiYgIW1lbWNtcCh0LT5yZXFfbGluZS5zdHIsICJHRVQgIiwgNCkpIHsKIAkJCQkJCXN0cnVjdCB1c2VyX2F1dGggKnVzZXI7CiAJCQkJCQlpbnQgYXV0aGVudGljYXRlZDsKQEAgLTMzNiw3ICszMzYsNyBAQAogCQkJCQkJLyogd2UgYXJlIGluIGZyb250IG9mIGEgaW50ZXJjZXB0YWJsZSBVUkkuIExldCdzIGNoZWNrCiAJCQkJCQkgKiBpZiB0aGVyZSdzIGFuIGF1dGhlbnRpY2F0aW9uIGFuZCBpZiBpdCdzIHZhbGlkLgogCQkJCQkJICovCi0JCQkJCQl1c2VyID0gdC0+cHJveHktPnVyaV9hdXRoLT51c2VyczsKKwkJCQkJCXVzZXIgPSB0LT5maS0+dXJpX2F1dGgtPnVzZXJzOwogCQkJCQkJaWYgKCF1c2VyKSB7CiAJCQkJCQkJLyogbm8gdXNlciBhdXRoIHJlcXVpcmVkLCBpdCdzIE9LICovCiAJCQkJCQkJYXV0aGVudGljYXRlZCA9IDE7CkBAIC0zNjQsNyArMzY0LDcgQEAKIAogCQkJCQkJCS8qIG5vIG5lZWQgdG8gZ28gZnVydGhlciAqLwogCi0JCQkJCQkJbXNnbGVuID0gc3ByaW50Zih0cmFzaCwgSFRUUF80MDFfZm10LCB0LT5wcm94eS0+dXJpX2F1dGgtPmF1dGhfcmVhbG0pOworCQkJCQkJCW1zZ2xlbiA9IHNwcmludGYodHJhc2gsIEhUVFBfNDAxX2ZtdCwgdC0+ZmktPnVyaV9hdXRoLT5hdXRoX3JlYWxtKTsKIAkJCQkJCQl0LT5sb2dzLnN0YXR1cyA9IDQwMTsKIAkJCQkJCQljbGllbnRfcmV0bmNsb3NlKHQsIG1zZ2xlbiwgdHJhc2gpOwogCQkJCQkJCWlmICghKHQtPmZsYWdzICYgU05fRVJSX01BU0spKQpAQCAtMzg1LDEyICszODUsMTIgQEAKIAkJCQl9CiAKIAotCQkJCWZvciAobGluZSA9IDA7IGxpbmUgPCB0LT5wcm94eS0+bmJfcmVxYWRkOyBsaW5lKyspIHsKLQkJCQkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiVzXHJcbiIsIHQtPnByb3h5LT5yZXFfYWRkW2xpbmVdKTsKKwkJCQlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgdC0+ZmktPm5iX3JlcWFkZDsgbGluZSsrKSB7CisJCQkJCWxlbiA9IHNwcmludGYodHJhc2gsICIlc1xyXG4iLCB0LT5maS0+cmVxX2FkZFtsaW5lXSk7CiAJCQkJCWJ1ZmZlcl9yZXBsYWNlMihyZXEsIHJlcS0+aCwgcmVxLT5oLCB0cmFzaCwgbGVuKTsKIAkJCQl9CiAKLQkJCQlpZiAodC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0ZXREZPUikgeworCQkJCWlmICh0LT5iZS0+b3B0aW9ucyAmIFBSX09fRldERk9SKSB7CiAJCQkJCWlmICh0LT5jbGlfYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVCkgewogCQkJCQkJdW5zaWduZWQgY2hhciAqcG47CiAJCQkJCQlwbiA9ICh1bnNpZ25lZCBjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopJnQtPmNsaV9hZGRyKS0+c2luX2FkZHI7CkBAIC00MDksNyArNDA5LDcgQEAKIAkJCQl9CiAKIAkJCQkvKiBhZGQgYSAiY29ubmVjdGlvbjogY2xvc2UiIGxpbmUgaWYgbmVlZGVkICovCi0JCQkJaWYgKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19IVFRQX0NMT1NFKQorCQkJCWlmICh0LT5mZS0+b3B0aW9ucyAmIFBSX09fSFRUUF9DTE9TRSkKIAkJCQkJYnVmZmVyX3JlcGxhY2UyKHJlcSwgcmVxLT5oLCByZXEtPmgsICJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLCAxOSk7CiAKIAkJCQlpZiAoIW1lbWNtcChyZXEtPmRhdGEsICJQT1NUICIsIDUpKSB7CkBAIC00MzgsOCArNDM4LDggQEAKIAkJCQkgKi8KIAkJCQkvL2JyZWFrOwogCi0JCQkJaWYgKCF0LT5wcm94eS0+Y2xpdGltZW91dCB8fAotCQkJCSAgICAodC0+c3J2X3N0YXRlIDwgU1ZfU1REQVRBICYmIHQtPnByb3h5LT5zcnZ0aW1lb3V0KSkKKwkJCQlpZiAoIXQtPmZlLT5jbGl0aW1lb3V0IHx8CisJCQkJICAgICh0LT5zcnZfc3RhdGUgPCBTVl9TVERBVEEgJiYgdC0+YmUtPnNydnRpbWVvdXQpKQogCQkJCQkvKiBJZiB0aGUgY2xpZW50IGhhcyBubyB0aW1lb3V0LCBvciBpZiB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsCiAJCQkJCSAqIGFuZCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgaXQgY2FuIGV4cGlyZSwgdGhlbiBpdCdzIGNsZWFuZXIgdG8KIAkJCQkJICogZGlzYWJsZSB0aGUgdGltZW91dCBvbiB0aGUgY2xpZW50IHNpZGUgc28gdGhhdCB0b28gbG93IHZhbHVlcwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAJCQkJCSAqIGlmIHRoZSBjbGllbnQgY2xvc2VzIGZpcnN0LgogCQkJCQkgKi8KIAkJCQkJdHZfZGVsYXlmcm9tKCZyZXEtPmNleCwgJm5vdywKLQkJCQkJCSAgICAgdC0+cHJveHktPmNvbnRpbWVvdXQgPyB0LT5wcm94eS0+Y29udGltZW91dCA6IDApOworCQkJCQkJICAgICB0LT5iZS0+Y29udGltZW91dCA/IHQtPmJlLT5jb250aW1lb3V0IDogMCk7CiAJCQkJfQogCiAJCQkJZ290byBwcm9jZXNzX2RhdGE7CkBAIC01MTgsNyArNTE4LDcgQEAKIAkJCSAqICAgcmVxLT5yICA9IGVuZCBvZiBkYXRhIChub3QgdXNlZCBhdCB0aGlzIHN0YWdlKQogCQkJICovCiAKLQkJCWlmICghbWV0aG9kX2NoZWNrZWQgJiYgKHQtPnByb3h5LT5hcHBzZXNzaW9uX25hbWUgIT0gTlVMTCkgJiYKKwkJCWlmICghbWV0aG9kX2NoZWNrZWQgJiYgKHQtPmJlLT5hcHBzZXNzaW9uX25hbWUgIT0gTlVMTCkgJiYKIAkJCSAgICAoKG1lbWNtcChyZXEtPmgsICJHRVQgIiwgNCkgPT0gMCkgfHwgKG1lbWNtcChyZXEtPmgsICJQT1NUICIsIDQpID09IDApKSAmJgogCQkJICAgICgocmVxdWVzdF9saW5lID0gbWVtY2hyKHJlcS0+aCwgJzsnLCByZXEtPmxyIC0gcmVxLT5oKSkgIT0gTlVMTCkpIHsKIApAQCAtNTI3LDQyICs1MjcsNDIgQEAKIAogCQkJCS8qIGxvb2sgaWYgd2UgaGF2ZSBhIGpzZXNzaW9uaWQgKi8KIAotCQkJCWlmIChzdHJuY2FzZWNtcChyZXF1ZXN0X2xpbmUsIHQtPnByb3h5LT5hcHBzZXNzaW9uX25hbWUsIHQtPnByb3h5LT5hcHBzZXNzaW9uX25hbWVfbGVuKSA9PSAwKSB7CisJCQkJaWYgKHN0cm5jYXNlY21wKHJlcXVlc3RfbGluZSwgdC0+YmUtPmFwcHNlc3Npb25fbmFtZSwgdC0+YmUtPmFwcHNlc3Npb25fbmFtZV9sZW4pID09IDApIHsKIAogCQkJCQkvKiBza2lwIGpzZXNzaW9uaWQ9ICovCi0JCQkJCXJlcXVlc3RfbGluZSArPSB0LT5wcm94eS0+YXBwc2Vzc2lvbl9uYW1lX2xlbiArIDE7CisJCQkJCXJlcXVlc3RfbGluZSArPSB0LT5iZS0+YXBwc2Vzc2lvbl9uYW1lX2xlbiArIDE7CiAJCQogCQkJCQkvKiBGaXJzdCB0cnkgaWYgd2UgYWxscmVhZHkgaGF2ZSBhbiBhcHBzZXNzaW9uICovCiAJCQkJCWFzZXNzaW9uX3RlbXAgPSAmbG9jYWxfYXNlc3Npb247CiAJCQogCQkJCQlpZiAoKGFzZXNzaW9uX3RlbXAtPnNlc3NpZCA9IHBvb2xfYWxsb2NfZnJvbShhcG9vbHMuc2Vzc2lkLCBhcG9vbHMuc2VzX21zaXplKSkgPT0gTlVMTCkgewogCQkJCQkJQWxlcnQoIk5vdCBlbm91Z2ggbWVtb3J5IHByb2Nlc3NfY2xpKCk6YXNlc3Npb25fdGVtcC0+c2Vzc2lkOmNhbGxvYygpLlxuIik7Ci0JCQkJCQlzZW5kX2xvZyh0LT5wcm94eSwgTE9HX0FMRVJULCAiTm90IGVub3VnaCBNZW1vcnkgcHJvY2Vzc19jbGkoKTphc2Vzc2lvbl90ZW1wLT5zZXNzaWQ6Y2FsbG9jKCkuXG4iKTsKKwkJCQkJCXNlbmRfbG9nKHQtPmJlLCBMT0dfQUxFUlQsICJOb3QgZW5vdWdoIE1lbW9yeSBwcm9jZXNzX2NsaSgpOmFzZXNzaW9uX3RlbXAtPnNlc3NpZDpjYWxsb2MoKS5cbiIpOwogCQkJCQkJcmV0dXJuIDA7CiAJCQkJCX0KIAogCQkJCQkvKiBDb3B5IHRoZSBzZXNzaW9uaWQgKi8KLQkJCQkJbWVtY3B5KGFzZXNzaW9uX3RlbXAtPnNlc3NpZCwgcmVxdWVzdF9saW5lLCB0LT5wcm94eS0+YXBwc2Vzc2lvbl9sZW4pOwotCQkJCQlhc2Vzc2lvbl90ZW1wLT5zZXNzaWRbdC0+cHJveHktPmFwcHNlc3Npb25fbGVuXSA9IDA7CisJCQkJCW1lbWNweShhc2Vzc2lvbl90ZW1wLT5zZXNzaWQsIHJlcXVlc3RfbGluZSwgdC0+YmUtPmFwcHNlc3Npb25fbGVuKTsKKwkJCQkJYXNlc3Npb25fdGVtcC0+c2Vzc2lkW3QtPmJlLT5hcHBzZXNzaW9uX2xlbl0gPSAwOwogCQkJCQlhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZCA9IE5VTEw7CiAKIAkJCQkJLyogb25seSBkbyBpbnNlcnQsIGlmIGxvb2t1cCBmYWlscyAqLwotCQkJCQlpZiAoY2h0YmxfbG9va3VwKCYodC0+cHJveHktPmh0YmxfcHJveHkpLCAodm9pZCAqKSZhc2Vzc2lvbl90ZW1wKSkgeworCQkJCQlpZiAoY2h0YmxfbG9va3VwKCYodC0+YmUtPmh0YmxfcHJveHkpLCAodm9pZCAqKSZhc2Vzc2lvbl90ZW1wKSkgewogCQkJCQkJaWYgKChhc2Vzc2lvbl90ZW1wID0gcG9vbF9hbGxvYyhhcHBzZXNzKSkgPT0gTlVMTCkgewogCQkJCQkJCUFsZXJ0KCJOb3QgZW5vdWdoIG1lbW9yeSBwcm9jZXNzX2NsaSgpOmFzZXNzaW9uOmNhbGxvYygpLlxuIik7Ci0JCQkJCQkJc2VuZF9sb2codC0+cHJveHksIExPR19BTEVSVCwgIk5vdCBlbm91Z2ggbWVtb3J5IHByb2Nlc3NfY2xpKCk6YXNlc3Npb246Y2FsbG9jKCkuXG4iKTsKKwkJCQkJCQlzZW5kX2xvZyh0LT5iZSwgTE9HX0FMRVJULCAiTm90IGVub3VnaCBtZW1vcnkgcHJvY2Vzc19jbGkoKTphc2Vzc2lvbjpjYWxsb2MoKS5cbiIpOwogCQkJCQkJCXJldHVybiAwOwogCQkJCQkJfQogCQkJCQkJYXNlc3Npb25fdGVtcC0+c2Vzc2lkID0gbG9jYWxfYXNlc3Npb24uc2Vzc2lkOwogCQkJCQkJYXNlc3Npb25fdGVtcC0+c2VydmVyaWQgPSBsb2NhbF9hc2Vzc2lvbi5zZXJ2ZXJpZDsKLQkJCQkJCWNodGJsX2luc2VydCgmKHQtPnByb3h5LT5odGJsX3Byb3h5KSwgKHZvaWQgKikgYXNlc3Npb25fdGVtcCk7CisJCQkJCQljaHRibF9pbnNlcnQoJih0LT5iZS0+aHRibF9wcm94eSksICh2b2lkICopIGFzZXNzaW9uX3RlbXApOwogCQkJCQl9IC8qIGVuZCBpZiAoY2h0YmxfbG9va3VwKCkpICovCiAJCQkJCWVsc2UgewogCQkJCQkJLypmcmVlIHdhc3RlZCBtZW1vcnk7Ki8KIAkJCQkJCXBvb2xfZnJlZV90byhhcG9vbHMuc2Vzc2lkLCBsb2NhbF9hc2Vzc2lvbi5zZXNzaWQpOwogCQkJCQl9CiAKLQkJCQkJdHZfZGVsYXlmcm9tKCZhc2Vzc2lvbl90ZW1wLT5leHBpcmUsICZub3csIHQtPnByb3h5LT5hcHBzZXNzaW9uX3RpbWVvdXQpOworCQkJCQl0dl9kZWxheWZyb20oJmFzZXNzaW9uX3RlbXAtPmV4cGlyZSwgJm5vdywgdC0+YmUtPmFwcHNlc3Npb25fdGltZW91dCk7CiAJCQkJCWFzZXNzaW9uX3RlbXAtPnJlcXVlc3RfY291bnQrKzsKIAkJCiAjaWYgZGVmaW5lZChERUJVR19IQVNIKQpAQCAtNTcyLDEwICs1NzIsMTAgQEAKIAkJCQkJaWYgKGFzZXNzaW9uX3RlbXAtPnNlcnZlcmlkID09IE5VTEwpIHsKIAkJCQkJCUFsZXJ0KCJGb3VuZCBBcHBsaWNhdGlvbiBTZXNzaW9uIHdpdGhvdXQgbWF0Y2hpbmcgc2VydmVyLlxuIik7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdHJ1Y3Qgc2VydmVyICpzcnYgPSB0LT5wcm94eS0+c3J2OworCQkJCQkJc3RydWN0IHNlcnZlciAqc3J2ID0gdC0+YmUtPnNydjsKIAkJCQkJCXdoaWxlIChzcnYpIHsKIAkJCQkJCQlpZiAoc3RyY21wKHNydi0+aWQsIGFzZXNzaW9uX3RlbXAtPnNlcnZlcmlkKSA9PSAwKSB7Ci0JCQkJCQkJCWlmIChzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1BFUlNJU1QpIHsKKwkJCQkJCQkJaWYgKHNydi0+c3RhdGUgJiBTUlZfUlVOTklORyB8fCB0LT5iZS0+b3B0aW9ucyAmIFBSX09fUEVSU0lTVCkgewogCQkgICAgICAgICAgICAgICAgLyogd2UgZm91bmQgdGhlIHNlcnZlciBhbmQgaXQncyB1c2FibGUgKi8KIAkJCQkJCQkJCXQtPmZsYWdzICY9IH5TTl9DS19NQVNLOwogCQkJCQkJCQkJdC0+ZmxhZ3MgfD0gU05fQ0tfVkFMSUQgfCBTTl9ESVJFQ1QgfCBTTl9BU1NJR05FRDsKQEAgLTYwNiw3ICs2MDYsNyBAQAogCQkJCWlmICgodC0+bG9ncy51cmkgPSBwb29sX2FsbG9jKHJlcXVyaSkpID09IE5VTEwpIHsKIAkJCQkJQWxlcnQoIkhUVFAgbG9nZ2luZyA6IG91dCBvZiBtZW1vcnkuXG4iKTsKIAkJCQkJdC0+bG9ncy5zdGF0dXMgPSA1MDA7Ci0JCQkJCWNsaWVudF9yZXRuY2xvc2UodCwgdC0+cHJveHktPmVycm1zZy5sZW41MDAsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAwKTsKKwkJCQkJY2xpZW50X3JldG5jbG9zZSh0LCB0LT5mZS0+ZXJybXNnLmxlbjUwMCwgdC0+ZmUtPmVycm1zZy5tc2c1MDApOwogCQkJCQlpZiAoISh0LT5mbGFncyAmIFNOX0VSUl9NQVNLKSkKIAkJCQkJCXQtPmZsYWdzIHw9IFNOX0VSUl9QUlhDT05EOwogCQkJCQlpZiAoISh0LT5mbGFncyAmIFNOX0ZJTlNUX01BU0spKQpAQCAtNjI2LDcgKzYyNiw3IEBACiAJCQllbHNlIGlmICh0LT5sb2dzLmxvZ3dhaXQgJiBMV19SRVFIRFIpIHsKIAkJCQlzdHJ1Y3QgY2FwX2hkciAqaDsKIAkJCQlpbnQgbGVuOwotCQkJCWZvciAoaCA9IHQtPnByb3h5LT5yZXFfY2FwOyBoOyBoID0gaC0+bmV4dCkgeworCQkJCWZvciAoaCA9IHQtPmZpLT5yZXFfY2FwOyBoOyBoID0gaC0+bmV4dCkgewogCQkJCQlpZiAoKGgtPm5hbWVsZW4gKyAyIDw9IHB0ciAtIHJlcS0+aCkgJiYKIAkJCQkJICAgIChyZXEtPmhbaC0+bmFtZWxlbl0gPT0gJzonKSAmJgogCQkJCQkgICAgKHN0cm5jYXNlY21wKHJlcS0+aCwgaC0+bmFtZSwgaC0+bmFtZWxlbikgPT0gMCkpIHsKQEAgLTY0OSw3ICs2NDksNyBAQAogCiAJCQlpZiAoKGdsb2JhbC5tb2RlICYgTU9ERV9ERUJVRykgJiYgKCEoZ2xvYmFsLm1vZGUgJiBNT0RFX1FVSUVUKSB8fCAoZ2xvYmFsLm1vZGUgJiBNT0RFX1ZFUkJPU0UpKSkgewogCQkJCWludCBsZW4sIG1heDsKLQkJCQlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJTA4eDolcy5jbGloZHJbJTA0eDolMDR4XTogIiwgdC0+dW5pcV9pZCwgdC0+cHJveHktPmlkLCAodW5zaWduZWQgIHNob3J0KXQtPmNsaV9mZCwgKHVuc2lnbmVkIHNob3J0KXQtPnNydl9mZCk7CisJCQkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuY2xpaGRyWyUwNHg6JTA0eF06ICIsIHQtPnVuaXFfaWQsIHQtPmJlLT5pZCwgKHVuc2lnbmVkICBzaG9ydCl0LT5jbGlfZmQsICh1bnNpZ25lZCBzaG9ydCl0LT5zcnZfZmQpOwogCQkJCW1heCA9IHB0ciAtIHJlcS0+aDsKIAkJCQlVQk9VTkQobWF4LCBzaXplb2YodHJhc2gpIC0gbGVuIC0gMSk7CiAJCQkJbGVuICs9IHN0cmxjcHkyKHRyYXNoICsgbGVuLCByZXEtPmgsIG1heCArIDEpOwpAQCAtNjU5LDIwICs2NTksMjAgQEAKIAogCiAJCQkvKiByZW1vdmUgImNvbm5lY3Rpb246ICIgaWYgbmVlZGVkICovCi0JCQlpZiAoIWRlbGV0ZV9oZWFkZXIgJiYgKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19IVFRQX0NMT1NFKQorCQkJaWYgKCFkZWxldGVfaGVhZGVyICYmICh0LT5mZS0+b3B0aW9ucyAmIFBSX09fSFRUUF9DTE9TRSkKIAkJCSAgICAmJiAoc3RybmNhc2VjbXAocmVxLT5oLCAiQ29ubmVjdGlvbjogIiwgMTIpID09IDApKSB7CiAJCQkJZGVsZXRlX2hlYWRlciA9IDE7CiAJCQl9CiAKIAkJCS8qIHRyeSBoZWFkZXJzIHJlZ2V4cHMgKi8KLQkJCWlmICghZGVsZXRlX2hlYWRlciAmJiB0LT5wcm94eS0+cmVxX2V4cCAhPSBOVUxMCisJCQlpZiAoIWRlbGV0ZV9oZWFkZXIgJiYgdC0+ZmktPnJlcV9leHAgIT0gTlVMTAogCQkJICAgICYmICEodC0+ZmxhZ3MgJiBTTl9DTERFTlkpKSB7CiAJCQkJc3RydWN0IGhkcl9leHAgKmV4cDsKIAkJCQljaGFyIHRlcm07CiAJCQogCQkJCXRlcm0gPSAqcHRyOwogCQkJCSpwdHIgPSAnXDAnOwotCQkJCWV4cCA9IHQtPnByb3h5LT5yZXFfZXhwOworCQkJCWV4cCA9IHQtPmZpLT5yZXFfZXhwOwogCQkJCWRvIHsKIAkJCQkJaWYgKHJlZ2V4ZWMoZXhwLT5wcmVnLCByZXEtPmgsIE1BWF9NQVRDSCwgcG1hdGNoLCAwKSA9PSAwKSB7CiAJCQkJCQlzd2l0Y2ggKGV4cC0+YWN0aW9uKSB7CkBAIC03MjEsNyArNzIxLDcgQEAKIAkJCSAqICpNVVNUKiBkZWxldGUgaXQKIAkJCSAqLwogCQkJaWYgKCFkZWxldGVfaGVhZGVyICYmCi0JCQkgICAgKHQtPnByb3h5LT5jb29raWVfbmFtZSAhPSBOVUxMIHx8IHQtPnByb3h5LT5jYXB0dXJlX25hbWUgIT0gTlVMTCB8fCB0LT5wcm94eS0+YXBwc2Vzc2lvbl9uYW1lICE9TlVMTCkKKwkJCSAgICAodC0+YmUtPmNvb2tpZV9uYW1lICE9IE5VTEwgfHwgdC0+YmUtPmFwcHNlc3Npb25fbmFtZSAhPU5VTEwgfHwgdC0+ZmktPmNhcHR1cmVfbmFtZSAhPSBOVUxMKQogCQkJICAgICYmICEodC0+ZmxhZ3MgJiAoU05fQ0xERU5ZfFNOX0NMVEFSUElUKSkgJiYgKHB0ciA+PSByZXEtPmggKyA4KQogCQkJICAgICYmIChzdHJuY2FzZWNtcChyZXEtPmgsICJDb29raWU6ICIsIDgpID09IDApKSB7CiAJCQkJY2hhciAqcDEsICpwMiwgKnAzLCAqcDQ7CkBAIC03ODIsMjYgKzc4MiwyNiBAQAogCQkJCQl9CiAJCQkJCWVsc2UgewogCQkJCQkJLyogZmlyc3QsIGxldCdzIHNlZSBpZiB3ZSB3YW50IHRvIGNhcHR1cmUgaXQgKi8KLQkJCQkJCWlmICh0LT5wcm94eS0+Y2FwdHVyZV9uYW1lICE9IE5VTEwgJiYKKwkJCQkJCWlmICh0LT5maS0+Y2FwdHVyZV9uYW1lICE9IE5VTEwgJiYKIAkJCQkJCSAgICB0LT5sb2dzLmNsaV9jb29raWUgPT0gTlVMTCAmJgotCQkJCQkJICAgIChwNCAtIHAxID49IHQtPnByb3h5LT5jYXB0dXJlX25hbWVsZW4pICYmCi0JCQkJCQkgICAgbWVtY21wKHAxLCB0LT5wcm94eS0+Y2FwdHVyZV9uYW1lLCB0LT5wcm94eS0+Y2FwdHVyZV9uYW1lbGVuKSA9PSAwKSB7CisJCQkJCQkgICAgKHA0IC0gcDEgPj0gdC0+ZmktPmNhcHR1cmVfbmFtZWxlbikgJiYKKwkJCQkJCSAgICBtZW1jbXAocDEsIHQtPmZpLT5jYXB0dXJlX25hbWUsIHQtPmZpLT5jYXB0dXJlX25hbWVsZW4pID09IDApIHsKIAkJCQkJCQlpbnQgbG9nX2xlbiA9IHA0IC0gcDE7CiAKIAkJCQkJCQlpZiAoKHQtPmxvZ3MuY2xpX2Nvb2tpZSA9IHBvb2xfYWxsb2MoY2FwdHVyZSkpID09IE5VTEwpIHsKIAkJCQkJCQkJQWxlcnQoIkhUVFAgbG9nZ2luZyA6IG91dCBvZiBtZW1vcnkuXG4iKTsKIAkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlpZiAobG9nX2xlbiA+IHQtPnByb3h5LT5jYXB0dXJlX2xlbikKLQkJCQkJCQkJCWxvZ19sZW4gPSB0LT5wcm94eS0+Y2FwdHVyZV9sZW47CisJCQkJCQkJCWlmIChsb2dfbGVuID4gdC0+ZmktPmNhcHR1cmVfbGVuKQorCQkJCQkJCQkJbG9nX2xlbiA9IHQtPmZpLT5jYXB0dXJlX2xlbjsKIAkJCQkJCQkJbWVtY3B5KHQtPmxvZ3MuY2xpX2Nvb2tpZSwgcDEsIGxvZ19sZW4pOwogCQkJCQkJCQl0LT5sb2dzLmNsaV9jb29raWVbbG9nX2xlbl0gPSAwOwogCQkJCQkJCX0KIAkJCQkJCX0KIAotCQkJCQkJaWYgKChwMiAtIHAxID09IHQtPnByb3h5LT5jb29raWVfbGVuKSAmJiAodC0+cHJveHktPmNvb2tpZV9uYW1lICE9IE5VTEwpICYmCi0JCQkJCQkgICAgKG1lbWNtcChwMSwgdC0+cHJveHktPmNvb2tpZV9uYW1lLCBwMiAtIHAxKSA9PSAwKSkgeworCQkJCQkJaWYgKChwMiAtIHAxID09IHQtPmJlLT5jb29raWVfbGVuKSAmJiAodC0+YmUtPmNvb2tpZV9uYW1lICE9IE5VTEwpICYmCisJCQkJCQkgICAgKG1lbWNtcChwMSwgdC0+YmUtPmNvb2tpZV9uYW1lLCBwMiAtIHAxKSA9PSAwKSkgewogCQkJCQkJCS8qIENvb2wuLi4gaXQncyB0aGUgcmlnaHQgb25lICovCi0JCQkJCQkJc3RydWN0IHNlcnZlciAqc3J2ID0gdC0+cHJveHktPnNydjsKKwkJCQkJCQlzdHJ1Y3Qgc2VydmVyICpzcnYgPSB0LT5iZS0+c3J2OwogCQkJCQkJCWNoYXIgKmRlbGltOwogCiAJCQkJCQkJLyogaWYgd2UncmUgaW4gY29va2llIHByZWZpeCBtb2RlLCB3ZSdsbCBzZWFyY2ggdGhlIGRlbGltaXRvciBzbyB0aGF0IHdlCkBAIC04MTksNyArODE5LDcgQEAKIAkJCQkJCQkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiByZXEtPmgKIAkJCQkJCQkgKi8KIAotCQkJCQkJCWlmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19QRlgpIHsKKwkJCQkJCQlpZiAodC0+YmUtPm9wdGlvbnMgJiBQUl9PX0NPT0tfUEZYKSB7CiAJCQkJCQkJCWZvciAoZGVsaW0gPSBwMzsgZGVsaW0gPCBwNDsgZGVsaW0rKykKIAkJCQkJCQkJCWlmICgqZGVsaW0gPT0gQ09PS0lFX0RFTElNKQogCQkJCQkJCQkJCWJyZWFrOwpAQCAtODQwLDcgKzg0MCw3IEBACiAKIAkJCQkJCQl3aGlsZSAoc3J2KSB7CiAJCQkJCQkJCWlmICgoc3J2LT5ja2xlbiA9PSBkZWxpbSAtIHAzKSAmJiAhbWVtY21wKHAzLCBzcnYtPmNvb2tpZSwgZGVsaW0gLSBwMykpIHsKLQkJCQkJCQkJCWlmIChzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1BFUlNJU1QpIHsKKwkJCQkJCQkJCWlmIChzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcgfHwgdC0+YmUtPm9wdGlvbnMgJiBQUl9PX1BFUlNJU1QpIHsKIAkJCQkJCQkJCQkvKiB3ZSBmb3VuZCB0aGUgc2VydmVyIGFuZCBpdCdzIHVzYWJsZSAqLwogCQkJCQkJCQkJCXQtPmZsYWdzICY9IH5TTl9DS19NQVNLOwogCQkJCQkJCQkJCXQtPmZsYWdzIHw9IFNOX0NLX1ZBTElEIHwgU05fRElSRUNUIHwgU05fQVNTSUdORUQ7CkBAIC04NjgsNyArODY4LDcgQEAKIAkJCQkJCQkgKiAgIGFwcGxpY2F0aW9uIGNvb2tpZSBzbyB0aGF0IGl0IGRvZXMgbm90IGdldCBhY2NpZGVudGVseSByZW1vdmVkIGxhdGVyLAogCQkJCQkJCSAqICAgaWYgd2UncmUgaW4gY29va2llIHByZWZpeCBtb2RlCiAJCQkJCQkJICovCi0JCQkJCQkJaWYgKCh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19QRlgpICYmIChkZWxpbSAhPSBwNCkpIHsKKwkJCQkJCQlpZiAoKHQtPmJlLT5vcHRpb25zICYgUFJfT19DT09LX1BGWCkgJiYgKGRlbGltICE9IHA0KSkgewogCQkJCQkJCQlidWZmZXJfcmVwbGFjZTIocmVxLCBwMywgZGVsaW0gKyAxLCBOVUxMLCAwKTsKIAkJCQkJCQkJcDQgIC09IChkZWxpbSArIDEgLSBwMyk7CiAJCQkJCQkJCXB0ciAtPSAoZGVsaW0gKyAxIC0gcDMpOwpAQCAtODc2LDcgKzg3Niw3IEBACiAJCQkJCQkJCWFwcF9jb29raWVzKys7CS8qIHByb3RlY3QgdGhlIGhlYWRlciBmcm9tIGRlbGV0aW9uICovCiAJCQkJCQkJfQogCQkJCQkJCWVsc2UgaWYgKGRlbF9jb29raWUgPT0gTlVMTCAmJgotCQkJCQkJCQkgKHQtPnByb3h5LT5vcHRpb25zICYgKFBSX09fQ09PS19JTlMgfCBQUl9PX0NPT0tfSU5EKSkgPT0gKFBSX09fQ09PS19JTlMgfCBQUl9PX0NPT0tfSU5EKSkgeworCQkJCQkJCQkgKHQtPmJlLT5vcHRpb25zICYgKFBSX09fQ09PS19JTlMgfCBQUl9PX0NPT0tfSU5EKSkgPT0gKFBSX09fQ09PS19JTlMgfCBQUl9PX0NPT0tfSU5EKSkgewogCQkJCQkJCQlkZWxfY29va2llID0gcDE7CiAJCQkJCQkJCWRlbF9jb2xvbiA9IGNvbG9uOwogCQkJCQkJCX0KQEAgLTg5Niw4ICs4OTYsOCBAQAogCQkJCQkJCX0KIAkJCQkJCX0KIAkJCQotCQkJCQkJaWYgKCh0LT5wcm94eS0+YXBwc2Vzc2lvbl9uYW1lICE9IE5VTEwpICYmCi0JCQkJCQkgICAgKG1lbWNtcChwMSwgdC0+cHJveHktPmFwcHNlc3Npb25fbmFtZSwgcDIgLSBwMSkgPT0gMCkpIHsKKwkJCQkJCWlmICgodC0+YmUtPmFwcHNlc3Npb25fbmFtZSAhPSBOVUxMKSAmJgorCQkJCQkJICAgIChtZW1jbXAocDEsIHQtPmJlLT5hcHBzZXNzaW9uX25hbWUsIHAyIC0gcDEpID09IDApKSB7CiAJCQkJCQkJLyogZmlyc3QsIGxldCdzIHNlZSBpZiB0aGUgY29va2llIGlzIG91ciBhcHBjb29raWUqLwogCQkJICAgIAogCQkJCQkJCS8qIENvb2wuLi4gaXQncyB0aGUgcmlnaHQgb25lICovCkBAIC05MDYsMjUgKzkwNiwyNSBAQAogCQkJICAKIAkJCQkJCQlpZiAoKGFzZXNzaW9uX3RlbXAtPnNlc3NpZCA9IHBvb2xfYWxsb2NfZnJvbShhcG9vbHMuc2Vzc2lkLCBhcG9vbHMuc2VzX21zaXplKSkgPT0gTlVMTCkgewogCQkJCQkJCQlBbGVydCgiTm90IGVub3VnaCBtZW1vcnkgcHJvY2Vzc19jbGkoKTphc2Vzc2lvbi0+c2Vzc2lkOm1hbGxvYygpLlxuIik7Ci0JCQkJCQkJCXNlbmRfbG9nKHQtPnByb3h5LCBMT0dfQUxFUlQsICJOb3QgZW5vdWdoIG1lbW9yeSBwcm9jZXNzX2NsaSgpOmFzZXNzaW9uLT5zZXNzaWQ6bWFsbG9jKCkuXG4iKTsKKwkJCQkJCQkJc2VuZF9sb2codC0+YmUsIExPR19BTEVSVCwgIk5vdCBlbm91Z2ggbWVtb3J5IHByb2Nlc3NfY2xpKCk6YXNlc3Npb24tPnNlc3NpZDptYWxsb2MoKS5cbiIpOwogCQkJCQkJCQlyZXR1cm4gMDsKIAkJCQkJCQl9CiAJCQkgIAotCQkJCQkJCW1lbWNweShhc2Vzc2lvbl90ZW1wLT5zZXNzaWQsIHAzLCB0LT5wcm94eS0+YXBwc2Vzc2lvbl9sZW4pOwotCQkJCQkJCWFzZXNzaW9uX3RlbXAtPnNlc3NpZFt0LT5wcm94eS0+YXBwc2Vzc2lvbl9sZW5dID0gMDsKKwkJCQkJCQltZW1jcHkoYXNlc3Npb25fdGVtcC0+c2Vzc2lkLCBwMywgdC0+YmUtPmFwcHNlc3Npb25fbGVuKTsKKwkJCQkJCQlhc2Vzc2lvbl90ZW1wLT5zZXNzaWRbdC0+YmUtPmFwcHNlc3Npb25fbGVuXSA9IDA7CiAJCQkJCQkJYXNlc3Npb25fdGVtcC0+c2VydmVyaWQgPSBOVUxMOwogCQkJICAgIAogCQkJCQkJCS8qIG9ubHkgZG8gaW5zZXJ0LCBpZiBsb29rdXAgZmFpbHMgKi8KLQkJCQkJCQlpZiAoY2h0YmxfbG9va3VwKCYodC0+cHJveHktPmh0YmxfcHJveHkpLCAodm9pZCAqKSAmYXNlc3Npb25fdGVtcCkgIT0gMCkgeworCQkJCQkJCWlmIChjaHRibF9sb29rdXAoJih0LT5iZS0+aHRibF9wcm94eSksICh2b2lkICopICZhc2Vzc2lvbl90ZW1wKSAhPSAwKSB7CiAJCQkJCQkJCWlmICgoYXNlc3Npb25fdGVtcCA9IHBvb2xfYWxsb2MoYXBwc2VzcykpID09IE5VTEwpIHsKIAkJCQkJCQkJCUFsZXJ0KCJOb3QgZW5vdWdoIG1lbW9yeSBwcm9jZXNzX2NsaSgpOmFzZXNzaW9uOmNhbGxvYygpLlxuIik7Ci0JCQkJCQkJCQlzZW5kX2xvZyh0LT5wcm94eSwgTE9HX0FMRVJULCAiTm90IGVub3VnaCBtZW1vcnkgcHJvY2Vzc19jbGkoKTphc2Vzc2lvbjpjYWxsb2MoKS5cbiIpOworCQkJCQkJCQkJc2VuZF9sb2codC0+YmUsIExPR19BTEVSVCwgIk5vdCBlbm91Z2ggbWVtb3J5IHByb2Nlc3NfY2xpKCk6YXNlc3Npb246Y2FsbG9jKCkuXG4iKTsKIAkJCQkJCQkJCXJldHVybiAwOwogCQkJCQkJCQl9CiAJCQkJCiAJCQkJCQkJCWFzZXNzaW9uX3RlbXAtPnNlc3NpZCA9IGxvY2FsX2FzZXNzaW9uLnNlc3NpZDsKIAkJCQkJCQkJYXNlc3Npb25fdGVtcC0+c2VydmVyaWQgPSBsb2NhbF9hc2Vzc2lvbi5zZXJ2ZXJpZDsKLQkJCQkJCQkJY2h0YmxfaW5zZXJ0KCYodC0+cHJveHktPmh0YmxfcHJveHkpLCAodm9pZCAqKSBhc2Vzc2lvbl90ZW1wKTsKKwkJCQkJCQkJY2h0YmxfaW5zZXJ0KCYodC0+YmUtPmh0YmxfcHJveHkpLCAodm9pZCAqKSBhc2Vzc2lvbl90ZW1wKTsKIAkJCQkJCQl9IGVsc2UgewogCQkJCQkJCQkvKiBmcmVlIHdhc3RlZCBtZW1vcnkgKi8KIAkJCQkJCQkJcG9vbF9mcmVlX3RvKGFwb29scy5zZXNzaWQsIGxvY2FsX2FzZXNzaW9uLnNlc3NpZCk7CkBAIC05MzMsMTAgKzkzMywxMCBAQAogCQkJCQkJCWlmIChhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZCA9PSBOVUxMKSB7CiAJCQkJCQkJCUFsZXJ0KCJGb3VuZCBBcHBsaWNhdGlvbiBTZXNzaW9uIHdpdGhvdXQgbWF0Y2hpbmcgc2VydmVyLlxuIik7CiAJCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJc3RydWN0IHNlcnZlciAqc3J2ID0gdC0+cHJveHktPnNydjsKKwkJCQkJCQkJc3RydWN0IHNlcnZlciAqc3J2ID0gdC0+YmUtPnNydjsKIAkJCQkJCQkJd2hpbGUgKHNydikgewogCQkJCQkJCQkJaWYgKHN0cmNtcChzcnYtPmlkLCBhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZCkgPT0gMCkgewotCQkJCQkJCQkJCWlmIChzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1BFUlNJU1QpIHsKKwkJCQkJCQkJCQlpZiAoc3J2LT5zdGF0ZSAmIFNSVl9SVU5OSU5HIHx8IHQtPmJlLT5vcHRpb25zICYgUFJfT19QRVJTSVNUKSB7CiAJCQkJCQkJCQkJCS8qIHdlIGZvdW5kIHRoZSBzZXJ2ZXIgYW5kIGl0J3MgdXNhYmxlICovCiAJCQkJCQkJCQkJCXQtPmZsYWdzICY9IH5TTl9DS19NQVNLOwogCQkJCQkJCQkJCQl0LT5mbGFncyB8PSBTTl9DS19WQUxJRCB8IFNOX0RJUkVDVCB8IFNOX0FTU0lHTkVEOwpAQCAtOTUxLDcgKzk1MSw3IEBACiAJCQkJCQkJCX0vKiBlbmQgd2hpbGUoc3J2KSAqLwogCQkJCQkJCX0vKiBlbmQgZWxzZSBpZiBzZXJ2ZXIgPT0gTlVMTCAqLwogCQkJICAgIAotCQkJCQkJCXR2X2RlbGF5ZnJvbSgmYXNlc3Npb25fdGVtcC0+ZXhwaXJlLCAmbm93LCB0LT5wcm94eS0+YXBwc2Vzc2lvbl90aW1lb3V0KTsKKwkJCQkJCQl0dl9kZWxheWZyb20oJmFzZXNzaW9uX3RlbXAtPmV4cGlyZSwgJm5vdywgdC0+YmUtPmFwcHNlc3Npb25fdGltZW91dCk7CiAJCQkJCQl9LyogZW5kIGlmICgodC0+cHJveHktPmFwcHNlc3Npb25fbmFtZSAhPSBOVUxMKSAuLi4gKi8KIAkJCQkJfQogCkBAIC05OTUsNyArOTk1LDcgQEAKIAogCQkJCS8qIFdlIG1pZ2h0IGFsc28gbmVlZCB0aGUgJ0F1dGhvcml6YXRpb246ICcgaGVhZGVyICovCiAJCQkJaWYgKHQtPmF1dGhfaGRyLmxlbiA8IDAgJiYKLQkJCQkgICAgdC0+cHJveHktPnVyaV9hdXRoICE9IE5VTEwgJiYKKwkJCQkgICAgdC0+ZmktPnVyaV9hdXRoICE9IE5VTEwgJiYKIAkJCQkgICAgcHRyID4gcmVxLT5oICsgMTUgJiYKIAkJCQkgICAgIXN0cm5jYXNlY21wKCJBdXRob3JpemF0aW9uOiAiLCByZXEtPmgsIDE1KSkgewogCQkJCQl0LT5hdXRoX2hkci5zdHIgPSByZXEtPmg7CkBAIC0xMDE0LDggKzEwMTQsOCBAQAogCQkJICogcmVxLT5sID09IHJsaW0tZGF0YQogCQkJICovCiAJCQlNWV9GRF9TRVQodC0+Y2xpX2ZkLCBTdGF0aWNSZWFkRXZlbnQpOwotCQkJaWYgKHQtPnByb3h5LT5jbGl0aW1lb3V0KQotCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT5yZXgsICZub3csIHQtPnByb3h5LT5jbGl0aW1lb3V0KTsKKwkJCWlmICh0LT5mZS0+Y2xpdGltZW91dCkKKwkJCQl0dl9kZWxheWZyb20oJnJlcS0+cmV4LCAmbm93LCB0LT5mZS0+Y2xpdGltZW91dCk7CiAJCQllbHNlCiAJCQkJdHZfZXRlcm5pdHkoJnJlcS0+cmV4KTsKIAkJfQpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAkJICovCiAJCWlmIChyZXEtPmwgPj0gcmVxLT5ybGltIC0gcmVxLT5kYXRhKSB7CiAJCQl0LT5sb2dzLnN0YXR1cyA9IDQwMDsKLQkJCWNsaWVudF9yZXRuY2xvc2UodCwgdC0+cHJveHktPmVycm1zZy5sZW40MDAsIHQtPnByb3h5LT5lcnJtc2cubXNnNDAwKTsKKwkJCWNsaWVudF9yZXRuY2xvc2UodCwgdC0+ZmUtPmVycm1zZy5sZW40MDAsIHQtPmZlLT5lcnJtc2cubXNnNDAwKTsKIAkJCWlmICghKHQtPmZsYWdzICYgU05fRVJSX01BU0spKQogCQkJCXQtPmZsYWdzIHw9IFNOX0VSUl9QUlhDT05EOwogCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9GSU5TVF9NQVNLKSkKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJCQkvKiByZWFkIHRpbWVvdXQgOiBnaXZlIHVwIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KIAkJCSAqLwogCQkJdC0+bG9ncy5zdGF0dXMgPSA0MDg7Ci0JCQljbGllbnRfcmV0bmNsb3NlKHQsIHQtPnByb3h5LT5lcnJtc2cubGVuNDA4LCB0LT5wcm94eS0+ZXJybXNnLm1zZzQwOCk7CisJCQljbGllbnRfcmV0bmNsb3NlKHQsIHQtPmZlLT5lcnJtc2cubGVuNDA4LCB0LT5mZS0+ZXJybXNnLm1zZzQwOCk7CiAJCQlpZiAoISh0LT5mbGFncyAmIFNOX0VSUl9NQVNLKSkKIAkJCQl0LT5mbGFncyB8PSBTTl9FUlJfQ0xJVE87CiAJCQlpZiAoISh0LT5mbGFncyAmIFNOX0ZJTlNUX01BU0spKQpAQCAtMTA5OSw4ICsxMDk5LDggQEAKIAkJCS8qIFdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHJlYWQgcGFydCBpcyBzdGlsbCBhbGl2ZSB3aGVuIHN3aXRjaGluZwogCQkJICogdG8gc2h1dHcgKi8KIAkJCU1ZX0ZEX1NFVCh0LT5jbGlfZmQsIFN0YXRpY1JlYWRFdmVudCk7Ci0JCQlpZiAodC0+cHJveHktPmNsaXRpbWVvdXQpCi0JCQkJdHZfZGVsYXlmcm9tKCZyZXEtPnJleCwgJm5vdywgdC0+cHJveHktPmNsaXRpbWVvdXQpOworCQkJaWYgKHQtPmZlLT5jbGl0aW1lb3V0KQorCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT5yZXgsICZub3csIHQtPmZlLT5jbGl0aW1lb3V0KTsKIAkJCXQtPmNsaV9zdGF0ZSA9IENMX1NUU0hVVFc7CiAJCQkvL2ZwcmludGYoc3RkZXJyLCIlcDolcyglZCksIGM9JWQsIHM9JWRcbiIsIHQsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIHQtPmNsaV9zdGF0ZSwgdC0+Y2xpX3N0YXRlKTsKIAkJCXJldHVybiAxOwpAQCAtMTEzMSw4ICsxMTMxLDggQEAKIAkJCS8qIFdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHJlYWQgcGFydCBpcyBzdGlsbCBhbGl2ZSB3aGVuIHN3aXRjaGluZwogCQkJICogdG8gc2h1dHcgKi8KIAkJCU1ZX0ZEX1NFVCh0LT5jbGlfZmQsIFN0YXRpY1JlYWRFdmVudCk7Ci0JCQlpZiAodC0+cHJveHktPmNsaXRpbWVvdXQpCi0JCQkJdHZfZGVsYXlmcm9tKCZyZXEtPnJleCwgJm5vdywgdC0+cHJveHktPmNsaXRpbWVvdXQpOworCQkJaWYgKHQtPmZlLT5jbGl0aW1lb3V0KQorCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT5yZXgsICZub3csIHQtPmZlLT5jbGl0aW1lb3V0KTsKIAogCQkJdC0+Y2xpX3N0YXRlID0gQ0xfU1RTSFVUVzsKIAkJCWlmICghKHQtPmZsYWdzICYgU05fRVJSX01BU0spKQpAQCAtMTE1OSw4ICsxMTU5LDggQEAKIAkJCS8qIHRoZXJlJ3Mgc3RpbGwgc29tZSBzcGFjZSBpbiB0aGUgYnVmZmVyICovCiAJCQlpZiAoISBNWV9GRF9JU1NFVCh0LT5jbGlfZmQsIFN0YXRpY1JlYWRFdmVudCkpIHsKIAkJCQlNWV9GRF9TRVQodC0+Y2xpX2ZkLCBTdGF0aWNSZWFkRXZlbnQpOwotCQkJCWlmICghdC0+cHJveHktPmNsaXRpbWVvdXQgfHwKLQkJCQkgICAgKHQtPnNydl9zdGF0ZSA8IFNWX1NUREFUQSAmJiB0LT5wcm94eS0+c3J2dGltZW91dCkpCisJCQkJaWYgKCF0LT5mZS0+Y2xpdGltZW91dCB8fAorCQkJCSAgICAodC0+c3J2X3N0YXRlIDwgU1ZfU1REQVRBICYmIHQtPmJlLT5zcnZ0aW1lb3V0KSkKIAkJCQkJLyogSWYgdGhlIGNsaWVudCBoYXMgbm8gdGltZW91dCwgb3IgaWYgdGhlIHNlcnZlciBub3QgcmVhZHkgeWV0LCBhbmQgd2UKIAkJCQkJICoga25vdyBmb3Igc3VyZSB0aGF0IGl0IGNhbiBleHBpcmUsIHRoZW4gaXQncyBjbGVhbmVyIHRvIGRpc2FibGUgdGhlCiAJCQkJCSAqIHRpbWVvdXQgb24gdGhlIGNsaWVudCBzaWRlIHNvIHRoYXQgdG9vIGxvdyB2YWx1ZXMgY2Fubm90IG1ha2UgdGhlCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogCQkJCQkgKi8KIAkJCQkJdHZfZXRlcm5pdHkoJnJlcS0+cmV4KTsKIAkJCQllbHNlCi0JCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT5yZXgsICZub3csIHQtPnByb3h5LT5jbGl0aW1lb3V0KTsKKwkJCQkJdHZfZGVsYXlmcm9tKCZyZXEtPnJleCwgJm5vdywgdC0+ZmUtPmNsaXRpbWVvdXQpOwogCQkJfQogCQl9CiAKQEAgLTExODIsOCArMTE4Miw4IEBACiAJCQkvKiBidWZmZXIgbm90IGVtcHR5ICovCiAJCQlpZiAoISBNWV9GRF9JU1NFVCh0LT5jbGlfZmQsIFN0YXRpY1dyaXRlRXZlbnQpKSB7CiAJCQkJTVlfRkRfU0VUKHQtPmNsaV9mZCwgU3RhdGljV3JpdGVFdmVudCk7IC8qIHJlc3RhcnQgd3JpdGluZyAqLwotCQkJCWlmICh0LT5wcm94eS0+Y2xpdGltZW91dCkgewotCQkJCQl0dl9kZWxheWZyb20oJnJlcC0+d2V4LCAmbm93LCB0LT5wcm94eS0+Y2xpdGltZW91dCk7CisJCQkJaWYgKHQtPmZlLT5jbGl0aW1lb3V0KSB7CisJCQkJCXR2X2RlbGF5ZnJvbSgmcmVwLT53ZXgsICZub3csIHQtPmZlLT5jbGl0aW1lb3V0KTsKIAkJCQkJLyogRklYTUU6IHRvIHByZXZlbnQgdGhlIGNsaWVudCBmcm9tIGV4cGlyaW5nIHJlYWQgdGltZW91dHMgZHVyaW5nIHdyaXRlcywKIAkJCQkJICogd2UgcmVmcmVzaCBpdC4gKi8KIAkJCQkJcmVxLT5yZXggPSByZXAtPndleDsKQEAgLTEyNTUsOCArMTI1NSw4IEBACiAJCQkvKiBidWZmZXIgbm90IGVtcHR5ICovCiAJCQlpZiAoISBNWV9GRF9JU1NFVCh0LT5jbGlfZmQsIFN0YXRpY1dyaXRlRXZlbnQpKSB7CiAJCQkJTVlfRkRfU0VUKHQtPmNsaV9mZCwgU3RhdGljV3JpdGVFdmVudCk7IC8qIHJlc3RhcnQgd3JpdGluZyAqLwotCQkJCWlmICh0LT5wcm94eS0+Y2xpdGltZW91dCkgewotCQkJCQl0dl9kZWxheWZyb20oJnJlcC0+d2V4LCAmbm93LCB0LT5wcm94eS0+Y2xpdGltZW91dCk7CisJCQkJaWYgKHQtPmZlLT5jbGl0aW1lb3V0KSB7CisJCQkJCXR2X2RlbGF5ZnJvbSgmcmVwLT53ZXgsICZub3csIHQtPmZlLT5jbGl0aW1lb3V0KTsKIAkJCQkJLyogRklYTUU6IHRvIHByZXZlbnQgdGhlIGNsaWVudCBmcm9tIGV4cGlyaW5nIHJlYWQgdGltZW91dHMgZHVyaW5nIHdyaXRlcywKIAkJCQkJICogd2UgcmVmcmVzaCBpdC4gKi8KIAkJCQkJcmVxLT5yZXggPSByZXAtPndleDsKQEAgLTEzMjMsOCArMTMyMyw4IEBACiAJCQkvKiB0aGVyZSdzIHN0aWxsIHNvbWUgc3BhY2UgaW4gdGhlIGJ1ZmZlciAqLwogCQkJaWYgKCEgTVlfRkRfSVNTRVQodC0+Y2xpX2ZkLCBTdGF0aWNSZWFkRXZlbnQpKSB7CiAJCQkJTVlfRkRfU0VUKHQtPmNsaV9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCQlpZiAodC0+cHJveHktPmNsaXRpbWVvdXQpCi0JCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT5yZXgsICZub3csIHQtPnByb3h5LT5jbGl0aW1lb3V0KTsKKwkJCQlpZiAodC0+ZmUtPmNsaXRpbWVvdXQpCisJCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT5yZXgsICZub3csIHQtPmZlLT5jbGl0aW1lb3V0KTsKIAkJCQllbHNlCiAJCQkJCXR2X2V0ZXJuaXR5KCZyZXEtPnJleCk7CiAJCQkJLy9mcHJpbnRmKHN0ZGVyciwiJXA6JXMoJWQpLCBjPSVkLCBzPSVkXG4iLCB0LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCB0LT5jbGlfc3RhdGUsIHQtPmNsaV9zdGF0ZSk7CkBAIC0xMzM1LDcgKzEzMzUsNyBAQAogCWVsc2UgeyAvKiBDTF9TVENMT1NFOiBub3RoaW5nIHRvIGRvICovCiAJCWlmICgoZ2xvYmFsLm1vZGUgJiBNT0RFX0RFQlVHKSAmJiAoIShnbG9iYWwubW9kZSAmIE1PREVfUVVJRVQpIHx8IChnbG9iYWwubW9kZSAmIE1PREVfVkVSQk9TRSkpKSB7CiAJCQlpbnQgbGVuOwotCQkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuY2xpY2xzWyUwNHg6JTA0eF1cbiIsIHQtPnVuaXFfaWQsIHQtPnByb3h5LT5pZCwgKHVuc2lnbmVkIHNob3J0KXQtPmNsaV9mZCwgKHVuc2lnbmVkIHNob3J0KXQtPnNydl9mZCk7CisJCQlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJTA4eDolcy5jbGljbHNbJTA0eDolMDR4XVxuIiwgdC0+dW5pcV9pZCwgdC0+YmUtPmlkLCAodW5zaWduZWQgc2hvcnQpdC0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpdC0+c3J2X2ZkKTsKIAkJCXdyaXRlKDEsIHRyYXNoLCBsZW4pOwogCQl9CiAJCXJldHVybiAwOwpAQCAtMTM3MCw3ICsxMzcwLDcgQEAKIAkJCXJldHVybiAwOwkvKiBzdGF5IGluIGlkbGUsIHdhaXRpbmcgZm9yIGRhdGEgdG8gcmVhY2ggdGhlIGNsaWVudCBzaWRlICovCiAJCWVsc2UgaWYgKGMgPT0gQ0xfU1RDTE9TRSB8fCBjID09IENMX1NUU0hVVFcgfHwKIAkJCSAoYyA9PSBDTF9TVFNIVVRSICYmCi0JCQkgICh0LT5yZXEtPmwgPT0gMCB8fCB0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQUJSVF9DTE9TRSkpKSB7IC8qIGdpdmUgdXAgKi8KKwkJCSAgKHQtPnJlcS0+bCA9PSAwIHx8IHQtPmJlLT5vcHRpb25zICYgUFJfT19BQlJUX0NMT1NFKSkpIHsgLyogZ2l2ZSB1cCAqLwogCQkJdHZfZXRlcm5pdHkoJnJlcS0+Y2V4KTsKIAkJCWlmICh0LT5wZW5kX3BvcykKIAkJCQl0LT5sb2dzLnRfcXVldWUgPSB0dl9kaWZmKCZ0LT5sb2dzLnR2X2FjY2VwdCwgJm5vdyk7CkBAIC0xNDAyLDcgKzE0MDIsNyBAQAogCQkJCXR2X2V0ZXJuaXR5KCZyZXEtPmNleCk7CiAJCQkJdC0+bG9ncy50X3F1ZXVlID0gdHZfZGlmZigmdC0+bG9ncy50dl9hY2NlcHQsICZub3cpOwogCQkJCXNydl9jbG9zZV93aXRoX2Vycih0LCBTTl9FUlJfUFJYQ09ORCwgU05fRklOU1RfVCwKLQkJCQkJCSAgIDUwMCwgdC0+cHJveHktPmVycm1zZy5sZW41MDAsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAwKTsKKwkJCQkJCSAgIDUwMCwgdC0+ZmUtPmVycm1zZy5sZW41MDAsIHQtPmZlLT5lcnJtc2cubXNnNTAwKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIApAQCAtMTQxOSwxMCArMTQxOSwxMCBAQAogCQkJCQl0dl9ldGVybml0eSgmcmVxLT5jZXgpOwogCQkJCQl0LT5sb2dzLnRfcXVldWUgPSB0dl9kaWZmKCZ0LT5sb2dzLnR2X2FjY2VwdCwgJm5vdyk7CiAJCQkJCXNydl9jbG9zZV93aXRoX2Vycih0LCBTTl9FUlJfU1JWVE8sIFNOX0ZJTlNUX1EsCi0JCQkJCQkJICAgNTAzLCB0LT5wcm94eS0+ZXJybXNnLmxlbjUwMywgdC0+cHJveHktPmVycm1zZy5tc2c1MDMpOworCQkJCQkJCSAgIDUwMywgdC0+ZmUtPmVycm1zZy5sZW41MDMsIHQtPmZlLT5lcnJtc2cubXNnNTAzKTsKIAkJCQkJaWYgKHQtPnNydikKIAkJCQkJCXQtPnNydi0+ZmFpbGVkX2Nvbm5zKys7Ci0JCQkJCXQtPnByb3h5LT5mYWlsZWRfY29ubnMrKzsKKwkJCQkJdC0+ZmUtPmZhaWxlZF9jb25ucysrOwogCQkJCQlyZXR1cm4gMTsKIAkJCQl9CiAJCQl9CkBAIC0xNDQ2LDcgKzE0NDYsNyBAQAogCWVsc2UgaWYgKHMgPT0gU1ZfU1RDT05OKSB7IC8qIGNvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MgKi8KIAkJaWYgKGMgPT0gQ0xfU1RDTE9TRSB8fCBjID09IENMX1NUU0hVVFcgfHwKIAkJICAgIChjID09IENMX1NUU0hVVFIgJiYKLQkJICAgICAodC0+cmVxLT5sID09IDAgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0FCUlRfQ0xPU0UpKSkgeyAvKiBnaXZlIHVwICovCisJCSAgICAgKHQtPnJlcS0+bCA9PSAwIHx8IHQtPmJlLT5vcHRpb25zICYgUFJfT19BQlJUX0NMT1NFKSkpIHsgLyogZ2l2ZSB1cCAqLwogCQkJdHZfZXRlcm5pdHkoJnJlcS0+Y2V4KTsKIAkJCWZkX2RlbGV0ZSh0LT5zcnZfZmQpOwogCQkJaWYgKHQtPnNydikKQEAgLTE0NzksMTcgKzE0NzksMTcgQEAKIAkJCWlmIChzcnZfY291bnRfcmV0cnlfZG93bih0LCBjb25uX2VycikpCiAJCQkJcmV0dXJuIDE7CiAKLQkJCWlmICh0LT5zcnYgJiYgdC0+Y29ubl9yZXRyaWVzID09IDAgJiYgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1JFRElTUCkgeworCQkJaWYgKHQtPnNydiAmJiB0LT5jb25uX3JldHJpZXMgPT0gMCAmJiB0LT5iZS0+b3B0aW9ucyAmIFBSX09fUkVESVNQKSB7CiAJCQkJLyogV2UncmUgb24gb3VyIGxhc3QgY2hhbmNlLCBhbmQgdGhlIFJFRElTUCBvcHRpb24gd2FzIHNwZWNpZmllZC4KIAkJCQkgKiBXZSB3aWxsIGlnbm9yZSBjb29raWUgYW5kIGZvcmNlIHRvIGJhbGFuY2Ugb3IgdXNlIHRoZSBkaXNwYXRjaGVyLgogCQkJCSAqLwogCQkJCS8qIGxldCdzIHRyeSB0byBvZmZlciB0aGlzIHNsb3QgdG8gYW55Ym9keSAqLwotCQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPnByb3h5KSkKKwkJCQlpZiAobWF5X2RlcXVldWVfdGFza3ModC0+c3J2LCB0LT5iZSkpCiAJCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQkJaWYgKHQtPnNydikKIAkJCQkJdC0+c3J2LT5mYWlsZWRfY29ubnMrKzsKLQkJCQl0LT5wcm94eS0+ZmFpbGVkX2Nvbm5zKys7CisJCQkJdC0+YmUtPmZhaWxlZF9jb25ucysrOwogCiAJCQkJdC0+ZmxhZ3MgJj0gfihTTl9ESVJFQ1QgfCBTTl9BU1NJR05FRCB8IFNOX0FERFJfU0VUKTsKIAkJCQl0LT5zcnYgPSBOVUxMOyAvKiBpdCdzIGxlZnQgdG8gdGhlIGRpc3BhdGNoZXIgdG8gY2hvb3NlIGEgc2VydmVyICovCkBAIC0xNTI4LDggKzE1MjgsOCBAQAogCQkJCXR2X2V0ZXJuaXR5KCZyZXEtPndleCk7CiAJCQl9IGVsc2UgIC8qIG5lZWQgdGhlIHJpZ2h0IHRvIHdyaXRlICovIHsKIAkJCQlNWV9GRF9TRVQodC0+c3J2X2ZkLCBTdGF0aWNXcml0ZUV2ZW50KTsKLQkJCQlpZiAodC0+cHJveHktPnNydnRpbWVvdXQpIHsKLQkJCQkJdHZfZGVsYXlmcm9tKCZyZXEtPndleCwgJm5vdywgdC0+cHJveHktPnNydnRpbWVvdXQpOworCQkJCWlmICh0LT5iZS0+c3J2dGltZW91dCkgeworCQkJCQl0dl9kZWxheWZyb20oJnJlcS0+d2V4LCAmbm93LCB0LT5iZS0+c3J2dGltZW91dCk7CiAJCQkJCS8qIEZJWE1FOiB0byBwcmV2ZW50IHRoZSBzZXJ2ZXIgZnJvbSBleHBpcmluZyByZWFkIHRpbWVvdXRzIGR1cmluZyB3cml0ZXMsCiAJCQkJCSAqIHdlIHJlZnJlc2ggaXQuICovCiAJCQkJCXJlcC0+cmV4ID0gcmVxLT53ZXg7CkBAIC0xNTM4LDEwICsxNTM4LDEwIEBACiAJCQkJCXR2X2V0ZXJuaXR5KCZyZXEtPndleCk7CiAJCQl9CiAKLQkJCWlmICh0LT5wcm94eS0+bW9kZSA9PSBQUl9NT0RFX1RDUCkgeyAvKiBsZXQncyBhbGxvdyBpbW1lZGlhdGUgZGF0YSBjb25uZWN0aW9uIGluIHRoaXMgY2FzZSAqLworCQkJaWYgKHQtPmJlLT5tb2RlID09IFBSX01PREVfVENQKSB7IC8qIGxldCdzIGFsbG93IGltbWVkaWF0ZSBkYXRhIGNvbm5lY3Rpb24gaW4gdGhpcyBjYXNlICovCiAJCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCQlpZiAodC0+cHJveHktPnNydnRpbWVvdXQpCi0JCQkJCXR2X2RlbGF5ZnJvbSgmcmVwLT5yZXgsICZub3csIHQtPnByb3h5LT5zcnZ0aW1lb3V0KTsKKwkJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpCisJCQkJCXR2X2RlbGF5ZnJvbSgmcmVwLT5yZXgsICZub3csIHQtPmJlLT5zcnZ0aW1lb3V0KTsKIAkJCQllbHNlCiAJCQkJCXR2X2V0ZXJuaXR5KCZyZXAtPnJleCk7CiAJCQpAQCAtMTU1Miw3ICsxNTUyLDcgQEAKIAogCQkJCS8qIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGxvZyBhcyBzb29uIGFzIHBvc3NpYmxlLCB3aXRob3V0IGNvdW50aW5nCiAJCQkJICAgYnl0ZXMgZnJvbSB0aGUgc2VydmVyLCB0aGVuIHRoaXMgaXMgdGhlIHJpZ2h0IG1vbWVudC4gKi8KLQkJCQlpZiAodC0+cHJveHktPnRvX2xvZyAmJiAhKHQtPmxvZ3MubG9nd2FpdCAmIExXX0JZVEVTKSkgeworCQkJCWlmICh0LT5mZS0+dG9fbG9nICYmICEodC0+bG9ncy5sb2d3YWl0ICYgTFdfQllURVMpKSB7CiAJCQkJCXQtPmxvZ3MudF9jbG9zZSA9IHQtPmxvZ3MudF9jb25uZWN0OyAvKiB0byBnZXQgYSB2YWxpZCBlbmQgZGF0ZSAqLwogCQkJCQlzZXNzX2xvZyh0KTsKIAkJCQl9CkBAIC0xNTg4LDcgKzE1ODgsNyBAQAogCQkJCWlmICh0LT5mbGFncyAmIFNOX0NBQ0hFQUJMRSkgewogCQkJCQlpZiAoKHQtPmZsYWdzICYgU05fQ0FDSEVfQ09PSykgJiYKIAkJCQkJICAgICh0LT5mbGFncyAmIFNOX1NDS19BTlkpICYmCi0JCQkJCSAgICAodC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0NIS19DQUNIRSkpIHsKKwkJCQkJICAgICh0LT5iZS0+b3B0aW9ucyAmIFBSX09fQ0hLX0NBQ0hFKSkgewogCiAJCQkJCQkvKiB3ZSdyZSBpbiBwcmVzZW5jZSBvZiBhIGNhY2hlYWJsZSByZXNwb25zZSBjb250YWluaW5nCiAJCQkJCQkgKiBhIHNldC1jb29raWUgaGVhZGVyLiBXZSdsbCBibG9jayBpdCBhcyByZXF1ZXN0ZWQgYnkKQEAgLTE2MDEsMjIgKzE2MDEsMjIgQEAKIAkJCQkJCQl0LT5zcnYtPmN1cl9zZXNzLS07CiAJCQkJCQkJdC0+c3J2LT5mYWlsZWRfc2VjdSsrOwogCQkJCQkJfQotCQkJCQkJdC0+cHJveHktPmZhaWxlZF9zZWN1Kys7CisJCQkJCQl0LT5iZS0+ZmFpbGVkX3NlY3UrKzsKIAkJCQkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7CiAJCQkJCQl0LT5sb2dzLnN0YXR1cyA9IDUwMjsKLQkJCQkJCWNsaWVudF9yZXR1cm4odCwgdC0+cHJveHktPmVycm1zZy5sZW41MDIsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAyKTsKKwkJCQkJCWNsaWVudF9yZXR1cm4odCwgdC0+ZmUtPmVycm1zZy5sZW41MDIsIHQtPmZlLT5lcnJtc2cubXNnNTAyKTsKIAkJCQkJCWlmICghKHQtPmZsYWdzICYgU05fRVJSX01BU0spKQogCQkJCQkJCXQtPmZsYWdzIHw9IFNOX0VSUl9QUlhDT05EOwogCQkJCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9GSU5TVF9NQVNLKSkKIAkJCQkJCQl0LT5mbGFncyB8PSBTTl9GSU5TVF9IOwogCi0JCQkJCQlBbGVydCgiQmxvY2tpbmcgY2FjaGVhYmxlIGNvb2tpZSBpbiByZXNwb25zZSBmcm9tIGluc3RhbmNlICVzLCBzZXJ2ZXIgJXMuXG4iLCB0LT5wcm94eS0+aWQsIHQtPnNydi0+aWQpOwotCQkJCQkJc2VuZF9sb2codC0+cHJveHksIExPR19BTEVSVCwgIkJsb2NraW5nIGNhY2hlYWJsZSBjb29raWUgaW4gcmVzcG9uc2UgZnJvbSBpbnN0YW5jZSAlcywgc2VydmVyICVzLlxuIiwgdC0+cHJveHktPmlkLCB0LT5zcnYtPmlkKTsKKwkJCQkJCUFsZXJ0KCJCbG9ja2luZyBjYWNoZWFibGUgY29va2llIGluIHJlc3BvbnNlIGZyb20gaW5zdGFuY2UgJXMsIHNlcnZlciAlcy5cbiIsIHQtPmJlLT5pZCwgdC0+c3J2LT5pZCk7CisJCQkJCQlzZW5kX2xvZyh0LT5iZSwgTE9HX0FMRVJULCAiQmxvY2tpbmcgY2FjaGVhYmxlIGNvb2tpZSBpbiByZXNwb25zZSBmcm9tIGluc3RhbmNlICVzLCBzZXJ2ZXIgJXMuXG4iLCB0LT5iZS0+aWQsIHQtPnNydi0+aWQpOwogCiAJCQkJCQkvKiBXZSB1c2VkIHRvIGhhdmUgYSBmcmVlIGNvbm5lY3Rpb24gc2xvdC4gU2luY2Ugd2UnbGwgbmV2ZXIgdXNlIGl0LAogCQkJCQkJICogd2UgaGF2ZSB0byBpbmZvcm0gdGhlIHNlcnZlciB0aGF0IGl0IG1heSBiZSB1c2VkIGJ5IGFub3RoZXIgc2Vzc2lvbi4KIAkJCQkJCSAqLwotCQkJCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCQkJCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+YmUpKQogCQkJCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQkJCQlyZXR1cm4gMTsKQEAgLTE2MzIsMTAgKzE2MzIsMTAgQEAKIAkJCQkJCXQtPnNydi0+Y3VyX3Nlc3MtLTsKIAkJCQkJCXQtPnNydi0+ZmFpbGVkX3NlY3UrKzsKIAkJCQkJfQotCQkJCQl0LT5wcm94eS0+ZmFpbGVkX3NlY3UrKzsKKwkJCQkJdC0+YmUtPmZhaWxlZF9zZWN1Kys7CiAJCQkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7CiAJCQkJCXQtPmxvZ3Muc3RhdHVzID0gNTAyOwotCQkJCQljbGllbnRfcmV0dXJuKHQsIHQtPnByb3h5LT5lcnJtc2cubGVuNTAyLCB0LT5wcm94eS0+ZXJybXNnLm1zZzUwMik7CisJCQkJCWNsaWVudF9yZXR1cm4odCwgdC0+ZmUtPmVycm1zZy5sZW41MDIsIHQtPmZlLT5lcnJtc2cubXNnNTAyKTsKIAkJCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9FUlJfTUFTSykpCiAJCQkJCQl0LT5mbGFncyB8PSBTTl9FUlJfUFJYQ09ORDsKIAkJCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9GSU5TVF9NQVNLKSkKQEAgLTE2NDMsNyArMTY0Myw3IEBACiAJCQkJCS8qIFdlIHVzZWQgdG8gaGF2ZSBhIGZyZWUgY29ubmVjdGlvbiBzbG90LiBTaW5jZSB3ZSdsbCBuZXZlciB1c2UgaXQsCiAJCQkJCSAqIHdlIGhhdmUgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgdGhhdCBpdCBtYXkgYmUgdXNlZCBieSBhbm90aGVyIHNlc3Npb24uCiAJCQkJCSAqLwotCQkJCQlpZiAobWF5X2RlcXVldWVfdGFza3ModC0+c3J2LCB0LT5wcm94eSkpCisJCQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQkJCXJldHVybiAxOwpAQCAtMTY1MSwxNSArMTY1MSwxNSBAQAogCiAJCQkJLyogd2UnbGwgaGF2ZSBzb21ldGhpbmcgZWxzZSB0byBkbyBoZXJlIDogYWRkIG5ldyBoZWFkZXJzIC4uLiAqLwogCi0JCQkJaWYgKCh0LT5zcnYpICYmICEodC0+ZmxhZ3MgJiBTTl9ESVJFQ1QpICYmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19JTlMpICYmCi0JCQkJICAgICghKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19DT09LX1BPU1QpIHx8ICh0LT5mbGFncyAmIFNOX1BPU1QpKSkgeworCQkJCWlmICgodC0+c3J2KSAmJiAhKHQtPmZsYWdzICYgU05fRElSRUNUKSAmJiAodC0+YmUtPm9wdGlvbnMgJiBQUl9PX0NPT0tfSU5TKSAmJgorCQkJCSAgICAoISh0LT5iZS0+b3B0aW9ucyAmIFBSX09fQ09PS19QT1NUKSB8fCAodC0+ZmxhZ3MgJiBTTl9QT1NUKSkpIHsKIAkJCQkJLyogdGhlIHNlcnZlciBpcyBrbm93biwgaXQncyBub3QgdGhlIG9uZSB0aGUgY2xpZW50IHJlcXVlc3RlZCwgd2UgaGF2ZSB0bwogCQkJCQkgKiBpbnNlcnQgYSBzZXQtY29va2llIGhlcmUsIGV4Y2VwdCBpZiB3ZSB3YW50IHRvIGluc2VydCBvbmx5IG9uIFBPU1QKIAkJCQkJICogcmVxdWVzdHMgYW5kIHRoaXMgb25lIGlzbid0LiBOb3RlIHRoYXQgc2VydmVycyB3aGljaCBkb24ndCBoYXZlIGNvb2tpZXMKIAkJCQkJICogKGVnOiBzb21lIGJhY2t1cCBzZXJ2ZXJzKSB3aWxsIHJldHVybiBhIGZ1bGwgY29va2llIHJlbW92YWwgcmVxdWVzdC4KIAkJCQkJICovCiAJCQkJCWxlbiA9IHNwcmludGYodHJhc2gsICJTZXQtQ29va2llOiAlcz0lczsgcGF0aD0vXHJcbiIsCi0JCQkJCQkgICAgICB0LT5wcm94eS0+Y29va2llX25hbWUsCisJCQkJCQkgICAgICB0LT5iZS0+Y29va2llX25hbWUsCiAJCQkJCQkgICAgICB0LT5zcnYtPmNvb2tpZSA/IHQtPnNydi0+Y29va2llIDogIjsgRXhwaXJlcz1UaHUsIDAxLUphbi0xOTcwIDAwOjAwOjAxIEdNVCIpOwogCiAJCQkJCXQtPmZsYWdzIHw9IFNOX1NDS19JTlNFUlRFRDsKQEAgLTE2NjksNyArMTY2OSw3IEBACiAJCQkJCSAqIFNvbWUgY2FjaGVzIHVuZGVyc3RhbmQgdGhlIGNvcnJlY3QgZm9ybTogJ25vLWNhY2hlPSJzZXQtY29va2llIicsIGJ1dAogCQkJCQkgKiBvdGhlcnMgZG9uJ3QgKGVnOiBhcGFjaGUgPD0gMS4zLjI2KS4gU28gd2UgdXNlICdwcml2YXRlJyBpbnN0ZWFkLgogCQkJCQkgKi8KLQkJCQkJaWYgKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19DT09LX05PQykKKwkJCQkJaWYgKHQtPmJlLT5vcHRpb25zICYgUFJfT19DT09LX05PQykKIAkJCQkJCS8vbGVuICs9IHNwcmludGYobmV3aGRyICsgbGVuLCAiQ2FjaGUtY29udHJvbDogbm8tY2FjaGU9XCJzZXQtY29va2llXCJcclxuIik7CiAJCQkJCQlsZW4gKz0gc3ByaW50Zih0cmFzaCArIGxlbiwgIkNhY2hlLWNvbnRyb2w6IHByaXZhdGVcclxuIik7CiAKQEAgLTE2ODAsMTMgKzE2ODAsMTMgQEAKIAkJCQl9CiAKIAkJCQkvKiBoZWFkZXJzIHRvIGJlIGFkZGVkICovCi0JCQkJZm9yIChsaW5lID0gMDsgbGluZSA8IHQtPnByb3h5LT5uYl9yc3BhZGQ7IGxpbmUrKykgewotCQkJCQlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJXNcclxuIiwgdC0+cHJveHktPnJzcF9hZGRbbGluZV0pOworCQkJCWZvciAobGluZSA9IDA7IGxpbmUgPCB0LT5maS0+bmJfcnNwYWRkOyBsaW5lKyspIHsKKwkJCQkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiVzXHJcbiIsIHQtPmZpLT5yc3BfYWRkW2xpbmVdKTsKIAkJCQkJYnVmZmVyX3JlcGxhY2UyKHJlcCwgcmVwLT5oLCByZXAtPmgsIHRyYXNoLCBsZW4pOwogCQkJCX0KIAogCQkJCS8qIGFkZCBhICJjb25uZWN0aW9uOiBjbG9zZSIgbGluZSBpZiBuZWVkZWQgKi8KLQkJCQlpZiAodC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0hUVFBfQ0xPU0UpCisJCQkJaWYgKHQtPmZlLT5vcHRpb25zICYgUFJfT19IVFRQX0NMT1NFKQogCQkJCQlidWZmZXJfcmVwbGFjZTIocmVwLCByZXAtPmgsIHJlcC0+aCwgIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIsIDE5KTsKIAogCQkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUREFUQTsKQEAgLTE2OTcsMTUgKzE2OTcsMTUgQEAKIAkJCQkgKiB3ZSBjbG9zZSB0aGUgc2VydmVyJ3Mgb3V0Z29pbmcgY29ubmVjdGlvbiByaWdodCBub3cuCiAJCQkJICovCiAJCQkJaWYgKChyZXEtPmwgPT0gMCkgJiYKLQkJCQkgICAgKGMgPT0gQ0xfU1RTSFVUUiB8fCBjID09IENMX1NUQ0xPU0UgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0ZPUkNFX0NMTykpIHsKKwkJCQkgICAgKGMgPT0gQ0xfU1RTSFVUUiB8fCBjID09IENMX1NUQ0xPU0UgfHwgdC0+YmUtPm9wdGlvbnMgJiBQUl9PX0ZPUkNFX0NMTykpIHsKIAkJCQkJTVlfRkRfQ0xSKHQtPnNydl9mZCwgU3RhdGljV3JpdGVFdmVudCk7CiAJCQkJCXR2X2V0ZXJuaXR5KCZyZXEtPndleCk7CiAKIAkJCQkJLyogV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmVhZCBwYXJ0IGlzIHN0aWxsIGFsaXZlIHdoZW4gc3dpdGNoaW5nCiAJCQkJCSAqIHRvIHNodXR3ICovCiAJCQkJCU1ZX0ZEX1NFVCh0LT5zcnZfZmQsIFN0YXRpY1JlYWRFdmVudCk7Ci0JCQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkKLQkJCQkJCXR2X2RlbGF5ZnJvbSgmcmVwLT5yZXgsICZub3csIHQtPnByb3h5LT5zcnZ0aW1lb3V0KTsKKwkJCQkJaWYgKHQtPmJlLT5zcnZ0aW1lb3V0KQorCQkJCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCiAJCQkJCXNodXRkb3duKHQtPnNydl9mZCwgU0hVVF9XUik7CiAJCQkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUU0hVVFc7CkBAIC0xNzEzLDcgKzE3MTMsNyBAQAogCiAJCQkJLyogaWYgdGhlIHVzZXIgd2FudHMgdG8gbG9nIGFzIHNvb24gYXMgcG9zc2libGUsIHdpdGhvdXQgY291bnRpbmcKIAkJCQkgICBieXRlcyBmcm9tIHRoZSBzZXJ2ZXIsIHRoZW4gdGhpcyBpcyB0aGUgcmlnaHQgbW9tZW50LiAqLwotCQkJCWlmICh0LT5wcm94eS0+dG9fbG9nICYmICEodC0+bG9ncy5sb2d3YWl0ICYgTFdfQllURVMpKSB7CisJCQkJaWYgKHQtPmZlLT50b19sb2cgJiYgISh0LT5sb2dzLmxvZ3dhaXQgJiBMV19CWVRFUykpIHsKIAkJCQkJdC0+bG9ncy50X2Nsb3NlID0gdC0+bG9ncy50X2RhdGE7IC8qIHRvIGdldCBhIHZhbGlkIGVuZCBkYXRlICovCiAJCQkJCXQtPmxvZ3MuYnl0ZXMgPSByZXAtPmggLSByZXAtPmRhdGE7CiAJCQkJCXNlc3NfbG9nKHQpOwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIAkJCQkJICogICAgdW5sZXNzIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhcHByb3ByaWF0ZQogCQkJCQkgKiAgICBDYWNoZS1Db250cm9sIG9yIEV4cGlyZXMgaGVhZGVyIGZpZWxkcy4iCiAJCQkJCSAqLwotCQkJCQlpZiAoISh0LT5mbGFncyAmIFNOX1BPU1QpICYmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ0hLX0NBQ0hFKSkKKwkJCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9QT1NUKSAmJiAodC0+YmUtPm9wdGlvbnMgJiBQUl9PX0NIS19DQUNIRSkpCiAJCQkJCQl0LT5mbGFncyB8PSBTTl9DQUNIRUFCTEUgfCBTTl9DQUNIRV9DT09LOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgpAQCAtMTc4MCw3ICsxNzgwLDcgQEAKIAkJCWVsc2UgaWYgKHQtPmxvZ3MubG9nd2FpdCAmIExXX1JTUEhEUikgewogCQkJCXN0cnVjdCBjYXBfaGRyICpoOwogCQkJCWludCBsZW47Ci0JCQkJZm9yIChoID0gdC0+cHJveHktPnJzcF9jYXA7IGg7IGggPSBoLT5uZXh0KSB7CisJCQkJZm9yIChoID0gdC0+ZmktPnJzcF9jYXA7IGg7IGggPSBoLT5uZXh0KSB7CiAJCQkJCWlmICgoaC0+bmFtZWxlbiArIDIgPD0gcHRyIC0gcmVwLT5oKSAmJgogCQkJCQkgICAgKHJlcC0+aFtoLT5uYW1lbGVuXSA9PSAnOicpICYmCiAJCQkJCSAgICAoc3RybmNhc2VjbXAocmVwLT5oLCBoLT5uYW1lLCBoLT5uYW1lbGVuKSA9PSAwKSkgewpAQCAtMTgwMyw3ICsxODAzLDcgQEAKIAogCQkJaWYgKChnbG9iYWwubW9kZSAmIE1PREVfREVCVUcpICYmICghKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkgfHwgKGdsb2JhbC5tb2RlICYgTU9ERV9WRVJCT1NFKSkpIHsKIAkJCQlpbnQgbGVuLCBtYXg7Ci0JCQkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuc3J2aGRyWyUwNHg6JTA0eF06ICIsIHQtPnVuaXFfaWQsIHQtPnByb3h5LT5pZCwgKHVuc2lnbmVkICBzaG9ydCl0LT5jbGlfZmQsICh1bnNpZ25lZCBzaG9ydCl0LT5zcnZfZmQpOworCQkJCWxlbiA9IHNwcmludGYodHJhc2gsICIlMDh4OiVzLnNydmhkclslMDR4OiUwNHhdOiAiLCB0LT51bmlxX2lkLCB0LT5iZS0+aWQsICh1bnNpZ25lZCAgc2hvcnQpdC0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpdC0+c3J2X2ZkKTsKIAkJCQltYXggPSBwdHIgLSByZXAtPmg7CiAJCQkJVUJPVU5EKG1heCwgc2l6ZW9mKHRyYXNoKSAtIGxlbiAtIDEpOwogCQkJCWxlbiArPSBzdHJsY3B5Mih0cmFzaCArIGxlbiwgcmVwLT5oLCBtYXggKyAxKTsKQEAgLTE4MTIsMjAgKzE4MTIsMjAgQEAKIAkJCX0KIAogCQkJLyogcmVtb3ZlICJjb25uZWN0aW9uOiAiIGlmIG5lZWRlZCAqLwotCQkJaWYgKCFkZWxldGVfaGVhZGVyICYmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fSFRUUF9DTE9TRSkKKwkJCWlmICghZGVsZXRlX2hlYWRlciAmJiAodC0+ZmUtPm9wdGlvbnMgJiBQUl9PX0hUVFBfQ0xPU0UpCiAJCQkgICAgJiYgKHN0cm5jYXNlY21wKHJlcC0+aCwgIkNvbm5lY3Rpb246ICIsIDEyKSA9PSAwKSkgewogCQkJCWRlbGV0ZV9oZWFkZXIgPSAxOwogCQkJfQogCiAJCQkvKiB0cnkgaGVhZGVycyByZWdleHBzICovCi0JCQlpZiAoIWRlbGV0ZV9oZWFkZXIgJiYgdC0+cHJveHktPnJzcF9leHAgIT0gTlVMTAorCQkJaWYgKCFkZWxldGVfaGVhZGVyICYmIHQtPmZpLT5yc3BfZXhwICE9IE5VTEwKIAkJCSAgICAmJiAhKHQtPmZsYWdzICYgU05fU1ZERU5ZKSkgewogCQkJCXN0cnVjdCBoZHJfZXhwICpleHA7CiAJCQkJY2hhciB0ZXJtOwogCQkKIAkJCQl0ZXJtID0gKnB0cjsKIAkJCQkqcHRyID0gJ1wwJzsKLQkJCQlleHAgPSB0LT5wcm94eS0+cnNwX2V4cDsKKwkJCQlleHAgPSB0LT5maS0+cnNwX2V4cDsKIAkJCQlkbyB7CiAJCQkJCWlmIChyZWdleGVjKGV4cC0+cHJlZywgcmVwLT5oLCBNQVhfTUFUQ0gsIHBtYXRjaCwgMCkgPT0gMCkgewogCQkJCQkJc3dpdGNoIChleHAtPmFjdGlvbikgewpAQCAtMTg4OSw3ICsxODg5LDcgQEAKIAogCQkJLyogY2hlY2sgZm9yIHNlcnZlciBjb29raWVzICovCiAJCQlpZiAoIWRlbGV0ZV9oZWFkZXIgLyomJiAodC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0NPT0tfQU5ZKSovCi0JCQkgICAgJiYgKHQtPnByb3h5LT5jb29raWVfbmFtZSAhPSBOVUxMIHx8IHQtPnByb3h5LT5jYXB0dXJlX25hbWUgIT0gTlVMTCB8fCB0LT5wcm94eS0+YXBwc2Vzc2lvbl9uYW1lICE9TlVMTCkKKwkJCSAgICAmJiAodC0+YmUtPmNvb2tpZV9uYW1lICE9IE5VTEwgfHwgdC0+ZmktPmNhcHR1cmVfbmFtZSAhPSBOVUxMIHx8IHQtPmJlLT5hcHBzZXNzaW9uX25hbWUgIT1OVUxMKQogCQkJICAgICYmIChzdHJuY2FzZWNtcChyZXAtPmgsICJTZXQtQ29va2llOiAiLCAxMikgPT0gMCkpIHsKIAkJCQljaGFyICpwMSwgKnAyLCAqcDMsICpwNDsKIAkJCkBAIC0xOTI3LDI0ICsxOTI3LDI0IEBACiAJCQkJCSAqLwogCiAJCQkJCS8qIGZpcnN0LCBsZXQncyBzZWUgaWYgd2Ugd2FudCB0byBjYXB0dXJlIGl0ICovCi0JCQkJCWlmICh0LT5wcm94eS0+Y2FwdHVyZV9uYW1lICE9IE5VTEwgJiYKKwkJCQkJaWYgKHQtPmZpLT5jYXB0dXJlX25hbWUgIT0gTlVMTCAmJgogCQkJCQkgICAgdC0+bG9ncy5zcnZfY29va2llID09IE5VTEwgJiYKLQkJCQkJICAgIChwNCAtIHAxID49IHQtPnByb3h5LT5jYXB0dXJlX25hbWVsZW4pICYmCi0JCQkJCSAgICBtZW1jbXAocDEsIHQtPnByb3h5LT5jYXB0dXJlX25hbWUsIHQtPnByb3h5LT5jYXB0dXJlX25hbWVsZW4pID09IDApIHsKKwkJCQkJICAgIChwNCAtIHAxID49IHQtPmZpLT5jYXB0dXJlX25hbWVsZW4pICYmCisJCQkJCSAgICBtZW1jbXAocDEsIHQtPmZpLT5jYXB0dXJlX25hbWUsIHQtPmZpLT5jYXB0dXJlX25hbWVsZW4pID09IDApIHsKIAkJCQkJCWludCBsb2dfbGVuID0gcDQgLSBwMTsKIAogCQkJCQkJaWYgKCh0LT5sb2dzLnNydl9jb29raWUgPSBwb29sX2FsbG9jKGNhcHR1cmUpKSA9PSBOVUxMKSB7CiAJCQkJCQkJQWxlcnQoIkhUVFAgbG9nZ2luZyA6IG91dCBvZiBtZW1vcnkuXG4iKTsKIAkJCQkJCX0KIAotCQkJCQkJaWYgKGxvZ19sZW4gPiB0LT5wcm94eS0+Y2FwdHVyZV9sZW4pCi0JCQkJCQkJbG9nX2xlbiA9IHQtPnByb3h5LT5jYXB0dXJlX2xlbjsKKwkJCQkJCWlmIChsb2dfbGVuID4gdC0+ZmktPmNhcHR1cmVfbGVuKQorCQkJCQkJCWxvZ19sZW4gPSB0LT5maS0+Y2FwdHVyZV9sZW47CiAJCQkJCQltZW1jcHkodC0+bG9ncy5zcnZfY29va2llLCBwMSwgbG9nX2xlbik7CiAJCQkJCQl0LT5sb2dzLnNydl9jb29raWVbbG9nX2xlbl0gPSAwOwogCQkJCQl9CiAKLQkJCQkJaWYgKChwMiAtIHAxID09IHQtPnByb3h5LT5jb29raWVfbGVuKSAmJiAodC0+cHJveHktPmNvb2tpZV9uYW1lICE9IE5VTEwpICYmCi0JCQkJCSAgICAobWVtY21wKHAxLCB0LT5wcm94eS0+Y29va2llX25hbWUsIHAyIC0gcDEpID09IDApKSB7CisJCQkJCWlmICgocDIgLSBwMSA9PSB0LT5iZS0+Y29va2llX2xlbikgJiYgKHQtPmJlLT5jb29raWVfbmFtZSAhPSBOVUxMKSAmJgorCQkJCQkgICAgKG1lbWNtcChwMSwgdC0+YmUtPmNvb2tpZV9uYW1lLCBwMiAtIHAxKSA9PSAwKSkgewogCQkJCQkJLyogQ29vbC4uLiBpdCdzIHRoZSByaWdodCBvbmUgKi8KIAkJCQkJCXQtPmZsYWdzIHw9IFNOX1NDS19TRUVOOwogCQkJCkBAIC0xOTUyLDIwICsxOTUyLDIwIEBACiAJCQkJCQkgKiB0aGlzIG9jY3VycmVuY2UgYmVjYXVzZSB3ZSdsbCBpbnNlcnQgYW5vdGhlciBvbmUgbGF0ZXIuCiAJCQkJCQkgKiBXZSdsbCBkZWxldGUgaXQgdG9vIGlmIHRoZSAiaW5kaXJlY3QiIG9wdGlvbiBpcyBzZXQgYW5kIHdlJ3JlIGluCiAJCQkJCQkgKiBhIGRpcmVjdCBhY2Nlc3MuICovCi0JCQkJCQlpZiAoKCh0LT5zcnYpICYmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19JTlMpKSB8fAotCQkJCQkJICAgICgodC0+ZmxhZ3MgJiBTTl9ESVJFQ1QpICYmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19JTkQpKSkgeworCQkJCQkJaWYgKCgodC0+c3J2KSAmJiAodC0+YmUtPm9wdGlvbnMgJiBQUl9PX0NPT0tfSU5TKSkgfHwKKwkJCQkJCSAgICAoKHQtPmZsYWdzICYgU05fRElSRUNUKSAmJiAodC0+YmUtPm9wdGlvbnMgJiBQUl9PX0NPT0tfSU5EKSkpIHsKIAkJCQkJCQkvKiB0aGlzIGhlYWRlciBtdXN0IGJlIGRlbGV0ZWQgKi8KIAkJCQkJCQlkZWxldGVfaGVhZGVyID0gMTsKIAkJCQkJCQl0LT5mbGFncyB8PSBTTl9TQ0tfREVMRVRFRDsKIAkJCQkJCX0KLQkJCQkJCWVsc2UgaWYgKCh0LT5zcnYpICYmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19SVykpIHsKKwkJCQkJCWVsc2UgaWYgKCh0LT5zcnYpICYmICh0LT5iZS0+b3B0aW9ucyAmIFBSX09fQ09PS19SVykpIHsKIAkJCQkJCQkvKiByZXBsYWNlIGJ5dGVzIHAzLT5wNCB3aXRoIHRoZSBjb29raWUgbmFtZSBhc3NvY2lhdGVkCiAJCQkJCQkJICogd2l0aCB0aGlzIHNlcnZlciBzaW5jZSB3ZSBrbm93IGl0LgogCQkJCQkJCSAqLwogCQkJCQkJCWJ1ZmZlcl9yZXBsYWNlMihyZXAsIHAzLCBwNCwgdC0+c3J2LT5jb29raWUsIHQtPnNydi0+Y2tsZW4pOwogCQkJCQkJCXQtPmZsYWdzIHw9IFNOX1NDS19JTlNFUlRFRCB8IFNOX1NDS19ERUxFVEVEOwogCQkJCQkJfQotCQkJCQkJZWxzZSBpZiAoKHQtPnNydikgJiYgKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19DT09LX1BGWCkpIHsKKwkJCQkJCWVsc2UgaWYgKCh0LT5zcnYpICYmICh0LT5iZS0+b3B0aW9ucyAmIFBSX09fQ09PS19QRlgpKSB7CiAJCQkJCQkJLyogaW5zZXJ0IHRoZSBjb29raWUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXJ2ZXIKIAkJCQkJCQkgKiBiZWZvcmUgZXhpc3RpbmcgY29va2llLCBhbmQgaW5zZXJ0IGEgZGVsaW1pdG9yIGJldHdlZW4gdGhlbS4uCiAJCQkJCQkJICovCkBAIC0xOTc3LDggKzE5NzcsOCBAQAogCQkJCQl9CiAKIAkJCQkJLyogZmlyc3QsIGxldCdzIHNlZSBpZiB0aGUgY29va2llIGlzIG91ciBhcHBjb29raWUqLwotCQkJCQlpZiAoKHQtPnByb3h5LT5hcHBzZXNzaW9uX25hbWUgIT0gTlVMTCkgJiYKLQkJCQkJICAgIChtZW1jbXAocDEsIHQtPnByb3h5LT5hcHBzZXNzaW9uX25hbWUsIHAyIC0gcDEpID09IDApKSB7CisJCQkJCWlmICgodC0+YmUtPmFwcHNlc3Npb25fbmFtZSAhPSBOVUxMKSAmJgorCQkJCQkgICAgKG1lbWNtcChwMSwgdC0+YmUtPmFwcHNlc3Npb25fbmFtZSwgcDIgLSBwMSkgPT0gMCkpIHsKIAogCQkJCQkJLyogQ29vbC4uLiBpdCdzIHRoZSByaWdodCBvbmUgKi8KIApAQCAtMTk4NywyMiArMTk4NywyMiBAQAogCQkgICAgICAKIAkJCQkJCWlmICgoYXNlc3Npb25fdGVtcC0+c2Vzc2lkID0gcG9vbF9hbGxvY19mcm9tKGFwb29scy5zZXNzaWQsIGFwb29scy5zZXNfbXNpemUpKSA9PSBOVUxMKSB7CiAJCQkJCQkJQWxlcnQoIk5vdCBlbm91Z2h0IE1lbW9yeSBwcm9jZXNzX3NydigpOmFzZXNzaW9uLT5zZXNzaWQ6bWFsbG9jKCkuXG4iKTsKLQkJCQkJCQlzZW5kX2xvZyh0LT5wcm94eSwgTE9HX0FMRVJULCAiTm90IGVub3VnaHQgTWVtb3J5IHByb2Nlc3Nfc3J2KCk6YXNlc3Npb24tPnNlc3NpZDptYWxsb2MoKS5cbiIpOworCQkJCQkJCXNlbmRfbG9nKHQtPmJlLCBMT0dfQUxFUlQsICJOb3QgZW5vdWdodCBNZW1vcnkgcHJvY2Vzc19zcnYoKTphc2Vzc2lvbi0+c2Vzc2lkOm1hbGxvYygpLlxuIik7CiAJCQkJCQl9Ci0JCQkJCQltZW1jcHkoYXNlc3Npb25fdGVtcC0+c2Vzc2lkLCBwMywgdC0+cHJveHktPmFwcHNlc3Npb25fbGVuKTsKLQkJCQkJCWFzZXNzaW9uX3RlbXAtPnNlc3NpZFt0LT5wcm94eS0+YXBwc2Vzc2lvbl9sZW5dID0gMDsKKwkJCQkJCW1lbWNweShhc2Vzc2lvbl90ZW1wLT5zZXNzaWQsIHAzLCB0LT5iZS0+YXBwc2Vzc2lvbl9sZW4pOworCQkJCQkJYXNlc3Npb25fdGVtcC0+c2Vzc2lkW3QtPmJlLT5hcHBzZXNzaW9uX2xlbl0gPSAwOwogCQkJCQkJYXNlc3Npb25fdGVtcC0+c2VydmVyaWQgPSBOVUxMOwogCiAJCQkJCQkvKiBvbmx5IGRvIGluc2VydCwgaWYgbG9va3VwIGZhaWxzICovCi0JCQkJCQlpZiAoY2h0YmxfbG9va3VwKCYodC0+cHJveHktPmh0YmxfcHJveHkpLCAodm9pZCAqKSAmYXNlc3Npb25fdGVtcCkgIT0gMCkgeworCQkJCQkJaWYgKGNodGJsX2xvb2t1cCgmKHQtPmJlLT5odGJsX3Byb3h5KSwgKHZvaWQgKikgJmFzZXNzaW9uX3RlbXApICE9IDApIHsKIAkJCQkJCQlpZiAoKGFzZXNzaW9uX3RlbXAgPSBwb29sX2FsbG9jKGFwcHNlc3MpKSA9PSBOVUxMKSB7CiAJCQkJCQkJCUFsZXJ0KCJOb3QgZW5vdWdodCBNZW1vcnkgcHJvY2Vzc19zcnYoKTphc2Vzc2lvbjpjYWxsb2MoKS5cbiIpOwotCQkJCQkJCQlzZW5kX2xvZyh0LT5wcm94eSwgTE9HX0FMRVJULCAiTm90IGVub3VnaHQgTWVtb3J5IHByb2Nlc3Nfc3J2KCk6YXNlc3Npb246Y2FsbG9jKCkuXG4iKTsKKwkJCQkJCQkJc2VuZF9sb2codC0+YmUsIExPR19BTEVSVCwgIk5vdCBlbm91Z2h0IE1lbW9yeSBwcm9jZXNzX3NydigpOmFzZXNzaW9uOmNhbGxvYygpLlxuIik7CiAJCQkJCQkJCXJldHVybiAwOwogCQkJCQkJCX0KIAkJCQkJCQlhc2Vzc2lvbl90ZW1wLT5zZXNzaWQgPSBsb2NhbF9hc2Vzc2lvbi5zZXNzaWQ7CiAJCQkJCQkJYXNlc3Npb25fdGVtcC0+c2VydmVyaWQgPSBsb2NhbF9hc2Vzc2lvbi5zZXJ2ZXJpZDsKLQkJCQkJCQljaHRibF9pbnNlcnQoJih0LT5wcm94eS0+aHRibF9wcm94eSksICh2b2lkICopIGFzZXNzaW9uX3RlbXApOworCQkJCQkJCWNodGJsX2luc2VydCgmKHQtPmJlLT5odGJsX3Byb3h5KSwgKHZvaWQgKikgYXNlc3Npb25fdGVtcCk7CiAJCQkJCQl9LyogZW5kIGlmIChjaHRibF9sb29rdXAoKSkgKi8KIAkJCQkJCWVsc2UgewogCQkJCQkJCS8qIGZyZWUgd2FzdGVkIG1lbW9yeSAqLwpAQCAtMjAxMiw3ICsyMDEyLDcgQEAKIAkJCQkJCWlmIChhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZCA9PSBOVUxMKSB7CiAJCQkJCQkJaWYgKChhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZCA9IHBvb2xfYWxsb2NfZnJvbShhcG9vbHMuc2VydmVyaWQsIGFwb29scy5zZXJfbXNpemUpKSA9PSBOVUxMKSB7CiAJCQkJCQkJCUFsZXJ0KCJOb3QgZW5vdWdodCBNZW1vcnkgcHJvY2Vzc19zcnYoKTphc2Vzc2lvbi0+c2Vzc2lkOm1hbGxvYygpLlxuIik7Ci0JCQkJCQkJCXNlbmRfbG9nKHQtPnByb3h5LCBMT0dfQUxFUlQsICJOb3QgZW5vdWdodCBNZW1vcnkgcHJvY2Vzc19zcnYoKTphc2Vzc2lvbi0+c2Vzc2lkOm1hbGxvYygpLlxuIik7CisJCQkJCQkJCXNlbmRfbG9nKHQtPmJlLCBMT0dfQUxFUlQsICJOb3QgZW5vdWdodCBNZW1vcnkgcHJvY2Vzc19zcnYoKTphc2Vzc2lvbi0+c2Vzc2lkOm1hbGxvYygpLlxuIik7CiAJCQkJCQkJfQogCQkJCQkJCWFzZXNzaW9uX3RlbXAtPnNlcnZlcmlkWzBdID0gJ1wwJzsKIAkJCQkJCX0KQEAgLTIwMjAsMTAgKzIwMjAsMTAgQEAKIAkJCQkJCWlmIChhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZFswXSA9PSAnXDAnKQogCQkJCQkJCW1lbWNweShhc2Vzc2lvbl90ZW1wLT5zZXJ2ZXJpZCx0LT5zcnYtPmlkLHNlcnZlcl9pZF9sZW4pOwogCQkgICAgICAKLQkJCQkJCXR2X2RlbGF5ZnJvbSgmYXNlc3Npb25fdGVtcC0+ZXhwaXJlLCAmbm93LCB0LT5wcm94eS0+YXBwc2Vzc2lvbl90aW1lb3V0KTsKKwkJCQkJCXR2X2RlbGF5ZnJvbSgmYXNlc3Npb25fdGVtcC0+ZXhwaXJlLCAmbm93LCB0LT5iZS0+YXBwc2Vzc2lvbl90aW1lb3V0KTsKIAogI2lmIGRlZmluZWQoREVCVUdfSEFTSCkKLQkJCQkJCXByaW50X3RhYmxlKCYodC0+cHJveHktPmh0YmxfcHJveHkpKTsKKwkJCQkJCXByaW50X3RhYmxlKCYodC0+YmUtPmh0YmxfcHJveHkpKTsKICNlbmRpZgogCQkJCQkJYnJlYWs7CiAJCQkJCX0vKiBlbmQgaWYgKCh0LT5wcm94eS0+YXBwc2Vzc2lvbl9uYW1lICE9IE5VTEwpIC4uLiAqLwpAQCAtMjA0MCw3ICsyMDQwLDcgQEAKIAogCQkJLyogY2hlY2sgZm9yIGFueSBzZXQtY29va2llIGluIGNhc2Ugd2UgY2hlY2sgZm9yIGNhY2hlYWJpbGl0eSAqLwogCQkJaWYgKCFkZWxldGVfaGVhZGVyICYmICEodC0+ZmxhZ3MgJiBTTl9TQ0tfQU5ZKSAmJgotCQkJICAgICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ0hLX0NBQ0hFKSAmJgorCQkJICAgICh0LT5iZS0+b3B0aW9ucyAmIFBSX09fQ0hLX0NBQ0hFKSAmJgogCQkJICAgIChzdHJuY2FzZWNtcChyZXAtPmgsICJTZXQtQ29va2llOiAiLCAxMikgPT0gMCkpIHsKIAkJCQl0LT5mbGFncyB8PSBTTl9TQ0tfQU5ZOwogCQkJfQpAQCAtMjA2MCw4ICsyMDYwLDggQEAKIAkJCSAqIHJlcC0+bCA9PSBybGltLWRhdGEKIAkJCSAqLwogCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkKLQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpCisJCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCQkJZWxzZQogCQkJCXR2X2V0ZXJuaXR5KCZyZXAtPnJleCk7CiAJCX0KQEAgLTIwNzUsMTEgKzIwNzUsMTEgQEAKIAkJCQl0LT5zcnYtPmN1cl9zZXNzLS07CiAJCQkJdC0+c3J2LT5mYWlsZWRfcmVzcCsrOwogCQkJfQotCQkJdC0+cHJveHktPmZhaWxlZF9yZXNwKys7CisJCQl0LT5iZS0+ZmFpbGVkX3Jlc3ArKzsKIAogCQkJdC0+c3J2X3N0YXRlID0gU1ZfU1RDTE9TRTsKIAkJCXQtPmxvZ3Muc3RhdHVzID0gNTAyOwotCQkJY2xpZW50X3JldHVybih0LCB0LT5wcm94eS0+ZXJybXNnLmxlbjUwMiwgdC0+cHJveHktPmVycm1zZy5tc2c1MDIpOworCQkJY2xpZW50X3JldHVybih0LCB0LT5mZS0+ZXJybXNnLmxlbjUwMiwgdC0+ZmUtPmVycm1zZy5tc2c1MDIpOwogCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9FUlJfTUFTSykpCiAJCQkJdC0+ZmxhZ3MgfD0gU05fRVJSX1NSVkNMOwogCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9GSU5TVF9NQVNLKSkKQEAgLTIwODcsNyArMjA4Nyw3IEBACiAJCQkvKiBXZSB1c2VkIHRvIGhhdmUgYSBmcmVlIGNvbm5lY3Rpb24gc2xvdC4gU2luY2Ugd2UnbGwgbmV2ZXIgdXNlIGl0LAogCQkJICogd2UgaGF2ZSB0byBpbmZvcm0gdGhlIHNlcnZlciB0aGF0IGl0IG1heSBiZSB1c2VkIGJ5IGFub3RoZXIgc2Vzc2lvbi4KIAkJCSAqLwotCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+YmUpKQogCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQlyZXR1cm4gMTsKQEAgLTIxMTQsMTAgKzIxMTQsMTAgQEAKIAkJCQl0LT5zcnYtPmN1cl9zZXNzLS07CiAJCQkJdC0+c3J2LT5mYWlsZWRfcmVzcCsrOwogCQkJfQotCQkJdC0+cHJveHktPmZhaWxlZF9yZXNwKys7CisJCQl0LT5iZS0+ZmFpbGVkX3Jlc3ArKzsKIAkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7CiAJCQl0LT5sb2dzLnN0YXR1cyA9IDUwNDsKLQkJCWNsaWVudF9yZXR1cm4odCwgdC0+cHJveHktPmVycm1zZy5sZW41MDQsIHQtPnByb3h5LT5lcnJtc2cubXNnNTA0KTsKKwkJCWNsaWVudF9yZXR1cm4odCwgdC0+ZmUtPmVycm1zZy5sZW41MDQsIHQtPmZlLT5lcnJtc2cubXNnNTA0KTsKIAkJCWlmICghKHQtPmZsYWdzICYgU05fRVJSX01BU0spKQogCQkJCXQtPmZsYWdzIHw9IFNOX0VSUl9TUlZUTzsKIAkJCWlmICghKHQtPmZsYWdzICYgU05fRklOU1RfTUFTSykpCkBAIC0yMTI1LDcgKzIxMjUsNyBAQAogCQkJLyogV2UgdXNlZCB0byBoYXZlIGEgZnJlZSBjb25uZWN0aW9uIHNsb3QuIFNpbmNlIHdlJ2xsIG5ldmVyIHVzZSBpdCwKIAkJCSAqIHdlIGhhdmUgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgdGhhdCBpdCBtYXkgYmUgdXNlZCBieSBhbm90aGVyIHNlc3Npb24uCiAJCQkgKi8KLQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPnByb3h5KSkKKwkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCQl0YXNrX3dha2V1cCgmcnEsIHQtPnNydi0+cXVldWVfbWd0KTsKIAogCQkJcmV0dXJuIDE7CkBAIC0yMTQ1LDggKzIxNDUsOCBAQAogCQkJLyogV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmVhZCBwYXJ0IGlzIHN0aWxsIGFsaXZlIHdoZW4gc3dpdGNoaW5nCiAJCQkgKiB0byBzaHV0dyAqLwogCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkKLQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpCisJCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCiAJCQlzaHV0ZG93bih0LT5zcnZfZmQsIFNIVVRfV1IpOwogCQkJdC0+c3J2X3N0YXRlID0gU1ZfU1RTSFVUVzsKQEAgLTIxNjQsMTQgKzIxNjQsMTQgQEAKIAkJCS8qIFdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHJlYWQgcGFydCBpcyBzdGlsbCBhbGl2ZSB3aGVuIHN3aXRjaGluZwogCQkJICogdG8gc2h1dHcgKi8KIAkJCU1ZX0ZEX1NFVCh0LT5zcnZfZmQsIFN0YXRpY1JlYWRFdmVudCk7Ci0JCQlpZiAodC0+cHJveHktPnNydnRpbWVvdXQpCi0JCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+cHJveHktPnNydnRpbWVvdXQpOworCQkJaWYgKHQtPmJlLT5zcnZ0aW1lb3V0KQorCQkJCXR2X2RlbGF5ZnJvbSgmcmVwLT5yZXgsICZub3csIHQtPmJlLT5zcnZ0aW1lb3V0KTsKIAogCQkJLyogV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmVhZCBwYXJ0IGlzIHN0aWxsIGFsaXZlIHdoZW4gc3dpdGNoaW5nCiAJCQkgKiB0byBzaHV0dyAqLwogCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkKLQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpCisJCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCiAJCQl0LT5zcnZfc3RhdGUgPSBTVl9TVFNIVVRXOwogCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9FUlJfTUFTSykpCkBAIC0yMTkwLDggKzIxOTAsOCBAQAogCQllbHNlIHsgLyogY2xpZW50IGJ1ZmZlciBub3QgZW1wdHkgKi8KIAkJCWlmICghIE1ZX0ZEX0lTU0VUKHQtPnNydl9mZCwgU3RhdGljV3JpdGVFdmVudCkpIHsKIAkJCQlNWV9GRF9TRVQodC0+c3J2X2ZkLCBTdGF0aWNXcml0ZUV2ZW50KTsgLyogcmVzdGFydCB3cml0aW5nICovCi0JCQkJaWYgKHQtPnByb3h5LT5zcnZ0aW1lb3V0KSB7Ci0JCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT53ZXgsICZub3csIHQtPnByb3h5LT5zcnZ0aW1lb3V0KTsKKwkJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpIHsKKwkJCQkJdHZfZGVsYXlmcm9tKCZyZXEtPndleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCQkJCQkvKiBGSVhNRTogdG8gcHJldmVudCB0aGUgc2VydmVyIGZyb20gZXhwaXJpbmcgcmVhZCB0aW1lb3V0cyBkdXJpbmcgd3JpdGVzLAogCQkJCQkgKiB3ZSByZWZyZXNoIGl0LiAqLwogCQkJCQlyZXAtPnJleCA9IHJlcS0+d2V4OwpAQCAtMjIxOSw3ICsyMjE5LDcgQEAKIAkJCQl0LT5zcnYtPmN1cl9zZXNzLS07CiAJCQkJdC0+c3J2LT5mYWlsZWRfcmVzcCsrOwogCQkJfQotCQkJdC0+cHJveHktPmZhaWxlZF9yZXNwKys7CisJCQl0LT5iZS0+ZmFpbGVkX3Jlc3ArKzsKIAkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7CiAJCQlpZiAoISh0LT5mbGFncyAmIFNOX0VSUl9NQVNLKSkKIAkJCQl0LT5mbGFncyB8PSBTTl9FUlJfU1JWQ0w7CkBAIC0yMjI4LDcgKzIyMjgsNyBAQAogCQkJLyogV2UgdXNlZCB0byBoYXZlIGEgZnJlZSBjb25uZWN0aW9uIHNsb3QuIFNpbmNlIHdlJ2xsIG5ldmVyIHVzZSBpdCwKIAkJCSAqIHdlIGhhdmUgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgdGhhdCBpdCBtYXkgYmUgdXNlZCBieSBhbm90aGVyIHNlc3Npb24uCiAJCQkgKi8KLQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPnByb3h5KSkKKwkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCQl0YXNrX3dha2V1cCgmcnEsIHQtPnNydi0+cXVldWVfbWd0KTsKIAogCQkJcmV0dXJuIDE7CkBAIC0yMjUwLDggKzIyNTAsOCBAQAogCQkJLyogV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmVhZCBwYXJ0IGlzIHN0aWxsIGFsaXZlIHdoZW4gc3dpdGNoaW5nCiAJCQkgKiB0byBzaHV0dyAqLwogCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkKLQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpCisJCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCiAJCQl0LT5zcnZfc3RhdGUgPSBTVl9TVFNIVVRXOwogCQkJcmV0dXJuIDE7CkBAIC0yMjc2LDggKzIyNzYsOCBAQAogCQkJLyogV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmVhZCBwYXJ0IGlzIHN0aWxsIGFsaXZlIHdoZW4gc3dpdGNoaW5nCiAJCQkgKiB0byBzaHV0dyAqLwogCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KTsKLQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkKLQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQlpZiAodC0+YmUtPnNydnRpbWVvdXQpCisJCQkJdHZfZGVsYXlmcm9tKCZyZXAtPnJleCwgJm5vdywgdC0+YmUtPnNydnRpbWVvdXQpOwogCQkJdC0+c3J2X3N0YXRlID0gU1ZfU1RTSFVUVzsKIAkJCWlmICghKHQtPmZsYWdzICYgU05fRVJSX01BU0spKQogCQkJCXQtPmZsYWdzIHw9IFNOX0VSUl9TUlZUTzsKQEAgLTIyOTYsOCArMjI5Niw4IEBACiAJCWVsc2UgeyAvKiBidWZmZXIgbm90IGVtcHR5LCB0aGVyZSBhcmUgc3RpbGwgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCAqLwogCQkJaWYgKCEgTVlfRkRfSVNTRVQodC0+c3J2X2ZkLCBTdGF0aWNXcml0ZUV2ZW50KSkgewogCQkJCU1ZX0ZEX1NFVCh0LT5zcnZfZmQsIFN0YXRpY1dyaXRlRXZlbnQpOyAvKiByZXN0YXJ0IHdyaXRpbmcgKi8KLQkJCQlpZiAodC0+cHJveHktPnNydnRpbWVvdXQpIHsKLQkJCQkJdHZfZGVsYXlmcm9tKCZyZXEtPndleCwgJm5vdywgdC0+cHJveHktPnNydnRpbWVvdXQpOworCQkJCWlmICh0LT5iZS0+c3J2dGltZW91dCkgeworCQkJCQl0dl9kZWxheWZyb20oJnJlcS0+d2V4LCAmbm93LCB0LT5iZS0+c3J2dGltZW91dCk7CiAJCQkJCS8qIEZJWE1FOiB0byBwcmV2ZW50IHRoZSBzZXJ2ZXIgZnJvbSBleHBpcmluZyByZWFkIHRpbWVvdXRzIGR1cmluZyB3cml0ZXMsCiAJCQkJCSAqIHdlIHJlZnJlc2ggaXQuICovCiAJCQkJCXJlcC0+cmV4ID0gcmVxLT53ZXg7CkBAIC0yMzE3LDggKzIzMTcsOCBAQAogCQllbHNlIHsKIAkJCWlmICghIE1ZX0ZEX0lTU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KSkgewogCQkJCU1ZX0ZEX1NFVCh0LT5zcnZfZmQsIFN0YXRpY1JlYWRFdmVudCk7Ci0JCQkJaWYgKHQtPnByb3h5LT5zcnZ0aW1lb3V0KQotCQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQkJaWYgKHQtPmJlLT5zcnZ0aW1lb3V0KQorCQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5iZS0+c3J2dGltZW91dCk7CiAJCQkJZWxzZQogCQkJCQl0dl9ldGVybml0eSgmcmVwLT5yZXgpOwogCQkJfQpAQCAtMjMzNSw3ICsyMzM1LDcgQEAKIAkJCQl0LT5zcnYtPmN1cl9zZXNzLS07CiAJCQkJdC0+c3J2LT5mYWlsZWRfcmVzcCsrOwogCQkJfQotCQkJdC0+cHJveHktPmZhaWxlZF9yZXNwKys7CisJCQl0LT5iZS0+ZmFpbGVkX3Jlc3ArKzsKIAkJCS8vY2xvc2UodC0+c3J2X2ZkKTsKIAkJCXQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7CiAJCQlpZiAoISh0LT5mbGFncyAmIFNOX0VSUl9NQVNLKSkKQEAgLTIzNDUsNyArMjM0NSw3IEBACiAJCQkvKiBXZSB1c2VkIHRvIGhhdmUgYSBmcmVlIGNvbm5lY3Rpb24gc2xvdC4gU2luY2Ugd2UnbGwgbmV2ZXIgdXNlIGl0LAogCQkJICogd2UgaGF2ZSB0byBpbmZvcm0gdGhlIHNlcnZlciB0aGF0IGl0IG1heSBiZSB1c2VkIGJ5IGFub3RoZXIgc2Vzc2lvbi4KIAkJCSAqLwotCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+YmUpKQogCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQlyZXR1cm4gMTsKQEAgLTIzNjEsNyArMjM2MSw3IEBACiAJCQkvKiBXZSB1c2VkIHRvIGhhdmUgYSBmcmVlIGNvbm5lY3Rpb24gc2xvdC4gU2luY2Ugd2UnbGwgbmV2ZXIgdXNlIGl0LAogCQkJICogd2UgaGF2ZSB0byBpbmZvcm0gdGhlIHNlcnZlciB0aGF0IGl0IG1heSBiZSB1c2VkIGJ5IGFub3RoZXIgc2Vzc2lvbi4KIAkJCSAqLwotCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+YmUpKQogCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQlyZXR1cm4gMTsKQEAgLTIzODEsNyArMjM4MSw3IEBACiAJCQkvKiBXZSB1c2VkIHRvIGhhdmUgYSBmcmVlIGNvbm5lY3Rpb24gc2xvdC4gU2luY2Ugd2UnbGwgbmV2ZXIgdXNlIGl0LAogCQkJICogd2UgaGF2ZSB0byBpbmZvcm0gdGhlIHNlcnZlciB0aGF0IGl0IG1heSBiZSB1c2VkIGJ5IGFub3RoZXIgc2Vzc2lvbi4KIAkJCSAqLwotCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+cHJveHkpKQorCQkJaWYgKG1heV9kZXF1ZXVlX3Rhc2tzKHQtPnNydiwgdC0+YmUpKQogCQkJCXRhc2tfd2FrZXVwKCZycSwgdC0+c3J2LT5xdWV1ZV9tZ3QpOwogCiAJCQlyZXR1cm4gMTsKQEAgLTIzOTUsOCArMjM5NSw4IEBACiAJCWVsc2UgeyAvKiBidWZmZXIgbm90IGVtcHR5ICovCiAJCQlpZiAoISBNWV9GRF9JU1NFVCh0LT5zcnZfZmQsIFN0YXRpY1dyaXRlRXZlbnQpKSB7CiAJCQkJTVlfRkRfU0VUKHQtPnNydl9mZCwgU3RhdGljV3JpdGVFdmVudCk7IC8qIHJlc3RhcnQgd3JpdGluZyAqLwotCQkJCWlmICh0LT5wcm94eS0+c3J2dGltZW91dCkgewotCQkJCQl0dl9kZWxheWZyb20oJnJlcS0+d2V4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQkJaWYgKHQtPmJlLT5zcnZ0aW1lb3V0KSB7CisJCQkJCXR2X2RlbGF5ZnJvbSgmcmVxLT53ZXgsICZub3csIHQtPmJlLT5zcnZ0aW1lb3V0KTsKIAkJCQkJLyogRklYTUU6IHRvIHByZXZlbnQgdGhlIHNlcnZlciBmcm9tIGV4cGlyaW5nIHJlYWQgdGltZW91dHMgZHVyaW5nIHdyaXRlcywKIAkJCQkJICogd2UgcmVmcmVzaCBpdC4gKi8KIAkJCQkJcmVwLT5yZXggPSByZXEtPndleDsKQEAgLTI0MTYsNyArMjQxNiw3IEBACiAJCQkJdC0+c3J2LT5jdXJfc2Vzcy0tOwogCQkJCXQtPnNydi0+ZmFpbGVkX3Jlc3ArKzsKIAkJCX0KLQkJCXQtPnByb3h5LT5mYWlsZWRfcmVzcCsrOworCQkJdC0+YmUtPmZhaWxlZF9yZXNwKys7CiAJCQkvL2Nsb3NlKHQtPnNydl9mZCk7CiAJCQl0LT5zcnZfc3RhdGUgPSBTVl9TVENMT1NFOwogCQkJaWYgKCEodC0+ZmxhZ3MgJiBTTl9FUlJfTUFTSykpCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCQkJLyogV2UgdXNlZCB0byBoYXZlIGEgZnJlZSBjb25uZWN0aW9uIHNsb3QuIFNpbmNlIHdlJ2xsIG5ldmVyIHVzZSBpdCwKIAkJCSAqIHdlIGhhdmUgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgdGhhdCBpdCBtYXkgYmUgdXNlZCBieSBhbm90aGVyIHNlc3Npb24uCiAJCQkgKi8KLQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPnByb3h5KSkKKwkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCQl0YXNrX3dha2V1cCgmcnEsIHQtPnNydi0+cXVldWVfbWd0KTsKIAogCQkJcmV0dXJuIDE7CkBAIC0yNDQyLDcgKzI0NDIsNyBAQAogCQkJLyogV2UgdXNlZCB0byBoYXZlIGEgZnJlZSBjb25uZWN0aW9uIHNsb3QuIFNpbmNlIHdlJ2xsIG5ldmVyIHVzZSBpdCwKIAkJCSAqIHdlIGhhdmUgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgdGhhdCBpdCBtYXkgYmUgdXNlZCBieSBhbm90aGVyIHNlc3Npb24uCiAJCQkgKi8KLQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPnByb3h5KSkKKwkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCQl0YXNrX3dha2V1cCgmcnEsIHQtPnNydi0+cXVldWVfbWd0KTsKIAogCQkJcmV0dXJuIDE7CkBAIC0yNDYyLDcgKzI0NjIsNyBAQAogCQkJLyogV2UgdXNlZCB0byBoYXZlIGEgZnJlZSBjb25uZWN0aW9uIHNsb3QuIFNpbmNlIHdlJ2xsIG5ldmVyIHVzZSBpdCwKIAkJCSAqIHdlIGhhdmUgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgdGhhdCBpdCBtYXkgYmUgdXNlZCBieSBhbm90aGVyIHNlc3Npb24uCiAJCQkgKi8KLQkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPnByb3h5KSkKKwkJCWlmIChtYXlfZGVxdWV1ZV90YXNrcyh0LT5zcnYsIHQtPmJlKSkKIAkJCQl0YXNrX3dha2V1cCgmcnEsIHQtPnNydi0+cXVldWVfbWd0KTsKIAogCQkJcmV0dXJuIDE7CkBAIC0yNDc2LDggKzI0NzYsOCBAQAogCQllbHNlIHsKIAkJCWlmICghIE1ZX0ZEX0lTU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KSkgewogCQkJCU1ZX0ZEX1NFVCh0LT5zcnZfZmQsIFN0YXRpY1JlYWRFdmVudCk7Ci0JCQkJaWYgKHQtPnByb3h5LT5zcnZ0aW1lb3V0KQotCQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5wcm94eS0+c3J2dGltZW91dCk7CisJCQkJaWYgKHQtPmJlLT5zcnZ0aW1lb3V0KQorCQkJCQl0dl9kZWxheWZyb20oJnJlcC0+cmV4LCAmbm93LCB0LT5iZS0+c3J2dGltZW91dCk7CiAJCQkJZWxzZQogCQkJCQl0dl9ldGVybml0eSgmcmVwLT5yZXgpOwogCQkJfQpAQCAtMjQ4Nyw3ICsyNDg3LDcgQEAKIAllbHNlIHsgLyogU1ZfU1RDTE9TRSA6IG5vdGhpbmcgdG8gZG8gKi8KIAkJaWYgKChnbG9iYWwubW9kZSAmIE1PREVfREVCVUcpICYmICghKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkgfHwgKGdsb2JhbC5tb2RlICYgTU9ERV9WRVJCT1NFKSkpIHsKIAkJCWludCBsZW47Ci0JCQlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJTA4eDolcy5zcnZjbHNbJTA0eDolMDR4XVxuIiwgdC0+dW5pcV9pZCwgdC0+cHJveHktPmlkLCAodW5zaWduZWQgc2hvcnQpdC0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpdC0+c3J2X2ZkKTsKKwkJCWxlbiA9IHNwcmludGYodHJhc2gsICIlMDh4OiVzLnNydmNsc1slMDR4OiUwNHhdXG4iLCB0LT51bmlxX2lkLCB0LT5iZS0+aWQsICh1bnNpZ25lZCBzaG9ydCl0LT5jbGlfZmQsICh1bnNpZ25lZCBzaG9ydCl0LT5zcnZfZmQpOwogCQkJd3JpdGUoMSwgdHJhc2gsIGxlbik7CiAJCX0KIAkJcmV0dXJuIDA7CkBAIC0yNjYyLDEzICsyNjYyLDEzIEBACiAJCQkJaWYgKHB4LT5zdGF0ZSA9PSBQUl9TVFNUT1BQRUQpCiAJCQkJCWdvdG8gbmV4dF9wcm94eTsKIAotCQkJCWlmIChzLT5wcm94eS0+dXJpX2F1dGggJiYgcy0+cHJveHktPnVyaV9hdXRoLT5zY29wZSkgeworCQkJCWlmIChzLT5maS0+dXJpX2F1dGggJiYgcy0+ZmktPnVyaV9hdXRoLT5zY29wZSkgewogCQkJCQkvKiB3ZSBoYXZlIGEgbGltaXRlZCBzY29wZSwgd2UgaGF2ZSB0byBjaGVjayB0aGUgcHJveHkgbmFtZSAqLwogCQkJCQlzdHJ1Y3Qgc3RhdF9zY29wZSAqc2NvcGU7CiAJCQkJCWludCBsZW47CiAKIAkJCQkJbGVuID0gc3RybGVuKHB4LT5pZCk7Ci0JCQkJCXNjb3BlID0gcy0+cHJveHktPnVyaV9hdXRoLT5zY29wZTsKKwkJCQkJc2NvcGUgPSBzLT5maS0+dXJpX2F1dGgtPnNjb3BlOwogCiAJCQkJCXdoaWxlIChzY29wZSkgewogCQkJCQkJLyogbWF0Y2ggZXhhY3QgcHJveHkgbmFtZSAqLwpAQCAtMjY3Niw3ICsyNjc2LDcgQEAKIAkJCQkJCQlicmVhazsKIAogCQkJCQkJLyogbWF0Y2ggJy4nIHdoaWNoIG1lYW5zICdzZWxmJyBwcm94eSAqLwotCQkJCQkJaWYgKCFzdHJjbXAoc2NvcGUtPnB4X2lkLCAiLiIpICYmIHB4ID09IHMtPnByb3h5KQorCQkJCQkJaWYgKCFzdHJjbXAoc2NvcGUtPnB4X2lkLCAiLiIpICYmIHB4ID09IHMtPmZlKQogCQkJCQkJCWJyZWFrOwogCQkJCQkJc2NvcGUgPSBzY29wZS0+bmV4dDsKIAkJCQkJfQpAQCAtMjg4Nyw3ICsyODg3LDcgQEAKIAllbHNlIHsKIAkJLyogdW5rbm93biBkYXRhIHNvdXJjZSAqLwogCQlzLT5sb2dzLnN0YXR1cyA9IDUwMDsKLQkJY2xpZW50X3JldG5jbG9zZShzLCBzLT5wcm94eS0+ZXJybXNnLmxlbjUwMCwgcy0+cHJveHktPmVycm1zZy5tc2c1MDApOworCQljbGllbnRfcmV0bmNsb3NlKHMsIHMtPmZlLT5lcnJtc2cubGVuNTAwLCBzLT5mZS0+ZXJybXNnLm1zZzUwMCk7CiAJCWlmICghKHMtPmZsYWdzICYgU05fRVJSX01BU0spKQogCQkJcy0+ZmxhZ3MgfD0gU05fRVJSX1BSWENPTkQ7CiAJCWlmICghKHMtPmZsYWdzICYgU05fRklOU1RfTUFTSykpCmRpZmYgLS1naXQgYS9zcmMvcXVldWUuYyBiL3NyYy9xdWV1ZS5jCmluZGV4IDhiMzdkYTAuLjEyNDdkMjUgMTAwNjQ0Ci0tLSBhL3NyYy9xdWV1ZS5jCisrKyBiL3NyYy9xdWV1ZS5jCkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogCQlpZiAoc2Vzcy0+c3J2LT5uYnBlbmQgPiBzZXNzLT5zcnYtPm5icGVuZF9tYXgpCiAJCQlzZXNzLT5zcnYtPm5icGVuZF9tYXggPSBzZXNzLT5zcnYtPm5icGVuZDsKIAl9IGVsc2UgewotCQlMSVNUX0FERFEoJnNlc3MtPnByb3h5LT5wZW5kY29ubnMsICZwLT5saXN0KTsKLQkJc2Vzcy0+bG9ncy5wcnhfcXVldWVfc2l6ZSArPSBzZXNzLT5wcm94eS0+bmJwZW5kOwotCQlzZXNzLT5wcm94eS0+bmJwZW5kKys7Ci0JCWlmIChzZXNzLT5wcm94eS0+bmJwZW5kID4gc2Vzcy0+cHJveHktPm5icGVuZF9tYXgpCi0JCQlzZXNzLT5wcm94eS0+bmJwZW5kX21heCA9IHNlc3MtPnByb3h5LT5uYnBlbmQ7CisJCUxJU1RfQUREUSgmc2Vzcy0+YmUtPnBlbmRjb25ucywgJnAtPmxpc3QpOworCQlzZXNzLT5sb2dzLnByeF9xdWV1ZV9zaXplICs9IHNlc3MtPmJlLT5uYnBlbmQ7CisJCXNlc3MtPmJlLT5uYnBlbmQrKzsKKwkJaWYgKHNlc3MtPmJlLT5uYnBlbmQgPiBzZXNzLT5iZS0+bmJwZW5kX21heCkKKwkJCXNlc3MtPmJlLT5uYnBlbmRfbWF4ID0gc2Vzcy0+YmUtPm5icGVuZDsKIAl9Ci0Jc2Vzcy0+cHJveHktPnRvdHBlbmQrKzsKKwlzZXNzLT5iZS0+dG90cGVuZCsrOwogCXJldHVybiBwOwogfQogCkBAIC0xMjYsOCArMTI2LDggQEAKIAlpZiAocC0+c3J2KQogCQlwLT5zcnYtPm5icGVuZC0tOwogCWVsc2UKLQkJcC0+c2Vzcy0+cHJveHktPm5icGVuZC0tOwotCXAtPnNlc3MtPnByb3h5LT50b3RwZW5kLS07CisJCXAtPnNlc3MtPmJlLT5uYnBlbmQtLTsKKwlwLT5zZXNzLT5iZS0+dG90cGVuZC0tOwogCXBvb2xfZnJlZShwZW5kY29ubiwgcCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9zZXNzaW9uLmMgYi9zcmMvc2Vzc2lvbi5jCmluZGV4IDlhNTllMjguLjE2MDQ3ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9zZXNzaW9uLmMKKysrIGIvc3JjL3Nlc3Npb24uYwpAQCAtNDEsMTkgKzQxLDE5IEBACiAKIAlpZiAocy0+cnNwX2NhcCAhPSBOVUxMKSB7CiAJCXN0cnVjdCBjYXBfaGRyICpoOwotCQlmb3IgKGggPSBzLT5wcm94eS0+cnNwX2NhcDsgaDsgaCA9IGgtPm5leHQpIHsKKwkJZm9yIChoID0gcy0+ZmktPnJzcF9jYXA7IGg7IGggPSBoLT5uZXh0KSB7CiAJCQlpZiAocy0+cnNwX2NhcFtoLT5pbmRleF0gIT0gTlVMTCkKIAkJCQlwb29sX2ZyZWVfdG8oaC0+cG9vbCwgcy0+cnNwX2NhcFtoLT5pbmRleF0pOwogCQl9Ci0JCXBvb2xfZnJlZV90byhzLT5wcm94eS0+cnNwX2NhcF9wb29sLCBzLT5yc3BfY2FwKTsKKwkJcG9vbF9mcmVlX3RvKHMtPmZpLT5yc3BfY2FwX3Bvb2wsIHMtPnJzcF9jYXApOwogCX0KIAlpZiAocy0+cmVxX2NhcCAhPSBOVUxMKSB7CiAJCXN0cnVjdCBjYXBfaGRyICpoOwotCQlmb3IgKGggPSBzLT5wcm94eS0+cmVxX2NhcDsgaDsgaCA9IGgtPm5leHQpIHsKKwkJZm9yIChoID0gcy0+ZmktPnJlcV9jYXA7IGg7IGggPSBoLT5uZXh0KSB7CiAJCQlpZiAocy0+cmVxX2NhcFtoLT5pbmRleF0gIT0gTlVMTCkKIAkJCQlwb29sX2ZyZWVfdG8oaC0+cG9vbCwgcy0+cmVxX2NhcFtoLT5pbmRleF0pOwogCQl9Ci0JCXBvb2xfZnJlZV90byhzLT5wcm94eS0+cmVxX2NhcF9wb29sLCBzLT5yZXFfY2FwKTsKKwkJcG9vbF9mcmVlX3RvKHMtPmZpLT5yZXFfY2FwX3Bvb2wsIHMtPnJlcV9jYXApOwogCX0KIAogCWlmIChzLT5sb2dzLnVyaSkK