From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v5 7/8] x86/microcode: Synchronize late microcode loading Date: Wed, 30 Jan 2019 21:44:29 +0800 Message-ID: <20190130134429.GB29192@gao-cwp> References: <1548659210-16870-1-git-send-email-chao.gao@intel.com> <1548659210-16870-8-git-send-email-chao.gao@intel.com> <20190129103712.6omjwjaf4sdygbye@mac> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1goq6Q-00071A-U2 for xen-devel@lists.xenproject.org; Wed, 30 Jan 2019 13:40:30 +0000 Content-Disposition: inline In-Reply-To: <20190129103712.6omjwjaf4sdygbye@mac> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: Kevin Tian , Wei Liu , Jan Beulich , Andrew Cooper , Jun Nakajima , xen-devel@lists.xenproject.org, Thomas Gleixner , Borislav Petkov , Ashok Raj List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBKYW4gMjksIDIwMTkgYXQgMTE6Mzc6MTJBTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPk9uIE1vbiwgSmFuIDI4LCAyMDE5IGF0IDAzOjA2OjQ5UE0gKzA4MDAsIENoYW8g R2FvIHdyb3RlOgo+PiBUaGlzIHBhdGNoIHBvcnRzIG1pY3JvY29kZSBpbXByb3ZlbWVudCBwYXRj aGVzIGZyb20gbGludXgga2VybmVsLgo+PiAKPj4gQmVmb3JlIHlvdSByZWFkIGFueSBmdXJ0aGVy OiB0aGUgZWFybHkgbG9hZGluZyBtZXRob2QgaXMgc3RpbGwgdGhlCj4+IHByZWZlcnJlZCBvbmUg YW5kIHlvdSBzaG91bGQgYWx3YXlzIGRvIHRoYXQuIFRoZSBmb2xsb3dpbmcgcGF0Y2ggaXMKPj4g aW1wcm92aW5nIHRoZSBsYXRlIGxvYWRpbmcgbWVjaGFuaXNtIGZvciBsb25nIHJ1bm5pbmcgam9i cyBhbmQgY2xvdWQgdXNlCj4+IGNhc2VzLgo+PiAKPj4gR2F0aGVyIGFsbCBjb3JlcyBhbmQgc2Vy aWFsaXplIHRoZSBtaWNyb2NvZGUgdXBkYXRlIG9uIHRoZW0gYnkgZG9pbmcgaXQKPj4gb25lLWJ5 LW9uZSB0byBtYWtlIHRoZSBsYXRlIHVwZGF0ZSBwcm9jZXNzIGFzIHJlbGlhYmxlIGFzIHBvc3Np YmxlIGFuZAo+PiBhdm9pZCBwb3RlbnRpYWwgaXNzdWVzIGNhdXNlZCBieSB0aGUgbWljcm9jb2Rl IHVwZGF0ZS4KPj4gCj4+IFNpZ25lZC1vZmYtYnk6IENoYW8gR2FvIDxjaGFvLmdhb0BpbnRlbC5j b20+Cj4+IFRlc3RlZC1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KPj4gW2xpbnV4 IGNvbW1pdDogYTUzMjFhZWM2NDEyYjIwYjVhZDE1ZGIyZDZiOTE2YzA1MzQ5ZGJmZl0KPj4gW2xp bnV4IGNvbW1pdDogYmI4YzEzZDYxYTYyOTI3NmExNjJjMWQyYjFhMjBhODE1Y2JjZmJiN10KPj4g Q2M6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgo+PiBDYzogSnVuIE5ha2FqaW1h IDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgo+PiBDYzogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50 ZWwuY29tPgo+PiBDYzogQm9yaXNsYXYgUGV0a292IDxicEBzdXNlLmRlPgo+PiBDYzogVGhvbWFz IEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Cj4+IENjOiBBbmRyZXcgQ29vcGVyIDxhbmRy ZXcuY29vcGVyM0BjaXRyaXguY29tPgo+PiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2Uu Y29tPgo+PiAtLS0KPj4gIHhlbi9hcmNoL3g4Ni9taWNyb2NvZGUuYyB8IDEyNSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+PiAgMSBmaWxlIGNoYW5nZWQs IDk4IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQo+PiAKPj4gZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9taWNyb2NvZGUuYyBiL3hlbi9hcmNoL3g4Ni9taWNyb2NvZGUuYwo+PiBpbmRl eCAzYzIyNzRmLi5iN2IyMGNmIDEwMDY0NAo+PiAtLS0gYS94ZW4vYXJjaC94ODYvbWljcm9jb2Rl LmMKPj4gKysrIGIveGVuL2FyY2gveDg2L21pY3JvY29kZS5jCj4+IEBAIC0yMiw2ICsyMiw3IEBA Cj4+ICAgKi8KPj4gIAo+PiAgI2luY2x1ZGUgPHhlbi9jcHUuaD4KPj4gKyNpbmNsdWRlIDx4ZW4v Y3B1bWFzay5oPgo+PiAgI2luY2x1ZGUgPHhlbi9saWIuaD4KPj4gICNpbmNsdWRlIDx4ZW4va2Vy bmVsLmg+Cj4+ICAjaW5jbHVkZSA8eGVuL2luaXQuaD4KPj4gQEAgLTMwLDE4ICszMSwyNSBAQAo+ PiAgI2luY2x1ZGUgPHhlbi9zbXAuaD4KPj4gICNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPgo+PiAg I2luY2x1ZGUgPHhlbi9zcGlubG9jay5oPgo+PiArI2luY2x1ZGUgPHhlbi9zdG9wX21hY2hpbmUu aD4KPj4gICNpbmNsdWRlIDx4ZW4vdGFza2xldC5oPgo+PiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9h Y2Nlc3MuaD4KPj4gICNpbmNsdWRlIDx4ZW4vZWFybHljcGlvLmg+Cj4+ICsjaW5jbHVkZSA8eGVu L3dhdGNoZG9nLmg+Cj4+ICAKPj4gKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KPj4gICNpbmNsdWRl IDxhc20vbXNyLmg+Cj4+ICAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgo+PiAgI2luY2x1ZGUg PGFzbS9zZXR1cC5oPgo+PiAgI2luY2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KPj4gIAo+PiArLyog QnkgZGVmYXVsdCwgd2FpdCBmb3IgMzAwMDB1cyAqLwo+PiArI2RlZmluZSBNSUNST0NPREVfREVG QVVMVF9USU1FT1VUX1VTIDMwMDAwCj4+ICsKPj4gIHN0YXRpYyBtb2R1bGVfdCBfX2luaXRkYXRh IHVjb2RlX21vZDsKPj4gIHN0YXRpYyBzaWduZWQgaW50IF9faW5pdGRhdGEgdWNvZGVfbW9kX2lk eDsKPj4gIHN0YXRpYyBib29sX3QgX19pbml0ZGF0YSB1Y29kZV9tb2RfZm9yY2VkOwo+PiArc3Rh dGljIHVuc2lnbmVkIGludCBucl9jb3JlczsKPj4gIAo+PiAgLyoKPj4gICAqIElmIHdlIHNjYW4g dGhlIGluaXRyYW1mcy5jcGlvIGZvciB0aGUgZWFybHkgbWljcm9jb2RlIGNvZGUKPj4gQEAgLTE4 OCwxMCArMTk2LDExIEBAIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWljcm9jb2RlX211dGV4KTsK Pj4gIAo+PiAgREVGSU5FX1BFUl9DUFUoc3RydWN0IHVjb2RlX2NwdV9pbmZvLCB1Y29kZV9jcHVf aW5mbyk7Cj4+ICAKPj4gLXN0cnVjdCBtaWNyb2NvZGVfaW5mbyB7Cj4+IC0gICAgdW5zaWduZWQg aW50IGNwdTsKPj4gLSAgICBpbnQgZXJyb3I7Cj4+IC19Owo+PiArLyoKPj4gKyAqIENvdW50IHRo ZSBDUFVzIHRoYXQgaGF2ZSBlbnRlcmVkIGFuZCBleGl0ZWQgdGhlIHJlbmRlenZvdXMKPj4gKyAq IGR1cmluZyBsYXRlIG1pY3JvY29kZSB1cGRhdGUuCj4+ICsgKi8KPj4gK3N0YXRpYyBhdG9taWNf dCBjcHVfaW4sIGNwdV9vdXQ7Cj4+ICAKPj4gIHN0YXRpYyB2b2lkIG1pY3JvY29kZV9maW5pX2Nw dSh1bnNpZ25lZCBpbnQgY3B1KQo+PiAgewo+PiBAQCAtMjkwLDMwICsyOTksNjAgQEAgaW50IG1p Y3JvY29kZV9yZXN1bWVfY3B1KHVuc2lnbmVkIGludCBjcHUpCj4+ICAgICAgcmV0dXJuIG1pY3Jv Y29kZV9vcHMgPyBtaWNyb2NvZGVfdXBkYXRlX2NwdSgpIDogMDsKPj4gIH0KPj4gIAo+PiAtc3Rh dGljIGxvbmcgZG9fbWljcm9jb2RlX3VwZGF0ZSh2b2lkICpfaW5mbykKPj4gKy8qIFdhaXQgZm9y IGFsbCBDUFVzIHRvIHJlbmRlenZvdXMgd2l0aCBhIHRpbWVvdXQgKHVzKSAqLwo+PiArc3RhdGlj IGludCB3YWl0X2Zvcl9jcHVzKGF0b21pY190ICpjbnQsIHVuc2lnbmVkIGludCB0aW1lb3V0KQo+ PiAgewo+PiAtICAgIHN0cnVjdCBtaWNyb2NvZGVfaW5mbyAqaW5mbyA9IF9pbmZvOwo+PiAtICAg IGludCBlcnJvcjsKPj4gKyAgICB1bnNpZ25lZCBpbnQgY3B1cyA9IG51bV9vbmxpbmVfY3B1cygp Owo+PiAgCj4+IC0gICAgQlVHX09OKGluZm8tPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOwo+ PiArICAgIGF0b21pY19pbmMoY250KTsKPj4gKwo+PiArICAgIHdoaWxlICggYXRvbWljX3JlYWQo Y250KSAhPSBjcHVzICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIGlmICggdGltZW91dCA8PSAwICkK Pj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgcHJpbnRrKCJDUFUlZDogVGltZW91dCB3aGVu IHdhaXRpbmcgZm9yIENQVXMgY2FsbGluZyBpblxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICBz bXBfcHJvY2Vzc29yX2lkKCkpOwo+PiArICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPj4gKyAg ICAgICAgfQo+PiArICAgICAgICB1ZGVsYXkoMSk7Cj4KPnVkZWxheSB3aWxsIGNhbGwgdGhlIHJk dHNjIGluc3RydWN0aW9uLCBpcyBpdCBmaW5lIHRvIHVzZSBpdCBvbiBhCj5zaWJsaW5nIHRocmVh ZCB3aGlsZSB0aGVyZSdzIGEgbWljcm9jb2RlIHVwZGF0ZSBpbiBwcm9jZXNzIG9uIHRoZSBzYW1l Cj5jb3JlPwoKSSB0aGluayBpdCBpcyBvay4gSSBqdXN0IGNoZWNrZWQgdGhlIGtlcm5lbCBjb2Rl LiBJdCB1c2VzIHRoZSBuZGVsYXksCndoaWNoIGluIHR1cm4gY2FsbHMgdGhlIHJkdHNjIGluc3Ry dWN0aW9uIGluIHNvbWUgY2FzZXMuCgpBc2hvaywgd2hhdCdzIHlvdXIgb3Bpbmlvbj8KCj4KPj4g KyAgICAgICAgdGltZW91dC0tOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGRvX21pY3JvY29kZV91cGRhdGUodm9pZCAqdW51c2VkKQo+ PiArewo+PiArICAgIHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cj4+ICsg ICAgaW50IHJldDsKPj4gIAo+PiAtICAgIGVycm9yID0gbWljcm9jb2RlX3VwZGF0ZV9jcHUoKTsK Pj4gLSAgICBpZiAoIGVycm9yICkKPj4gLSAgICAgICAgaW5mby0+ZXJyb3IgPSBlcnJvcjsKPj4g KyAgICByZXQgPSB3YWl0X2Zvcl9jcHVzKCZjcHVfaW4sIE1JQ1JPQ09ERV9ERUZBVUxUX1RJTUVP VVRfVVMpOwo+PiArICAgIGlmICggcmV0ICkKPj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4gIAo+ PiAtICAgIGluZm8tPmNwdSA9IGNwdW1hc2tfbmV4dChpbmZvLT5jcHUsICZjcHVfb25saW5lX21h cCk7Cj4+IC0gICAgaWYgKCBpbmZvLT5jcHUgPCBucl9jcHVfaWRzICkKPj4gLSAgICAgICAgcmV0 dXJuIGNvbnRpbnVlX2h5cGVyY2FsbF9vbl9jcHUoaW5mby0+Y3B1LCBkb19taWNyb2NvZGVfdXBk YXRlLCBpbmZvKTsKPj4gKyAgICAvKgo+PiArICAgICAqIEluaXRpYXRlIGFuIHVwZGF0ZSBvbiBh bGwgcHJvY2Vzc29ycyB3aGljaCBkb24ndCBoYXZlIGFuIG9ubGluZSBzaWJsaW5nCj4+ICsgICAg ICogdGhyZWFkIHdpdGggYSBsb3dlciB0aHJlYWQgaWQuIE90aGVyIHNpYmxpbmcgdGhyZWFkcyBq dXN0IGF3YWl0IHRoZQo+PiArICAgICAqIGNvbXBsZXRpb24gb2YgbWljcm9jb2RlIHVwZGF0ZS4K Pj4gKyAgICAgKi8KPj4gKyAgICBpZiAoIGNwdSA9PSBjcHVtYXNrX2ZpcnN0KHBlcl9jcHUoY3B1 X3NpYmxpbmdfbWFzaywgY3B1KSkgKQo+PiArICAgICAgICByZXQgPSBtaWNyb2NvZGVfdXBkYXRl X2NwdSgpOwo+Cj5UaGUgZGVzY3JpcHRpb24gc2F5cyAiR2F0aGVyIGFsbCBjb3JlcyBhbmQgc2Vy aWFsaXplIHRoZSBtaWNyb2NvZGUKPnVwZGF0ZSBvbiB0aGVtIGJ5IGRvaW5nIGl0IG9uZS1ieS1v bmUiIGJ1dCBpdCBsb29rcyBsaWtlIHlvdSBhcmUgZG9pbmcKPnRoZSB1cGRhdGUgaW4gcGFyYWxs ZWwgYWN0dWFsbHk/Cj4KPj4gKyAgICAvKgo+PiArICAgICAqIEluY3JlYXNlIHRoZSB3YWl0IHRp bWVvdXQgdG8gYSBzYWZlIHZhbHVlIGhlcmUgc2luY2Ugd2UncmUgc2VyaWFsaXppbmcKPj4gKyAg ICAgKiB0aGUgbWljcm9jb2RlIHVwZGF0ZSBhbmQgdGhhdCBjb3VsZCB0YWtlIGEgd2hpbGUgb24g YSBsYXJnZSBudW1iZXIgb2YKPj4gKyAgICAgKiBDUFVzLiBBbmQgdGhhdCBpcyBmaW5lIGFzIHRo ZSAqYWN0dWFsKiB0aW1lb3V0IHdpbGwgYmUgZGV0ZXJtaW5lZCBieQo+PiArICAgICAqIHRoZSBs YXN0IENQVSBmaW5pc2hlZCB1cGRhdGluZyBhbmQgdGh1cyBjdXQgc2hvcnQKPj4gKyAgICAgKi8K Pj4gKyAgICBpZiAoIHdhaXRfZm9yX2NwdXMoJmNwdV9vdXQsIE1JQ1JPQ09ERV9ERUZBVUxUX1RJ TUVPVVRfVVMgKiBucl9jb3JlcykgKQo+PiArICAgICAgICBwYW5pYygiVGltZW91dCB3aGVuIGZp bmlzaGluZyB1cGRhdGluZyBtaWNyb2NvZGUiKTsKPj4gIAo+PiAtICAgIGVycm9yID0gaW5mby0+ ZXJyb3I7Cj4+IC0gICAgeGZyZWUoaW5mbyk7Cj4+IC0gICAgcmV0dXJuIGVycm9yOwo+PiArICAg IHJldHVybiByZXQ7Cj4+ICB9Cj4+ICAKPj4gIGludCBtaWNyb2NvZGVfdXBkYXRlKFhFTl9HVUVT VF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9pZCkgYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKPj4gIHsK Pj4gICAgICBpbnQgcmV0Owo+PiAtICAgIHN0cnVjdCBtaWNyb2NvZGVfaW5mbyAqaW5mbzsKPj4g KyAgICB1bnNpZ25lZCBpbnQgY3B1Owo+PiAgICAgIHZvaWQgKiBidWZmZXI7Cj4+ICAKPj4gICAg ICBpZiAoIGxlbiAhPSAodWludDMyX3QpbGVuICkKPj4gQEAgLTMzNCwyOCArMzcyLDYxIEBAIGlu dCBtaWNyb2NvZGVfdXBkYXRlKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9pZCkgYnVm LCB1bnNpZ25lZCBsb25nIGxlbikKPj4gICAgICBpZiAoIHJldCAhPSAwICkKPj4gICAgICAgICAg Z290byBmcmVlOwo+PiAgCj4+ICsgICAgLyogY3B1X29ubGluZV9tYXAgbXVzdCBub3QgY2hhbmdl IGR1cmluZyB1cGRhdGUgKi8KPj4gKyAgICBpZiAoICFnZXRfY3B1X21hcHMoKSApCj4+ICsgICAg ewo+PiArICAgICAgICByZXQgPSAtRUJVU1k7Cj4+ICsgICAgICAgIGdvdG8gZnJlZTsKPj4gKyAg ICB9Cj4+ICsKPj4gICAgICBpZiAoIG1pY3JvY29kZV9vcHMtPnN0YXJ0X3VwZGF0ZSApCj4+ICAg ICAgewo+PiAgICAgICAgICByZXQgPSBtaWNyb2NvZGVfb3BzLT5zdGFydF91cGRhdGUoKTsKPj4g ICAgICAgICAgaWYgKCByZXQgIT0gMCApCj4+IC0gICAgICAgICAgICBnb3RvIGZyZWU7Cj4+ICsg ICAgICAgICAgICBnb3RvIHB1dDsKPj4gICAgICB9Cj4+ICAKPj4gICAgICByZXQgPSBwYXJzZV9t aWNyb2NvZGVfYmxvYihidWZmZXIsIGxlbik7Cj4+ICAgICAgaWYgKCByZXQgPD0gMCApCj4+ICAg ICAgewo+PiAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiTm8gdmFsaWQgb3IgbmV3ZXIgdWNv ZGUgZm91bmQuIFVwZGF0ZSBhYm9ydCFcbiIpOwo+PiAtICAgICAgICB4ZnJlZShpbmZvKTsKPj4g LSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4+ICsg ICAgICAgIGdvdG8gcHV0Owo+PiAgICAgIH0KPj4gIAo+PiAtICAgIGluZm8tPmVycm9yID0gMDsK Pj4gLSAgICBpbmZvLT5jcHUgPSBjcHVtYXNrX2ZpcnN0KCZjcHVfb25saW5lX21hcCk7Cj4+ICsg ICAgYXRvbWljX3NldCgmY3B1X2luLCAwKTsKPj4gKyAgICBhdG9taWNfc2V0KCZjcHVfb3V0LCAw KTsKPj4gKwo+PiArICAgIC8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG9ubGluZSBDUFUgY29y ZSAqLwo+PiArICAgIG5yX2NvcmVzID0gMDsKPj4gKyAgICBmb3JfZWFjaF9vbmxpbmVfY3B1KGNw dSkKPj4gKyAgICAgICAgaWYgKCBjcHUgPT0gY3B1bWFza19maXJzdChwZXJfY3B1KGNwdV9zaWJs aW5nX21hc2ssIGNwdSkpICkKPj4gKyAgICAgICAgICAgIG5yX2NvcmVzKys7Cj4+ICsKPj4gKyAg ICBwcmludGsoWEVOTE9HX0lORk8gIiVkIGNvcmVzIGFyZSB0byB1cGRhdGUgdGhlaXIgbWljcm9j b2RlXG4iLCBucl9jb3Jlcyk7Cj4+ICAKPj4gLSAgICByZXR1cm4gY29udGludWVfaHlwZXJjYWxs X29uX2NwdShpbmZvLT5jcHUsIGRvX21pY3JvY29kZV91cGRhdGUsIGluZm8pOwo+PiArICAgIC8q Cj4+ICsgICAgICogV2UgaW50ZW5kIHRvIGRpc2FibGUgaW50ZXJydXB0IGZvciBsb25nIHRpbWUs IHdoaWNoIG1heSBsZWFkIHRvCj4+ICsgICAgICogd2F0Y2hkb2cgdGltZW91dC4KPj4gKyAgICAg Ki8KPj4gKyAgICB3YXRjaGRvZ19kaXNhYmxlKCk7Cj4+ICsgICAgLyoKPj4gKyAgICAgKiBMYXRl IGxvYWRpbmcgZGFuY2UuIFdoeSB0aGUgaGVhdnktaGFuZGVkIHN0b3BfbWFjaGluZSBlZmZvcnQ/ Cj4+ICsgICAgICoKPj4gKyAgICAgKiAtIEhUIHNpYmxpbmdzIG11c3QgYmUgaWRsZSBhbmQgbm90 IGV4ZWN1dGUgb3RoZXIgY29kZSB3aGlsZSB0aGUgb3RoZXIKPj4gKyAgICAgKiAgIHNpYmxpbmcg aXMgbG9hZGluZyBtaWNyb2NvZGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55IG5lZ2F0aXZlCj4+ICsg ICAgICogICBpbnRlcmFjdGlvbnMgY2F1c2UgYnkgdGhlIGxvYWRpbmcuCj4+ICsgICAgICoKPj4g KyAgICAgKiAtIEluIGFkZGl0aW9uLCBtaWNyb2NvZGUgdXBkYXRlIG9uIHRoZSBjb3JlcyBtdXN0 IGJlIHNlcmlhbGl6ZWQgdW50aWwKPj4gKyAgICAgKiAgIHRoaXMgcmVxdWlyZW1lbnQgY2FuIGJl IHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZS4gUmlnaHQgbm93LCB0aGlzIGlzCj4KPkFzIHNhaWQgYWJv dmUsIEknbSBub3Qgc3VyZSB3aGF0IHlvdSBhcmUgZG9pbmcgaGVyZSBjb3VsZCBiZQo+Y29uc2lk ZXJlZCBzZXJpYWxpemVkLCB0aGUgcHJldmlvdXMgbWV0aG9kIHdhcyBjbGVhcmx5IHNlcmlhbGl6 ZWQKPm1vdmluZyBmcm9tIG9uZSBDUFUgdG8gdGhlIG5leHQgb25lLgo+Cj5IZXJlIHlvdSBhcmUg bGlrZWx5IHVwZGF0aW5nIG11bHRpcGxlIGNvcmVzIGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoCj5J J20gbm90IHNheWluZyBpdCdzIHdyb25nLCBidXQgZG9lc24ndCBzZWVtIHRvIG1hdGNoIHRoZSBj b21taXQKPmRlc2NyaXB0aW9uIG9yIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZS4KCkluZGVlZCwg aXQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiB3aWxsIGV4cGxhaW4gd2h5IGl0IGlzIHNlcmlhbGl6 ZWQgaW4gdGhlCmNvbW1pdCBtZXNzYWdlLgoKVGhhbmtzCkNoYW8KCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=