From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v12 05/11] x86/mm: add HYPERVISOR_memory_op to acquire guest resources Date: Mon, 30 Oct 2017 12:05:09 +0000 Message-ID: <0b37627274184e76865a0a73062f8c90@AMSPEX02CL03.citrite.net> References: <20171017132432.24093-1-paul.durrant@citrix.com> <20171017132432.24093-6-paul.durrant@citrix.com> <59F21AC7020000780018A489@prv-mh.provo.novell.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 1e98oh-0004Rv-8B for xen-devel@lists.xenproject.org; Mon, 30 Oct 2017 12:05:19 +0000 In-Reply-To: <59F21AC7020000780018A489@prv-mh.provo.novell.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: 'Jan Beulich' Cc: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , Andrew Cooper , "Tim (Xen.org)" , George Dunlap , Julien Grall , "xen-devel@lists.xenproject.org" , Ian Jackson , Daniel De Graaf List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEphbiBCZXVsaWNoIFttYWlsdG86 SkJldWxpY2hAc3VzZS5jb21dCj4gU2VudDogMjYgT2N0b2JlciAyMDE3IDE2OjI3Cj4gVG86IFBh dWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+Cj4gQ2M6IEp1bGllbiBHcmFsbCA8 anVsaWVuLmdyYWxsQGFybS5jb20+OyBBbmRyZXcgQ29vcGVyCj4gPEFuZHJldy5Db29wZXIzQGNp dHJpeC5jb20+OyBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPjsgR2VvcmdlCj4gRHVubGFw IDxHZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+OyBJYW4gSmFja3NvbiA8SWFuLkphY2tzb25AY2l0 cml4LmNvbT47Cj4gU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPjsg eGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOwo+IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8 a29ucmFkLndpbGtAb3JhY2xlLmNvbT47IERhbmllbCBEZSBHcmFhZgo+IDxkZ2RlZ3JhQHR5Y2hv Lm5zYS5nb3Y+OyBUaW0gKFhlbi5vcmcpIDx0aW1AeGVuLm9yZz4KPiBTdWJqZWN0OiBSZTogW1BB VENIIHYxMiAwNS8xMV0geDg2L21tOiBhZGQgSFlQRVJWSVNPUl9tZW1vcnlfb3AgdG8KPiBhY3F1 aXJlIGd1ZXN0IHJlc291cmNlcwo+IAo+ID4+PiBPbiAxNy4xMC4xNyBhdCAxNToyNCwgPHBhdWwu ZHVycmFudEBjaXRyaXguY29tPiB3cm90ZToKPiA+IEBAIC01MzUsNiArNTg4LDQ4IEBAIGludCBj b21wYXRfbWVtb3J5X29wKHVuc2lnbmVkIGludCBjbWQsCj4gWEVOX0dVRVNUX0hBTkRMRV9QQVJB TSh2b2lkKSBjb21wYXQpCj4gPiAgICAgICAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKPiA+ICAg ICAgICAgICAgICBicmVhazsKPiA+Cj4gPiArICAgICAgICBjYXNlIFhFTk1FTV9hY3F1aXJlX3Jl c291cmNlOgo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIGNvbnN0IHhlbl91bG9uZ190 ICp4ZW5fZnJhbWVfbGlzdCA9Cj4gPiArICAgICAgICAgICAgICAgICh4ZW5fdWxvbmdfdCAqKShu YXQubWFyICsgMSk7Cj4gPiArICAgICAgICAgICAgY29tcGF0X3Vsb25nX3QgKmNvbXBhdF9mcmFt ZV9saXN0ID0KPiA+ICsgICAgICAgICAgICAgICAgKGNvbXBhdF91bG9uZ190ICopKG5hdC5tYXIg KyAxKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBpZiAoIGNtcC5tYXIubnJfZnJhbWVzID09IDAg KQo+IAo+IERvZXNuJ3QgdGhpcyBuZWVkIHRvIGJlIGNvbXBhdF9oYW5kbGVfaXNfbnVsbChjbXAu bWFyLmZyYW1lX2xpc3QpLCBvcgo+IGEgY29tYmluYXRpb24gb2YgYm90aD8KClNvcnJ5LCB5ZXMg dGhpcyB3YXMgYSBoYW5nLW92ZXIgZnJvbSB0aGUgb2xkIHNjaGVtZS4KCj4gCj4gPiArICAgICAg ICAgICAgewo+ID4gKwo+IERFRklORV9YRU5fR1VFU1RfSEFORExFKGNvbXBhdF9tZW1fYWNxdWly ZV9yZXNvdXJjZV90KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKCBfX2NvcHlfZmll bGRfdG9fZ3Vlc3QoCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0X2hhbmRsZV9j YXN0KGNvbXBhdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29tcGF0X21lbV9hY3F1aXJlX3Jlc291cmNlX3QpLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAmY21wLm1hciwgbnJfZnJhbWVzKSApCj4gPiArICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLUVGQVVMVDsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgZWxzZQo+ ID4gKyAgICAgICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAgLyoKPiA+ICsgICAgICAgICAg ICAgICAgICogTk9URTogdGhlIHNtYWxsZXIgY29tcGF0IGFycmF5IG92ZXJ3cml0ZXMgdGhlIG5h dGl2ZQo+ID4gKyAgICAgICAgICAgICAgICAgKiAgICAgICBhcnJheS4KPiA+ICsgICAgICAgICAg ICAgICAgICovCj4gCj4gSSB0aGluayBJIGhhZCBhbHJlYWR5IGFza2VkIGZvciBhIHJlc3BlY3Rp dmUgQlVJTERfQlVHX09OKCkuCgpZb3UgYXNrZWQgZm9yIHRoZSBjb21tZW50LiBJIGNhbid0IGZp bmQgd2hlcmUgeW91IGFza2VkIGZvciBhIEJVSUxEX0JVR19PTigpIGJ1dCBJIGNhbiBjZXJ0YWlu bHkgYWRkIG9uZS4KCj4gCj4gPiAtLS0gYS94ZW4vY29tbW9uL21lbW9yeS5jCj4gPiArKysgYi94 ZW4vY29tbW9uL21lbW9yeS5jCj4gPiBAQCAtOTY1LDYgKzk2NSw5NSBAQCBzdGF0aWMgbG9uZyB4 YXRwX3Blcm1pc3Npb25fY2hlY2soc3RydWN0IGRvbWFpbgo+ICpkLCB1bnNpZ25lZCBpbnQgc3Bh Y2UpCj4gPiAgICAgIHJldHVybiB4c21fYWRkX3RvX3BoeXNtYXAoWFNNX1RBUkdFVCwgY3VycmVu dC0+ZG9tYWluLCBkKTsKPiA+ICB9Cj4gPgo+ID4gK3N0YXRpYyBpbnQgYWNxdWlyZV9yZXNvdXJj ZSgKPiA+ICsgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5fbWVtX2FjcXVpcmVfcmVzb3Vy Y2VfdCkgYXJnKQo+ID4gK3sKPiA+ICsgICAgc3RydWN0IGRvbWFpbiAqZCwgKmN1cnJkID0gY3Vy cmVudC0+ZG9tYWluOwo+ID4gKyAgICB4ZW5fbWVtX2FjcXVpcmVfcmVzb3VyY2VfdCB4bWFyOwo+ ID4gKyAgICB1bnNpZ25lZCBsb25nIG1mbl9saXN0WzJdOwo+ID4gKyAgICBpbnQgcmM7Cj4gPiAr Cj4gPiArICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZ4bWFyLCBhcmcsIDEpICkKPiA+ICsgICAg ICAgIHJldHVybiAtRUZBVUxUOwo+ID4gKwo+ID4gKyAgICBpZiAoIHhtYXIucGFkICE9IDAgKQo+ ID4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArICAgIGlmICggZ3Vlc3RfaGFu ZGxlX2lzX251bGwoeG1hci5mcmFtZV9saXN0KSApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIC8q IFNwZWNpYWwgY2FzZSBmb3IgcXVlcnlpbmcgaW1wbGVtZW50YXRpb24gbGltaXQgKi8KPiA+ICsg ICAgICAgIGlmICggeG1hci5ucl9mcmFtZXMgPT0gMCApCj4gCj4gUGVyaGFwcyBpbnZlcnQgdGhl IGNvbmRpdGlvbiB0byByZWR1Y2UgLi4uCj4gCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAg ICAgeG1hci5ucl9mcmFtZXMgPSBBUlJBWV9TSVpFKG1mbl9saXN0KTsKPiA+ICsKPiA+ICsgICAg ICAgICAgICBpZiAoIF9fY29weV9maWVsZF90b19ndWVzdChhcmcsICZ4bWFyLCBucl9mcmFtZXMp ICkKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gPiArCj4gPiArICAgICAg ICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAgICB9Cj4gCj4gLi4uIG92ZXJhbGwgaW5kZW50YXRp b24/Cj4gCj4gPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICBpZiAoIHhtYXIubnJfZnJhbWVzID09IDAgKQo+ID4gKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4gCj4gV2h5PyAoQWxtb3N0PykgZXZlcnl3aGVyZSBlbHNlIHplcm8gY291bnRzIGFyZSBz aW1wbHkgbm8tb3BzLCB3aGljaAo+IHJlc3VsdCBpbiBzdWNjZXNzIHJldHVybnMuCgpPaywgSSds bCBkcm9wIHRoZSBjaGVjay4KCj4gCj4gPiArICAgIGlmICggeG1hci5ucl9mcmFtZXMgPiBBUlJB WV9TSVpFKG1mbl9saXN0KSApCj4gPiArICAgICAgICByZXR1cm4gLUUyQklHOwo+ID4gKwo+ID4g KyAgICBkID0gcmN1X2xvY2tfZG9tYWluX2J5X2FueV9pZCh4bWFyLmRvbWlkKTsKPiAKPiBUaGlz IGJlaW5nIGEgdG9vbHMgb25seSBpbnRlcmZhY2UsIHdoeSAiYnlfYW55X2lkIiBpbnN0ZWFkIG9m Cj4gInJlbW90ZV9kb21haW5fYnlfaWQiPyBJbiBwYXJ0aWN1bGFyIC4uLgo+IAo+ID4gKyAgICBp ZiAoIGQgPT0gTlVMTCApCj4gPiArICAgICAgICByZXR1cm4gLUVTUkNIOwo+ID4gKwo+ID4gKyAg ICByYyA9IHhzbV9kb21haW5fcmVzb3VyY2VfbWFwKFhTTV9ETV9QUklWLCBkKTsKPiAKPiAuLi4g YW4gdW5wcml2aWxlZ2VkIGRtIGRvbWFpbiBzaG91bGQgcHJvYmFibHkgbm90IGJlIHBlcm1pdHRl ZCB0bwo+IGludm9rZSB0aGlzIG9uIGl0c2VsZi4KClRydWUuCgo+IAo+ID4gKyAgICBpZiAoIHJj ICkKPiA+ICsgICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICBzd2l0Y2ggKCB4bWFyLnR5 cGUgKQo+ID4gKyAgICB7Cj4gPiArICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICByYyA9IC1FT1BO T1RTVVBQOwo+ID4gKyAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYg KCByYyApCj4gPiArICAgICAgICBnb3RvIG91dDsKPiA+ICsKPiA+ICsgICAgaWYgKCAhcGFnaW5n X21vZGVfdHJhbnNsYXRlKGN1cnJkKSApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIGlmICggY29w eV90b19ndWVzdCh4bWFyLmZyYW1lX2xpc3QsIG1mbl9saXN0LCB4bWFyLm5yX2ZyYW1lcykgKQo+ ID4gKyAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKPiA+ICsgICAgfQo+ID4gKyAgICBlbHNlCj4g PiArICAgIHsKPiA+ICsgICAgICAgIHhlbl9wZm5fdCBnZm5fbGlzdFtBUlJBWV9TSVpFKG1mbl9s aXN0KV07Cj4gPiArICAgICAgICB1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICsgICAgICAgIHJj ID0gLUVGQVVMVDsKPiA+ICsgICAgICAgIGlmICggY29weV9mcm9tX2d1ZXN0KGdmbl9saXN0LCB4 bWFyLmZyYW1lX2xpc3QsIHhtYXIubnJfZnJhbWVzKSApCj4gPiArICAgICAgICAgICAgZ290byBv dXQ7Cj4gPiArCj4gPiArICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHhtYXIubnJfZnJhbWVzOyBp KysgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIHJjID0gc2V0X2ZvcmVpZ25fcDJt X2VudHJ5KGN1cnJkLCBnZm5fbGlzdFtpXSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfbWZuKG1mbl9saXN0W2ldKSk7Cj4gPiArICAgICAgICAgICAgaWYgKCBy YyApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICAvKgo+ID4gKyAgICAg ICAgICAgICAgICAgKiBNYWtlIHN1cmUgcmMgaXMgLUVJTyBmb3IgYW55IGludGVyYXRpb24gb3Ro ZXIgdGhhbgo+ID4gKyAgICAgICAgICAgICAgICAgKiB0aGUgZmlyc3QuCj4gCj4gIml0ZXJhdGlv biIsIGJ1dCB3aHkgaXMgdGhpcyBpbXBvcnRhbnQgaW4gdGhlIGZpcnN0IHBsYWNlPwoKVGhlIGhl YWRlciBleHBsYWluczoKCiJJZiAtRUlPIGlzIHJldHVybmVkIHRoZW4gdGhlIGZyYW1lX2xpc3Qg aGFzIG9ubHkgYmVlbiBwYXJ0aWFsbHkgbWFwcGVkIGFuZCBpdCBpcyB1cCB0byB0aGUgY2FsbGVy IHRvIHVubWFwIGFsbCB0aGUgR0ZOcy4iCgpQYXJ0aWN1bGFybHksIG9uIEFSTSwgc2V0X2ZvcmVp Z25fcDJtX2VudHJ5KCkgd2lsbCBhbHdheXMgcmV0dXJuIC1FT1BOT1RTVVBQIHNvIEkgd2FudCB0 byBtYWtlIHN1cmUgdGhhdCBpcyByZXR1cm5lZC4KCj4gCj4gPiAtLS0gYS94ZW4vaW5jbHVkZS9w dWJsaWMvbWVtb3J5LmgKPiA+ICsrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9tZW1vcnkuaAo+ID4g QEAgLTU5OSw2ICs1OTksNDcgQEAgc3RydWN0IHhlbl9yZXNlcnZlZF9kZXZpY2VfbWVtb3J5X21h cCB7Cj4gPiAgdHlwZWRlZiBzdHJ1Y3QgeGVuX3Jlc2VydmVkX2RldmljZV9tZW1vcnlfbWFwCj4g PiB4ZW5fcmVzZXJ2ZWRfZGV2aWNlX21lbW9yeV9tYXBfdDsKPiA+ICBERUZJTkVfWEVOX0dVRVNU X0hBTkRMRSh4ZW5fcmVzZXJ2ZWRfZGV2aWNlX21lbW9yeV9tYXBfdCk7Cj4gPgo+ID4gKy8qCj4g PiArICogR2V0IHRoZSBwYWdlcyBmb3IgYSBwYXJ0aWN1bGFyIGd1ZXN0IHJlc291cmNlLCBzbyB0 aGF0IHRoZXkgY2FuIGJlCj4gPiArICogbWFwcGVkIGRpcmVjdGx5IGJ5IGEgdG9vbHMgZG9tYWlu Lgo+ID4gKyAqLwo+ID4gKyNkZWZpbmUgWEVOTUVNX2FjcXVpcmVfcmVzb3VyY2UgMjgKPiA+ICtz dHJ1Y3QgeGVuX21lbV9hY3F1aXJlX3Jlc291cmNlIHsKPiA+ICsgICAgLyogSU4gLSB0aGUgZG9t YWluIHdob3NlIHJlc291cmNlIGlzIHRvIGJlIG1hcHBlZCAqLwo+ID4gKyAgICBkb21pZF90IGRv bWlkOwo+ID4gKyAgICAvKiBJTiAtIHRoZSB0eXBlIG9mIHJlc291cmNlICovCj4gPiArICAgIHVp bnQxNl90IHR5cGU7Cj4gPiArICAgIC8qCj4gPiArICAgICAqIElOIC0gYSB0eXBlLXNwZWNpZmlj IHJlc291cmNlIGlkZW50aWZpZXIsIHdoaWNoIG11c3QgYmUgemVybwo+ID4gKyAgICAgKiAgICAg IHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLgo+ID4gKyAgICAgKi8KPiA+ICsgICAgdWludDMyX3Qg aWQ7Cj4gPiArICAgIC8qIElOL09VVCAtIEFzIGFuIElOIHBhcmFtZXRlciBudW1iZXIgb2YgZnJh bWVzIG9mIHRoZSByZXNvdXJjZQo+ID4gKyAgICAgKiAgICAgICAgICB0byBiZSBtYXBwZWQuIEhv d2V2ZXIsIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgMCBhbmQKPiA+ICsgICAgICogICAgICAg ICAgZnJhbWVfbGlzdCBpcyBOVUxMIHRoZW4gdGhpcyBmaWVsZCB3aWxsIGJlIHNldCB0byB0aGUK PiA+ICsgICAgICogICAgICAgICAgbWF4aW11bSB2YWx1ZSBzdXBwb3J0ZWQgYnkgdGhlIGltcGxl bWVudGF0aW9uIG9uIHJldHVybi4KPiA+ICsgICAgICovCj4gPiArICAgIHVpbnQzMl90IG5yX2Zy YW1lczsKPiA+ICsgICAgdWludDMyX3QgcGFkOwo+ID4gKyAgICAvKiBJTiAtIHRoZSBpbmRleCBv ZiB0aGUgaW5pdGlhbCBmcmFtZSB0byBiZSBtYXBwZWQuIFRoaXMgcGFyYW1ldGVyCj4gPiArICAg ICAqICAgICAgaXMgaWdub3JlZCBpZiBucl9mcmFtZXMgaXMgMC4KPiA+ICsgICAgICovCj4gPiAr ICAgIHVpbnQ2NF9hbGlnbmVkX3QgZnJhbWU7Cj4gPiArICAgIC8qIElOL09VVCAtIElmIHRoZSB0 b29scyBkb21haW4gaXMgUFYgdGhlbiwgdXBvbiByZXR1cm4sIGZyYW1lX2xpc3QKPiA+ICsgICAg ICogICAgICAgICAgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgTUZOcyBvZiB0aGUgcmVzb3Vy Y2UuCj4gPiArICAgICAqICAgICAgICAgIElmIHRoZSB0b29scyBkb21haW4gaXMgSFZNIHRoZW4g aXQgaXMgZXhwZWN0ZWQgdGhhdCwgb24KPiA+ICsgICAgICogICAgICAgICAgZW50cnksIGZyYW1l X2xpc3Qgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIGxpc3Qgb2YgR0ZOcwo+ID4gKyAgICAgKiAg ICAgICAgICB0aGF0IHdpbGwgYmUgbWFwcGVkIHRvIHRoZSBNRk5zIG9mIHRoZSByZXNvdXJjZS4K PiA+ICsgICAgICogICAgICAgICAgSWYgLUVJTyBpcyByZXR1cm5lZCB0aGVuIHRoZSBmcmFtZV9s aXN0IGhhcyBvbmx5IGJlZW4KPiA+ICsgICAgICogICAgICAgICAgcGFydGlhbGx5IG1hcHBlZCBh bmQgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byB1bm1hcCBhbGwKPiA+ICsgICAgICogICAgICAg ICAgdGhlIEdGTnMuCj4gPiArICAgICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBO VUxMIGlmIG5yX2ZyYW1lcyBpcyAwLgo+ID4gKyAgICAgKi8KPiA+ICsgICAgWEVOX0dVRVNUX0hB TkRMRSh4ZW5fdWxvbmdfdCkgZnJhbWVfbGlzdDsKPiAKPiBUaGlzIGlzIHN0aWxsIHhlbl91bG9u Z190LCB3aGljaCBJIGNhbiBsaXZlIHdpdGgsIGJ1dCB0aGVuIHlvdSBzaG91bGRuJ3QKPiBjb3B5 IGludG8gLyBvdXQgb2YgYXJyYXlzIG9mIG90aGVyIHR5cGVzIGluIGFjcXVpcmVfcmVzb3VyY2Uo KSAodGhlCj4gbW9yZSB0aGF0IHRoaXMgaXMgY29tbW9uIGNvZGUsIGFuZCBpaXJjIHhlbl91bG9u Z190IGFuZAo+IHVuc2lnbmVkIGxvbmcgYXJlbid0IHRoZSBzYW1lIHRoaW5nIG9uIEFSTTMyKS4K CkdpdmVuIHRoZSB3ZWlnaHQgb2Ygb3BpbmlvbiwgSSdsbCBjaGFuZ2UgdGhpcyB0byB4ZW5fcGZu X3QuCgogIFBhdWwKCj4gCj4gSmFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK