From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 13/18] x86/traps: move PV specific code in x86_64/traps.c Date: Fri, 5 May 2017 15:48:31 +0100 Message-ID: <20170505144836.8612-14-wei.liu2@citrix.com> References: <20170505144836.8612-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d6eyt-0004TT-IS for xen-devel@lists.xenproject.org; Fri, 05 May 2017 15:17:19 +0000 In-Reply-To: <20170505144836.8612-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 TW92ZSB0aGVtIHRvIHB2L3RyYXBzLmMuCgpUaGlzIGluIHR1cm4gcmVxdWlyZXMgZXhwb3J0aW5n IHB2X3BlcmNwdV90cmFwc19pbml0IGFuZApoeXBlcmNhbGxfcGFnZV9pbml0aWFsaXNlX3Jpbmcz X2tlcm5lbC4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdlLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8 d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvcHYvdHJhcHMuYyAgICAgICAg IHwgMzYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNo L3g4Ni94ODZfNjQvdHJhcHMuYyAgICAgfCAzNjMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9kb21haW4uaCB8ICAgNSArCiB4 ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmggIHwgICA0ICsKIDQgZmlsZXMgY2hhbmdlZCwg Mzc0IGluc2VydGlvbnMoKyksIDM2MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJj aC94ODYvcHYvdHJhcHMuYyBiL3hlbi9hcmNoL3g4Ni9wdi90cmFwcy5jCmluZGV4IGYyNjI3YjQy MTUuLjE3OGFjMjc3M2MgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi90cmFwcy5jCisrKyBi L3hlbi9hcmNoL3g4Ni9wdi90cmFwcy5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8YXNt L3NoYXJlZC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCisjaW5jbHVkZSA8cHVibGljL2Nh bGxiYWNrLmg+CisKIHZvaWQgZG9fZW50cnlfaW50ODIoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJl Z3MpCiB7CiAgICAgaWYgKCB1bmxpa2VseSh1bnRydXN0ZWRfbXNpKSApCkBAIC0zMjMsNiArMzI1 LDM2NyBAQCBpbnQgc2VuZF9ndWVzdF90cmFwKHN0cnVjdCBkb21haW4gKmQsIHVpbnQxNl90IHZj cHVpZCwgdW5zaWduZWQgaW50IHRyYXBfbnIpCiAgICAgcmV0dXJuIC1FSU87CiB9CiAKK3ZvaWQg dG9nZ2xlX2d1ZXN0X21vZGUoc3RydWN0IHZjcHUgKnYpCit7CisgICAgaWYgKCBpc19wdl8zMmJp dF92Y3B1KHYpICkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICggY3B1X2hhc19mc2dzYmFzZSAp CisgICAgeworICAgICAgICBpZiAoIHYtPmFyY2guZmxhZ3MgJiBURl9rZXJuZWxfbW9kZSApCisg ICAgICAgICAgICB2LT5hcmNoLnB2X3ZjcHUuZ3NfYmFzZV9rZXJuZWwgPSBfX3JkZ3NiYXNlKCk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHYtPmFyY2gucHZfdmNwdS5nc19iYXNlX3VzZXIg PSBfX3JkZ3NiYXNlKCk7CisgICAgfQorICAgIHYtPmFyY2guZmxhZ3MgXj0gVEZfa2VybmVsX21v ZGU7CisgICAgYXNtIHZvbGF0aWxlICggInN3YXBncyIgKTsKKyAgICB1cGRhdGVfY3IzKHYpOwor ICAgIC8qIERvbid0IGZsdXNoIHVzZXIgZ2xvYmFsIG1hcHBpbmdzIGZyb20gdGhlIFRMQi4gRG9u J3QgdGljayBUTEIgY2xvY2suICovCisgICAgYXNtIHZvbGF0aWxlICggIm1vdiAlMCwgJSVjcjMi IDogOiAiciIgKHYtPmFyY2guY3IzKSA6ICJtZW1vcnkiICk7CisKKyAgICBpZiAoICEodi0+YXJj aC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKSApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgg di0+YXJjaC5wdl92Y3B1Lm5lZWRfdXBkYXRlX3J1bnN0YXRlX2FyZWEgJiYKKyAgICAgICAgIHVw ZGF0ZV9ydW5zdGF0ZV9hcmVhKHYpICkKKyAgICAgICAgdi0+YXJjaC5wdl92Y3B1Lm5lZWRfdXBk YXRlX3J1bnN0YXRlX2FyZWEgPSAwOworCisgICAgaWYgKCB2LT5hcmNoLnB2X3ZjcHUucGVuZGlu Z19zeXN0ZW1fdGltZS52ZXJzaW9uICYmCisgICAgICAgICB1cGRhdGVfc2Vjb25kYXJ5X3N5c3Rl bV90aW1lKHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2LT5hcmNo LnB2X3ZjcHUucGVuZGluZ19zeXN0ZW1fdGltZSkgKQorICAgICAgICB2LT5hcmNoLnB2X3ZjcHUu cGVuZGluZ19zeXN0ZW1fdGltZS52ZXJzaW9uID0gMDsKK30KKwordW5zaWduZWQgbG9uZyBkb19p cmV0KHZvaWQpCit7CisgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MgPSBndWVzdF9jcHVf dXNlcl9yZWdzKCk7CisgICAgc3RydWN0IGlyZXRfY29udGV4dCBpcmV0X3NhdmVkOworICAgIHN0 cnVjdCB2Y3B1ICp2ID0gY3VycmVudDsKKworICAgIGlmICggdW5saWtlbHkoY29weV9mcm9tX3Vz ZXIoJmlyZXRfc2F2ZWQsICh2b2lkICopcmVncy0+cnNwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGlyZXRfc2F2ZWQpKSkgKQorICAgIHsKKyAgICAgICAgZ3ByaW50 ayhYRU5MT0dfRVJSLAorICAgICAgICAgICAgICAgICJGYXVsdCB3aGlsZSByZWFkaW5nIElSRVQg Y29udGV4dCBmcm9tIGd1ZXN0IHN0YWNrXG4iKTsKKyAgICAgICAgZ290byBleGl0X2FuZF9jcmFz aDsKKyAgICB9CisKKyAgICAvKiBSZXR1cm5pbmcgdG8gdXNlciBtb2RlPyAqLworICAgIGlmICgg KGlyZXRfc2F2ZWQuY3MgJiAzKSA9PSAzICkKKyAgICB7CisgICAgICAgIGlmICggdW5saWtlbHko cGFnZXRhYmxlX2lzX251bGwodi0+YXJjaC5ndWVzdF90YWJsZV91c2VyKSkgKQorICAgICAgICB7 CisgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICJH dWVzdCBzd2l0Y2hpbmcgdG8gdXNlciBtb2RlIHdpdGggbm8gdXNlciBwYWdlIHRhYmxlc1xuIik7 CisgICAgICAgICAgICBnb3RvIGV4aXRfYW5kX2NyYXNoOworICAgICAgICB9CisgICAgICAgIHRv Z2dsZV9ndWVzdF9tb2RlKHYpOworICAgIH0KKworICAgIGlmICggVk1fQVNTSVNUKHYtPmRvbWFp biwgYXJjaGl0ZWN0dXJhbF9pb3BsKSApCisgICAgICAgIHYtPmFyY2gucHZfdmNwdS5pb3BsID0g aXJldF9zYXZlZC5yZmxhZ3MgJiBYODZfRUZMQUdTX0lPUEw7CisKKyAgICByZWdzLT5yaXAgICAg PSBpcmV0X3NhdmVkLnJpcDsKKyAgICByZWdzLT5jcyAgICAgPSBpcmV0X3NhdmVkLmNzIHwgMzsg LyogZm9yY2UgZ3Vlc3QgcHJpdmlsZWdlICovCisgICAgcmVncy0+cmZsYWdzID0gKChpcmV0X3Nh dmVkLnJmbGFncyAmIH4oWDg2X0VGTEFHU19JT1BMfFg4Nl9FRkxBR1NfVk0pKQorICAgICAgICAg ICAgICAgICAgICB8IFg4Nl9FRkxBR1NfSUYpOworICAgIHJlZ3MtPnJzcCAgICA9IGlyZXRfc2F2 ZWQucnNwOworICAgIHJlZ3MtPnNzICAgICA9IGlyZXRfc2F2ZWQuc3MgfCAzOyAvKiBmb3JjZSBn dWVzdCBwcml2aWxlZ2UgKi8KKworICAgIGlmICggIShpcmV0X3NhdmVkLmZsYWdzICYgVkdDRl9p bl9zeXNjYWxsKSApCisgICAgeworICAgICAgICByZWdzLT5lbnRyeV92ZWN0b3IgJj0gflRSQVBf c3lzY2FsbDsKKyAgICAgICAgcmVncy0+cjExID0gaXJldF9zYXZlZC5yMTE7CisgICAgICAgIHJl Z3MtPnJjeCA9IGlyZXRfc2F2ZWQucmN4OworICAgIH0KKworICAgIC8qIFJlc3RvcmUgdXBjYWxs IG1hc2sgZnJvbSBzdXBwbGllZCBFRkxBR1MuSUYuICovCisgICAgdmNwdV9pbmZvKHYsIGV2dGNo bl91cGNhbGxfbWFzaykgPSAhKGlyZXRfc2F2ZWQucmZsYWdzICYgWDg2X0VGTEFHU19JRik7CisK KyAgICBhc3luY19leGNlcHRpb25fY2xlYW51cCh2KTsKKworICAgIC8qIFNhdmVkICVyYXggZ2V0 cyB3cml0dGVuIGJhY2sgdG8gcmVncy0+cmF4IGluIGVudHJ5LlMuICovCisgICAgcmV0dXJuIGly ZXRfc2F2ZWQucmF4OworCisgZXhpdF9hbmRfY3Jhc2g6CisgICAgZG9tYWluX2NyYXNoKHYtPmRv bWFpbik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd3JpdGVfc3R1 Yl90cmFtcG9saW5lKAorICAgIHVuc2lnbmVkIGNoYXIgKnN0dWIsIHVuc2lnbmVkIGxvbmcgc3R1 Yl92YSwKKyAgICB1bnNpZ25lZCBsb25nIHN0YWNrX2JvdHRvbSwgdW5zaWduZWQgbG9uZyB0YXJn ZXRfdmEpCit7CisgICAgLyogbW92YWJzcSAlcmF4LCBzdGFja19ib3R0b20gLSA4ICovCisgICAg c3R1YlswXSA9IDB4NDg7CisgICAgc3R1YlsxXSA9IDB4YTM7CisgICAgKih1aW50NjRfdCAqKSZz dHViWzJdID0gc3RhY2tfYm90dG9tIC0gODsKKworICAgIC8qIG1vdnEgJXJzcCwgJXJheCAqLwor ICAgIHN0dWJbMTBdID0gMHg0ODsKKyAgICBzdHViWzExXSA9IDB4ODk7CisgICAgc3R1YlsxMl0g PSAweGUwOworCisgICAgLyogbW92YWJzcSAkc3RhY2tfYm90dG9tIC0gOCwgJXJzcCAqLworICAg IHN0dWJbMTNdID0gMHg0ODsKKyAgICBzdHViWzE0XSA9IDB4YmM7CisgICAgKih1aW50NjRfdCAq KSZzdHViWzE1XSA9IHN0YWNrX2JvdHRvbSAtIDg7CisKKyAgICAvKiBwdXNocSAlcmF4ICovCisg ICAgc3R1YlsyM10gPSAweDUwOworCisgICAgLyogam1wIHRhcmdldF92YSAqLworICAgIHN0dWJb MjRdID0gMHhlOTsKKyAgICAqKGludDMyX3QgKikmc3R1YlsyNV0gPSB0YXJnZXRfdmEgLSAoc3R1 Yl92YSArIDI5KTsKKworICAgIC8qIFJvdW5kIHVwIHRvIGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMu ICovCisgICAgcmV0dXJuIDMyOworfQorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3R1YnMsIHN0 dWJzKTsKK3ZvaWQgbHN0YXJfZW50ZXIodm9pZCk7Cit2b2lkIGNzdGFyX2VudGVyKHZvaWQpOwor Cit2b2lkIHB2X3BlcmNwdV90cmFwc19pbml0KHZvaWQpCit7CisgICAgdW5zaWduZWQgbG9uZyBz dGFja19ib3R0b20gPSBnZXRfc3RhY2tfYm90dG9tKCk7CisgICAgdW5zaWduZWQgbG9uZyBzdHVi X3ZhID0gdGhpc19jcHUoc3R1YnMuYWRkcik7CisgICAgdW5zaWduZWQgY2hhciAqc3R1Yl9wYWdl OworICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisKKyAgICBzdHViX3BhZ2UgPSBtYXBfZG9tYWlu X3BhZ2UoX21mbih0aGlzX2NwdShzdHVicy5tZm4pKSk7CisKKyAgICAvKgorICAgICAqIFRyYW1w b2xpbmUgZm9yIFNZU0NBTEwgZW50cnkgZnJvbSA2NC1iaXQgbW9kZS4gIFRoZSBWVC14IEhWTSB2 Y3B1CisgICAgICogY29udGV4dCBzd2l0Y2ggbG9naWMgcmVsaWVzIG9uIHRoZSBTWVNDQUxMIHRy YW1wb2xpbmUgYmVpbmcgYXQgdGhlCisgICAgICogc3RhcnQgb2YgdGhlIHN0dWJzLgorICAgICAq LworICAgIHdybXNybChNU1JfTFNUQVIsIHN0dWJfdmEpOworICAgIG9mZnNldCA9IHdyaXRlX3N0 dWJfdHJhbXBvbGluZShzdHViX3BhZ2UgKyAoc3R1Yl92YSAmIH5QQUdFX01BU0spLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViX3ZhLCBzdGFja19ib3R0b20sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxzdGFyX2VudGVy KTsKKyAgICBzdHViX3ZhICs9IG9mZnNldDsKKworICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZf dmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgfHwKKyAgICAgICAgIGJvb3RfY3B1X2RhdGEueDg2 X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIgKQorICAgIHsKKyAgICAgICAgLyogU1lTRU5U RVIgZW50cnkuICovCisgICAgICAgIHdybXNybChNU1JfSUEzMl9TWVNFTlRFUl9FU1AsIHN0YWNr X2JvdHRvbSk7CisgICAgICAgIHdybXNybChNU1JfSUEzMl9TWVNFTlRFUl9FSVAsICh1bnNpZ25l ZCBsb25nKXN5c2VudGVyX2VudHJ5KTsKKyAgICAgICAgd3Jtc3IoTVNSX0lBMzJfU1lTRU5URVJf Q1MsIF9fSFlQRVJWSVNPUl9DUywgMCk7CisgICAgfQorCisgICAgLyogVHJhbXBvbGluZSBmb3Ig U1lTQ0FMTCBlbnRyeSBmcm9tIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KKyAgICB3cm1zcmwoTVNS X0NTVEFSLCBzdHViX3ZhKTsKKyAgICBvZmZzZXQgKz0gd3JpdGVfc3R1Yl90cmFtcG9saW5lKHN0 dWJfcGFnZSArIChzdHViX3ZhICYgflBBR0VfTUFTSyksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHViX3ZhLCBzdGFja19ib3R0b20sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyljc3Rhcl9lbnRlcik7CisKKyAgICAvKiBE b24ndCBjb25zdW1lIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBzdHViIHNwYWNlIGhlcmUuICovCisg ICAgQVNTRVJUKG9mZnNldCA8PSBTVFVCX0JVRl9TSVpFIC8gMik7CisKKyAgICB1bm1hcF9kb21h aW5fcGFnZShzdHViX3BhZ2UpOworCisgICAgLyogQ29tbW9uIFNZU0NBTEwgcGFyYW1ldGVycy4g Ki8KKyAgICB3cm1zcmwoTVNSX1NUQVIsIFhFTl9NU1JfU1RBUik7CisgICAgd3Jtc3JsKE1TUl9T WVNDQUxMX01BU0ssIFhFTl9TWVNDQUxMX01BU0spOworfQorCit2b2lkIGluaXRfaW50ODBfZGly ZWN0X3RyYXAoc3RydWN0IHZjcHUgKnYpCit7CisgICAgc3RydWN0IHRyYXBfaW5mbyAqdGkgPSAm di0+YXJjaC5wdl92Y3B1LnRyYXBfY3R4dFsweDgwXTsKKyAgICBzdHJ1Y3QgdHJhcF9ib3VuY2Ug KnRiID0gJnYtPmFyY2gucHZfdmNwdS5pbnQ4MF9ib3VuY2U7CisKKyAgICB0Yi0+ZmxhZ3MgPSBU QkZfRVhDRVBUSU9OOworICAgIHRiLT5jcyAgICA9IHRpLT5jczsKKyAgICB0Yi0+ZWlwICAgPSB0 aS0+YWRkcmVzczsKKworICAgIGlmICggbnVsbF90cmFwX2JvdW5jZSh2LCB0YikgKQorICAgICAg ICB0Yi0+ZmxhZ3MgPSAwOworfQorCitzdGF0aWMgbG9uZyByZWdpc3Rlcl9ndWVzdF9jYWxsYmFj ayhzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgKnJlZykKK3sKKyAgICBsb25nIHJldCA9IDA7Cisg ICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OworCisgICAgaWYgKCAhaXNfY2Fub25pY2FsX2Fk ZHJlc3MocmVnLT5hZGRyZXNzKSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgc3dp dGNoICggcmVnLT50eXBlICkKKyAgICB7CisgICAgY2FzZSBDQUxMQkFDS1RZUEVfZXZlbnQ6Cisg ICAgICAgIHYtPmFyY2gucHZfdmNwdS5ldmVudF9jYWxsYmFja19laXAgICAgPSByZWctPmFkZHJl c3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDQUxMQkFDS1RZUEVfZmFpbHNhZmU6Cisg ICAgICAgIHYtPmFyY2gucHZfdmNwdS5mYWlsc2FmZV9jYWxsYmFja19laXAgPSByZWctPmFkZHJl c3M7CisgICAgICAgIGlmICggcmVnLT5mbGFncyAmIENBTExCQUNLRl9tYXNrX2V2ZW50cyApCisg ICAgICAgICAgICBzZXRfYml0KF9WR0NGX2ZhaWxzYWZlX2Rpc2FibGVzX2V2ZW50cywKKyAgICAg ICAgICAgICAgICAgICAgJnYtPmFyY2gudmdjX2ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgY2xlYXJfYml0KF9WR0NGX2ZhaWxzYWZlX2Rpc2FibGVzX2V2ZW50cywKKyAgICAgICAg ICAgICAgICAgICAgICAmdi0+YXJjaC52Z2NfZmxhZ3MpOworICAgICAgICBicmVhazsKKworICAg IGNhc2UgQ0FMTEJBQ0tUWVBFX3N5c2NhbGw6CisgICAgICAgIHYtPmFyY2gucHZfdmNwdS5zeXNj YWxsX2NhbGxiYWNrX2VpcCAgPSByZWctPmFkZHJlc3M7CisgICAgICAgIGlmICggcmVnLT5mbGFn cyAmIENBTExCQUNLRl9tYXNrX2V2ZW50cyApCisgICAgICAgICAgICBzZXRfYml0KF9WR0NGX3N5 c2NhbGxfZGlzYWJsZXNfZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAmdi0+YXJjaC52Z2Nf ZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGVhcl9iaXQoX1ZHQ0Zfc3lzY2Fs bF9kaXNhYmxlc19ldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgJnYtPmFyY2gudmdjX2Zs YWdzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENBTExCQUNLVFlQRV9zeXNjYWxsMzI6 CisgICAgICAgIHYtPmFyY2gucHZfdmNwdS5zeXNjYWxsMzJfY2FsbGJhY2tfZWlwID0gcmVnLT5h ZGRyZXNzOworICAgICAgICB2LT5hcmNoLnB2X3ZjcHUuc3lzY2FsbDMyX2Rpc2FibGVzX2V2ZW50 cyA9CisgICAgICAgICAgICAhIShyZWctPmZsYWdzICYgQ0FMTEJBQ0tGX21hc2tfZXZlbnRzKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENBTExCQUNLVFlQRV9zeXNlbnRlcjoKKyAgICAg ICAgdi0+YXJjaC5wdl92Y3B1LnN5c2VudGVyX2NhbGxiYWNrX2VpcCA9IHJlZy0+YWRkcmVzczsK KyAgICAgICAgdi0+YXJjaC5wdl92Y3B1LnN5c2VudGVyX2Rpc2FibGVzX2V2ZW50cyA9CisgICAg ICAgICAgICAhIShyZWctPmZsYWdzICYgQ0FMTEJBQ0tGX21hc2tfZXZlbnRzKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIENBTExCQUNLVFlQRV9ubWk6CisgICAgICAgIHJldCA9IHJlZ2lz dGVyX2d1ZXN0X25taV9jYWxsYmFjayhyZWctPmFkZHJlc3MpOworICAgICAgICBicmVhazsKKwor ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldCA9IC1FTk9TWVM7CisgICAgICAgIGJyZWFrOworICAg IH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBsb25nIHVucmVnaXN0ZXJfZ3Vlc3Rf Y2FsbGJhY2soc3RydWN0IGNhbGxiYWNrX3VucmVnaXN0ZXIgKnVucmVnKQoreworICAgIGxvbmcg cmV0OworCisgICAgc3dpdGNoICggdW5yZWctPnR5cGUgKQorICAgIHsKKyAgICBjYXNlIENBTExC QUNLVFlQRV9ldmVudDoKKyAgICBjYXNlIENBTExCQUNLVFlQRV9mYWlsc2FmZToKKyAgICBjYXNl IENBTExCQUNLVFlQRV9zeXNjYWxsOgorICAgIGNhc2UgQ0FMTEJBQ0tUWVBFX3N5c2NhbGwzMjoK KyAgICBjYXNlIENBTExCQUNLVFlQRV9zeXNlbnRlcjoKKyAgICAgICAgcmV0ID0gLUVJTlZBTDsK KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENBTExCQUNLVFlQRV9ubWk6CisgICAgICAgIHJl dCA9IHVucmVnaXN0ZXJfZ3Vlc3Rfbm1pX2NhbGxiYWNrKCk7CisgICAgICAgIGJyZWFrOworCisg ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0ID0gLUVOT1NZUzsKKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgICAgcmV0dXJuIHJldDsKK30KKworCitsb25nIGRvX2NhbGxiYWNrX29wKGludCBjbWQs IFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9pZCkgYXJnKQoreworICAgIGxvbmcgcmV0 OworCisgICAgc3dpdGNoICggY21kICkKKyAgICB7CisgICAgY2FzZSBDQUxMQkFDS09QX3JlZ2lz dGVyOgorICAgIHsKKyAgICAgICAgc3RydWN0IGNhbGxiYWNrX3JlZ2lzdGVyIHJlZzsKKworICAg ICAgICByZXQgPSAtRUZBVUxUOworICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmcmVnLCBh cmcsIDEpICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJldCA9IHJlZ2lzdGVyX2d1 ZXN0X2NhbGxiYWNrKCZyZWcpOworICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgQ0FMTEJB Q0tPUF91bnJlZ2lzdGVyOgorICAgIHsKKyAgICAgICAgc3RydWN0IGNhbGxiYWNrX3VucmVnaXN0 ZXIgdW5yZWc7CisKKyAgICAgICAgcmV0ID0gLUVGQVVMVDsKKyAgICAgICAgaWYgKCBjb3B5X2Zy b21fZ3Vlc3QoJnVucmVnLCBhcmcsIDEpICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg IHJldCA9IHVucmVnaXN0ZXJfZ3Vlc3RfY2FsbGJhY2soJnVucmVnKTsKKyAgICB9CisgICAgYnJl YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXQgPSAtRU5PU1lTOworICAgICAgICBicmVh azsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitsb25nIGRvX3NldF9jYWxsYmFja3Mo dW5zaWduZWQgbG9uZyBldmVudF9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgZmFpbHNhZmVfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKK3sKKyAgICBzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIg ZXZlbnQgPSB7CisgICAgICAgIC50eXBlID0gQ0FMTEJBQ0tUWVBFX2V2ZW50LAorICAgICAgICAu YWRkcmVzcyA9IGV2ZW50X2FkZHJlc3MsCisgICAgfTsKKyAgICBzdHJ1Y3QgY2FsbGJhY2tfcmVn aXN0ZXIgZmFpbHNhZmUgPSB7CisgICAgICAgIC50eXBlID0gQ0FMTEJBQ0tUWVBFX2ZhaWxzYWZl LAorICAgICAgICAuYWRkcmVzcyA9IGZhaWxzYWZlX2FkZHJlc3MsCisgICAgfTsKKyAgICBzdHJ1 Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgc3lzY2FsbCA9IHsKKyAgICAgICAgLnR5cGUgPSBDQUxMQkFD S1RZUEVfc3lzY2FsbCwKKyAgICAgICAgLmFkZHJlc3MgPSBzeXNjYWxsX2FkZHJlc3MsCisgICAg fTsKKworICAgIHJlZ2lzdGVyX2d1ZXN0X2NhbGxiYWNrKCZldmVudCk7CisgICAgcmVnaXN0ZXJf Z3Vlc3RfY2FsbGJhY2soJmZhaWxzYWZlKTsKKyAgICByZWdpc3Rlcl9ndWVzdF9jYWxsYmFjaygm c3lzY2FsbCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBoeXBlcmNhbGxfcGFnZV9pbml0 aWFsaXNlX3JpbmczX2tlcm5lbCh2b2lkICpoeXBlcmNhbGxfcGFnZSkKK3sKKyAgICBjaGFyICpw OworICAgIGludCBpOworCisgICAgLyogRmlsbCBpbiBhbGwgdGhlIHRyYW5zZmVyIHBvaW50cyB3 aXRoIHRlbXBsYXRlIG1hY2hpbmUgY29kZS4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IChQQUdF X1NJWkUgLyAzMik7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIGkgPT0gX19IWVBFUlZJU09S X2lyZXQgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcCA9IChjaGFyICopKGh5 cGVyY2FsbF9wYWdlICsgKGkgKiAzMikpOworICAgICAgICAqKHU4ICAqKShwKyAwKSA9IDB4NTE7 ICAgIC8qIHB1c2ggJXJjeCAqLworICAgICAgICAqKHUxNiAqKShwKyAxKSA9IDB4NTM0MTsgIC8q IHB1c2ggJXIxMSAqLworICAgICAgICAqKHU4ICAqKShwKyAzKSA9IDB4Yjg7ICAgIC8qIG1vdiAg JDxpPiwlZWF4ICovCisgICAgICAgICoodTMyICopKHArIDQpID0gaTsKKyAgICAgICAgKih1MTYg KikocCsgOCkgPSAweDA1MGY7ICAvKiBzeXNjYWxsICovCisgICAgICAgICoodTE2ICopKHArMTAp ID0gMHg1YjQxOyAgLyogcG9wICAlcjExICovCisgICAgICAgICoodTggICopKHArMTIpID0gMHg1 OTsgICAgLyogcG9wICAlcmN4ICovCisgICAgICAgICoodTggICopKHArMTMpID0gMHhjMzsgICAg LyogcmV0ICovCisgICAgfQorCisgICAgLyoKKyAgICAgKiBIWVBFUlZJU09SX2lyZXQgaXMgc3Bl Y2lhbCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmV0dXJuIGFuZCBleHBlY3RzIGEKKyAgICAgKiBzcGVj aWFsIHN0YWNrIGZyYW1lLiBHdWVzdHMganVtcCBhdCB0aGlzIHRyYW5zZmVyIHBvaW50IGluc3Rl YWQgb2YKKyAgICAgKiBjYWxsaW5nIGl0LgorICAgICAqLworICAgIHAgPSAoY2hhciAqKShoeXBl cmNhbGxfcGFnZSArIChfX0hZUEVSVklTT1JfaXJldCAqIDMyKSk7CisgICAgKih1OCAgKikocCsg MCkgPSAweDUxOyAgICAvKiBwdXNoICVyY3ggKi8KKyAgICAqKHUxNiAqKShwKyAxKSA9IDB4NTM0 MTsgIC8qIHB1c2ggJXIxMSAqLworICAgICoodTggICopKHArIDMpID0gMHg1MDsgICAgLyogcHVz aCAlcmF4ICovCisgICAgKih1OCAgKikocCsgNCkgPSAweGI4OyAgICAvKiBtb3YgICRfX0hZUEVS VklTT1JfaXJldCwlZWF4ICovCisgICAgKih1MzIgKikocCsgNSkgPSBfX0hZUEVSVklTT1JfaXJl dDsKKyAgICAqKHUxNiAqKShwKyA5KSA9IDB4MDUwZjsgIC8qIHN5c2NhbGwgKi8KK30KKwogLyoK ICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni94ODZfNjQvdHJhcHMuYyBiL3hlbi9hcmNoL3g4Ni94ODZfNjQvdHJhcHMuYwppbmRleCBhMjM3 ZjRkNWMyLi4yMDI3YTZhNGFlIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYveDg2XzY0L3RyYXBz LmMKKysrIGIveGVuL2FyY2gveDg2L3g4Nl82NC90cmFwcy5jCkBAIC0yMyw2ICsyMyw4IEBACiAj aW5jbHVkZSA8YXNtL3NoYXJlZC5oPgogI2luY2x1ZGUgPGFzbS9odm0vaHZtLmg+CiAjaW5jbHVk ZSA8YXNtL2h2bS9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8YXNtL3B2L2RvbWFpbi5oPgorI2luY2x1 ZGUgPGFzbS9wdi90cmFwcy5oPgogI2luY2x1ZGUgPHB1YmxpYy9jYWxsYmFjay5oPgogCiAKQEAg LTI1NCwxNzEgKzI1Niw2IEBAIHZvaWQgZG9fZG91YmxlX2ZhdWx0KHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQogICAgIHBhbmljKCJET1VCTEUgRkFVTFQgLS0gc3lzdGVtIHNodXRkb3duIik7 CiB9CiAKLXZvaWQgdG9nZ2xlX2d1ZXN0X21vZGUoc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgaWYg KCBpc19wdl8zMmJpdF92Y3B1KHYpICkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICggY3B1X2hh c19mc2dzYmFzZSApCi0gICAgewotICAgICAgICBpZiAoIHYtPmFyY2guZmxhZ3MgJiBURl9rZXJu ZWxfbW9kZSApCi0gICAgICAgICAgICB2LT5hcmNoLnB2X3ZjcHUuZ3NfYmFzZV9rZXJuZWwgPSBf X3JkZ3NiYXNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHYtPmFyY2gucHZfdmNwdS5n c19iYXNlX3VzZXIgPSBfX3JkZ3NiYXNlKCk7Ci0gICAgfQotICAgIHYtPmFyY2guZmxhZ3MgXj0g VEZfa2VybmVsX21vZGU7Ci0gICAgYXNtIHZvbGF0aWxlICggInN3YXBncyIgKTsKLSAgICB1cGRh dGVfY3IzKHYpOwotICAgIC8qIERvbid0IGZsdXNoIHVzZXIgZ2xvYmFsIG1hcHBpbmdzIGZyb20g dGhlIFRMQi4gRG9uJ3QgdGljayBUTEIgY2xvY2suICovCi0gICAgYXNtIHZvbGF0aWxlICggIm1v diAlMCwgJSVjcjMiIDogOiAiciIgKHYtPmFyY2guY3IzKSA6ICJtZW1vcnkiICk7Ci0KLSAgICBp ZiAoICEodi0+YXJjaC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKSApCi0gICAgICAgIHJldHVybjsK LQotICAgIGlmICggdi0+YXJjaC5wdl92Y3B1Lm5lZWRfdXBkYXRlX3J1bnN0YXRlX2FyZWEgJiYK LSAgICAgICAgIHVwZGF0ZV9ydW5zdGF0ZV9hcmVhKHYpICkKLSAgICAgICAgdi0+YXJjaC5wdl92 Y3B1Lm5lZWRfdXBkYXRlX3J1bnN0YXRlX2FyZWEgPSAwOwotCi0gICAgaWYgKCB2LT5hcmNoLnB2 X3ZjcHUucGVuZGluZ19zeXN0ZW1fdGltZS52ZXJzaW9uICYmCi0gICAgICAgICB1cGRhdGVfc2Vj b25kYXJ5X3N5c3RlbV90aW1lKHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZ2LT5hcmNoLnB2X3ZjcHUucGVuZGluZ19zeXN0ZW1fdGltZSkgKQotICAgICAgICB2LT5h cmNoLnB2X3ZjcHUucGVuZGluZ19zeXN0ZW1fdGltZS52ZXJzaW9uID0gMDsKLX0KLQotdW5zaWdu ZWQgbG9uZyBkb19pcmV0KHZvaWQpCi17Ci0gICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3Mg PSBndWVzdF9jcHVfdXNlcl9yZWdzKCk7Ci0gICAgc3RydWN0IGlyZXRfY29udGV4dCBpcmV0X3Nh dmVkOwotICAgIHN0cnVjdCB2Y3B1ICp2ID0gY3VycmVudDsKLQotICAgIGlmICggdW5saWtlbHko Y29weV9mcm9tX3VzZXIoJmlyZXRfc2F2ZWQsICh2b2lkICopcmVncy0+cnNwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlyZXRfc2F2ZWQpKSkgKQotICAgIHsKLSAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAotICAgICAgICAgICAgICAgICJGYXVsdCB3aGlsZSBy ZWFkaW5nIElSRVQgY29udGV4dCBmcm9tIGd1ZXN0IHN0YWNrXG4iKTsKLSAgICAgICAgZ290byBl eGl0X2FuZF9jcmFzaDsKLSAgICB9Ci0KLSAgICAvKiBSZXR1cm5pbmcgdG8gdXNlciBtb2RlPyAq LwotICAgIGlmICggKGlyZXRfc2F2ZWQuY3MgJiAzKSA9PSAzICkKLSAgICB7Ci0gICAgICAgIGlm ICggdW5saWtlbHkocGFnZXRhYmxlX2lzX251bGwodi0+YXJjaC5ndWVzdF90YWJsZV91c2VyKSkg KQotICAgICAgICB7Ci0gICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsCi0gICAgICAgICAg ICAgICAgICAgICJHdWVzdCBzd2l0Y2hpbmcgdG8gdXNlciBtb2RlIHdpdGggbm8gdXNlciBwYWdl IHRhYmxlc1xuIik7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfYW5kX2NyYXNoOwotICAgICAgICB9 Ci0gICAgICAgIHRvZ2dsZV9ndWVzdF9tb2RlKHYpOwotICAgIH0KLQotICAgIGlmICggVk1fQVNT SVNUKHYtPmRvbWFpbiwgYXJjaGl0ZWN0dXJhbF9pb3BsKSApCi0gICAgICAgIHYtPmFyY2gucHZf dmNwdS5pb3BsID0gaXJldF9zYXZlZC5yZmxhZ3MgJiBYODZfRUZMQUdTX0lPUEw7Ci0KLSAgICBy ZWdzLT5yaXAgICAgPSBpcmV0X3NhdmVkLnJpcDsKLSAgICByZWdzLT5jcyAgICAgPSBpcmV0X3Nh dmVkLmNzIHwgMzsgLyogZm9yY2UgZ3Vlc3QgcHJpdmlsZWdlICovCi0gICAgcmVncy0+cmZsYWdz ID0gKChpcmV0X3NhdmVkLnJmbGFncyAmIH4oWDg2X0VGTEFHU19JT1BMfFg4Nl9FRkxBR1NfVk0p KQotICAgICAgICAgICAgICAgICAgICB8IFg4Nl9FRkxBR1NfSUYpOwotICAgIHJlZ3MtPnJzcCAg ICA9IGlyZXRfc2F2ZWQucnNwOwotICAgIHJlZ3MtPnNzICAgICA9IGlyZXRfc2F2ZWQuc3MgfCAz OyAvKiBmb3JjZSBndWVzdCBwcml2aWxlZ2UgKi8KLQotICAgIGlmICggIShpcmV0X3NhdmVkLmZs YWdzICYgVkdDRl9pbl9zeXNjYWxsKSApCi0gICAgewotICAgICAgICByZWdzLT5lbnRyeV92ZWN0 b3IgJj0gflRSQVBfc3lzY2FsbDsKLSAgICAgICAgcmVncy0+cjExID0gaXJldF9zYXZlZC5yMTE7 Ci0gICAgICAgIHJlZ3MtPnJjeCA9IGlyZXRfc2F2ZWQucmN4OwotICAgIH0KLQotICAgIC8qIFJl c3RvcmUgdXBjYWxsIG1hc2sgZnJvbSBzdXBwbGllZCBFRkxBR1MuSUYuICovCi0gICAgdmNwdV9p bmZvKHYsIGV2dGNobl91cGNhbGxfbWFzaykgPSAhKGlyZXRfc2F2ZWQucmZsYWdzICYgWDg2X0VG TEFHU19JRik7Ci0KLSAgICBhc3luY19leGNlcHRpb25fY2xlYW51cCh2KTsKLQotICAgIC8qIFNh dmVkICVyYXggZ2V0cyB3cml0dGVuIGJhY2sgdG8gcmVncy0+cmF4IGluIGVudHJ5LlMuICovCi0g ICAgcmV0dXJuIGlyZXRfc2F2ZWQucmF4OwotCi0gZXhpdF9hbmRfY3Jhc2g6Ci0gICAgZG9tYWlu X2NyYXNoKHYtPmRvbWFpbik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBp bnQgd3JpdGVfc3R1Yl90cmFtcG9saW5lKAotICAgIHVuc2lnbmVkIGNoYXIgKnN0dWIsIHVuc2ln bmVkIGxvbmcgc3R1Yl92YSwKLSAgICB1bnNpZ25lZCBsb25nIHN0YWNrX2JvdHRvbSwgdW5zaWdu ZWQgbG9uZyB0YXJnZXRfdmEpCi17Ci0gICAgLyogbW92YWJzcSAlcmF4LCBzdGFja19ib3R0b20g LSA4ICovCi0gICAgc3R1YlswXSA9IDB4NDg7Ci0gICAgc3R1YlsxXSA9IDB4YTM7Ci0gICAgKih1 aW50NjRfdCAqKSZzdHViWzJdID0gc3RhY2tfYm90dG9tIC0gODsKLQotICAgIC8qIG1vdnEgJXJz cCwgJXJheCAqLwotICAgIHN0dWJbMTBdID0gMHg0ODsKLSAgICBzdHViWzExXSA9IDB4ODk7Ci0g ICAgc3R1YlsxMl0gPSAweGUwOwotCi0gICAgLyogbW92YWJzcSAkc3RhY2tfYm90dG9tIC0gOCwg JXJzcCAqLwotICAgIHN0dWJbMTNdID0gMHg0ODsKLSAgICBzdHViWzE0XSA9IDB4YmM7Ci0gICAg Kih1aW50NjRfdCAqKSZzdHViWzE1XSA9IHN0YWNrX2JvdHRvbSAtIDg7Ci0KLSAgICAvKiBwdXNo cSAlcmF4ICovCi0gICAgc3R1YlsyM10gPSAweDUwOwotCi0gICAgLyogam1wIHRhcmdldF92YSAq LwotICAgIHN0dWJbMjRdID0gMHhlOTsKLSAgICAqKGludDMyX3QgKikmc3R1YlsyNV0gPSB0YXJn ZXRfdmEgLSAoc3R1Yl92YSArIDI5KTsKLQotICAgIC8qIFJvdW5kIHVwIHRvIGEgbXVsdGlwbGUg b2YgMTYgYnl0ZXMuICovCi0gICAgcmV0dXJuIDMyOwotfQotCi1ERUZJTkVfUEVSX0NQVShzdHJ1 Y3Qgc3R1YnMsIHN0dWJzKTsKLXZvaWQgbHN0YXJfZW50ZXIodm9pZCk7Ci12b2lkIGNzdGFyX2Vu dGVyKHZvaWQpOwotCi1zdGF0aWMgdm9pZCBwdl9wZXJjcHVfdHJhcHNfaW5pdCh2b2lkKQotewot ICAgIHVuc2lnbmVkIGxvbmcgc3RhY2tfYm90dG9tID0gZ2V0X3N0YWNrX2JvdHRvbSgpOwotICAg IHVuc2lnbmVkIGxvbmcgc3R1Yl92YSA9IHRoaXNfY3B1KHN0dWJzLmFkZHIpOwotICAgIHVuc2ln bmVkIGNoYXIgKnN0dWJfcGFnZTsKLSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCi0gICAgc3R1 Yl9wYWdlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4odGhpc19jcHUoc3R1YnMubWZuKSkpOwotCi0g ICAgLyoKLSAgICAgKiBUcmFtcG9saW5lIGZvciBTWVNDQUxMIGVudHJ5IGZyb20gNjQtYml0IG1v ZGUuICBUaGUgVlQteCBIVk0gdmNwdQotICAgICAqIGNvbnRleHQgc3dpdGNoIGxvZ2ljIHJlbGll cyBvbiB0aGUgU1lTQ0FMTCB0cmFtcG9saW5lIGJlaW5nIGF0IHRoZQotICAgICAqIHN0YXJ0IG9m IHRoZSBzdHVicy4KLSAgICAgKi8KLSAgICB3cm1zcmwoTVNSX0xTVEFSLCBzdHViX3ZhKTsKLSAg ICBvZmZzZXQgPSB3cml0ZV9zdHViX3RyYW1wb2xpbmUoc3R1Yl9wYWdlICsgKHN0dWJfdmEgJiB+ UEFHRV9NQVNLKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yl92YSwg c3RhY2tfYm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWdu ZWQgbG9uZylsc3Rhcl9lbnRlcik7Ci0gICAgc3R1Yl92YSArPSBvZmZzZXQ7Ci0KLSAgICBpZiAo IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMIHx8Ci0gICAgICAg ICBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9DRU5UQVVSICkKLSAgICB7 Ci0gICAgICAgIC8qIFNZU0VOVEVSIGVudHJ5LiAqLwotICAgICAgICB3cm1zcmwoTVNSX0lBMzJf U1lTRU5URVJfRVNQLCBzdGFja19ib3R0b20pOwotICAgICAgICB3cm1zcmwoTVNSX0lBMzJfU1lT RU5URVJfRUlQLCAodW5zaWduZWQgbG9uZylzeXNlbnRlcl9lbnRyeSk7Ci0gICAgICAgIHdybXNy KE1TUl9JQTMyX1NZU0VOVEVSX0NTLCBfX0hZUEVSVklTT1JfQ1MsIDApOwotICAgIH0KLQotICAg IC8qIFRyYW1wb2xpbmUgZm9yIFNZU0NBTEwgZW50cnkgZnJvbSBjb21wYXRpYmlsaXR5IG1vZGUu ICovCi0gICAgd3Jtc3JsKE1TUl9DU1RBUiwgc3R1Yl92YSk7Ci0gICAgb2Zmc2V0ICs9IHdyaXRl X3N0dWJfdHJhbXBvbGluZShzdHViX3BhZ2UgKyAoc3R1Yl92YSAmIH5QQUdFX01BU0spLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yl92YSwgc3RhY2tfYm90dG9tLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpY3N0YXJf ZW50ZXIpOwotCi0gICAgLyogRG9uJ3QgY29uc3VtZSBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgc3R1 YiBzcGFjZSBoZXJlLiAqLwotICAgIEFTU0VSVChvZmZzZXQgPD0gU1RVQl9CVUZfU0laRSAvIDIp OwotCi0gICAgdW5tYXBfZG9tYWluX3BhZ2Uoc3R1Yl9wYWdlKTsKLQotICAgIC8qIENvbW1vbiBT WVNDQUxMIHBhcmFtZXRlcnMuICovCi0gICAgd3Jtc3JsKE1TUl9TVEFSLCBYRU5fTVNSX1NUQVIp OwotICAgIHdybXNybChNU1JfU1lTQ0FMTF9NQVNLLCBYRU5fU1lTQ0FMTF9NQVNLKTsKLX0KLQog dm9pZCBzdWJhcmNoX3BlcmNwdV90cmFwc19pbml0KHZvaWQpCiB7CiAgICAgLyogSVNUX01BWCBJ U1QgcGFnZXMgKyAxIHN5c2NhbGwgcGFnZSArIDEgZ3VhcmQgcGFnZSArIHByaW1hcnkgc3RhY2su ICovCkBAIC00MjcsMjAyICsyNjQsNiBAQCB2b2lkIHN1YmFyY2hfcGVyY3B1X3RyYXBzX2luaXQo dm9pZCkKICAgICBwdl9wZXJjcHVfdHJhcHNfaW5pdCgpOwogfQogCi12b2lkIGluaXRfaW50ODBf ZGlyZWN0X3RyYXAoc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgc3RydWN0IHRyYXBfaW5mbyAqdGkg PSAmdi0+YXJjaC5wdl92Y3B1LnRyYXBfY3R4dFsweDgwXTsKLSAgICBzdHJ1Y3QgdHJhcF9ib3Vu Y2UgKnRiID0gJnYtPmFyY2gucHZfdmNwdS5pbnQ4MF9ib3VuY2U7Ci0KLSAgICB0Yi0+ZmxhZ3Mg PSBUQkZfRVhDRVBUSU9OOwotICAgIHRiLT5jcyAgICA9IHRpLT5jczsKLSAgICB0Yi0+ZWlwICAg PSB0aS0+YWRkcmVzczsKLQotICAgIGlmICggbnVsbF90cmFwX2JvdW5jZSh2LCB0YikgKQotICAg ICAgICB0Yi0+ZmxhZ3MgPSAwOwotfQotCi1zdGF0aWMgbG9uZyByZWdpc3Rlcl9ndWVzdF9jYWxs YmFjayhzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgKnJlZykKLXsKLSAgICBsb25nIHJldCA9IDA7 Ci0gICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OwotCi0gICAgaWYgKCAhaXNfY2Fub25pY2Fs X2FkZHJlc3MocmVnLT5hZGRyZXNzKSApCi0gICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAg c3dpdGNoICggcmVnLT50eXBlICkKLSAgICB7Ci0gICAgY2FzZSBDQUxMQkFDS1RZUEVfZXZlbnQ6 Ci0gICAgICAgIHYtPmFyY2gucHZfdmNwdS5ldmVudF9jYWxsYmFja19laXAgICAgPSByZWctPmFk ZHJlc3M7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDQUxMQkFDS1RZUEVfZmFpbHNhZmU6 Ci0gICAgICAgIHYtPmFyY2gucHZfdmNwdS5mYWlsc2FmZV9jYWxsYmFja19laXAgPSByZWctPmFk ZHJlc3M7Ci0gICAgICAgIGlmICggcmVnLT5mbGFncyAmIENBTExCQUNLRl9tYXNrX2V2ZW50cyAp Ci0gICAgICAgICAgICBzZXRfYml0KF9WR0NGX2ZhaWxzYWZlX2Rpc2FibGVzX2V2ZW50cywKLSAg ICAgICAgICAgICAgICAgICAgJnYtPmFyY2gudmdjX2ZsYWdzKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgICAgY2xlYXJfYml0KF9WR0NGX2ZhaWxzYWZlX2Rpc2FibGVzX2V2ZW50cywKLSAgICAg ICAgICAgICAgICAgICAgICAmdi0+YXJjaC52Z2NfZmxhZ3MpOwotICAgICAgICBicmVhazsKLQot ICAgIGNhc2UgQ0FMTEJBQ0tUWVBFX3N5c2NhbGw6Ci0gICAgICAgIHYtPmFyY2gucHZfdmNwdS5z eXNjYWxsX2NhbGxiYWNrX2VpcCAgPSByZWctPmFkZHJlc3M7Ci0gICAgICAgIGlmICggcmVnLT5m bGFncyAmIENBTExCQUNLRl9tYXNrX2V2ZW50cyApCi0gICAgICAgICAgICBzZXRfYml0KF9WR0NG X3N5c2NhbGxfZGlzYWJsZXNfZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAmdi0+YXJjaC52 Z2NfZmxhZ3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbGVhcl9iaXQoX1ZHQ0Zfc3lz Y2FsbF9kaXNhYmxlc19ldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgJnYtPmFyY2gudmdj X2ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENBTExCQUNLVFlQRV9zeXNjYWxs MzI6Ci0gICAgICAgIHYtPmFyY2gucHZfdmNwdS5zeXNjYWxsMzJfY2FsbGJhY2tfZWlwID0gcmVn LT5hZGRyZXNzOwotICAgICAgICB2LT5hcmNoLnB2X3ZjcHUuc3lzY2FsbDMyX2Rpc2FibGVzX2V2 ZW50cyA9Ci0gICAgICAgICAgICAhIShyZWctPmZsYWdzICYgQ0FMTEJBQ0tGX21hc2tfZXZlbnRz KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENBTExCQUNLVFlQRV9zeXNlbnRlcjoKLSAg ICAgICAgdi0+YXJjaC5wdl92Y3B1LnN5c2VudGVyX2NhbGxiYWNrX2VpcCA9IHJlZy0+YWRkcmVz czsKLSAgICAgICAgdi0+YXJjaC5wdl92Y3B1LnN5c2VudGVyX2Rpc2FibGVzX2V2ZW50cyA9Ci0g ICAgICAgICAgICAhIShyZWctPmZsYWdzICYgQ0FMTEJBQ0tGX21hc2tfZXZlbnRzKTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICBjYXNlIENBTExCQUNLVFlQRV9ubWk6Ci0gICAgICAgIHJldCA9IHJl Z2lzdGVyX2d1ZXN0X25taV9jYWxsYmFjayhyZWctPmFkZHJlc3MpOwotICAgICAgICBicmVhazsK LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IC1FTk9TWVM7Ci0gICAgICAgIGJyZWFrOwot ICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBsb25nIHVucmVnaXN0ZXJfZ3Vl c3RfY2FsbGJhY2soc3RydWN0IGNhbGxiYWNrX3VucmVnaXN0ZXIgKnVucmVnKQotewotICAgIGxv bmcgcmV0OwotCi0gICAgc3dpdGNoICggdW5yZWctPnR5cGUgKQotICAgIHsKLSAgICBjYXNlIENB TExCQUNLVFlQRV9ldmVudDoKLSAgICBjYXNlIENBTExCQUNLVFlQRV9mYWlsc2FmZToKLSAgICBj YXNlIENBTExCQUNLVFlQRV9zeXNjYWxsOgotICAgIGNhc2UgQ0FMTEJBQ0tUWVBFX3N5c2NhbGwz MjoKLSAgICBjYXNlIENBTExCQUNLVFlQRV9zeXNlbnRlcjoKLSAgICAgICAgcmV0ID0gLUVJTlZB TDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENBTExCQUNLVFlQRV9ubWk6Ci0gICAgICAg IHJldCA9IHVucmVnaXN0ZXJfZ3Vlc3Rfbm1pX2NhbGxiYWNrKCk7Ci0gICAgICAgIGJyZWFrOwot Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gLUVOT1NZUzsKLSAgICAgICAgYnJlYWs7Ci0g ICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotCi1sb25nIGRvX2NhbGxiYWNrX29wKGludCBj bWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9pZCkgYXJnKQotewotICAgIGxvbmcg cmV0OwotCi0gICAgc3dpdGNoICggY21kICkKLSAgICB7Ci0gICAgY2FzZSBDQUxMQkFDS09QX3Jl Z2lzdGVyOgotICAgIHsKLSAgICAgICAgc3RydWN0IGNhbGxiYWNrX3JlZ2lzdGVyIHJlZzsKLQot ICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmcmVn LCBhcmcsIDEpICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJldCA9IHJlZ2lzdGVy X2d1ZXN0X2NhbGxiYWNrKCZyZWcpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgQ0FM TEJBQ0tPUF91bnJlZ2lzdGVyOgotICAgIHsKLSAgICAgICAgc3RydWN0IGNhbGxiYWNrX3VucmVn aXN0ZXIgdW5yZWc7Ci0KLSAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgaWYgKCBjb3B5 X2Zyb21fZ3Vlc3QoJnVucmVnLCBhcmcsIDEpICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgIHJldCA9IHVucmVnaXN0ZXJfZ3Vlc3RfY2FsbGJhY2soJnVucmVnKTsKLSAgICB9Ci0gICAg YnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXQgPSAtRU5PU1lTOwotICAgICAgICBi cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1sb25nIGRvX3NldF9jYWxsYmFj a3ModW5zaWduZWQgbG9uZyBldmVudF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgZmFpbHNhZmVfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKLXsKLSAgICBzdHJ1Y3QgY2FsbGJhY2tfcmVnaXN0 ZXIgZXZlbnQgPSB7Ci0gICAgICAgIC50eXBlID0gQ0FMTEJBQ0tUWVBFX2V2ZW50LAotICAgICAg ICAuYWRkcmVzcyA9IGV2ZW50X2FkZHJlc3MsCi0gICAgfTsKLSAgICBzdHJ1Y3QgY2FsbGJhY2tf cmVnaXN0ZXIgZmFpbHNhZmUgPSB7Ci0gICAgICAgIC50eXBlID0gQ0FMTEJBQ0tUWVBFX2ZhaWxz YWZlLAotICAgICAgICAuYWRkcmVzcyA9IGZhaWxzYWZlX2FkZHJlc3MsCi0gICAgfTsKLSAgICBz dHJ1Y3QgY2FsbGJhY2tfcmVnaXN0ZXIgc3lzY2FsbCA9IHsKLSAgICAgICAgLnR5cGUgPSBDQUxM QkFDS1RZUEVfc3lzY2FsbCwKLSAgICAgICAgLmFkZHJlc3MgPSBzeXNjYWxsX2FkZHJlc3MsCi0g ICAgfTsKLQotICAgIHJlZ2lzdGVyX2d1ZXN0X2NhbGxiYWNrKCZldmVudCk7Ci0gICAgcmVnaXN0 ZXJfZ3Vlc3RfY2FsbGJhY2soJmZhaWxzYWZlKTsKLSAgICByZWdpc3Rlcl9ndWVzdF9jYWxsYmFj aygmc3lzY2FsbCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaHlwZXJjYWxs X3BhZ2VfaW5pdGlhbGlzZV9yaW5nM19rZXJuZWwodm9pZCAqaHlwZXJjYWxsX3BhZ2UpCi17Ci0g ICAgY2hhciAqcDsKLSAgICBpbnQgaTsKLQotICAgIC8qIEZpbGwgaW4gYWxsIHRoZSB0cmFuc2Zl ciBwb2ludHMgd2l0aCB0ZW1wbGF0ZSBtYWNoaW5lIGNvZGUuICovCi0gICAgZm9yICggaSA9IDA7 IGkgPCAoUEFHRV9TSVpFIC8gMzIpOyBpKysgKQotICAgIHsKLSAgICAgICAgaWYgKCBpID09IF9f SFlQRVJWSVNPUl9pcmV0ICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHAgPSAo Y2hhciAqKShoeXBlcmNhbGxfcGFnZSArIChpICogMzIpKTsKLSAgICAgICAgKih1OCAgKikocCsg MCkgPSAweDUxOyAgICAvKiBwdXNoICVyY3ggKi8KLSAgICAgICAgKih1MTYgKikocCsgMSkgPSAw eDUzNDE7ICAvKiBwdXNoICVyMTEgKi8KLSAgICAgICAgKih1OCAgKikocCsgMykgPSAweGI4OyAg ICAvKiBtb3YgICQ8aT4sJWVheCAqLwotICAgICAgICAqKHUzMiAqKShwKyA0KSA9IGk7Ci0gICAg ICAgICoodTE2ICopKHArIDgpID0gMHgwNTBmOyAgLyogc3lzY2FsbCAqLwotICAgICAgICAqKHUx NiAqKShwKzEwKSA9IDB4NWI0MTsgIC8qIHBvcCAgJXIxMSAqLwotICAgICAgICAqKHU4ICAqKShw KzEyKSA9IDB4NTk7ICAgIC8qIHBvcCAgJXJjeCAqLwotICAgICAgICAqKHU4ICAqKShwKzEzKSA9 IDB4YzM7ICAgIC8qIHJldCAqLwotICAgIH0KLQotICAgIC8qCi0gICAgICogSFlQRVJWSVNPUl9p cmV0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBkb2Vzbid0IHJldHVybiBhbmQgZXhwZWN0cyBhCi0g ICAgICogc3BlY2lhbCBzdGFjayBmcmFtZS4gR3Vlc3RzIGp1bXAgYXQgdGhpcyB0cmFuc2ZlciBw b2ludCBpbnN0ZWFkIG9mCi0gICAgICogY2FsbGluZyBpdC4KLSAgICAgKi8KLSAgICBwID0gKGNo YXIgKikoaHlwZXJjYWxsX3BhZ2UgKyAoX19IWVBFUlZJU09SX2lyZXQgKiAzMikpOwotICAgICoo dTggICopKHArIDApID0gMHg1MTsgICAgLyogcHVzaCAlcmN4ICovCi0gICAgKih1MTYgKikocCsg MSkgPSAweDUzNDE7ICAvKiBwdXNoICVyMTEgKi8KLSAgICAqKHU4ICAqKShwKyAzKSA9IDB4NTA7 ICAgIC8qIHB1c2ggJXJheCAqLwotICAgICoodTggICopKHArIDQpID0gMHhiODsgICAgLyogbW92 ICAkX19IWVBFUlZJU09SX2lyZXQsJWVheCAqLwotICAgICoodTMyICopKHArIDUpID0gX19IWVBF UlZJU09SX2lyZXQ7Ci0gICAgKih1MTYgKikocCsgOSkgPSAweDA1MGY7ICAvKiBzeXNjYWxsICov Ci19Ci0KICNpbmNsdWRlICJjb21wYXQvdHJhcHMuYyIKIAogdm9pZCBoeXBlcmNhbGxfcGFnZV9p bml0aWFsaXNlKHN0cnVjdCBkb21haW4gKmQsIHZvaWQgKmh5cGVyY2FsbF9wYWdlKQpkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS14 ODYvcHYvZG9tYWluLmgKaW5kZXggYWNkZjE0MGZiZC4uZGZhNjBiMDgwYyAxMDA2NDQKLS0tIGEv eGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9kb21haW4uaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2 L3B2L2RvbWFpbi5oCkBAIC0yOSw2ICsyOSw4IEBAIHZvaWQgcHZfZG9tYWluX2Rlc3Ryb3koc3Ry dWN0IGRvbWFpbiAqZCk7CiBpbnQgcHZfZG9tYWluX2luaXRpYWxpc2Uoc3RydWN0IGRvbWFpbiAq ZCwgdW5zaWduZWQgaW50IGRvbWNyX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4ZW5fYXJjaF9kb21haW5jb25maWcgKmNvbmZpZyk7CiAKK3ZvaWQgaHlwZXJjYWxsX3Bh Z2VfaW5pdGlhbGlzZV9yaW5nM19rZXJuZWwodm9pZCAqaHlwZXJjYWxsX3BhZ2UpOworCiAjZWxz ZSAgLyogIUNPTkZJR19QViAqLwogCiAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CkBAIC00Miw2ICs0 NCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IHB2X2RvbWFpbl9pbml0aWFsaXNlKHN0cnVjdCBkb21h aW4gKmQsCiB7CiAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwogfQorCit2b2lkIGh5cGVyY2FsbF9w YWdlX2luaXRpYWxpc2VfcmluZzNfa2VybmVsKHZvaWQgKmh5cGVyY2FsbF9wYWdlKSB7fQorCiAj ZW5kaWYJLyogQ09ORklHX1BWICovCiAKIHZvaWQgcGFyYXZpcnRfY3R4dF9zd2l0Y2hfZnJvbShz dHJ1Y3QgdmNwdSAqdik7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBz LmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmgKaW5kZXggZjQxMjg3YWRkNy4uNDNk OTExMmI2ZCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi90cmFwcy5oCisrKyBi L3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvdHJhcHMuaApAQCAtMzAsNiArMzAsOCBAQCB2b2lkIGVt dWxhdGVfZ2F0ZV9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7CiBpbnQgZW11bGF0ZV9m b3JjZWRfaW52YWxpZF9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7CiBpbnQgZW11bGF0 ZV9pbnZhbGlkX3JkdHNjcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7CiAKK3ZvaWQgcHZf cGVyY3B1X3RyYXBzX2luaXQodm9pZCk7CisKICNlbHNlICAvKiAhQ09ORklHX1BWICovCiAKICNp bmNsdWRlIDx4ZW4vZXJybm8uaD4KQEAgLTM5LDYgKzQxLDggQEAgdm9pZCBlbXVsYXRlX2dhdGVf b3Aoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpIHt9CiBpbnQgZW11bGF0ZV9mb3JjZWRfaW52 YWxpZF9vcChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykgeyByZXR1cm4gLUVPUE5PVFNVUFA7 IH0KIGludCBlbXVsYXRlX2ludmFsaWRfcmR0c2NwKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz KSB7IHJldHVybiAtRU9QTk9UU1VQUDsgfQogCit2b2lkIHB2X3BlcmNwdV90cmFwc19pbml0KHZv aWQpIHt9CisKICNlbmRpZgkvKiBDT05GSUdfUFYgKi8KIAogI2VuZGlmCS8qIF9fWDg2X1BWX1RS QVBTX0hfXyAqLwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==