From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v7 27/32] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Date: Mon, 5 Oct 2015 11:28:00 +0100 Message-ID: <561250B0.8050600@citrix.com> References: <1443800943-17668-1-git-send-email-roger.pau@citrix.com> <1443800943-17668-28-git-send-email-roger.pau@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.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Zj30Q-0008RR-Dg for xen-devel@lists.xenproject.org; Mon, 05 Oct 2015 10:28:30 +0000 In-Reply-To: <1443800943-17668-28-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Roger Pau Monne , xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Ian Campbell , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gMDIvMTAvMTUgMTY6NDgsIFJvZ2VyIFBhdSBNb25uZSB3cm90ZToKPiBBbGxvdyB0aGUgdXNh Z2Ugb2YgdGhlIFZDUFVPUF9pbml0aWFsaXNlLCBWQ1BVT1BfdXAsIFZDUFVPUF9kb3duIGFuZAo+ IFZDUFVPUF9pc191cCBoeXBlcmNhbGxzIGZyb20gSFZNIGd1ZXN0cy4KPgo+IFRoaXMgcGF0Y2gg aW50cm9kdWNlcyBhIG5ldyBzdHJ1Y3R1cmUgKHZjcHVfaHZtX2NvbnRleHQpIHRoYXQgc2hvdWxk IGJlIHVzZWQKPiBpbiBjb25qdWN0aW9uIHdpdGggdGhlIFZDUFVPUF9pbml0aWFsaXNlIGh5cGVy Y2FsbCBpbiBvcmRlciB0byBpbml0aWFsaXplCj4gdkNQVXMgZm9yIEhWTSBndWVzdHMuCj4KPiBT aWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4KPiBT aWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgo+ IENjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+Cj4gQ2M6IEFuZHJldyBDb29wZXIg PGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4gQ2M6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBi ZWxsQGNpdHJpeC5jb20+Cj4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFuby5zdGFiZWxs aW5pQGNpdHJpeC5jb20+Cj4gLS0tCj4gQ2hhbmdlcyBzaW5jZSB2NjoKPiAgLSBBZGQgY29tbWVu dHMgdG8gY2xhcmlmeSBzb21lIGluaXRpYWxpemF0aW9ucy4KPiAgLSBJbnRyb2R1Y2UgYSBnZW5l cmljIGRlZmF1bHRfaW5pdGlhbGl6ZV92Y3B1IHRoYXQncyB1c2VkIHRvIGluaXRpYWxpemUgYQo+ ICAgIEFSTSB2Q1BVIG9yIGEgeDg2IFBWIHZDUFUuCj4gIC0gTW92ZSB0aGUgdW5kZWYgb2YgdGhl IFNFRyBtYWNyby4KPiAgLSBGaXggdGhlIHNpemUgb2YgdGhlIGVmbGFncyByZWdpc3RlciwgaXQg c2hvdWxkIGJlIDMyYml0cy4KPiAgLSBBZGQgYSBjb21tZW50IHJlZ2FyZGluZyB0aGUgdmFsdWUg b2YgdGhlIDEyLTE1IGJpdHMgb2YgdGhlIF9hciBmaWVsZHMuCj4gIC0gUmVtb3ZlIHRoZSAxNmJp dCBzdHJ1Y3V0cmUsIHRoZSAzMmJpdCBvbmUgY2FuIGJlIHVzZWQgdG8gc3RhcnQgdGhlIGNwdSBp bgo+ICAgIHJlYWwgbW9kZS4KPiAgLSBBZGQgc29tZSBzYW5pdHkgY2hlY2tzIHRvIHRoZSB2YWx1 ZXMgcGFzc2VkIGluLgo+ICAtIEFkZCBwYWRkaW5ncyB0byB2Y3B1X2h2bV9jb250ZXh0IHNvIHRo ZSBsYXlvdXQgb24gMzIvNjRiaXRzIGlzIHRoZSBzYW1lLgo+ICAtIEFkZCBzdXBwb3J0IGZvciB0 aGUgY29tcGF0IHZlcnNpb24gb2YgVkNQVU9QX2luaXRpYWxpc2UuCj4KPiBDaGFuZ2VzIHNpbmNl IHY1Ogo+ICAtIEZpeCBhIGNvZGluZyBzdHlsZSBpc3N1ZS4KPiAgLSBNZXJnZSB0aGUgY29kZSBm cm9tIHdpcC1kbWxpdGUtdjUtcmVmYWN0b3IgYnkgQW5kcmV3IGluIG9yZGVyIHRvIHJlZHVjZQo+ ICAgIGJsb2F0Lgo+ICAtIFByaW50IHRoZSBvZmZlbmRpbmcgJWNyMyBpbiBjYXNlIG9mIGVycm9y IHdoZW4gdXNpbmcgc2hhZG93Lgo+ICAtIFJlZHVjZSB0aGUgc2NvcGUgb2YgbG9jYWwgdmFyaWFi bGVzIGluIGFyY2hfaW5pdGlhbGl6ZV92Y3B1Lgo+ICAtIHMvY3VycmVudC0+ZG9tYWluL3YtPmRv bWFpbi9nIGluIGFyY2hfaW5pdGlhbGl6ZV92Y3B1Lgo+ICAtIEV4cGFuZCB0aGUgY29tbWVudCBp biBwdWJsaWMvdmNwdS5oIHRvIGRvY3VtZW50IHRoZSB1c2FnZSBvZgo+ICAgIHZjcHVfaHZtX2Nv bnRleHQgZm9yIEhWTSBndWVzdHMuCj4gIC0gQWRkIG15c2VsZiBhcyB0aGUgY29weXJpZ2h0IGhv bGRlciBmb3IgdGhlIHB1YmxpYyBodm1fdmNwdS5oIGhlYWRlci4KPgo+IENoYW5nZXMgc2luY2Ug djQ6Cj4gIC0gRG9uJ3QgYXNzdW1lIG1vZGUgaXMgNjRCLCBhZGQgYW4gZXhwbGljaXQgY2hlY2su Cj4gIC0gRG9uJ3Qgc2V0IFRGX2tlcm5lbF9tb2RlLCBpdCBpcyBvbmx5IG5lZWRlZCBmb3IgUFYg Z3Vlc3RzLgo+ICAtIERvbid0IHNldCBDUjBfRVQgdW5jb25kaXRpb25hbGx5Lgo+IC0tLQo+ICB4 ZW4vYXJjaC94ODYvZG9tYWluLmMgICAgICAgICAgICAgfCAxODUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2FyY2gveDg2L2h2bS9odm0uYyAgICAgICAgICAg IHwgICA4ICsrCj4gIHhlbi9jb21tb24vY29tcGF0L2RvbWFpbi5jICAgICAgICB8ICA3MSArKysr KysrKysrKy0tLS0KPiAgeGVuL2NvbW1vbi9kb21haW4uYyAgICAgICAgICAgICAgIHwgIDU2ICsr KysrKysrKy0tLQo+ICB4ZW4vaW5jbHVkZS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwo+ ICB4ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oICAgICAgfCAgIDMgKwo+ICB4ZW4vaW5jbHVk ZS9wdWJsaWMvaHZtL2h2bV92Y3B1LmggfCAxNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiAgeGVuL2luY2x1ZGUvcHVibGljL3ZjcHUuaCAgICAgICAgIHwgICA2ICstCj4gIHhlbi9p bmNsdWRlL3hsYXQubHN0ICAgICAgICAgICAgICB8ICAgMyArCj4gIDkgZmlsZXMgY2hhbmdlZCwg NDQ4IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg eGVuL2luY2x1ZGUvcHVibGljL2h2bS9odm1fdmNwdS5oCj4KPiBkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCj4gaW5kZXggYTNiMWM5Yi4u YWY1ZmVlYSAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluLmMKPiArKysgYi94ZW4v YXJjaC94ODYvZG9tYWluLmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ICAjaW5jbHVkZSA8eGVuL3dh aXQuaD4KPiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPiAgI2luY2x1ZGUgPHB1Ymxp Yy9zeXNjdGwuaD4KPiArI2luY2x1ZGUgPHB1YmxpYy9odm0vaHZtX3ZjcHUuaD4KPiAgI2luY2x1 ZGUgPGFzbS9yZWdzLmg+Cj4gICNpbmNsdWRlIDxhc20vbWMxNDY4MThydGMuaD4KPiAgI2luY2x1 ZGUgPGFzbS9zeXN0ZW0uaD4KPiBAQCAtMTE3Niw2ICsxMTc3LDE5MCBAQCBpbnQgYXJjaF9zZXRf aW5mb19ndWVzdCgKPiAgI3VuZGVmIGMKPiAgfQo+ICAKPiArLyogQ2FsbGVkIGJ5IFZDUFVPUF9p bml0aWFsaXNlIGZvciBIVk0gZ3Vlc3RzLiAqLwo+ICtpbnQgYXJjaF9zZXRfaW5mb19odm1fZ3Vl c3Qoc3RydWN0IHZjcHUgKnYsIHZjcHVfaHZtX2NvbnRleHRfdCAqY3R4KQo+ICt7Cj4gKyAgICBz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqdXJlZ3MgPSAmdi0+YXJjaC51c2VyX3JlZ3M7Cj4gKyAgICBz dHJ1Y3Qgc2VnbWVudF9yZWdpc3RlciBjcywgZHMsIHNzLCBlcywgdHI7Cj4gKwo+ICsgICAgc3dp dGNoICggY3R4LT5tb2RlICkKPiArICAgIHsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzMyQjoKPiArICAgIHsK PiArICAgICAgICBjb25zdCBzdHJ1Y3QgdmNwdV9odm1feDg2XzMyICpyZWdzID0gJmN0eC0+Y3B1 X3JlZ3MueDg2XzMyOwo+ICsgICAgICAgIHVpbnQzMl90IGxpbWl0Owo+ICsKPiArI2RlZmluZSBT RUcocywgcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ICsgICAgKHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyKXsgLnNlbCA9IDAsIC5iYXNl ID0gKHIpLT5zICMjIF9iYXNlLCAgICAgICBcCj4gKyAgICAgICAgICAgIC5saW1pdCA9IChyKS0+ cyAjIyBfbGltaXQsIC5hdHRyLmJ5dGVzID0gKHIpLT5zICMjIF9hciB9Cj4gKyAgICAgICAgY3Mg PSBTRUcoY3MsIHJlZ3MpOwo+ICsgICAgICAgIGRzID0gU0VHKGRzLCByZWdzKTsKPiArICAgICAg ICBzcyA9IFNFRyhzcywgcmVncyk7Cj4gKyAgICAgICAgZXMgPSBTRUcoZXMsIHJlZ3MpOwo+ICsg ICAgICAgIHRyID0gU0VHKHRyLCByZWdzKTsKPiArI3VuZGVmIFNFRwo+ICsKPiArICAgICAgICAv KiBCYXNpYyBzYW5pdHkgY2hlY2tzLiAqLwo+ICsgICAgICAgIGlmICggY3MuYXR0ci5maWVsZHMu cGFkICE9IDAgfHwgZHMuYXR0ci5maWVsZHMucGFkICE9IDAgfHwKPiArICAgICAgICAgICAgIHNz LmF0dHIuZmllbGRzLnBhZCAhPSAwIHx8IGVzLmF0dHIuZmllbGRzLnBhZCAhPSAwIHx8Cj4gKyAg ICAgICAgICAgICB0ci5hdHRyLmZpZWxkcy5wYWQgIT0gMCApCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJBdHRyaWJ1dGUgYml0cyAxMi0xNSBvZiB0aGUg c2VnbWVudHMgYXJlIG5vdCBudWxsXG4iKTsKCkkgd291bGQgdXNlICd6ZXJvJyBhcyBvcHBvc2Vk IHRvICdudWxsJyBoZXJlLiAgVGhlcmUgaXMgbm90aGluZyB0byBkbwp3aXRoIHBvaW50ZXJzIGhl cmUuCgo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGxpbWl0ID0gY3MubGltaXQgKiAoY3MuYXR0ci5maWVsZHMuZyA/IFBBR0VfU0laRSA6 IDEpOwoKVGhpcyB3aWxsIG92ZXJmbG93IGluIHRoZSBjb21tb24gY2FzZS4gIENhbGN1bGF0aW9u IG9mIHRoZSBsaW1pdCBpcyBhCmxpdHRsZSBhd2t3YXJkLiAgSSBiZWxpZXZlIHRoaXMgc2hvdWxk IGRvOgoKbGltaXQgPSBjcy5saW1pdAppZiAoIGNzLmF0dHIuZmllbGRzLmcgKQogICAgbGltaXQg PSAobGltaXQgPDwgMTIpIHwgMHhmZmY7CgpJbiB0aGUgY2FzZSB0aGF0IGcgaXMgc2V0IGFuZCBj cyBpcyBhIGZsYXQgc2VnbWVudCwgbGltaXQgc2hvdWxkIGhhdmUKdGhlIHZhbHVlIH4wVSwgcmF0 aGVyIHRoYW4gMCB3aGljaCBpcyB3aGF0IHlvdXIgY2FsY3VsYXRpb24gd2lsbCBhY2hpZXZlLgoK PiArICAgICAgICBpZiAoIHJlZ3MtPmVpcCA+IGxpbWl0ICkKPiArICAgICAgICB7Cj4gKyAgICAg ICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVJUCBhZGRyZXNzIGlzIG91dHNpZGUgb2YgdGhl IENTIGxpbWl0XG4iKTsKCkluIGFsbCBjYXNlcywgcGxlYXNlIHByaW50IG91dCB0aGUgdmFsdWVz LCB0byBtYWtlIHRoZSBlcnJvciBtZXNzYWdlCm1vcmUgaGVscGZ1bC4KCmUuZy4gIkVJUCAoJTA4 eCkgb3V0c2lkZSBDUyBsaW1pdCAoJTA4eCkiCgo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICggZHMuYXR0ci5maWVsZHMuZHBsID4g Y3MuYXR0ci5maWVsZHMuZHBsICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGdwcmludGso WEVOTE9HX0VSUiwgIkRQTCBvZiBEUyBpcyBncmVhdGVyIHRoYW4gRFBMIG9mIENTXG4iKTsKPiAr ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBp ZiAoIHNzLmF0dHIuZmllbGRzLmRwbCAhPSBjcy5hdHRyLmZpZWxkcy5kcGwgKQo+ICsgICAgICAg IHsKPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiRFBMIG9mIFNTIGlzIGRpZmZl cmVudCB0aGFuIERQTCBvZiBDU1xuIik7Cj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKCBlcy5hdHRyLmZpZWxkcy5kcGwgPiBjcy5h dHRyLmZpZWxkcy5kcGwgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5M T0dfRVJSLCAiRFBMIG9mIEVTIGlzIGdyZWF0ZXIgdGhhbiBEUEwgb2YgQ1NcbiIpOwo+ICsgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICgg KChyZWdzLT5lZmVyICYgRUZFUl9MTUEpICYmICEocmVncy0+ZWZlciAmIEVGRVJfTE1FKSkgfHwK PiArICAgICAgICAgICAgICgocmVncy0+ZWZlciAmIEVGRVJfTE1FKSAmJiAhKHJlZ3MtPmVmZXIg JiBFRkVSX0xNQSkpICkKClRoaXMgc2ltcGxpZmllcyB0byAoICghIShyZWdzLT5lZmVyICYgRUZF Ul9MTUEpKSBeICghIShyZWdzLT5lZmVyICYKRUZFUl9MTUUpKSApCgo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiRUZFUi5MTUEgYW5kIEVGRVIuTE1FIG11 c3QgYmUgYm90aCBzZXRcbiIpOwoKQW5kIHRoaXMgc2hvdWxkIHNheSAiYm90aCB0aGUgc2FtZSIs IHJhdGhlciB0aGFuIGJvdGggc2V0LgoKSGF2aW5nIHNhaWQgdGhpcywgSSBzdGlsbCBkb24ndCB0 aGluayBpdCBpcyBzZW5zaWJsZSB0byByZXF1aXJlIHRoYXQgTE1BCmlzIHNldCwgc2VlaW5nIGFz IGl0IGlzIHN0cmljdGx5IGEgcmVhZC1vbmx5IGJpdCBpbiBFRkVSLiAgSSB3b3VsZApzdWdnZXN0 IGtleWluZyBvbiBMTUUgYWxvbmUsIGFuZCBhdXRvbWF0aWNhbGx5IE9SaW5nIGluIExNQSwgd2hp Y2gKbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIGhhcmR3YXJlIG1vcmUgY2xvc2VseS4KCj4gKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgdXJl Z3MtPnJheCAgICA9IHJlZ3MtPmVheDsKPiArICAgICAgICB1cmVncy0+cmN4ICAgID0gcmVncy0+ ZWN4Owo+ICsgICAgICAgIHVyZWdzLT5yZHggICAgPSByZWdzLT5lZHg7Cj4gKyAgICAgICAgdXJl Z3MtPnJieCAgICA9IHJlZ3MtPmVieDsKPiArICAgICAgICB1cmVncy0+cnNwICAgID0gcmVncy0+ ZXNwOwo+ICsgICAgICAgIHVyZWdzLT5yYnAgICAgPSByZWdzLT5lYnA7Cj4gKyAgICAgICAgdXJl Z3MtPnJzaSAgICA9IHJlZ3MtPmVzaTsKPiArICAgICAgICB1cmVncy0+cmRpICAgID0gcmVncy0+ ZWRpOwo+ICsgICAgICAgIHVyZWdzLT5yaXAgICAgPSByZWdzLT5laXA7Cj4gKyAgICAgICAgdXJl Z3MtPnJmbGFncyA9IHJlZ3MtPmVmbGFnczsKPiArCj4gKyAgICAgICAgdi0+YXJjaC5odm1fdmNw dS5ndWVzdF9jclswXSA9IHJlZ3MtPmNyMDsKPiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1 ZXN0X2NyWzNdID0gcmVncy0+Y3IzOwo+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3Rf Y3JbNF0gPSByZWdzLT5jcjQ7Cj4gKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9lZmVy ICA9IHJlZ3MtPmVmZXI7Cj4gKyAgICB9Cj4gKyAgICBicmVhazsKPiArCj4gKyAgICBjYXNlIFZD UFVfSFZNX01PREVfNjRCOgo+ICsgICAgewo+ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2 bV94ODZfNjQgKnJlZ3MgPSAmY3R4LT5jcHVfcmVncy54ODZfNjQ7Cj4gKwo+ICsgICAgICAgIC8q IEJhc2ljIHNhbml0eSBjaGVja3MuICovCj4gKyAgICAgICAgaWYgKCAhaXNfY2Fub25pY2FsX2Fk ZHJlc3MocmVncy0+cmlwKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRrKFhF TkxPR19FUlIsICJSSVAgY29udGFpbnMgYSBub24tY2Fub25pY2FsIGFkZHJlc3NcbiIpOwo+ICsg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlm ICggIShyZWdzLT5jcjAgJiBYODZfQ1IwX1BHKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICBncHJpbnRrKFhFTkxPR19FUlIsICJDUjAgZG9lc24ndCBoYXZlIHBhZ2luZyBlbmFibGVkXG4i KTsKPiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICAgfQo+ICsKPiArICAg ICAgICBpZiAoICEocmVncy0+Y3I0ICYgWDg2X0NSNF9QQUUpICkKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkNSNCBkb2Vzbid0IGhhdmUgUEFFIGVuYWJs ZWRcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIGlmICggKHJlZ3MtPmVmZXIgJiAoRUZFUl9MTUUgfCBFRkVSX0xNQSkpICE9IChF RkVSX0xNRSB8IEVGRVJfTE1BKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRr KFhFTkxPR19FUlIsICJFRkVSIGRvZXNuJ3QgaGF2ZSBMTUUgb3IgTE1BIGVuYWJsZWRcbiIpOwo+ ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IHVyZWdzLT5yYXggICAgPSByZWdzLT5yYXg7Cj4gKyAgICAgICAgdXJlZ3MtPnJjeCAgICA9IHJl Z3MtPnJjeDsKPiArICAgICAgICB1cmVncy0+cmR4ICAgID0gcmVncy0+cmR4Owo+ICsgICAgICAg IHVyZWdzLT5yYnggICAgPSByZWdzLT5yYng7Cj4gKyAgICAgICAgdXJlZ3MtPnJzcCAgICA9IHJl Z3MtPnJzcDsKPiArICAgICAgICB1cmVncy0+cmJwICAgID0gcmVncy0+cmJwOwo+ICsgICAgICAg IHVyZWdzLT5yc2kgICAgPSByZWdzLT5yc2k7Cj4gKyAgICAgICAgdXJlZ3MtPnJkaSAgICA9IHJl Z3MtPnJkaTsKPiArICAgICAgICB1cmVncy0+cmlwICAgID0gcmVncy0+cmlwOwo+ICsgICAgICAg IHVyZWdzLT5yZmxhZ3MgPSByZWdzLT5yZmxhZ3M7Cj4gKwo+ICsgICAgICAgIHYtPmFyY2guaHZt X3ZjcHUuZ3Vlc3RfY3JbMF0gPSByZWdzLT5jcjA7Cj4gKyAgICAgICAgdi0+YXJjaC5odm1fdmNw dS5ndWVzdF9jclszXSA9IHJlZ3MtPmNyMzsKPiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1 ZXN0X2NyWzRdID0gcmVncy0+Y3I0Owo+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3Rf ZWZlciAgPSByZWdzLT5lZmVyOwo+ICsKPiArI2RlZmluZSBTRUcoYiwgbCwgYSkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgKHN0cnVj dCBzZWdtZW50X3JlZ2lzdGVyKXsgLnNlbCA9IDAsIC5iYXNlID0gKGIpLCAubGltaXQgPSAobCks ICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0ci5ieXRlcyA9IChh KSB9Cj4gKyAgICAgICAgY3MgPSBTRUcoMCwgfjB1LCAweGE5Yik7IC8qIDY0Yml0IGNvZGUgc2Vn bWVudC4gKi8KPiArICAgICAgICBkcyA9IHNzID0gZXMgPSBTRUcoMCwgfjB1LCAweGM5Myk7Cj4g KyAgICAgICAgdHIgPSBTRUcoMCwgMHg2NywgMHg4Yik7IC8qIDY0Yml0IFRTUyAoYnVzeSkuICov Cj4gKyN1bmRlZiBTRUcKCkkgd291bGQgYmUgdGVtcHRlZCB0byBnZXQgcmlkIG9mIHRoaXMgbWFj cm8gZW50aXJlbHkuICBUaGUgb3RoZXIgbWFjcm8Kd2FzIHRvIGhpZGUgYWxsIHRoZSByZWdzLT4g cmVmZXJlbmNlcywgYnV0IHRoaXMgaXMgZW50aXJlbHkgZnJvbSBjb25zdGFudHMuCgp+QW5kcmV3 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=