From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: [PATCH v6 11/12] x86/microcode: Synchronize late microcode loading Date: Mon, 11 Mar 2019 15:57:35 +0800 Message-ID: <1552291056-20286-12-git-send-email-chao.gao@intel.com> References: <1552291056-20286-1-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h3Fl1-0003yw-HM for xen-devel@lists.xenproject.org; Mon, 11 Mar 2019 07:53:59 +0000 In-Reply-To: <1552291056-20286-1-git-send-email-chao.gao@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Sergey Dyasli , Kevin Tian , Borislav Petkov , Wei Liu , Jun Nakajima , Andrew Cooper , Jan Beulich , Ashok Raj , Chao Gao , Thomas Gleixner , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBwb3J0cyBtaWNyb2NvZGUgaW1wcm92ZW1lbnQgcGF0Y2hlcyBmcm9tIGxpbnV4 IGtlcm5lbC4KCkJlZm9yZSB5b3UgcmVhZCBhbnkgZnVydGhlcjogdGhlIGVhcmx5IGxvYWRpbmcg bWV0aG9kIGlzIHN0aWxsIHRoZQpwcmVmZXJyZWQgb25lIGFuZCB5b3Ugc2hvdWxkIGFsd2F5cyBk byB0aGF0LiBUaGUgZm9sbG93aW5nIHBhdGNoIGlzCmltcHJvdmluZyB0aGUgbGF0ZSBsb2FkaW5n IG1lY2hhbmlzbSBmb3IgbG9uZyBydW5uaW5nIGpvYnMgYW5kIGNsb3VkIHVzZQpjYXNlcy4KCkdh dGhlciBhbGwgY29yZXMgYW5kIHNlcmlhbGl6ZSB0aGUgbWljcm9jb2RlIHVwZGF0ZSBvbiB0aGVt IGJ5IGRvaW5nIGl0Cm9uZS1ieS1vbmUgdG8gbWFrZSB0aGUgbGF0ZSB1cGRhdGUgcHJvY2VzcyBh cyByZWxpYWJsZSBhcyBwb3NzaWJsZSBhbmQKYXZvaWQgcG90ZW50aWFsIGlzc3VlcyBjYXVzZWQg YnkgdGhlIG1pY3JvY29kZSB1cGRhdGUuCgpTaWduZWQtb2ZmLWJ5OiBDaGFvIEdhbyA8Y2hhby5n YW9AaW50ZWwuY29tPgpUZXN0ZWQtYnk6IENoYW8gR2FvIDxjaGFvLmdhb0BpbnRlbC5jb20+Clts aW51eCBjb21taXQ6IGE1MzIxYWVjNjQxMmIyMGI1YWQxNWRiMmQ2YjkxNmMwNTM0OWRiZmZdClts aW51eCBjb21taXQ6IGJiOGMxM2Q2MWE2MjkyNzZhMTYyYzFkMmIxYTIwYTgxNWNiY2ZiYjddCkNj OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KQ2M6IEp1biBOYWthamltYSA8anVu Lm5ha2FqaW1hQGludGVsLmNvbT4KQ2M6IEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4K Q2M6IEJvcmlzbGF2IFBldGtvdiA8YnBAc3VzZS5kZT4KQ2M6IFRob21hcyBHbGVpeG5lciA8dGds eEBsaW51dHJvbml4LmRlPgpDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4 LmNvbT4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KLS0tCkNoYW5nZXMgaW4g djY6CiAtIFVzZSBvbmUgdGltZW91dCBwZXJpb2QgZm9yIHJlbmRlenZvdXMgc3RhZ2UgYW5kIGFu b3RoZXIgZm9yIHVwZGF0ZSBzdGFnZS4KIC0gc2NhbGUgdGltZSB0byB3YWl0IGJ5IHRoZSBudW1i ZXIgb2YgcmVtYWluaW5nIGNwdXMgdG8gcmVzcG9uZC4KICAgSXQgaGVscHMgdG8gZmluZCBzb21l dGhpbmcgd3JvbmcgZWFybGllciBhbmQgdGh1cyB3ZSBjYW4gcmVib290IHRoZQogICBzeXN0ZW0g ZWFybGllci4KLS0tCiB4ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMgfCAxNDkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMzYg aW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L21pY3JvY29kZS5jIGIveGVuL2FyY2gveDg2L21pY3JvY29kZS5jCmluZGV4IGM1MTA4MDguLjk2 YmNlZjYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9taWNyb2NvZGUuYworKysgYi94ZW4vYXJj aC94ODYvbWljcm9jb2RlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8eGVu L2NwdS5oPgorI2luY2x1ZGUgPHhlbi9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8eGVuL2xpYi5oPgog I2luY2x1ZGUgPHhlbi9rZXJuZWwuaD4KICNpbmNsdWRlIDx4ZW4vaW5pdC5oPgpAQCAtMzAsMTUg KzMxLDM0IEBACiAjaW5jbHVkZSA8eGVuL3NtcC5oPgogI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+ CiAjaW5jbHVkZSA8eGVuL3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8eGVuL3N0b3BfbWFjaGluZS5o PgogI2luY2x1ZGUgPHhlbi90YXNrbGV0Lmg+CiAjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5o PgogI2luY2x1ZGUgPHhlbi9lYXJseWNwaW8uaD4KKyNpbmNsdWRlIDx4ZW4vd2F0Y2hkb2cuaD4K IAorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRl IDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNt L21pY3JvY29kZS5oPgogCisvKgorICogQmVmb3JlIHBlcmZvcm1pbmcgYSBsYXRlIG1pY3JvY29k ZSB1cGRhdGUgb24gYW55IHRocmVhZCwgd2UKKyAqIHJlbmRlenZvdXMgYWxsIGNwdXMgaW4gc3Rv cF9tYWNoaW5lIGNvbnRleHQuIFRoZSB0aW1lb3V0IGZvcgorICogd2FpdGluZyBmb3IgY3B1IHJl bmRlenZvdXMgaXMgMzBtcy4gSXQgaXMgdGhlIHRpbWVvdXQgdXNlZCBieQorICogbGl2ZSBwYXRj aGluZworICovCisjZGVmaW5lIE1JQ1JPQ09ERV9DQUxMSU5fVElNRU9VVF9VUyAzMDAwMAorCisv KgorICogVGltZW91dCBmb3IgZWFjaCB0aHJlYWQgdG8gY29tcGxldGUgdXBkYXRlIGlzIHNldCB0 byAxcy4gSXQgaXMgYQorICogY29uc2VydmF0aXZlIGNob2ljZSBjb25zaWRlcmluZyBhbGwgcG9z c2libGUgaW50ZXJmZXJlbmNlIChmb3IKKyAqIGluc3RhbmNlLCBzb21ldGltZXMgd2JpbnZkIHRh a2VzIHJlbGF0aXZlIGxvbmcgdGltZSkuIEFuZCBhIHBlcmZlY3QKKyAqIHRpbWVvdXQgZG9lc24n dCBoZWxwIGEgbG90IGV4Y2VwdCBhbiBlYXJseSBzaHV0ZG93bi4KKyAqLworI2RlZmluZSBNSUNS T0NPREVfVVBEQVRFX1RJTUVPVVRfVVMgMTAwMDAwMAorCiBzdGF0aWMgbW9kdWxlX3QgX19pbml0 ZGF0YSB1Y29kZV9tb2Q7CiBzdGF0aWMgc2lnbmVkIGludCBfX2luaXRkYXRhIHVjb2RlX21vZF9p ZHg7CiBzdGF0aWMgYm9vbF90IF9faW5pdGRhdGEgdWNvZGVfbW9kX2ZvcmNlZDsKQEAgLTE4OSw2 ICsyMDksMTIgQEAgc3RhdGljIERFRklORV9TUElOTE9DSyhtaWNyb2NvZGVfbXV0ZXgpOwogREVG SU5FX1BFUl9DUFUoc3RydWN0IGNwdV9zaWduYXR1cmUsIGNwdV9zaWcpOwogCiAvKgorICogQ291 bnQgdGhlIENQVXMgdGhhdCBoYXZlIGVudGVyZWQgYW5kIGV4aXRlZCB0aGUgcmVuZGV6dm91cwor ICogZHVyaW5nIGxhdGUgbWljcm9jb2RlIHVwZGF0ZS4KKyAqLworc3RhdGljIGF0b21pY190IGNw dV9pbiwgY3B1X291dDsKKworLyoKICAqIFNhdmUgYW4gdWNvZGUgcGF0Y2ggdG8gdGhlIGdsb2Jh bCBjYWNoZSBsaXN0LgogICoKICAqIFJldHVybiB0cnVlIGlmIGEgcGF0Y2ggaXMgYWRkZWQgdG8g dGhlIGdsb2JhbCBjYWNoZSBvciBpdCByZXBsYWNlcwpAQCAtMjg0LDI1ICszMTAsODYgQEAgc3Rh dGljIGludCBtaWNyb2NvZGVfdXBkYXRlX2NwdSh2b2lkKQogICAgIHJldHVybiByZXQ7CiB9CiAK LXN0YXRpYyBsb25nIGRvX21pY3JvY29kZV91cGRhdGUodm9pZCAqdW51c2VkKQorLyogV2FpdCBm b3IgQ1BVcyB0byByZW5kZXp2b3VzIHdpdGggYSB0aW1lb3V0ICh1cykgKi8KK3N0YXRpYyBpbnQg d2FpdF9mb3JfY3B1cyhhdG9taWNfdCAqY250LCB1bnNpZ25lZCBpbnQgZXhwZWN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0KQogewotICAgIGludCBlcnJv ciwgY3B1OworICAgIHdoaWxlICggYXRvbWljX3JlYWQoY250KSA8IGV4cGVjdCApCisgICAgewor ICAgICAgICBpZiAoIHRpbWVvdXQgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50 aygiQ1BVJWQ6IFRpbWVvdXQgd2hlbiB3YWl0aW5nIGZvciBDUFVzIGNhbGxpbmcgaW5cbiIsCisg ICAgICAgICAgICAgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKyAgICAgICAgICAgIHJldHVy biAtRUJVU1k7CisgICAgICAgIH0KKyAgICAgICAgdWRlbGF5KDEpOworICAgICAgICB0aW1lb3V0 LS07CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICBlcnJvciA9IG1pY3JvY29kZV91 cGRhdGVfY3B1KCk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICAgIHJldHVybiBlcnJvcjsKK3N0 YXRpYyBpbnQgZG9fbWljcm9jb2RlX3VwZGF0ZSh2b2lkICp1bnVzZWQpCit7CisgICAgdW5zaWdu ZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKyAgICB1bnNpZ25lZCBpbnQgY3B1X25y ID0gbnVtX29ubGluZV9jcHVzKCk7CisgICAgdW5zaWduZWQgaW50IGZpbmlzaGVkOworICAgIGlu dCByZXQ7CisgICAgc3RhdGljIGJvb2wgZXJyb3I7CiAKLSAgICBjcHUgPSBjcHVtYXNrX25leHQo c21wX3Byb2Nlc3Nvcl9pZCgpLCAmY3B1X29ubGluZV9tYXApOwotICAgIGlmICggY3B1IDwgbnJf Y3B1X2lkcyApCi0gICAgICAgIHJldHVybiBjb250aW51ZV9oeXBlcmNhbGxfb25fY3B1KGNwdSwg ZG9fbWljcm9jb2RlX3VwZGF0ZSwgTlVMTCk7CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgYXRv bWljX2luYygmY3B1X2luKTsKKyAgICByZXQgPSB3YWl0X2Zvcl9jcHVzKCZjcHVfaW4sIGNwdV9u ciwgTUlDUk9DT0RFX0NBTExJTl9USU1FT1VUX1VTKTsKKyAgICBpZiAoIHJldCApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICAvKgorICAgICAqIEluaXRpYXRlIGFuIHVwZGF0ZSBvbiBhbGwg cHJvY2Vzc29ycyB3aGljaCBkb24ndCBoYXZlIGFuIG9ubGluZSBzaWJsaW5nCisgICAgICogdGhy ZWFkIHdpdGggYSBsb3dlciB0aHJlYWQgaWQuIE90aGVyIHNpYmxpbmcgdGhyZWFkcyBqdXN0IGF3 YWl0IHRoZQorICAgICAqIGNvbXBsZXRpb24gb2YgbWljcm9jb2RlIHVwZGF0ZS4KKyAgICAgKi8K KyAgICBpZiAoIGNwdSA9PSBjcHVtYXNrX2ZpcnN0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFzaywg Y3B1KSkgKQorICAgICAgICByZXQgPSBtaWNyb2NvZGVfdXBkYXRlX2NwdSgpOworICAgIC8qCisg ICAgICogSW5jcmVhc2UgdGhlIHdhaXQgdGltZW91dCB0byBhIHNhZmUgdmFsdWUgaGVyZSBzaW5j ZSB3ZSdyZSBzZXJpYWxpemluZworICAgICAqIHRoZSBtaWNyb2NvZGUgdXBkYXRlIGFuZCB0aGF0 IGNvdWxkIHRha2UgYSB3aGlsZSBvbiBhIGxhcmdlIG51bWJlciBvZgorICAgICAqIENQVXMuIEFu ZCB0aGF0IGlzIGZpbmUgYXMgdGhlICphY3R1YWwqIHRpbWVvdXQgd2lsbCBiZSBkZXRlcm1pbmVk IGJ5CisgICAgICogdGhlIGxhc3QgQ1BVIGZpbmlzaGVkIHVwZGF0aW5nIGFuZCB0aHVzIGN1dCBz aG9ydAorICAgICAqLworICAgIGF0b21pY19pbmMoJmNwdV9vdXQpOworICAgIGZpbmlzaGVkID0g YXRvbWljX3JlYWQoJmNwdV9vdXQpOworICAgIHdoaWxlICggIWVycm9yICYmIGZpbmlzaGVkICE9 IGNwdV9uciApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBEdXJpbmcgZWFjaCB0aW1l b3V0IGludGVydmFsLCBhdCBsZWFzdCBhIENQVSBpcyBleHBlY3RlZCB0bworICAgICAgICAgKiBm aW5pc2ggaXRzIHVwZGF0ZS4gT3RoZXJ3aXNlLCBzb21ldGhpbmcgZ29lcyB3cm9uZy4KKyAgICAg ICAgICovCisgICAgICAgIGlmICggd2FpdF9mb3JfY3B1cygmY3B1X291dCwgZmluaXNoZWQgKyAx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlDUk9DT0RFX1VQREFURV9USU1FT1VUX1VT KSAmJiAhZXJyb3IgKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IHRydWU7CisgICAg ICAgICAgICBwYW5pYygiVGltZW91dCB3aGVuIGZpbmlzaGluZyB1cGRhdGluZyBtaWNyb2NvZGUg KGZpbmlzaGVkICVkLyVkKSIsCisgICAgICAgICAgICAgICAgICBmaW5pc2hlZCwgY3B1X25yKTsK KyAgICAgICAgfQorCisgICAgICAgIGZpbmlzaGVkID0gYXRvbWljX3JlYWQoJmNwdV9vdXQpOwor ICAgIH0KKworICAgIC8qCisgICAgICogUmVmcmVzaCBDUFUgc2lnbmF0dXJlIChyZXZpc2lvbikg b24gdGhyZWFkcyB3aGljaCBkaWRuJ3QgY2FsbAorICAgICAqIGFwcGx5X21pY3JvY29kZSgpLgor ICAgICAqLworICAgIGlmICggY3B1ICE9IGNwdW1hc2tfZmlyc3QocGVyX2NwdShjcHVfc2libGlu Z19tYXNrLCBjcHUpKSApCisgICAgICAgIHJldCA9IG1pY3JvY29kZV9vcHMtPmNvbGxlY3RfY3B1 X2luZm8oJnRoaXNfY3B1KGNwdV9zaWcpKTsKKworICAgIHJldHVybiByZXQ7CiB9CiAKIGludCBt aWNyb2NvZGVfdXBkYXRlKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9pZCkgYnVmLCB1 bnNpZ25lZCBsb25nIGxlbikKIHsKICAgICBpbnQgcmV0OwogICAgIHZvaWQgKmJ1ZmZlcjsKKyAg ICB1bnNpZ25lZCBpbnQgY3B1LCBucl9jb3JlczsKIAogICAgIGlmICggbGVuICE9ICh1aW50MzJf dClsZW4gKQogICAgICAgICByZXR1cm4gLUUyQklHOwpAQCAtMzIzLDExICs0MTAsMTggQEAgaW50 IG1pY3JvY29kZV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShjb25zdF92b2lkKSBidWYs IHVuc2lnbmVkIGxvbmcgbGVuKQogICAgICAgICBnb3RvIGZyZWU7CiAgICAgfQogCisgICAgLyog Y3B1X29ubGluZV9tYXAgbXVzdCBub3QgY2hhbmdlIGR1cmluZyB1cGRhdGUgKi8KKyAgICBpZiAo ICFnZXRfY3B1X21hcHMoKSApCisgICAgeworICAgICAgICByZXQgPSAtRUJVU1k7CisgICAgICAg IGdvdG8gZnJlZTsKKyAgICB9CisKICAgICBpZiAoIG1pY3JvY29kZV9vcHMtPnN0YXJ0X3VwZGF0 ZSApCiAgICAgewogICAgICAgICByZXQgPSBtaWNyb2NvZGVfb3BzLT5zdGFydF91cGRhdGUoKTsK ICAgICAgICAgaWYgKCByZXQgIT0gMCApCi0gICAgICAgICAgICBnb3RvIGZyZWU7CisgICAgICAg ICAgICBnb3RvIHB1dDsKICAgICB9CiAKICAgICByZXQgPSBtaWNyb2NvZGVfcGFyc2VfYmxvYihi dWZmZXIsIGxlbik7CkBAIC0zMzUsMTIgKzQyOSw0MSBAQCBpbnQgbWljcm9jb2RlX3VwZGF0ZShY RU5fR1VFU1RfSEFORExFX1BBUkFNKGNvbnN0X3ZvaWQpIGJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4p CiAgICAgewogICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiTm8gdmFsaWQgb3IgbmV3ZXIgdWNv ZGUgZm91bmQuIFVwZGF0ZSBhYm9ydCFcbiIpOwogICAgICAgICByZXQgPSAtRUlOVkFMOwotICAg ICAgICBnb3RvIGZyZWU7CisgICAgICAgIGdvdG8gcHV0OwogICAgIH0KIAotICAgIHJldHVybiBj b250aW51ZV9oeXBlcmNhbGxfb25fY3B1KGNwdW1hc2tfZmlyc3QoJmNwdV9vbmxpbmVfbWFwKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19taWNyb2NvZGVfdXBkYXRl LCBOVUxMKTsKKyAgICBhdG9taWNfc2V0KCZjcHVfaW4sIDApOworICAgIGF0b21pY19zZXQoJmNw dV9vdXQsIDApOworCisgICAgLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVSBj b3JlICovCisgICAgbnJfY29yZXMgPSAwOworICAgIGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQor ICAgICAgICBpZiAoIGNwdSA9PSBjcHVtYXNrX2ZpcnN0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFz aywgY3B1KSkgKQorICAgICAgICAgICAgbnJfY29yZXMrKzsKKworICAgIHByaW50ayhYRU5MT0df SU5GTyAiJWQgY29yZXMgYXJlIHRvIHVwZGF0ZSB0aGVpciBtaWNyb2NvZGVcbiIsIG5yX2NvcmVz KTsKKworICAgIC8qCisgICAgICogV2UgaW50ZW5kIHRvIGRpc2FibGUgaW50ZXJydXB0IGZvciBs b25nIHRpbWUsIHdoaWNoIG1heSBsZWFkIHRvCisgICAgICogd2F0Y2hkb2cgdGltZW91dC4KKyAg ICAgKi8KKyAgICB3YXRjaGRvZ19kaXNhYmxlKCk7CisgICAgLyoKKyAgICAgKiBMYXRlIGxvYWRp bmcgZGFuY2UuIFdoeSB0aGUgaGVhdnktaGFuZGVkIHN0b3BfbWFjaGluZSBlZmZvcnQ/CisgICAg ICoKKyAgICAgKiAtIEhUIHNpYmxpbmdzIG11c3QgYmUgaWRsZSBhbmQgbm90IGV4ZWN1dGUgb3Ro ZXIgY29kZSB3aGlsZSB0aGUgb3RoZXIKKyAgICAgKiAgIHNpYmxpbmcgaXMgbG9hZGluZyBtaWNy b2NvZGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55IG5lZ2F0aXZlCisgICAgICogICBpbnRlcmFjdGlv bnMgY2F1c2UgYnkgdGhlIGxvYWRpbmcuCisgICAgICoKKyAgICAgKiAtIEluIGFkZGl0aW9uLCBt aWNyb2NvZGUgdXBkYXRlIG9uIHRoZSBjb3JlcyBtdXN0IGJlIHNlcmlhbGl6ZWQgdW50aWwKKyAg ICAgKiAgIHRoaXMgcmVxdWlyZW1lbnQgY2FuIGJlIHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZS4gUmln aHQgbm93LCB0aGlzIGlzCisgICAgICogICBjb25zZXJ2YXRpdmUgYW5kIGdvb2QuCisgICAgICov CisgICAgcmV0ID0gc3RvcF9tYWNoaW5lX3J1bihkb19taWNyb2NvZGVfdXBkYXRlLCBOVUxMLCBO Ul9DUFVTKTsKKyAgICB3YXRjaGRvZ19lbmFibGUoKTsKIAorIHB1dDoKKyAgICBwdXRfY3B1X21h cHMoKTsKICBmcmVlOgogICAgIHhmcmVlKGJ1ZmZlcik7CiAgICAgcmV0dXJuIHJldDsKLS0gCjEu OC4zLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs