From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: Re: [PATCH v3 2/2] qdisk - hw/block/xen_disk: grant copy implementation Date: Fri, 15 Jul 2016 17:55:27 +0100 Message-ID: <20160715165527.GN1729@perard.uk.xensource.com> References: <1466584733-19459-1-git-send-email-paulinaszubarczyk@gmail.com> <1466584733-19459-3-git-send-email-paulinaszubarczyk@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bO6Om-0000yu-4r for xen-devel@lists.xenproject.org; Fri, 15 Jul 2016 16:55:36 +0000 Content-Disposition: inline In-Reply-To: <1466584733-19459-3-git-send-email-paulinaszubarczyk@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Paulina Szubarczyk Cc: sstabellini@kernel.org, wei.liu2@citrix.com, ian.jackson@eu.citrix.com, david.vrabel@citrix.com, xen-devel@lists.xenproject.org, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBKdW4gMjIsIDIwMTYgYXQgMTA6Mzg6NTNBTSArMDIwMCwgUGF1bGluYSBTenViYXJj enlrIHdyb3RlOgo+IENvcHkgZGF0YSBvcGVyYXRlZCBvbiBkdXJpbmcgcmVxdWVzdCBmcm9tL3Rv IGxvY2FsIGJ1ZmZlcnMgdG8vZnJvbQo+IHRoZSBncmFudCByZWZlcmVuY2VzLgo+IAo+IEJlZm9y ZSBncmFudCBjb3B5IG9wZXJhdGlvbiBsb2NhbCBidWZmZXJzIG11c3QgYmUgYWxsb2NhdGVkIHdo YXQgaXMKPiBkb25lIGJ5IGNhbGxpbmcgaW9yZXFfaW5pdF9jb3B5X2J1ZmZlcnMuIEZvciB0aGUg J3JlYWQnIG9wZXJhdGlvbiwKPiBmaXJzdCwgdGhlIHFlbXUgZGV2aWNlIGludm9rZXMgdGhlIHJl YWQgb3BlcmF0aW9uIG9uIGxvY2FsIGJ1ZmZlcnMKPiBhbmQgb24gdGhlIGNvbXBsZXRpb24gZ3Jh bnQgY29weSBpcyBjYWxsZWQgYW5kIGJ1ZmZlcnMgYXJlIGZyZWVkLgo+IEZvciB0aGUgJ3dyaXRl JyBvcGVyYXRpb24gZ3JhbnQgY29weSBpcyBwZXJmb3JtZWQgYmVmb3JlIGludm9raW5nCj4gd3Jp dGUgYnkgcWVtdSBkZXZpY2UuCj4gCj4gQSBuZXcgdmFsdWUgJ2ZlYXR1cmVfZ3JhbnRfY29weScg aXMgYWRkZWQgdG8gcmVjb2duaXplIHdoZW4gdGhlCj4gZ3JhbnQgY29weSBvcGVyYXRpb24gaXMg c3VwcG9ydGVkIGJ5IGEgZ3Vlc3QuCj4gVGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uICdpb3JlcV9y dW5pb19xZW11X2FpbycgaXMgbW92ZWQgdG8KPiAnaW9yZXFfcnVuaW9fcWVtdV9haW9fYmxrJyBh bmQgaW4gdGhlICdpb3JlcV9ydW5pb19xZW11X2FpbycgZGVwZW5kaW5nCj4gb24gdGhlIHN1cHBv cnQgZm9yIGdyYW50IGNvcHkgYWNjb3JkaW5nIGNoZWNrcywgaW5pdGlhbGl6YXRpb24sIGdyYW50 Cj4gb3BlcmF0aW9uIGFyZSBtYWRlLCB0aGVuIHRoZSAnaW9yZXFfcnVuaW9fcWVtdV9haW9fYmxr JyBmdW5jdGlvbiBpcwo+IGNhbGxlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBQYXVsaW5hIFN6dWJh cmN6eWsgPHBhdWxpbmFzenViYXJjenlrQGdtYWlsLmNvbT4KCj4gZGlmZiAtLWdpdCBhL2h3L2Js b2NrL3hlbl9kaXNrLmMgYi9ody9ibG9jay94ZW5fZGlzay5jCj4gaW5kZXggMzdlMTRkMS4uNGVj YTA2YSAxMDA2NDQKPiAtLS0gYS9ody9ibG9jay94ZW5fZGlzay5jCj4gKysrIGIvaHcvYmxvY2sv eGVuX2Rpc2suYwo+IEBAIC01MDAsNiArNTAzLDk5IEBAIHN0YXRpYyBpbnQgaW9yZXFfbWFwKHN0 cnVjdCBpb3JlcSAqaW9yZXEpCj4gICAgICByZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIHZv aWQqIGdldF9idWZmZXIoaW50IGNvdW50KQo+ICt7Cj4gKyAgICByZXR1cm4geGNfbWVtYWxpZ24o eGVuX3hjLCBYQ19QQUdFX1NJWkUsIGNvdW50KlhDX1BBR0VfU0laRSk7CgpJbnN0ZWFkIG9mIHhj X21lbWFsaWduLCBJIHRoaW5rIHlvdSBuZWVkIHRvIGNhbGwgcWVtdV9tZW1hbGlnbigpIGhlcmUu CkhhdmUgYSBsb29rIGF0IHRoZSBmaWxlIEhBQ0tJTkcsIHRoZSBzZWN0aW9uICczLiBMb3cgbGV2 ZWwgbWVtb3J5Cm1hbmFnZW1lbnQnLiBBbHNvLCB5b3UgcHJvYmFibHkgZG8gbm90IG5lZWQgYW4g dGhlIGV4dHJhIGZ1bmN0aW9uCmdldF9idWZmZXIoKSBhbmQgY2FuIGNhbGwgcWVtdV9tZW1hbGln bigpIGRpcmVjdGx5IGluCmlvcmVxX2luaXRfY29weV9idWZmZXJzKCkuCgo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBmcmVlX2J1ZmZlcnMoc3RydWN0IGlvcmVxICppb3JlcSkKPiArewo+ICsgICAg aW50IGk7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IGlvcmVxLT52Lm5pb3Y7IGkrKykgewo+ ICsgICAgICAgIGlvcmVxLT5wYWdlW2ldID0gTlVMTDsKPiArICAgIH0KPiArCj4gKyAgICBmcmVl KGlvcmVxLT5wYWdlcyk7CgpXaXRoIHRoZSB1c2Ugb2YgcWVtdV9tZW1hbGlnbiwgdGhpcyB3b3Vs ZCBuZWVkIHRvIGJlIHFlbXVfdmZyZWUoKS4KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW9yZXFf aW5pdF9jb3B5X2J1ZmZlcnMoc3RydWN0IGlvcmVxICppb3JlcSkgewo+ICsgICAgaW50IGk7Cj4g Kwo+ICsgICAgaWYgKGlvcmVxLT52Lm5pb3YgPT0gMCkgewo+ICsgICAgICAgIHJldHVybiAwOwo+ ICsgICAgfQo+ICsKPiArICAgIGlvcmVxLT5wYWdlcyA9IGdldF9idWZmZXIoaW9yZXEtPnYubmlv dik7Cj4gKyAgICBpZiAoIWlvcmVxLT5wYWdlcykgewo+ICsgICAgICAgIHJldHVybiAtMTsKPiAr ICAgIH0KPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgaW9yZXEtPnYubmlvdjsgaSsrKSB7Cj4g KyAgICAgICAgaW9yZXEtPnBhZ2VbaV0gPSBpb3JlcS0+cGFnZXMgKyBpKlhDX1BBR0VfU0laRTsK PiArICAgICAgICBpb3JlcS0+di5pb3ZbaV0uaW92X2Jhc2UgKz0gKHVpbnRwdHJfdClpb3JlcS0+ cGFnZVtpXTsKCklzIHRoZSArPSBpbnRlbmRlZCBoZXJlPwoKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpb3JlcV9jb3B5KHN0cnVjdCBpb3JlcSAq aW9yZXEpCj4gK3sKPiArICAgIFhlbkdudHRhYiBnbnQgPSBpb3JlcS0+YmxrZGV2LT54ZW5kZXYu Z250dGFiZGV2Owo+ICsgICAgeGVuZ250dGFiX2dyYW50X2NvcHlfc2VnbWVudF90IHNlZ3NbQkxL SUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKPiArICAgIGludCBpLCBjb3VudCA9IDAsIHIs IHJjOwo+ICsgICAgaW50NjRfdCBmaWxlX2JsayA9IGlvcmVxLT5ibGtkZXYtPmZpbGVfYmxrOwo+ ICsKPiArICAgIGlmIChpb3JlcS0+di5uaW92ID09IDApIHsKPiArICAgICAgICByZXR1cm4gMDsK PiArICAgIH0KPiArCj4gKyAgICBjb3VudCA9IGlvcmVxLT52Lm5pb3Y7Cj4gKwo+ICsgICAgZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPiArCj4gKyAgICAgICAgaWYgKGlvcmVxLT5yZXEu b3BlcmF0aW9uID09IEJMS0lGX09QX1JFQUQpIHsKPiArICAgICAgICAgICAgc2Vnc1tpXS5mbGFn cyA9IEdOVENPUFlfZGVzdF9ncmVmOwo+ICsgICAgICAgICAgICBzZWdzW2ldLmRlc3QuZm9yZWln bi5yZWYgPSBpb3JlcS0+cmVmc1tpXTsKPiArICAgICAgICAgICAgc2Vnc1tpXS5kZXN0LmZvcmVp Z24uZG9taWQgPSBpb3JlcS0+ZG9taWRzW2ldOwo+ICsgICAgICAgICAgICBzZWdzW2ldLmRlc3Qu Zm9yZWlnbi5vZmZzZXQgPSBpb3JlcS0+cmVxLnNlZ1tpXS5maXJzdF9zZWN0ICogZmlsZV9ibGs7 Cj4gKyAgICAgICAgICAgIHNlZ3NbaV0uc291cmNlLnZpcnQgPSBpb3JlcS0+di5pb3ZbaV0uaW92 X2Jhc2U7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgc2Vnc1tpXS5mbGFncyA9 IEdOVENPUFlfc291cmNlX2dyZWY7Cj4gKyAgICAgICAgICAgIHNlZ3NbaV0uc291cmNlLmZvcmVp Z24ucmVmID0gaW9yZXEtPnJlZnNbaV07Cj4gKyAgICAgICAgICAgIHNlZ3NbaV0uc291cmNlLmZv cmVpZ24uZG9taWQgPSBpb3JlcS0+ZG9taWRzW2ldOwo+ICsgICAgICAgICAgICBzZWdzW2ldLnNv dXJjZS5mb3JlaWduLm9mZnNldCA9IGlvcmVxLT5yZXEuc2VnW2ldLmZpcnN0X3NlY3QgKiBmaWxl X2JsazsKPiArICAgICAgICAgICAgc2Vnc1tpXS5kZXN0LnZpcnQgPSBpb3JlcS0+di5pb3ZbaV0u aW92X2Jhc2U7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHNlZ3NbaV0ubGVuID0gKGlvcmVxLT5y ZXEuc2VnW2ldLmxhc3Rfc2VjdAo+ICsgICAgICAgICAgICAgICAgICAgICAgIC0gaW9yZXEtPnJl cS5zZWdbaV0uZmlyc3Rfc2VjdCArIDEpICogZmlsZV9ibGs7Cj4gKwo+ICsgICAgfQo+ICsKPiAr ICAgIHJjID0geGVuZ250dGFiX2dyYW50X2NvcHkoZ250LCBjb3VudCwgc2Vncyk7Cj4gKwo+ICsg ICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgeGVuX2JlX3ByaW50ZigmaW9yZXEtPmJsa2Rldi0+eGVu ZGV2LCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjb3B5IGRhdGEgJWQg XG4iLCByYyk7Cj4gKyAgICAgICAgaW9yZXEtPmFpb19lcnJvcnMrKzsKPiArICAgICAgICByZXR1 cm4gLTE7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHIgPSAwOwo+ICsgICAgfQo+ICsKPiAr ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKyAgICAgICAgaWYgKHNlZ3NbaV0u c3RhdHVzICE9IEdOVFNUX29rYXkpIHsKPiArICAgICAgICAgICAgeGVuX2JlX3ByaW50ZigmaW9y ZXEtPmJsa2Rldi0+eGVuZGV2LCAzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWls ZWQgdG8gY29weSBkYXRhICVkIGZvciBncmVmICVkLCBkb21pZCAlZFxuIiwgcmMsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9yZXEtPnJlZnNbaV0sIGlvcmVxLT5kb21pZHNbaV0pOwo+ ICsgICAgICAgICAgICBpb3JlcS0+YWlvX2Vycm9ycysrOwo+ICsgICAgICAgICAgICByID0gLTE7 Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByOwo+ICt9Cj4gKwo+ICBz dGF0aWMgaW50IGlvcmVxX3J1bmlvX3FlbXVfYWlvKHN0cnVjdCBpb3JlcSAqaW9yZXEpOwo+ICAK PiAgc3RhdGljIHZvaWQgcWVtdV9haW9fY29tcGxldGUodm9pZCAqb3BhcXVlLCBpbnQgcmV0KQo+ IEBAIC01MjgsOCArNjI0LDMxIEBAIHN0YXRpYyB2b2lkIHFlbXVfYWlvX2NvbXBsZXRlKHZvaWQg Km9wYXF1ZSwgaW50IHJldCkKPiAgICAgICAgICByZXR1cm47Cj4gICAgICB9Cj4gIAo+ICsgICAg aWYgKGlvcmVxLT5ibGtkZXYtPmZlYXR1cmVfZ3JhbnRfY29weSkgewo+ICsgICAgICAgIHN3aXRj aCAoaW9yZXEtPnJlcS5vcGVyYXRpb24pIHsKPiArICAgICAgICBjYXNlIEJMS0lGX09QX1JFQUQ6 Cj4gKyAgICAgICAgICAgIC8qIGluIGNhc2Ugb2YgZmFpbHVyZSBpb3JlcS0+YWlvX2Vycm9ycyBp cyBpbmNyZWFzZWQgKi8KPiArICAgICAgICAgICAgaW9yZXFfY29weShpb3JlcSk7Cj4gKyAgICAg ICAgICAgIGZyZWVfYnVmZmVycyhpb3JlcSk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6Cj4gKyAgICAgICAgY2FzZSBCTEtJRl9PUF9GTFVTSF9E SVNLQ0FDSEU6Cj4gKyAgICAgICAgICAgIGlmICghaW9yZXEtPnJlcS5ucl9zZWdtZW50cykgewo+ ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg ZnJlZV9idWZmZXJzKGlvcmVxKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgZGVm YXVsdDoKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAg ICAgIGlvcmVxLT5zdGF0dXMgPSBpb3JlcS0+YWlvX2Vycm9ycyA/IEJMS0lGX1JTUF9FUlJPUiA6 IEJMS0lGX1JTUF9PS0FZOwo+IC0gICAgaW9yZXFfdW5tYXAoaW9yZXEpOwo+ICsKPiArICAgIGlm ICghaW9yZXEtPmJsa2Rldi0+ZmVhdHVyZV9ncmFudF9jb3B5KSB7Cj4gKyAgICAgICAgaW9yZXFf dW5tYXAoaW9yZXEpOwo+ICsgICAgfQo+ICsKPiAgICAgIGlvcmVxX2ZpbmlzaChpb3JlcSk7Cj4g ICAgICBzd2l0Y2ggKGlvcmVxLT5yZXEub3BlcmF0aW9uKSB7Cj4gICAgICBjYXNlIEJMS0lGX09Q X1dSSVRFOgo+IEBAIC01NDcsMTQgKzY2Niw0MiBAQCBzdGF0aWMgdm9pZCBxZW11X2Fpb19jb21w bGV0ZSh2b2lkICpvcGFxdWUsIGludCByZXQpCj4gICAgICBxZW11X2JoX3NjaGVkdWxlKGlvcmVx LT5ibGtkZXYtPmJoKTsKPiAgfQo+ICAKPiArc3RhdGljIGludCBpb3JlcV9ydW5pb19xZW11X2Fp b19ibGsoc3RydWN0IGlvcmVxICppb3JlcSk7Cj4gKwo+ICBzdGF0aWMgaW50IGlvcmVxX3J1bmlv X3FlbXVfYWlvKHN0cnVjdCBpb3JlcSAqaW9yZXEpCj4gIHsKPiAtICAgIHN0cnVjdCBYZW5CbGtE ZXYgKmJsa2RldiA9IGlvcmVxLT5ibGtkZXY7Cj4gKyAgICBpZiAoaW9yZXEtPmJsa2Rldi0+ZmVh dHVyZV9ncmFudF9jb3B5KSB7Cj4gKwo+ICsgICAgICAgIGlvcmVxX2luaXRfY29weV9idWZmZXJz KGlvcmVxKTsKPiArICAgICAgICBpZiAoaW9yZXEtPnJlcS5ucl9zZWdtZW50cyAmJiAoaW9yZXEt PnJlcS5vcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUgfHwKPiArICAgICAgICAgICAgaW9yZXEt PnJlcS5vcGVyYXRpb24gPT0gQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFKSkgewo+ICsgICAgICAg ICAgICBpZiAoaW9yZXFfY29weShpb3JlcSkpIHsKCldvdWxkIGl0IG1ha2Ugc2VucyB0byBkbyB0 aGlzIGlvcmVxX2NvcHkoKSBkaXJlY3RseSBpbgppb3JlcV9ydW5pb19xZW11X2Fpb19ibGsgPwoK PiArICAgICAgICAgICAgICAgIGZyZWVfYnVmZmVycyhpb3JlcSk7Cj4gKyAgICAgICAgICAgICAg ICBnb3RvIGVycjsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAo aW9yZXFfcnVuaW9fcWVtdV9haW9fYmxrKGlvcmVxKSkgZ290byBlcnI7Cj4gKwo+ICsgICAgfSBl bHNlIHsKPiAgCj4gLSAgICBpZiAoaW9yZXEtPnJlcS5ucl9zZWdtZW50cyAmJiBpb3JlcV9tYXAo aW9yZXEpID09IC0xKSB7Cj4gLSAgICAgICAgZ290byBlcnJfbm9fbWFwOwo+ICsgICAgICAgIGlm IChpb3JlcS0+cmVxLm5yX3NlZ21lbnRzICYmIGlvcmVxX21hcChpb3JlcSkpIGdvdG8gZXJyOwo+ ICsgICAgICAgIGlmIChpb3JlcV9ydW5pb19xZW11X2Fpb19ibGsoaW9yZXEpKSB7Cj4gKyAgICAg ICAgICAgIGlvcmVxX3VubWFwKGlvcmVxKTsKPiArICAgICAgICAgICAgZ290byBlcnI7Cj4gKyAg ICAgICAgfQo+ICAgICAgfQo+ICAKPiArICAgIHJldHVybiAwOwo+ICtlcnI6Cj4gKyAgICBpb3Jl cV9maW5pc2goaW9yZXEpOwo+ICsgICAgaW9yZXEtPnN0YXR1cyA9IEJMS0lGX1JTUF9FUlJPUjsK PiArICAgIHJldHVybiAtMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpb3JlcV9ydW5pb19xZW11 X2Fpb19ibGsoc3RydWN0IGlvcmVxICppb3JlcSkKPiArewo+ICsgICAgc3RydWN0IFhlbkJsa0Rl diAqYmxrZGV2ID0gaW9yZXEtPmJsa2RldjsKPiArCj4gICAgICBpb3JlcS0+YWlvX2luZmxpZ2h0 Kys7Cj4gICAgICBpZiAoaW9yZXEtPnByZXN5bmMpIHsKPiAgICAgICAgICBibGtfYWlvX2ZsdXNo KGlvcmVxLT5ibGtkZXYtPmJsaywgcWVtdV9haW9fY29tcGxldGUsIGlvcmVxKTsKPiBAQCAtNTk0 LDE5ICs3NDEsMTIgQEAgc3RhdGljIGludCBpb3JlcV9ydW5pb19xZW11X2FpbyhzdHJ1Y3QgaW9y ZXEgKmlvcmVxKQo+ICAgICAgfQo+ICAgICAgZGVmYXVsdDoKPiAgICAgICAgICAvKiB1bmtub3du IG9wZXJhdGlvbiAoc2hvdWxkbid0IGhhcHBlbiAtLSBwYXJzZSBjYXRjaGVzIHRoaXMpICovCj4g LSAgICAgICAgZ290byBlcnI7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICAgICAgfQo+ICAKPiAg ICAgIHFlbXVfYWlvX2NvbXBsZXRlKGlvcmVxLCAwKTsKPiAgCj4gICAgICByZXR1cm4gMDsKPiAt Cj4gLWVycjoKPiAtICAgIGlvcmVxX3VubWFwKGlvcmVxKTsKPiAtZXJyX25vX21hcDoKPiAtICAg IGlvcmVxX2ZpbmlzaChpb3JlcSk7Cj4gLSAgICBpb3JlcS0+c3RhdHVzID0gQkxLSUZfUlNQX0VS Uk9SOwo+IC0gICAgcmV0dXJuIC0xOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGJsa19zZW5kX3Jl c3BvbnNlX29uZShzdHJ1Y3QgaW9yZXEgKmlvcmVxKQo+IEBAIC0xMDIwLDEwICsxMTYwLDE3IEBA IHN0YXRpYyBpbnQgYmxrX2Nvbm5lY3Qoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2KQo+ICAKPiAg ICAgIHhlbl9iZV9iaW5kX2V2dGNobigmYmxrZGV2LT54ZW5kZXYpOwo+ICAKPiArICAgIGJsa2Rl di0+ZmVhdHVyZV9ncmFudF9jb3B5ID0KPiArICAgICAgICAgICAgICAgICh4ZW5nbnR0YWJfZ3Jh bnRfY29weShibGtkZXYtPnhlbmRldi5nbnR0YWJkZXYsIDAsIE5VTEwpID09IDApOwo+ICsKPiAr ICAgIHhlbl9iZV9wcmludGYoJmJsa2Rldi0+eGVuZGV2LCAzLCAiZ3JhbnQgY29weSBvcGVyYXRp b24gJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgIGJsa2Rldi0+ZmVhdHVyZV9ncmFudF9jb3B5 ID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Cj4gKwo+ICAgICAgeGVuX2JlX3ByaW50ZigmYmxr ZGV2LT54ZW5kZXYsIDEsICJvazogcHJvdG8gJXMsIHJpbmctcmVmICVkLCAiCj4gICAgICAgICAg ICAgICAgICAgICJyZW1vdGUgcG9ydCAlZCwgbG9jYWwgcG9ydCAlZFxuIiwKPiAgICAgICAgICAg ICAgICAgICAgYmxrZGV2LT54ZW5kZXYucHJvdG9jb2wsIGJsa2Rldi0+cmluZ19yZWYsCj4gICAg ICAgICAgICAgICAgICAgIGJsa2Rldi0+eGVuZGV2LnJlbW90ZV9wb3J0LCBibGtkZXYtPnhlbmRl di5sb2NhbF9wb3J0KTsKPiArCj4gICAgICByZXR1cm4gMDsKPiAgfQoKT3RoZXIgdGhpbmdzLCBj b3VsZCB5b3UgcmViYXNlIHlvdXIgcGF0Y2ggb24gUUVNVSB1cHN0cmVhbSBhbmQgQ0MKcWVtdS1k ZXZlbEBub25nbnUub3JnPyBZb3UgY2FuIGFsc28gY2hlY2sgdGhlIGNvZGluZyBzdHlsZSBvZiB0 aGUgcGF0Y2gKd2l0aCAuL3NjcmlwdHMvY2hlY2twYXRjaC5wbC4KClRoYW5rIHlvdSwKCi0tIApB bnRob255IFBFUkFSRAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==