From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 03/27] x86: move PV gate op emulation code Date: Thu, 8 Jun 2017 18:11:39 +0100 Message-ID: <20170608171203.20416-4-wei.liu2@citrix.com> References: <20170608171203.20416-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dJ0yk-0004tg-Jo for xen-devel@lists.xenproject.org; Thu, 08 Jun 2017 17:12:14 +0000 In-Reply-To: <20170608171203.20416-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9lbXVsLWdhdGUtb3AuYy4gUHJlZml4IGVtdWxhdGVfZ2F0ZV9v cCB3aXRoIHB2XwphbmQgZXhwb3J0IGl0IHZpYSBwdi90cmFwcy5oLgoKUHVyZSBjb2RlIG1vdGlv biBleGNlcHQgZm9yIHRoZSByZW5hbWUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1 MkBjaXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZSAgICAgICB8ICAgMSAr CiB4ZW4vYXJjaC94ODYvcHYvZW11bC1nYXRlLW9wLmMgfCA0NDAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL3g4Ni90cmFwcy5jICAgICAgICAgICB8 IDM5MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9pbmNsdWRlL2Fz bS14ODYvcHYvdHJhcHMuaCB8ICAgMiArCiA0IGZpbGVzIGNoYW5nZWQsIDQ0NCBpbnNlcnRpb25z KCspLCAzODkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2 L2VtdWwtZ2F0ZS1vcC5jCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlIGIv eGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCmluZGV4IGU0OGM0NjA2ODAuLjFmNmZiZDNmNWMgMTAw NjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC94ODYvcHYv TWFrZWZpbGUKQEAgLTQsNSArNCw2IEBAIG9iai15ICs9IHRyYXBzLm8KIG9iai1iaW4teSArPSBk b20wX2J1aWxkLmluaXQubwogb2JqLXkgKz0gZG9tYWluLm8KIG9iai15ICs9IGVtdWxhdGUubwor b2JqLXkgKz0gZW11bC1nYXRlLW9wLm8KIG9iai15ICs9IGVtdWwtcHJpdi1vcC5vCiBvYmotYmlu LXkgKz0gZ3ByX3N3aXRjaC5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bC1nYXRl LW9wLmMgYi94ZW4vYXJjaC94ODYvcHYvZW11bC1nYXRlLW9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uOTdhNGIzMWE1NgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9h cmNoL3g4Ni9wdi9lbXVsLWdhdGUtb3AuYwpAQCAtMCwwICsxLDQ0MCBAQAorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogYXJjaC94ODYvcHYvZW11bC1nYXRlLW9wLmMKKyAqCisgKiBFbXVsYXRl IGdhdGUgb3AgZm9yIFBWIGd1ZXN0cworICoKKyAqIE1vZGlmaWNhdGlvbnMgdG8gTGludXggb3Jp Z2luYWwgYXJlIGNvcHlyaWdodCAoYykgMjAwMi0yMDA0LCBLIEEgRnJhc2VyCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNp bmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5j bHVkZSA8eGVuL2lvY2FwLmg+CisjaW5jbHVkZSA8eGVuL3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8 eGVuL3RyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1 Z3JlZy5oPgorI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CisjaW5jbHVkZSA8YXNtL2h5cGVyY2FsbC5o PgorI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGFzbS9wMm0uaD4KKyNp bmNsdWRlIDxhc20vcHYvdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc2hhcmVkLmg+CisjaW5jbHVk ZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3g4Nl9lbXVsYXRlLmg+CisKKyNpbmNsdWRl IDx4c20veHNtLmg+CisKKyNpbmNsdWRlICJlbXVsYXRlLmgiCisKK3N0YXRpYyBpbnQgcmVhZF9n YXRlX2Rlc2NyaXB0b3IodW5zaWduZWQgaW50IGdhdGVfc2VsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmNwdSAqdiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpzZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50ICphcikKK3sKKyAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVzYzsKKyAg ICBjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnBkZXNjOworCisKKyAgICBwZGVzYyA9IChjb25z dCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKikKKyAgICAgICAgKCEoZ2F0ZV9zZWwgJiA0KSA/IEdEVF9W SVJUX1NUQVJUKHYpIDogTERUX1ZJUlRfU1RBUlQodikpCisgICAgICAgICsgKGdhdGVfc2VsID4+ IDMpOworICAgIGlmICggKGdhdGVfc2VsIDwgNCkgfHwKKyAgICAgICAgICgoZ2F0ZV9zZWwgPj0g RklSU1RfUkVTRVJWRURfR0RUX0JZVEUpICYmICEoZ2F0ZV9zZWwgJiA0KSkgfHwKKyAgICAgICAg IF9fZ2V0X3VzZXIoZGVzYywgcGRlc2MpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAqc2Vs ID0gKGRlc2MuYSA+PiAxNikgJiAweDAwMDBmZmZjOworICAgICpvZmYgPSAoZGVzYy5hICYgMHgw MDAwZmZmZikgfCAoZGVzYy5iICYgMHhmZmZmMDAwMCk7CisgICAgKmFyID0gZGVzYy5iICYgMHgw MDAwZmZmZjsKKworICAgIC8qCisgICAgICogY2hlY2tfZGVzY3JpcHRvcigpIGNsZWFycyB0aGUg RFBMIGZpZWxkIGFuZCBzdG9yZXMgdGhlCisgICAgICogZ3Vlc3QgcmVxdWVzdGVkIERQTCBpbiB0 aGUgc2VsZWN0b3IncyBSUEwgZmllbGQuCisgICAgICovCisgICAgaWYgKCAqYXIgJiBfU0VHTUVO VF9EUEwgKQorICAgICAgICByZXR1cm4gMDsKKyAgICAqYXIgfD0gKGRlc2MuYSA+PiAoMTYgLSAx MykpICYgX1NFR01FTlRfRFBMOworCisgICAgaWYgKCAhaXNfcHZfMzJiaXRfdmNwdSh2KSApCisg ICAgeworICAgICAgICBpZiAoICgqYXIgJiAweDFmMDApICE9IDB4MGMwMCB8fAorICAgICAgICAg ICAgIChnYXRlX3NlbCA+PSBGSVJTVF9SRVNFUlZFRF9HRFRfQllURSAtIDggJiYgIShnYXRlX3Nl bCAmIDQpKSB8fAorICAgICAgICAgICAgIF9fZ2V0X3VzZXIoZGVzYywgcGRlc2MgKyAxKSB8fAor ICAgICAgICAgICAgIChkZXNjLmIgJiAweDFmMDApICkKKyAgICAgICAgICAgIHJldHVybiAwOwor CisgICAgICAgICpvZmYgfD0gKHVuc2lnbmVkIGxvbmcpZGVzYy5hIDw8IDMyOworICAgICAgICBy ZXR1cm4gMTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCAqYXIgJiAweDFmMDAgKQorICAgIHsKKyAg ICBjYXNlIDB4MDQwMDoKKyAgICAgICAgKm9mZiAmPSAweGZmZmY7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgMHgwYzAwOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy ZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQg Y2hlY2tfc3RhY2tfbGltaXQodW5zaWduZWQgaW50IGFyLCB1bnNpZ25lZCBpbnQgbGltaXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXNwLCB1bnNp Z25lZCBpbnQgZGVjcikKK3sKKyAgICByZXR1cm4gKCgoZXNwIC0gZGVjcikgPCAoZXNwIC0gMSkp ICYmCisgICAgICAgICAgICAoIShhciAmIF9TRUdNRU5UX0VDKSA/IChlc3AgLSAxKSA8PSBsaW1p dCA6IChlc3AgLSBkZWNyKSA+IGxpbWl0KSk7Cit9CisKK3N0cnVjdCBnYXRlX29wX2N0eHQgewor ICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQ7CisgICAgc3RydWN0IHsKKyAgICAgICAg dW5zaWduZWQgbG9uZyBiYXNlLCBsaW1pdDsKKyAgICB9IGNzOworICAgIGJvb2wgaW5zbl9mZXRj aDsKK307CisKK3N0YXRpYyBpbnQgZ2F0ZV9vcF9yZWFkKAorICAgIGVudW0geDg2X3NlZ21lbnQg c2VnLAorICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgIHZvaWQgKnBfZGF0YSwKKyAgICB1 bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7 CisgICAgY29uc3Qgc3RydWN0IGdhdGVfb3BfY3R4dCAqZ29jID0KKyAgICAgICAgY29udGFpbmVy X29mKGN0eHQsIHN0cnVjdCBnYXRlX29wX2N0eHQsIGN0eHQpOworICAgIHVuc2lnbmVkIGludCBy YyA9IGJ5dGVzLCBzZWwgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9IG9mZnNldCwgbGlt aXQgPSAwOworCisgICAgc3dpdGNoICggc2VnICkKKyAgICB7CisgICAgY2FzZSB4ODZfc2VnX2Nz OgorICAgICAgICBhZGRyICs9IGdvYy0+Y3MuYmFzZTsKKyAgICAgICAgbGltaXQgPSBnb2MtPmNz LmxpbWl0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHg4Nl9zZWdfZHM6CisgICAgICAgIHNl bCA9IHJlYWRfc3JlZyhkcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgeDg2X3NlZ19lczoK KyAgICAgICAgc2VsID0gcmVhZF9zcmVnKGVzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB4 ODZfc2VnX2ZzOgorICAgICAgICBzZWwgPSByZWFkX3NyZWcoZnMpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIHg4Nl9zZWdfZ3M6CisgICAgICAgIHNlbCA9IHJlYWRfc3JlZyhncyk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgeDg2X3NlZ19zczoKKyAgICAgICAgc2VsID0gY3R4dC0+cmVn cy0+c3M7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBYODZF TVVMX1VOSEFORExFQUJMRTsKKyAgICB9CisgICAgaWYgKCBzZWwgKQorICAgIHsKKyAgICAgICAg dW5zaWduZWQgaW50IGFyOworCisgICAgICAgIEFTU0VSVCghZ29jLT5pbnNuX2ZldGNoKTsKKyAg ICAgICAgaWYgKCAhcHZfZW11bF9yZWFkX2Rlc2NyaXB0b3Ioc2VsLCBjdXJyZW50LCAmYWRkciwg JmxpbWl0LCAmYXIsIDApIHx8CisgICAgICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8Cisg ICAgICAgICAgICAgIShhciAmIF9TRUdNRU5UX1ApIHx8CisgICAgICAgICAgICAgKChhciAmIF9T RUdNRU5UX0NPREUpICYmICEoYXIgJiBfU0VHTUVOVF9XUikpICkKKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICAgICAgYWRkciArPSBvZmZzZXQ7CisgICAgfQor ICAgIGVsc2UgaWYgKCBzZWcgIT0geDg2X3NlZ19jcyApCisgICAgICAgIHJldHVybiBYODZFTVVM X1VOSEFORExFQUJMRTsKKworICAgIC8qIFdlIGRvbid0IG1lYW4gdG8gZW11bGF0ZSBhbnkgYnJh bmNoZXMuICovCisgICAgaWYgKCBsaW1pdCA8IGJ5dGVzIC0gMSB8fCBvZmZzZXQgPiBsaW1pdCAt IGJ5dGVzICsgMSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAg IGFkZHIgPSAodWludDMyX3QpYWRkcjsKKworICAgIGlmICggKHJjID0gX19jb3B5X2Zyb21fdXNl cihwX2RhdGEsICh2b2lkICopYWRkciwgYnl0ZXMpKSApCisgICAgeworICAgICAgICAvKgorICAg ICAgICAgKiBUT0RPOiBUaGlzIHNob3VsZCByZXBvcnQgUEZFQ19pbnNuX2ZldGNoIHdoZW4gZ29j LT5pbnNuX2ZldGNoICYmCisgICAgICAgICAqIGNwdV9oYXNfbngsIGJ1dCB3ZSdkIHRoZW4gbmVl ZCBhICJmZXRjaCIgdmFyaWFudCBvZgorICAgICAgICAgKiBfX2NvcHlfZnJvbV91c2VyKCkgcmVz cGVjdGluZyBOWCwgU01FUCwgYW5kIHByb3RlY3Rpb24ga2V5cy4KKyAgICAgICAgICovCisgICAg ICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBhZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7CisgICAg ICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworfQorCit2b2lkIHB2X2VtdWxhdGVfZ2F0ZV9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7CisgICAgdW5zaWduZWQg aW50IHNlbCwgYXIsIGRwbCwgbnBhcm0sIGluc25fbGVuOworICAgIHN0cnVjdCBnYXRlX29wX2N0 eHQgY3R4dCA9IHsgLmN0eHQucmVncyA9IHJlZ3MsIC5pbnNuX2ZldGNoID0gdHJ1ZSB9OworICAg IHN0cnVjdCB4ODZfZW11bGF0ZV9zdGF0ZSAqc3RhdGU7CisgICAgdW5zaWduZWQgbG9uZyBvZmYs IGJhc2UsIGxpbWl0OworICAgIHVpbnQxNl90IG9wbmRfc2VsID0gMDsKKyAgICBpbnQganVtcCA9 IC0xLCByYyA9IFg4NkVNVUxfT0tBWTsKKworICAgIC8qIENoZWNrIHdoZXRoZXIgdGhpcyBmYXVs dCBpcyBkdWUgdG8gdGhlIHVzZSBvZiBhIGNhbGwgZ2F0ZS4gKi8KKyAgICBpZiAoICFyZWFkX2dh dGVfZGVzY3JpcHRvcihyZWdzLT5lcnJvcl9jb2RlLCB2LCAmc2VsLCAmb2ZmLCAmYXIpIHx8Cisg ICAgICAgICAoKChhciA+PiAxMykgJiAzKSA8IChyZWdzLT5jcyAmIDMpKSB8fAorICAgICAgICAg KChhciAmIF9TRUdNRU5UX1RZUEUpICE9IDB4YzAwKSApCisgICAgeworICAgICAgICBwdl9pbmpl Y3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIHJlZ3MtPmVycm9yX2NvZGUpOworICAgICAg ICByZXR1cm47CisgICAgfQorICAgIGlmICggIShhciAmIF9TRUdNRU5UX1ApICkKKyAgICB7Cisg ICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ub19zZWdtZW50LCByZWdzLT5lcnJv cl9jb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkcGwgPSAoYXIgPj4gMTMpICYg MzsKKyAgICBucGFybSA9IGFyICYgMHgxZjsKKworICAgIC8qCisgICAgICogRGVjb2RlIGluc3Ry dWN0aW9uIChhbmQgcGVyaGFwcyBvcGVyYW5kKSB0byBkZXRlcm1pbmUgUlBMLAorICAgICAqIHdo ZXRoZXIgdGhpcyBpcyBhIGp1bXAgb3IgYSBjYWxsLCBhbmQgdGhlIGNhbGwgcmV0dXJuIG9mZnNl dC4KKyAgICAgKi8KKyAgICBpZiAoICFwdl9lbXVsX3JlYWRfZGVzY3JpcHRvcihyZWdzLT5jcywg diwgJmN0eHQuY3MuYmFzZSwgJmN0eHQuY3MubGltaXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmFyLCAwKSB8fAorICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8Cisg ICAgICAgICAhKGFyICYgX1NFR01FTlRfUCkgfHwKKyAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9D T0RFKSApCisgICAgeworICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1 bHQsIHJlZ3MtPmVycm9yX2NvZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY3R4 dC5jdHh0LmFkZHJfc2l6ZSA9IGFyICYgX1NFR01FTlRfREIgPyAzMiA6IDE2OworICAgIC8qIExl YXZlIHplcm8gaW4gY3R4dC5jdHh0LnNwX3NpemUsIGFzIGl0J3Mgbm90IG5lZWRlZCBmb3IgZGVj b2RpbmcuICovCisgICAgc3RhdGUgPSB4ODZfZGVjb2RlX2luc24oJmN0eHQuY3R4dCwgZ2F0ZV9v cF9yZWFkKTsKKyAgICBjdHh0Lmluc25fZmV0Y2ggPSBmYWxzZTsKKyAgICBpZiAoIElTX0VSUl9P Ul9OVUxMKHN0YXRlKSApCisgICAgeworICAgICAgICBpZiAoIFBUUl9FUlIoc3RhdGUpID09IC1Y ODZFTVVMX0VYQ0VQVElPTiApCisgICAgICAgICAgICBwdl9pbmplY3RfZXZlbnQoJmN0eHQuY3R4 dC5ldmVudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRp b24oVFJBUF9ncF9mYXVsdCwgcmVncy0+ZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICBzd2l0Y2ggKCBjdHh0LmN0eHQub3Bjb2RlICkKKyAgICB7CisgICAgICAgIHVu c2lnbmVkIGludCBtb2RybV8zNDU7CisKKyAgICBjYXNlIDB4ZWE6CisgICAgICAgICsranVtcDsK KyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSAweDlhOgorICAgICAgICArK2p1 bXA7CisgICAgICAgIG9wbmRfc2VsID0geDg2X2luc25faW1tZWRpYXRlKHN0YXRlLCAxKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSAweGZmOgorICAgICAgICBpZiAoIHg4Nl9pbnNuX21vZHJt KHN0YXRlLCBOVUxMLCAmbW9kcm1fMzQ1KSA+PSAzICkKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBzd2l0Y2ggKCBtb2RybV8zNDUgJiA3ICkKKyAgICAgICAgeworICAgICAgICAgICAgZW51 bSB4ODZfc2VnbWVudCBzZWc7CisKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgKytqdW1w OworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGNhc2UgMzoKKyAgICAg ICAgICAgICsranVtcDsKKyAgICAgICAgICAgIGJhc2UgPSB4ODZfaW5zbl9vcGVyYW5kX2VhKHN0 YXRlLCAmc2VnKTsKKyAgICAgICAgICAgIHJjID0gZ2F0ZV9vcF9yZWFkKHNlZywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJhc2UgKyAoeDg2X2luc25fb3BzaXplKHN0YXRlKSA+PiAz KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcG5kX3NlbCwgc2l6ZW9mKG9wbmRf c2VsKSwgJmN0eHQuY3R4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICB9CisKKyAgICBpbnNuX2xlbiA9IHg4Nl9pbnNuX2xlbmd0aChzdGF0ZSwg JmN0eHQuY3R4dCk7CisgICAgeDg2X2VtdWxhdGVfZnJlZV9zdGF0ZShzdGF0ZSk7CisKKyAgICBp ZiAoIHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICkKKyAgICB7CisgICAgICAgIHB2X2luamVjdF9l dmVudCgmY3R4dC5jdHh0LmV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm ICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8CisgICAgICAgICBqdW1wIDwgMCB8fAorICAgICAgICAg KG9wbmRfc2VsICYgfjMpICE9IHJlZ3MtPmVycm9yX2NvZGUgfHwKKyAgICAgICAgIGRwbCA8IChv cG5kX3NlbCAmIDMpICkKKyAgICB7CisgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJB UF9ncF9mYXVsdCwgcmVncy0+ZXJyb3JfY29kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK KyAgICBpZiAoICFwdl9lbXVsX3JlYWRfZGVzY3JpcHRvcihzZWwsIHYsICZiYXNlLCAmbGltaXQs ICZhciwgMCkgfHwKKyAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9TKSB8fAorICAgICAgICAgIShh ciAmIF9TRUdNRU5UX0NPREUpIHx8CisgICAgICAgICAoIWp1bXAgfHwgKGFyICYgX1NFR01FTlRf RUMpID8KKyAgICAgICAgICAoKGFyID4+IDEzKSAmIDMpID4gKHJlZ3MtPmNzICYgMykgOgorICAg ICAgICAgICgoYXIgPj4gMTMpICYgMykgIT0gKHJlZ3MtPmNzICYgMykpICkKKyAgICB7CisgICAg ICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgc2VsKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKyAgICBpZiAoICEoYXIgJiBfU0VHTUVOVF9QKSApCisgICAgeworICAg ICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfbm9fc2VnbWVudCwgc2VsKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIG9mZiA+IGxpbWl0ICkKKyAgICB7CisgICAgICAg IHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgMCk7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgICBpZiAoICFqdW1wICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGlu dCBzcywgZXNwLCAqc3RrcDsKKyAgICAgICAgaW50IHJjOworI2RlZmluZSBwdXNoKGl0ZW0pIGRv IFwKKyAgICAgICAgeyBcCisgICAgICAgICAgICAtLXN0a3A7IFwKKyAgICAgICAgICAgIGVzcCAt PSA0OyBcCisgICAgICAgICAgICByYyA9IF9fcHV0X3VzZXIoaXRlbSwgc3RrcCk7IFwKKyAgICAg ICAgICAgIGlmICggcmMgKSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAgICAgICBwdl9p bmplY3RfcGFnZV9mYXVsdChQRkVDX3dyaXRlX2FjY2VzcywgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShzdGtwICsgMSkgLSByYyk7IFwKKyAg ICAgICAgICAgICAgICByZXR1cm47IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9IHdoaWxl ICggMCApCisKKyAgICAgICAgaWYgKCAoKGFyID4+IDEzKSAmIDMpIDwgKHJlZ3MtPmNzICYgMykg KQorICAgICAgICB7CisgICAgICAgICAgICBzZWwgfD0gKGFyID4+IDEzKSAmIDM7CisgICAgICAg ICAgICAvKiBJbm5lciBzdGFjayBrbm93biBvbmx5IGZvciBrZXJuZWwgcmluZy4gKi8KKyAgICAg ICAgICAgIGlmICggKHNlbCAmIDMpICE9IEdVRVNUX0tFUk5FTF9SUEwodi0+ZG9tYWluKSApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQ X2dwX2ZhdWx0LCByZWdzLT5lcnJvcl9jb2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBlc3AgPSB2LT5hcmNoLnB2X3ZjcHUua2VybmVsX3Nw OworICAgICAgICAgICAgc3MgPSB2LT5hcmNoLnB2X3ZjcHUua2VybmVsX3NzOworICAgICAgICAg ICAgaWYgKCAoc3MgJiAzKSAhPSAoc2VsICYgMykgfHwKKyAgICAgICAgICAgICAgICAgIXB2X2Vt dWxfcmVhZF9kZXNjcmlwdG9yKHNzLCB2LCAmYmFzZSwgJmxpbWl0LCAmYXIsIDApIHx8CisgICAg ICAgICAgICAgICAgICgoYXIgPj4gMTMpICYgMykgIT0gKHNlbCAmIDMpIHx8CisgICAgICAgICAg ICAgICAgICEoYXIgJiBfU0VHTUVOVF9TKSB8fAorICAgICAgICAgICAgICAgICAoYXIgJiBfU0VH TUVOVF9DT0RFKSB8fAorICAgICAgICAgICAgICAgICAhKGFyICYgX1NFR01FTlRfV1IpICkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBf aW52YWxpZF90c3MsIHNzICYgfjMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICggIShhciAmIF9TRUdNRU5UX1ApIHx8CisgICAgICAgICAg ICAgICAgICFjaGVja19zdGFja19saW1pdChhciwgbGltaXQsIGVzcCwgKDQgKyBucGFybSkgKiA0 KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlv bihUUkFQX3N0YWNrX2Vycm9yLCBzcyAmIH4zKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBzdGtwID0gKHVuc2lnbmVkIGludCAqKSh1bnNpZ25l ZCBsb25nKSgodW5zaWduZWQgaW50KWJhc2UgKyBlc3ApOworICAgICAgICAgICAgaWYgKCAhY29t cGF0X2FjY2Vzc19vayhzdGtwIC0gNCAtIG5wYXJtLCAxNiArIG5wYXJtICogNCkgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9m YXVsdCwgcmVncy0+ZXJyb3JfY29kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcHVzaChyZWdzLT5zcyk7CisgICAgICAgICAgICBwdXNoKHJl Z3MtPnJzcCk7CisgICAgICAgICAgICBpZiAoIG5wYXJtICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnVzdGtwOworCisgICAgICAgICAgICAgICAg aWYgKCAhcHZfZW11bF9yZWFkX2Rlc2NyaXB0b3IocmVncy0+c3MsIHYsICZiYXNlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW1pdCwgJmFyLCAwKSB8 fAorICAgICAgICAgICAgICAgICAgICAgKChhciA+PiAxMykgJiAzKSAhPSAocmVncy0+Y3MgJiAz KSB8fAorICAgICAgICAgICAgICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8CisgICAgICAg ICAgICAgICAgICAgICAoYXIgJiBfU0VHTUVOVF9DT0RFKSB8fAorICAgICAgICAgICAgICAgICAg ICAgIShhciAmIF9TRUdNRU5UX1dSKSB8fAorICAgICAgICAgICAgICAgICAgICAgIWNoZWNrX3N0 YWNrX2xpbWl0KGFyLCBsaW1pdCwgZXNwICsgbnBhcm0gKiA0LCBucGFybSAqIDQpICkKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVs dCwgcmVncy0+ZXJyb3JfY29kZSk7CisgICAgICAgICAgICAgICAgdXN0a3AgPSAodW5zaWduZWQg aW50ICopKHVuc2lnbmVkIGxvbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVk IGludCliYXNlICsgcmVncy0+ZXNwICsgbnBhcm0gKiA0KTsKKyAgICAgICAgICAgICAgICBpZiAo ICFjb21wYXRfYWNjZXNzX29rKHVzdGtwIC0gbnBhcm0sIDAgKyBucGFybSAqIDQpICkKKyAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24o VFJBUF9ncF9mYXVsdCwgcmVncy0+ZXJyb3JfY29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYXJtOworCisgICAgICAg ICAgICAgICAgICAgIC0tdXN0a3A7CisgICAgICAgICAgICAgICAgICAgIHJjID0gX19nZXRfdXNl cihwYXJtLCB1c3RrcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggcmMgKQorICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdl9pbmplY3RfcGFnZV9mYXVs dCgwLCAodW5zaWduZWQgbG9uZykodXN0a3AgKyAxKSAtIHJjKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBwdXNoKHBhcm0pOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKCAtLW5wYXJtICk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg ICBzZWwgfD0gKHJlZ3MtPmNzICYgMyk7CisgICAgICAgICAgICBlc3AgPSByZWdzLT5yc3A7Cisg ICAgICAgICAgICBzcyA9IHJlZ3MtPnNzOworICAgICAgICAgICAgaWYgKCAhcHZfZW11bF9yZWFk X2Rlc2NyaXB0b3Ioc3MsIHYsICZiYXNlLCAmbGltaXQsICZhciwgMCkgfHwKKyAgICAgICAgICAg ICAgICAgKChhciA+PiAxMykgJiAzKSAhPSAoc2VsICYgMykgKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgcmVncy0+ ZXJyb3JfY29kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKCAhY2hlY2tfc3RhY2tfbGltaXQoYXIsIGxpbWl0LCBlc3AsIDIgKiA0KSAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihU UkFQX3N0YWNrX2Vycm9yLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBzdGtwID0gKHVuc2lnbmVkIGludCAqKSh1bnNpZ25lZCBsb25nKSgo dW5zaWduZWQgaW50KWJhc2UgKyBlc3ApOworICAgICAgICAgICAgaWYgKCAhY29tcGF0X2FjY2Vz c19vayhzdGtwIC0gMiwgMiAqIDQpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBw dl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIHJlZ3MtPmVycm9yX2NvZGUpOwor ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBwdXNoKHJlZ3MtPmNzKTsKKyAgICAgICAgcHVzaChyZWdzLT5yaXAgKyBpbnNuX2xlbik7Cisj dW5kZWYgcHVzaAorICAgICAgICByZWdzLT5yc3AgPSBlc3A7CisgICAgICAgIHJlZ3MtPnNzID0g c3M7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc2VsIHw9IChyZWdzLT5jcyAmIDMpOworCisg ICAgcmVncy0+Y3MgPSBzZWw7CisgICAgcHZfZW11bF9pbnN0cnVjdGlvbl9kb25lKHJlZ3MsIG9m Zik7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUt c3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBp bmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L3RyYXBzLmMgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwppbmRleCAzMmNhYjcxNDQ0Li43Yjc4 MWYxN2RiIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvdHJhcHMuYworKysgYi94ZW4vYXJjaC94 ODYvdHJhcHMuYwpAQCAtMTU4MCwzOTQgKzE1ODAsNiBAQCBsb25nIGRvX2ZwdV90YXNrc3dpdGNo KGludCBzZXQpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9nYXRlX2Rlc2Ny aXB0b3IodW5zaWduZWQgaW50IGdhdGVfc2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgdmNwdSAqdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50ICpzZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgKm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50ICphcikKLXsKLSAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVzYzsKLSAgICBjb25zdCBz dHJ1Y3QgZGVzY19zdHJ1Y3QgKnBkZXNjOwotCi0KLSAgICBwZGVzYyA9IChjb25zdCBzdHJ1Y3Qg ZGVzY19zdHJ1Y3QgKikKLSAgICAgICAgKCEoZ2F0ZV9zZWwgJiA0KSA/IEdEVF9WSVJUX1NUQVJU KHYpIDogTERUX1ZJUlRfU1RBUlQodikpCi0gICAgICAgICsgKGdhdGVfc2VsID4+IDMpOwotICAg IGlmICggKGdhdGVfc2VsIDwgNCkgfHwKLSAgICAgICAgICgoZ2F0ZV9zZWwgPj0gRklSU1RfUkVT RVJWRURfR0RUX0JZVEUpICYmICEoZ2F0ZV9zZWwgJiA0KSkgfHwKLSAgICAgICAgIF9fZ2V0X3Vz ZXIoZGVzYywgcGRlc2MpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAqc2VsID0gKGRlc2Mu YSA+PiAxNikgJiAweDAwMDBmZmZjOwotICAgICpvZmYgPSAoZGVzYy5hICYgMHgwMDAwZmZmZikg fCAoZGVzYy5iICYgMHhmZmZmMDAwMCk7Ci0gICAgKmFyID0gZGVzYy5iICYgMHgwMDAwZmZmZjsK LQotICAgIC8qCi0gICAgICogY2hlY2tfZGVzY3JpcHRvcigpIGNsZWFycyB0aGUgRFBMIGZpZWxk IGFuZCBzdG9yZXMgdGhlCi0gICAgICogZ3Vlc3QgcmVxdWVzdGVkIERQTCBpbiB0aGUgc2VsZWN0 b3IncyBSUEwgZmllbGQuCi0gICAgICovCi0gICAgaWYgKCAqYXIgJiBfU0VHTUVOVF9EUEwgKQot ICAgICAgICByZXR1cm4gMDsKLSAgICAqYXIgfD0gKGRlc2MuYSA+PiAoMTYgLSAxMykpICYgX1NF R01FTlRfRFBMOwotCi0gICAgaWYgKCAhaXNfcHZfMzJiaXRfdmNwdSh2KSApCi0gICAgewotICAg ICAgICBpZiAoICgqYXIgJiAweDFmMDApICE9IDB4MGMwMCB8fAotICAgICAgICAgICAgIChnYXRl X3NlbCA+PSBGSVJTVF9SRVNFUlZFRF9HRFRfQllURSAtIDggJiYgIShnYXRlX3NlbCAmIDQpKSB8 fAotICAgICAgICAgICAgIF9fZ2V0X3VzZXIoZGVzYywgcGRlc2MgKyAxKSB8fAotICAgICAgICAg ICAgIChkZXNjLmIgJiAweDFmMDApICkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAg ICpvZmYgfD0gKHVuc2lnbmVkIGxvbmcpZGVzYy5hIDw8IDMyOwotICAgICAgICByZXR1cm4gMTsK LSAgICB9Ci0KLSAgICBzd2l0Y2ggKCAqYXIgJiAweDFmMDAgKQotICAgIHsKLSAgICBjYXNlIDB4 MDQwMDoKLSAgICAgICAgKm9mZiAmPSAweGZmZmY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug MHgwYzAwOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK LSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3Rh Y2tfbGltaXQodW5zaWduZWQgaW50IGFyLCB1bnNpZ25lZCBpbnQgbGltaXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXNwLCB1bnNpZ25lZCBpbnQg ZGVjcikKLXsKLSAgICByZXR1cm4gKCgoZXNwIC0gZGVjcikgPCAoZXNwIC0gMSkpICYmCi0gICAg ICAgICAgICAoIShhciAmIF9TRUdNRU5UX0VDKSA/IChlc3AgLSAxKSA8PSBsaW1pdCA6IChlc3Ag LSBkZWNyKSA+IGxpbWl0KSk7Ci19Ci0KLXN0cnVjdCBnYXRlX29wX2N0eHQgewotICAgIHN0cnVj dCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQ7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdW5zaWduZWQg bG9uZyBiYXNlLCBsaW1pdDsKLSAgICB9IGNzOwotICAgIGJvb2wgaW5zbl9mZXRjaDsKLX07Ci0K LXN0YXRpYyBpbnQgZ2F0ZV9vcF9yZWFkKAotICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAotICAg IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgIHZvaWQgKnBfZGF0YSwKLSAgICB1bnNpZ25lZCBp bnQgYnl0ZXMsCi0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgY29u c3Qgc3RydWN0IGdhdGVfb3BfY3R4dCAqZ29jID0KLSAgICAgICAgY29udGFpbmVyX29mKGN0eHQs IHN0cnVjdCBnYXRlX29wX2N0eHQsIGN0eHQpOwotICAgIHVuc2lnbmVkIGludCByYyA9IGJ5dGVz LCBzZWwgPSAwOwotICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9IG9mZnNldCwgbGltaXQgPSAwOwot Ci0gICAgc3dpdGNoICggc2VnICkKLSAgICB7Ci0gICAgY2FzZSB4ODZfc2VnX2NzOgotICAgICAg ICBhZGRyICs9IGdvYy0+Y3MuYmFzZTsKLSAgICAgICAgbGltaXQgPSBnb2MtPmNzLmxpbWl0Owot ICAgICAgICBicmVhazsKLSAgICBjYXNlIHg4Nl9zZWdfZHM6Ci0gICAgICAgIHNlbCA9IHJlYWRf c3JlZyhkcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgeDg2X3NlZ19lczoKLSAgICAgICAg c2VsID0gcmVhZF9zcmVnKGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB4ODZfc2VnX2Zz OgotICAgICAgICBzZWwgPSByZWFkX3NyZWcoZnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IHg4Nl9zZWdfZ3M6Ci0gICAgICAgIHNlbCA9IHJlYWRfc3JlZyhncyk7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgeDg2X3NlZ19zczoKLSAgICAgICAgc2VsID0gY3R4dC0+cmVncy0+c3M7Ci0g ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFO RExFQUJMRTsKLSAgICB9Ci0gICAgaWYgKCBzZWwgKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQg aW50IGFyOwotCi0gICAgICAgIEFTU0VSVCghZ29jLT5pbnNuX2ZldGNoKTsKLSAgICAgICAgaWYg KCAhcHZfZW11bF9yZWFkX2Rlc2NyaXB0b3Ioc2VsLCBjdXJyZW50LCAmYWRkciwgJmxpbWl0LCAm YXIsIDApIHx8Ci0gICAgICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8Ci0gICAgICAgICAg ICAgIShhciAmIF9TRUdNRU5UX1ApIHx8Ci0gICAgICAgICAgICAgKChhciAmIF9TRUdNRU5UX0NP REUpICYmICEoYXIgJiBfU0VHTUVOVF9XUikpICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVM X1VOSEFORExFQUJMRTsKLSAgICAgICAgYWRkciArPSBvZmZzZXQ7Ci0gICAgfQotICAgIGVsc2Ug aWYgKCBzZWcgIT0geDg2X3NlZ19jcyApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExF QUJMRTsKLQotICAgIC8qIFdlIGRvbid0IG1lYW4gdG8gZW11bGF0ZSBhbnkgYnJhbmNoZXMuICov Ci0gICAgaWYgKCBsaW1pdCA8IGJ5dGVzIC0gMSB8fCBvZmZzZXQgPiBsaW1pdCAtIGJ5dGVzICsg MSApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAgIGFkZHIgPSAo dWludDMyX3QpYWRkcjsKLQotICAgIGlmICggKHJjID0gX19jb3B5X2Zyb21fdXNlcihwX2RhdGEs ICh2b2lkICopYWRkciwgYnl0ZXMpKSApCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBU T0RPOiBUaGlzIHNob3VsZCByZXBvcnQgUEZFQ19pbnNuX2ZldGNoIHdoZW4gZ29jLT5pbnNuX2Zl dGNoICYmCi0gICAgICAgICAqIGNwdV9oYXNfbngsIGJ1dCB3ZSdkIHRoZW4gbmVlZCBhICJmZXRj aCIgdmFyaWFudCBvZgotICAgICAgICAgKiBfX2NvcHlfZnJvbV91c2VyKCkgcmVzcGVjdGluZyBO WCwgU01FUCwgYW5kIHByb3RlY3Rpb24ga2V5cy4KLSAgICAgICAgICovCi0gICAgICAgIHg4Nl9l bXVsX3BhZ2VmYXVsdCgwLCBhZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7Ci0gICAgICAgIHJldHVy biBYODZFTVVMX0VYQ0VQVElPTjsKLSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwot fQotCi1zdGF0aWMgdm9pZCBlbXVsYXRlX2dhdGVfb3Aoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJl Z3MpCi17Ci0gICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OwotICAgIHVuc2lnbmVkIGludCBz ZWwsIGFyLCBkcGwsIG5wYXJtLCBpbnNuX2xlbjsKLSAgICBzdHJ1Y3QgZ2F0ZV9vcF9jdHh0IGN0 eHQgPSB7IC5jdHh0LnJlZ3MgPSByZWdzLCAuaW5zbl9mZXRjaCA9IHRydWUgfTsKLSAgICBzdHJ1 Y3QgeDg2X2VtdWxhdGVfc3RhdGUgKnN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgb2ZmLCBiYXNl LCBsaW1pdDsKLSAgICB1aW50MTZfdCBvcG5kX3NlbCA9IDA7Ci0gICAgaW50IGp1bXAgPSAtMSwg cmMgPSBYODZFTVVMX09LQVk7Ci0KLSAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgZmF1bHQgaXMg ZHVlIHRvIHRoZSB1c2Ugb2YgYSBjYWxsIGdhdGUuICovCi0gICAgaWYgKCAhcmVhZF9nYXRlX2Rl c2NyaXB0b3IocmVncy0+ZXJyb3JfY29kZSwgdiwgJnNlbCwgJm9mZiwgJmFyKSB8fAotICAgICAg ICAgKCgoYXIgPj4gMTMpICYgMykgPCAocmVncy0+Y3MgJiAzKSkgfHwKLSAgICAgICAgICgoYXIg JiBfU0VHTUVOVF9UWVBFKSAhPSAweGMwMCkgKQotICAgIHsKLSAgICAgICAgcHZfaW5qZWN0X2h3 X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCByZWdzLT5lcnJvcl9jb2RlKTsKLSAgICAgICAgcmV0 dXJuOwotICAgIH0KLSAgICBpZiAoICEoYXIgJiBfU0VHTUVOVF9QKSApCi0gICAgewotICAgICAg ICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfbm9fc2VnbWVudCwgcmVncy0+ZXJyb3JfY29k ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZHBsID0gKGFyID4+IDEzKSAmIDM7Ci0g ICAgbnBhcm0gPSBhciAmIDB4MWY7Ci0KLSAgICAvKgotICAgICAqIERlY29kZSBpbnN0cnVjdGlv biAoYW5kIHBlcmhhcHMgb3BlcmFuZCkgdG8gZGV0ZXJtaW5lIFJQTCwKLSAgICAgKiB3aGV0aGVy IHRoaXMgaXMgYSBqdW1wIG9yIGEgY2FsbCwgYW5kIHRoZSBjYWxsIHJldHVybiBvZmZzZXQuCi0g ICAgICovCi0gICAgaWYgKCAhcHZfZW11bF9yZWFkX2Rlc2NyaXB0b3IocmVncy0+Y3MsIHYsICZj dHh0LmNzLmJhc2UsICZjdHh0LmNzLmxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZhciwgMCkgfHwKLSAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9TKSB8fAotICAgICAg ICAgIShhciAmIF9TRUdNRU5UX1ApIHx8Ci0gICAgICAgICAhKGFyICYgX1NFR01FTlRfQ09ERSkg KQotICAgIHsKLSAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCBy ZWdzLT5lcnJvcl9jb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN0eHQuY3R4 dC5hZGRyX3NpemUgPSBhciAmIF9TRUdNRU5UX0RCID8gMzIgOiAxNjsKLSAgICAvKiBMZWF2ZSB6 ZXJvIGluIGN0eHQuY3R4dC5zcF9zaXplLCBhcyBpdCdzIG5vdCBuZWVkZWQgZm9yIGRlY29kaW5n LiAqLwotICAgIHN0YXRlID0geDg2X2RlY29kZV9pbnNuKCZjdHh0LmN0eHQsIGdhdGVfb3BfcmVh ZCk7Ci0gICAgY3R4dC5pbnNuX2ZldGNoID0gZmFsc2U7Ci0gICAgaWYgKCBJU19FUlJfT1JfTlVM TChzdGF0ZSkgKQotICAgIHsKLSAgICAgICAgaWYgKCBQVFJfRVJSKHN0YXRlKSA9PSAtWDg2RU1V TF9FWENFUFRJT04gKQotICAgICAgICAgICAgcHZfaW5qZWN0X2V2ZW50KCZjdHh0LmN0eHQuZXZl bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRS QVBfZ3BfZmF1bHQsIHJlZ3MtPmVycm9yX2NvZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot Ci0gICAgc3dpdGNoICggY3R4dC5jdHh0Lm9wY29kZSApCi0gICAgewotICAgICAgICB1bnNpZ25l ZCBpbnQgbW9kcm1fMzQ1OwotCi0gICAgY2FzZSAweGVhOgotICAgICAgICArK2p1bXA7Ci0gICAg ICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgMHg5YToKLSAgICAgICAgKytqdW1wOwot ICAgICAgICBvcG5kX3NlbCA9IHg4Nl9pbnNuX2ltbWVkaWF0ZShzdGF0ZSwgMSk7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgMHhmZjoKLSAgICAgICAgaWYgKCB4ODZfaW5zbl9tb2RybShzdGF0 ZSwgTlVMTCwgJm1vZHJtXzM0NSkgPj0gMyApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg c3dpdGNoICggbW9kcm1fMzQ1ICYgNyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVudW0geDg2 X3NlZ21lbnQgc2VnOwotCi0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICsranVtcDsKLSAg ICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAg ICArK2p1bXA7Ci0gICAgICAgICAgICBiYXNlID0geDg2X2luc25fb3BlcmFuZF9lYShzdGF0ZSwg JnNlZyk7Ci0gICAgICAgICAgICByYyA9IGdhdGVfb3BfcmVhZChzZWcsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiYXNlICsgKHg4Nl9pbnNuX29wc2l6ZShzdGF0ZSkgPj4gMyksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BuZF9zZWwsIHNpemVvZihvcG5kX3NlbCks ICZjdHh0LmN0eHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl YWs7Ci0gICAgfQotCi0gICAgaW5zbl9sZW4gPSB4ODZfaW5zbl9sZW5ndGgoc3RhdGUsICZjdHh0 LmN0eHQpOwotICAgIHg4Nl9lbXVsYXRlX2ZyZWVfc3RhdGUoc3RhdGUpOwotCi0gICAgaWYgKCBy YyA9PSBYODZFTVVMX0VYQ0VQVElPTiApCi0gICAgewotICAgICAgICBwdl9pbmplY3RfZXZlbnQo JmN0eHQuY3R4dC5ldmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIHJj ICE9IFg4NkVNVUxfT0tBWSB8fAotICAgICAgICAganVtcCA8IDAgfHwKLSAgICAgICAgIChvcG5k X3NlbCAmIH4zKSAhPSByZWdzLT5lcnJvcl9jb2RlIHx8Ci0gICAgICAgICBkcGwgPCAob3BuZF9z ZWwgJiAzKSApCi0gICAgewotICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3Bf ZmF1bHQsIHJlZ3MtPmVycm9yX2NvZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg aWYgKCAhcHZfZW11bF9yZWFkX2Rlc2NyaXB0b3Ioc2VsLCB2LCAmYmFzZSwgJmxpbWl0LCAmYXIs IDApIHx8Ci0gICAgICAgICAhKGFyICYgX1NFR01FTlRfUykgfHwKLSAgICAgICAgICEoYXIgJiBf U0VHTUVOVF9DT0RFKSB8fAotICAgICAgICAgKCFqdW1wIHx8IChhciAmIF9TRUdNRU5UX0VDKSA/ Ci0gICAgICAgICAgKChhciA+PiAxMykgJiAzKSA+IChyZWdzLT5jcyAmIDMpIDoKLSAgICAgICAg ICAoKGFyID4+IDEzKSAmIDMpICE9IChyZWdzLT5jcyAmIDMpKSApCi0gICAgewotICAgICAgICBw dl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIHNlbCk7Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0gICAgaWYgKCAhKGFyICYgX1NFR01FTlRfUCkgKQotICAgIHsKLSAgICAgICAg cHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX25vX3NlZ21lbnQsIHNlbCk7Ci0gICAgICAgIHJl dHVybjsKLSAgICB9Ci0gICAgaWYgKCBvZmYgPiBsaW1pdCApCi0gICAgewotICAgICAgICBwdl9p bmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIDApOwotICAgICAgICByZXR1cm47Ci0g ICAgfQotCi0gICAgaWYgKCAhanVtcCApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc3Ms IGVzcCwgKnN0a3A7Ci0gICAgICAgIGludCByYzsKLSNkZWZpbmUgcHVzaChpdGVtKSBkbyBcCi0g ICAgICAgIHsgXAotICAgICAgICAgICAgLS1zdGtwOyBcCi0gICAgICAgICAgICBlc3AgLT0gNDsg XAotICAgICAgICAgICAgcmMgPSBfX3B1dF91c2VyKGl0ZW0sIHN0a3ApOyBcCi0gICAgICAgICAg ICBpZiAoIHJjICkgXAotICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgcHZfaW5qZWN0 X3BhZ2VfZmF1bHQoUEZFQ193cml0ZV9hY2Nlc3MsIFwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoc3RrcCArIDEpIC0gcmMpOyBcCi0gICAgICAg ICAgICAgICAgcmV0dXJuOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfSB3aGlsZSAoIDAg KQotCi0gICAgICAgIGlmICggKChhciA+PiAxMykgJiAzKSA8IChyZWdzLT5jcyAmIDMpICkKLSAg ICAgICAgewotICAgICAgICAgICAgc2VsIHw9IChhciA+PiAxMykgJiAzOwotICAgICAgICAgICAg LyogSW5uZXIgc3RhY2sga25vd24gb25seSBmb3Iga2VybmVsIHJpbmcuICovCi0gICAgICAgICAg ICBpZiAoIChzZWwgJiAzKSAhPSBHVUVTVF9LRVJORUxfUlBMKHYtPmRvbWFpbikgKQotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9m YXVsdCwgcmVncy0+ZXJyb3JfY29kZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZXNwID0gdi0+YXJjaC5wdl92Y3B1Lmtlcm5lbF9zcDsKLSAg ICAgICAgICAgIHNzID0gdi0+YXJjaC5wdl92Y3B1Lmtlcm5lbF9zczsKLSAgICAgICAgICAgIGlm ICggKHNzICYgMykgIT0gKHNlbCAmIDMpIHx8Ci0gICAgICAgICAgICAgICAgICFwdl9lbXVsX3Jl YWRfZGVzY3JpcHRvcihzcywgdiwgJmJhc2UsICZsaW1pdCwgJmFyLCAwKSB8fAotICAgICAgICAg ICAgICAgICAoKGFyID4+IDEzKSAmIDMpICE9IChzZWwgJiAzKSB8fAotICAgICAgICAgICAgICAg ICAhKGFyICYgX1NFR01FTlRfUykgfHwKLSAgICAgICAgICAgICAgICAgKGFyICYgX1NFR01FTlRf Q09ERSkgfHwKLSAgICAgICAgICAgICAgICAgIShhciAmIF9TRUdNRU5UX1dSKSApCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2ludmFs aWRfdHNzLCBzcyAmIH4zKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAoICEoYXIgJiBfU0VHTUVOVF9QKSB8fAotICAgICAgICAgICAgICAg ICAhY2hlY2tfc3RhY2tfbGltaXQoYXIsIGxpbWl0LCBlc3AsICg0ICsgbnBhcm0pICogNCkgKQot ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJB UF9zdGFja19lcnJvciwgc3MgJiB+Myk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgc3RrcCA9ICh1bnNpZ25lZCBpbnQgKikodW5zaWduZWQgbG9u ZykoKHVuc2lnbmVkIGludCliYXNlICsgZXNwKTsKLSAgICAgICAgICAgIGlmICggIWNvbXBhdF9h Y2Nlc3Nfb2soc3RrcCAtIDQgLSBucGFybSwgMTYgKyBucGFybSAqIDQpICkKLSAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQs IHJlZ3MtPmVycm9yX2NvZGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHB1c2gocmVncy0+c3MpOwotICAgICAgICAgICAgcHVzaChyZWdzLT5y c3ApOwotICAgICAgICAgICAgaWYgKCBucGFybSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgaW50ICp1c3RrcDsKLQotICAgICAgICAgICAgICAgIGlmICgg IXB2X2VtdWxfcmVhZF9kZXNjcmlwdG9yKHJlZ3MtPnNzLCB2LCAmYmFzZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGltaXQsICZhciwgMCkgfHwKLSAg ICAgICAgICAgICAgICAgICAgICgoYXIgPj4gMTMpICYgMykgIT0gKHJlZ3MtPmNzICYgMykgfHwK LSAgICAgICAgICAgICAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9TKSB8fAotICAgICAgICAgICAg ICAgICAgICAgKGFyICYgX1NFR01FTlRfQ09ERSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICEo YXIgJiBfU0VHTUVOVF9XUikgfHwKLSAgICAgICAgICAgICAgICAgICAgICFjaGVja19zdGFja19s aW1pdChhciwgbGltaXQsIGVzcCArIG5wYXJtICogNCwgbnBhcm0gKiA0KSApCi0gICAgICAgICAg ICAgICAgICAgIHJldHVybiBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIHJl Z3MtPmVycm9yX2NvZGUpOwotICAgICAgICAgICAgICAgIHVzdGtwID0gKHVuc2lnbmVkIGludCAq KSh1bnNpZ25lZCBsb25nKQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQp YmFzZSArIHJlZ3MtPmVzcCArIG5wYXJtICogNCk7Ci0gICAgICAgICAgICAgICAgaWYgKCAhY29t cGF0X2FjY2Vzc19vayh1c3RrcCAtIG5wYXJtLCAwICsgbnBhcm0gKiA0KSApCi0gICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBf Z3BfZmF1bHQsIHJlZ3MtPmVycm9yX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGFybTsKLQotICAgICAgICAgICAg ICAgICAgICAtLXVzdGtwOwotICAgICAgICAgICAgICAgICAgICByYyA9IF9fZ2V0X3VzZXIocGFy bSwgdXN0a3ApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHZfaW5qZWN0X3BhZ2VfZmF1bHQoMCwg KHVuc2lnbmVkIGxvbmcpKHVzdGtwICsgMSkgLSByYyk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHVz aChwYXJtKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlICggLS1ucGFybSApOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc2Vs IHw9IChyZWdzLT5jcyAmIDMpOwotICAgICAgICAgICAgZXNwID0gcmVncy0+cnNwOwotICAgICAg ICAgICAgc3MgPSByZWdzLT5zczsKLSAgICAgICAgICAgIGlmICggIXB2X2VtdWxfcmVhZF9kZXNj cmlwdG9yKHNzLCB2LCAmYmFzZSwgJmxpbWl0LCAmYXIsIDApIHx8Ci0gICAgICAgICAgICAgICAg ICgoYXIgPj4gMTMpICYgMykgIT0gKHNlbCAmIDMpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIHJlZ3MtPmVycm9y X2NvZGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmICggIWNoZWNrX3N0YWNrX2xpbWl0KGFyLCBsaW1pdCwgZXNwLCAyICogNCkgKQotICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9z dGFja19lcnJvciwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgc3RrcCA9ICh1bnNpZ25lZCBpbnQgKikodW5zaWduZWQgbG9uZykoKHVuc2ln bmVkIGludCliYXNlICsgZXNwKTsKLSAgICAgICAgICAgIGlmICggIWNvbXBhdF9hY2Nlc3Nfb2so c3RrcCAtIDIsIDIgKiA0KSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHZfaW5q ZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCByZWdzLT5lcnJvcl9jb2RlKTsKLSAgICAg ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVz aChyZWdzLT5jcyk7Ci0gICAgICAgIHB1c2gocmVncy0+cmlwICsgaW5zbl9sZW4pOwotI3VuZGVm IHB1c2gKLSAgICAgICAgcmVncy0+cnNwID0gZXNwOwotICAgICAgICByZWdzLT5zcyA9IHNzOwot ICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHNlbCB8PSAocmVncy0+Y3MgJiAzKTsKLQotICAgIHJl Z3MtPmNzID0gc2VsOwotICAgIHB2X2VtdWxfaW5zdHJ1Y3Rpb25fZG9uZShyZWdzLCBvZmYpOwot fQotCiB2b2lkIGRvX2dlbmVyYWxfcHJvdGVjdGlvbihzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKIHsKICAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7CkBAIC0yMDE4LDcgKzE2MzAsNyBA QCB2b2lkIGRvX2dlbmVyYWxfcHJvdGVjdGlvbihzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK ICAgICB9CiAgICAgZWxzZSBpZiAoIGlzX3B2XzMyYml0X3ZjcHUodikgJiYgcmVncy0+ZXJyb3Jf Y29kZSApCiAgICAgewotICAgICAgICBlbXVsYXRlX2dhdGVfb3AocmVncyk7CisgICAgICAgIHB2 X2VtdWxhdGVfZ2F0ZV9vcChyZWdzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi90cmFwcy5oIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9wdi90cmFwcy5oCmluZGV4IDVhZWIwNjE1NTEuLjNmM2JhYjRkOGMgMTAwNjQ0Ci0tLSBhL3hl bi9pbmNsdWRlL2FzbS14ODYvcHYvdHJhcHMuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2 L3RyYXBzLmgKQEAgLTI2LDEwICsyNiwxMiBAQAogI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KIAog aW50IHB2X2VtdWxhdGVfcHJpdmlsZWdlZF9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7 Cit2b2lkIHB2X2VtdWxhdGVfZ2F0ZV9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7CiAK ICNlbHNlICAvKiAhQ09ORklHX1BWICovCiAKIGludCBwdl9lbXVsYXRlX3ByaXZpbGVnZWRfb3Ao c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIDA7IH0KK3ZvaWQgcHZfZW11bGF0 ZV9nYXRlX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKSB7fQogCiAjZW5kaWYgLyogQ09O RklHX1BWICovCiAKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=