From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH 05/18] xen: add xenstore watcher infratructure Date: Wed, 5 Dec 2018 15:24:49 +0000 Message-ID: <3a7d2ac2743c4206ae3588e2527121f0__14854.4561853216$1544023432$gmane$org@AMSPEX02CL03.citrite.net> References: <20181121151211.15997-1-paul.durrant@citrix.com> <20181121151211.15997-6-paul.durrant@citrix.com> <20181203144231.GK14786@perard.uk.xensource.com> 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 1gUZ2j-000727-8y for xen-devel@lists.xenproject.org; Wed, 05 Dec 2018 15:24:53 +0000 In-Reply-To: <20181203144231.GK14786@perard.uk.xensource.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Anthony Perard Cc: Kevin Wolf , Stefano Stabellini , "qemu-block@nongnu.org" , "qemu-devel@nongnu.org" , Max Reitz , "xen-devel@lists.xenproject.org" List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEFudGhvbnkgUEVSQVJEIFttYWls dG86YW50aG9ueS5wZXJhcmRAY2l0cml4LmNvbV0KPiBTZW50OiAwMyBEZWNlbWJlciAyMDE4IDE0 OjQzCj4gVG86IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+Cj4gQ2M6IHFl bXUtYmxvY2tAbm9uZ251Lm9yZzsgcWVtdS1kZXZlbEBub25nbnUub3JnOyB4ZW4tCj4gZGV2ZWxA bGlzdHMueGVucHJvamVjdC5vcmc7IEtldmluIFdvbGYgPGt3b2xmQHJlZGhhdC5jb20+OyBNYXgg UmVpdHoKPiA8bXJlaXR6QHJlZGhhdC5jb20+OyBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxs aW5pQGtlcm5lbC5vcmc+Cj4gU3ViamVjdDogUmU6IFtQQVRDSCAwNS8xOF0geGVuOiBhZGQgeGVu c3RvcmUgd2F0Y2hlciBpbmZyYXRydWN0dXJlCj4gCj4gT24gV2VkLCBOb3YgMjEsIDIwMTggYXQg MDM6MTE6NThQTSArMDAwMCwgUGF1bCBEdXJyYW50IHdyb3RlOgo+ID4gQSBYZW4gUFYgZnJvbnRl bmQgY29tbXVuaWNhdGVzIGl0cyBzdGF0ZSB0byB0aGUgUFYgYmFja2VuZCBieSB3cml0aW5nIHRv Cj4gPiB0aGUgJ3N0YXRlJyBrZXkgaW4gdGhlIGZyb250ZW5kIGFyZWEgaW4geGVuc3RvcmUuIEl0 IGlzIHRoZXJlZm9yZQo+ID4gbmVjZXNzYXJ5IGZvciBhIFhlbkRldmljZSBpbXBsZW1lbnRhdGlv biB0byBiZSBub3RpZmllZCB3aGVuZXZlciB0aGUKPiA+IHZhbHVlIG9mIHRoaXMga2V5IGNoYW5n ZXMuCj4gPgo+ID4gVGhpcyBwYXRjaCBhZGRzIGNvZGUgdG8gZG8gdGhpcyBhcyBmb2xsb3dzOgo+ ID4KPiA+IC0gYW4gJ2ZkIGhhbmRsZXInIGlzIHJlZ2lzdGVyZWQgb24gdGhlIGxpYnhlbnN0b3Jl IGhhbmRsZSB3aGljaCB3aWxsIGJlCj4gPiAgIHRyaWdnZXJlZCB3aGVuZXZlciBhICd3YXRjaCcg ZXZlbnQgb2NjdXJzCj4gPiAtIHByaW1pdGl2ZXMgYXJlIGFkZGVkIHRvIHhlbi1idXMtaGVscGVy IHRvIGFkZCBvciByZW1vdmUgd2F0Y2ggZXZlbnRzCj4gPiAtIGEgbGlzdCBvZiBOb3RpZmllciBv YmplY3RzIGlzIGFkZGVkIHRvIFhlbkJ1cyB0byBwcm92aWRlIGEgbWVjaGFuaXNtCj4gPiAgIHRv IGNhbGwgdGhlIGFwcHJvcHJpYXRlICd3YXRjaCBoYW5kbGVyJyB3aGVuIGl0cyBhc3NvY2lhdGVk IGV2ZW50Cj4gPiAgIG9jY3Vycwo+ID4KPiA+IFRoZSB4ZW4tcWlzayBpbXBsZW1lbnRhdGlvbiBp cyBleHRlbmRlZCB3aXRoIGEgJ2Zyb250ZW5kX2NoYW5nZWQnCj4gbWV0aG9kLAo+IAo+ICJUaGUg eGVuLXFkaXNrIgoKSXQncyB4ZW4tYmxvY2sgbm93IDotKQoKPiAKPiA+IHdoaWNoIGNhbGxzIGFz LXlldCBzdHViICdjb25uZWN0JyBhbmQgJ2Rpc2Nvbm5lY3QnIGZ1bmN0aW9ucyB3aGVuIHRoZQo+ ID4gcmVsZXZhbnQgZnJvbnRlbmQgc3RhdGUgdHJhbnNpdGlvbnMgb2NjdXIuIEEgc3Vic2VxdWVu dCBwYXRjaCB3aWxsCj4gc3VwcGx5Cj4gPiBhIGZ1bGwgaW1wbGVtZW50YXRpb24gZm9yIHRoZXNl IGZ1bmN0aW9ucy4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVy cmFudEBjaXRyaXguY29tPgo+ID4gLS0tCj4gPiBkaWZmIC0tZ2l0IGEvaHcvYmxvY2sveGVuLXFk aXNrLmMgYi9ody9ibG9jay94ZW4tcWRpc2suYwo+ID4gaW5kZXggMDg1OTY0M2Y3ZC4uMzVmN2I3 MDQ4MCAxMDA2NDQKPiA+IC0tLSBhL2h3L2Jsb2NrL3hlbi1xZGlzay5jCj4gPiArKysgYi9ody9i bG9jay94ZW4tcWRpc2suYwo+ID4gK3N0YXRpYyB2b2lkIHhlbl9xZGlza19mcm9udGVuZF9jaGFu Z2VkKFhlbkRldmljZSAqeGVuZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0geGVuYnVzX3N0YXRlCj4gZnJvbnRlbmRfc3RhdGUsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQo+ID4gK3sKPiA+ ICsgICAgWGVuUWRpc2tEZXZpY2UgKnFkaXNrZGV2ID0gWEVOX1FESVNLX0RFVklDRSh4ZW5kZXYp Owo+ID4gKyAgICBlbnVtIHhlbmJ1c19zdGF0ZSBiYWNrZW5kX3N0YXRlID0KPiB4ZW5fZGV2aWNl X2JhY2tlbmRfZ2V0X3N0YXRlKHhlbmRldik7Cj4gPiArICAgIEVycm9yICpsb2NhbF9lcnIgPSBO VUxMOwo+ID4gKwo+ID4gKyAgICBzd2l0Y2ggKGZyb250ZW5kX3N0YXRlKSB7Cj4gPiArICAgIGNh c2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoKPiA+ICsgICAgY2FzZSBYZW5idXNTdGF0ZUNvbm5l Y3RlZDoKPiA+ICsgICAgICAgIGlmIChiYWNrZW5kX3N0YXRlID09IFhlbmJ1c1N0YXRlQ29ubmVj dGVkKSB7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiAr ICAgICAgICB4ZW5fcWRpc2tfZGlzY29ubmVjdChxZGlza2RldiwgJmVycm9yX2ZhdGFsKTsKPiAK PiBEbyB3ZSB3YW50IHRvIGNyYXNoIChhY3R1YWxseSBleGl0KSBRRU1VIHdoZW4gZGlzY29ubmVj dCBmYWlsZWQ/Cj4gCgpPaywgSSdsbCBwcm9wYWdhdGUuCgo+ID4gKyAgICAgICAgeGVuX3FkaXNr X2Nvbm5lY3QocWRpc2tkZXYsICZsb2NhbF9lcnIpOwo+ID4gKyAgICAgICAgaWYgKGxvY2FsX2Vy cikgewo+ID4gKyAgICAgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOwo+ ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAg eGVuX2RldmljZV9iYWNrZW5kX3NldF9zdGF0ZSh4ZW5kZXYsIFhlbmJ1c1N0YXRlQ29ubmVjdGVk KTsKPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gKwo+ID4gKyAgICBjYXNlIFhlbmJ1c1N0YXRlQ2xv c2luZzoKPiA+ICsgICAgICAgIHhlbl9kZXZpY2VfYmFja2VuZF9zZXRfc3RhdGUoeGVuZGV2LCBY ZW5idXNTdGF0ZUNsb3NpbmcpOwo+ID4gKyAgICAgICAgYnJlYWs7Cj4gPiArCj4gPiArICAgIGNh c2UgWGVuYnVzU3RhdGVDbG9zZWQ6Cj4gPiArICAgICAgICB4ZW5fcWRpc2tfZGlzY29ubmVjdChx ZGlza2RldiwgJmVycm9yX2ZhdGFsKTsKPiA+ICsgICAgICAgIHhlbl9kZXZpY2VfYmFja2VuZF9z ZXRfc3RhdGUoeGVuZGV2LCBYZW5idXNTdGF0ZUNsb3NlZCk7Cj4gPiArICAgICAgICBicmVhazsK PiA+ICsKPiA+ICsgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gKyAgICB9Cj4g PiArfQo+ID4gKwo+ID4gZGlmZiAtLWdpdCBhL2h3L3hlbi94ZW4tYnVzLWhlbHBlci5jIGIvaHcv eGVuL3hlbi1idXMtaGVscGVyLmMKPiA+IGluZGV4IGQ5ZWUyZWQ2YTAuLmI0NGFjYzgwNDcgMTAw NjQ0Cj4gPiAtLS0gYS9ody94ZW4veGVuLWJ1cy1oZWxwZXIuYwo+ID4gKysrIGIvaHcveGVuL3hl bi1idXMtaGVscGVyLmMKPiA+IEBAIC0xMjIsMyArMTIyLDMxIEBAIGludCB4c19ub2RlX3NjYW5m KHN0cnVjdCB4c19oYW5kbGUgKnhzaCwgY29uc3QgY2hhcgo+ICpub2RlLCBjb25zdCBjaGFyICpr ZXksCj4gPgo+ID4gICAgICByZXR1cm4gcmM7Cj4gPiAgfQo+ID4gKwo+ID4gK3ZvaWQgeHNfbm9k ZV93YXRjaChzdHJ1Y3QgeHNfaGFuZGxlICp4c2gsIGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNo YXIKPiAqa2V5LAo+ID4gKyAgICAgICAgICAgICAgICAgICBjaGFyICp0b2tlbiwgRXJyb3IgKipl cnJwKQo+ID4gK3sKPiA+ICsgICAgY2hhciAqcGF0aDsKPiA+ICsKPiA+ICsgICAgcGF0aCA9IChz dHJsZW4obm9kZSkgIT0gMCkgPyBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgbm9kZSwga2V5KSA6 Cj4gPiArICAgICAgICBnX3N0cmR1cChrZXkpOwo+ID4gKwo+ID4gKyAgICBpZiAoIXhzX3dhdGNo KHhzaCwgcGF0aCwgdG9rZW4pKSB7Cj4gPiArICAgICAgICBlcnJvcl9zZXRnX2Vycm5vKGVycnAs IGVycm5vLCAiZmFpbGVkIHRvIHdhdGNoIHBhdGggJyVzJyIsCj4gcGF0aCk7Cj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgZ19mcmVlKHBhdGgpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHhzX25v ZGVfdW53YXRjaChzdHJ1Y3QgeHNfaGFuZGxlICp4c2gsIGNvbnN0IGNoYXIgKm5vZGUsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp0b2tlbikK PiA+ICt7Cj4gPiArICAgIGNoYXIgKnBhdGg7Cj4gPiArCj4gPiArICAgIHBhdGggPSAoc3RybGVu KG5vZGUpICE9IDApID8gZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyIsIG5vZGUsIGtleSkgOgo+ID4g KyAgICAgICAgZ19zdHJkdXAoa2V5KTsKPiA+ICsKPiA+ICsgICAgeHNfdW53YXRjaCh4c2gsIHBh dGgsIHRva2VuKTsKPiAKPiBJIHRoaW5rIHdlIHNob3VsZCBjaGVjayBmb3IgZXJyb3IgZnJvbSB4 c191bndhdGNoIGFzIHdlbGwuCgpZZXMuCgo+IAo+ID4gKwo+ID4gKyAgICBnX2ZyZWUocGF0aCk7 Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2h3L3hlbi94ZW4tYnVzLmMgYi9ody94ZW4veGVuLWJ1 cy5jCj4gPiBpbmRleCA2NjNhYThlMTE3Li45OTk4OGY4NTY4IDEwMDY0NAo+ID4gLS0tIGEvaHcv eGVuL3hlbi1idXMuYwo+ID4gKysrIGIvaHcveGVuL3hlbi1idXMuYwo+ID4gK3N0YXRpYyBYZW5X YXRjaCAqeGVuX2J1c19hZGRfd2F0Y2goWGVuQnVzICp4ZW5idXMsIGNvbnN0IGNoYXIgKm5vZGUs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXks IFhlbldhdGNoSGFuZGxlcgo+IGhhbmRsZXIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpvcGFxdWUsIEVycm9yICoqZXJycCkKPiA+ICt7Cj4gPiArICAgIFhl bldhdGNoICp3YXRjaCA9IGdfbmV3MChYZW5XYXRjaCwgMSk7Cj4gPiArICAgIFFlbXVVVUlEIHV1 aWQ7Cj4gPiArICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwo+ID4gKwo+ID4gKyAgICBxZW11 X3V1aWRfZ2VuZXJhdGUoJnV1aWQpOwo+ID4gKyAgICB3YXRjaC0+dG9rZW4gPSBxZW11X3V1aWRf dW5wYXJzZV9zdHJkdXAoJnV1aWQpOwo+ID4gKwo+ID4gKyAgICB0cmFjZV94ZW5fYnVzX2FkZF93 YXRjaChub2RlLCBrZXksIHdhdGNoLT50b2tlbik7Cj4gPiArCj4gPiArICAgIHdhdGNoLT5ub2Rl ID0gZ19zdHJkdXAobm9kZSk7Cj4gPiArICAgIHdhdGNoLT5rZXkgPSBnX3N0cmR1cChrZXkpOwo+ ID4gKyAgICB3YXRjaC0+aGFuZGxlciA9IGhhbmRsZXI7Cj4gPiArICAgIHdhdGNoLT5vcGFxdWUg PSBvcGFxdWU7Cj4gPiArICAgIHdhdGNoLT5ub3RpZmllci5ub3RpZnkgPSB3YXRjaF9ub3RpZnk7 Cj4gPiArCj4gPiArICAgIG5vdGlmaWVyX2xpc3RfYWRkKCZ4ZW5idXMtPndhdGNoX25vdGlmaWVy cywgJndhdGNoLT5ub3RpZmllcik7Cj4gPiArCj4gPiArICAgIHhzX25vZGVfd2F0Y2goeGVuYnVz LT54c2gsIG5vZGUsIGtleSwgd2F0Y2gtPnRva2VuLCAmbG9jYWxfZXJyKTsKPiA+ICsKPiA+ICsg ICAgaWYgKGxvY2FsX2Vycikgewo+ID4gKyAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxv Y2FsX2Vycik7Cj4gPiArCj4gPiArICAgICAgICBub3RpZmllcl9yZW1vdmUoJndhdGNoLT5ub3Rp Zmllcik7Cj4gPiArCj4gPiArICAgICAgICBnX2ZyZWUod2F0Y2gtPnRva2VuKTsKPiA+ICsgICAg ICAgIGdfZnJlZSh3YXRjaC0+a2V5KTsKPiA+ICsgICAgICAgIGdfZnJlZSh3YXRjaC0+bm9kZSk7 Cj4gPiArCj4gPiArICAgICAgICBnX2ZyZWUod2F0Y2gpOwo+IAo+IEl0IHdvdWxkIGJlIGJldHRl ciB0byBoYXZlIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGZyZWUvZGlzcG9zZSBvZiBhCj4gWGVuV2F0 Y2gsIG9yIG1heWJlIHNpbXBseSBjYWxsaW5nIHhlbl9idXNfcmVtb3ZlX3dhdGNoIGhlcmUgbWln aHQgYmUKPiBlbm91Z2guCgpUcnVlLiBUb28gbXVjaCBjdXQnbidwYXN0ZS4KCj4gCj4gPiArICAg ICAgICB3YXRjaCA9IE5VTEw7Cj4gCj4gWW91IGNvdWxkIHJldHVybiBOVUxMIGluc3RlYWQuCj4g Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIHdhdGNoOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCB4ZW5fYnVzX3JlbW92ZV93YXRjaChYZW5CdXMgKnhlbmJ1cywgWGVuV2F0 Y2ggKndhdGNoKQo+ID4gK3sKPiA+ICsgICAgdHJhY2VfeGVuX2J1c19yZW1vdmVfd2F0Y2god2F0 Y2gtPm5vZGUsIHdhdGNoLT5rZXksIHdhdGNoLT50b2tlbik7Cj4gPiArCj4gPiArICAgIHhzX25v ZGVfdW53YXRjaCh4ZW5idXMtPnhzaCwgd2F0Y2gtPm5vZGUsIHdhdGNoLT5rZXksIHdhdGNoLQo+ ID50b2tlbik7Cj4gPiArCj4gPiArICAgIG5vdGlmaWVyX3JlbW92ZSgmd2F0Y2gtPm5vdGlmaWVy KTsKPiA+ICsKPiA+ICsgICAgZ19mcmVlKHdhdGNoLT50b2tlbik7Cj4gPiArICAgIGdfZnJlZSh3 YXRjaC0+a2V5KTsKPiA+ICsgICAgZ19mcmVlKHdhdGNoLT5ub2RlKTsKPiA+ICsKPiA+ICsgICAg Z19mcmVlKHdhdGNoKTsKPiA+ICt9Cj4gCj4gPiArc3RhdGljIHZvaWQgeGVuX2J1c193YXRjaCh2 b2lkICpvcGFxdWUpCj4gPiArewo+ID4gKyAgICBYZW5CdXMgKnhlbmJ1cyA9IG9wYXF1ZTsKPiA+ ICsgICAgY2hhciAqKnY7Cj4gPiArICAgIGNvbnN0IGNoYXIgKnRva2VuOwo+ID4gKyAgICB1bnNp Z25lZCBpbnQgbjsKPiA+ICsKPiA+ICsgICAgZ19hc3NlcnQoeGVuYnVzLT54c2gpOwo+ID4gKwo+ ID4gKyAgICB2ID0geHNfcmVhZF93YXRjaCh4ZW5idXMtPnhzaCwgJm4pOwo+IAo+IFdoYXQgaXMg dGhlIG4gZm9yPwo+IEFsc28sIG1heWJlIHlvdSB3YW50ZWQgdG8gY2FsbCB4c19jaGVja193YXRj aCBpbnN0ZWFkPyAoSW4gYSBsb29wLCB1bnRpbAo+IEVHQUlOKQoKSSBkb24ndCBuZWVkIHRoZSBs b29wLiBUaGUgJ24nIGlzIHRoZSBsZW5ndGggb2YgdGhlIHZlY3RvciBidXQgeHNfY2hlY2tfd2F0 Y2goKSBkb2VzIHdoYXQgSSBuZWVkLgoKPiAKPiA+ICsgICAgaWYgKCF2KSB7Cj4gPiArICAgICAg ICByZXR1cm47Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgdG9rZW4gPSB2W1hTX1dBVENIX1RP S0VOXTsKPiA+ICsKPiA+ICsgICAgdHJhY2VfeGVuX2J1c193YXRjaCh0b2tlbik7Cj4gPiArCj4g PiArICAgIG5vdGlmaWVyX2xpc3Rfbm90aWZ5KCZ4ZW5idXMtPndhdGNoX25vdGlmaWVycywgKHZv aWQgKil0b2tlbik7Cj4gPiArCj4gPiArICAgIGZyZWUodik7Cj4gPiArfQo+ID4gKwo+ID4gIHN0 YXRpYyB2b2lkIHhlbl9idXNfcmVhbGl6ZShCdXNTdGF0ZSAqYnVzLCBFcnJvciAqKmVycnApCj4g PiAgewo+ID4gICAgICBYZW5CdXMgKnhlbmJ1cyA9IFhFTl9CVVMoYnVzKTsKPiA+IEBAIC0yMzAs MTIgKzQxOSwyNCBAQCBzdGF0aWMgdm9pZCB4ZW5fZGV2aWNlX2Zyb250ZW5kX2NyZWF0ZShYZW5E ZXZpY2UKPiAqeGVuZGV2LCBFcnJvciAqKmVycnApCj4gPiAgICAgICAgICBlcnJvcl9wcm9wYWdh dGUoZXJycCwgbG9jYWxfZXJyKTsKPiA+ICAgICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImZh aWxlZCB0byBjcmVhdGUgZnJvbnRlbmQ6ICIpOwo+ID4gICAgICB9Cj4gPiArCj4gPiArICAgIHhl bmRldi0+ZnJvbnRlbmRfc3RhdGVfd2F0Y2ggPQo+ID4gKyAgICAgICAgeGVuX2J1c19hZGRfd2F0 Y2goeGVuYnVzLCB4ZW5kZXYtPmZyb250ZW5kX3BhdGgsICJzdGF0ZSIsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICB4ZW5fZGV2aWNlX2Zyb250ZW5kX2NoYW5nZWQsIHhlbmRldiwKPiAm bG9jYWxfZXJyKTsKPiAKPiBZb3UgY2FuJ3QgcmV1c2UgbG9jYWxfZXJyIGhlcmUsICpsb2NhbF9l cnIgbXVzdCBiZSBudWxsIChJdCBpc24ndAo+IGV4YWN0bHkgd3JpdHRlbiBsaWtlIHRoaXMsIGJ1 dCB0aGF0IHdoYXQgSSB1bmRlcnN0YW5kIGZyb20gcmVhZGluZwo+IHFhcGkvZXJyb3IuaCkuCgpP aCwgdGhlIGNvZGUgc2hvdWxkIGhhdmUgYmFpbGVkIG9uIHRoZSBmaXJzdCBlcnJvci4KCiAgUGF1 bAoKPiAKPiBNYXliZSB5b3UgbWVhbnQgdG8gcmV0dXJuIHdoZW4gdGhlIHByZXZpb3VzIGZ1bmN0 aW9uIGZhaWxlZCAoY2FsbCBvZgo+IHhzX25vZGVfY3JlYXRlKT8KPiAKPiA+ICsgICAgaWYgKGxv Y2FsX2Vycikgewo+ID4gKyAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7 Cj4gPiArICAgICAgICBlcnJvcl9wcmVwZW5kKGVycnAsICJmYWlsZWQgdG8gd2F0Y2ggZnJvbnRl bmQgc3RhdGU6ICIpOwo+ID4gKyAgICB9Cj4gPiAgfQo+IAo+IFRoYW5rcywKPiAKPiAtLQo+IEFu dGhvbnkgUEVSQVJECgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs