From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:34066) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpCvP-0000tl-Pi for qemu-devel@nongnu.org; Thu, 31 Jan 2019 09:02:42 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpCvK-00014k-EK for qemu-devel@nongnu.org; Thu, 31 Jan 2019 09:02:36 -0500 From: Andrey Shinkevich Date: Thu, 31 Jan 2019 14:02:14 +0000 Message-ID: <7ccbcc44-9d41-2df9-e1af-88715f81c99a@virtuozzo.com> References: <1548244464-633186-1-git-send-email-andrey.shinkevich@virtuozzo.com> In-Reply-To: <1548244464-633186-1-git-send-email-andrey.shinkevich@virtuozzo.com> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH RFC 1/1] Stream block job involves copy-on-read filter List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "qemu-devel@nongnu.org" , "qemu-block@nongnu.org" Cc: "jcody@redhat.com" , "kwolf@redhat.com" , "mreitz@redhat.com" , Denis Lunev , Vladimir Sementsov-Ogievskiy UElOR2luZw0KUGxlYXNlIGhlbHAhDQoNCk9uIDIzLzAxLzIwMTkgMTQ6NTQsIEFuZHJleSBTaGlu a2V2aWNoIHdyb3RlOg0KPiBUaGUgY29weS1vbi1yZWFkIGZpbHRlciBkcml2ZXIgaXMgYXBwbGll ZCB0byBibG9jay1zdHJlYW0gb3BlcmF0aW9ucy4NCj4gVGhlICd0ZXN0X3N0cmVhbV9wYXJhbGxl bCcgaW4gdGhlIGZpbGUgdGVzdHMvcWVtdS1pb3Rlc3RzLzAzMCBydW5zDQo+IGpvYnMgdGhhdCB1 c2Ugbm9kZXMgZm9yIHN0cmVhbWluZyBpbiBwYXJhbGxlbCB0aHJvdWdoIHRoZSBiYWNraW5nIGNo YWluLg0KPiBXZSd2ZSBnb3QgZmlsdGVycyBiZWluZyBpbnNlcnRlZCB0byBhbmQgcmVtb3ZlZCBm cm9tIHRoZSBiYWNraW5nIGNoYWluDQo+IHdoaWxlIGpvYnMgYXJlIHJ1bm5pbmcuIEFzIGEgcmVz dWx0LCBhIGZpbHRlciBub2RlIG1heSBiZSBwYXNzZWQgYXMgdGhlDQo+ICdiYXNlJyBwYXJhbWV0 ZXIgdG8gdGhlIHN0cmVhbV9zdGFydCgpIGZ1bmN0aW9uIHdoZW4gdGhlIGJhc2Ugbm9kZSBuYW1l DQo+IGlzIG5vdCBzcGVjaWZpZWQgKHRoZSBiYXNlIG5vZGUgaXMgaWRlbnRpZmllZCBieSBpdHMg ZmlsZSBuYW1lIHdoaWNoIGlzDQo+IHRoZSBzYW1lIHRvIHRoZSByZWxhdGVkIGZpbHRlciBub2Rl KS4NCj4gQW5vdGhlciBpc3N1ZSBpcyB0aGF0IGEgZnVuY3Rpb24ga2VlcHMgdGhlIHBvaW50ZXIg dG8gdGhlIGZpbHRlciBCRFMNCj4gb2JqZWN0IHRoYXQgY2FuIGJlIHJlcGxhY2VkIGFuZCBkZWxl dGVkIGFmdGVyIHRoZSBjby1yb3V0aW5lIHN3aXRjaC4NCj4gRm9yIGV4YW1wbGUsIHRoZSBmdW5j dGlvbiBiYWNraW5nX2JzKCkgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUNCj4gYmFja2luZyBC RFMgYW5kIHRoZSBCRFMgcmVmZXJlbmNlIGNvdW50ZXIgaXMgbm90IGluY3JlbWVudGVkLg0KPiBB IHNvbHV0aW9uIChvciB3b3JrYXJvdW5kKSBtYWRlIHdpdGggdGhlIGdpdmVuIHBhdGNoIGZvciBi bG9jay1zdHJlYW0NCj4gam9iIGhlbHBzIHRvIHBhc3MgYWxsIHRoZSBpb3Rlc3RzIGluIHRoZSBm aWxlIHRlc3RzL3FlbXUtaW90ZXN0cy8wMzAuDQo+IEFueSBwaWVjZSBvZiBhZHZpY2UgaG93IHRv IGFtZW5kIHRoZSBzb2x1dGlvbiB3aWxsIGJlIGFwcHJlY2lhdGVkLg0KPiBJIGFtIGxvb2tpbmcg Zm9yd2FyZCB0byBoZWFyaW5nIGZyb20geW91Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQW5kcmV5 IFNoaW5rZXZpY2ggPGFuZHJleS5zaGlua2V2aWNoQHZpcnR1b3p6by5jb20+DQo+IC0tLQ0KPiAg IGJsb2NrL3N0cmVhbS5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLQ0KPiAgIDEgZmlsZSBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9u cygrKSwgMTEgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvYmxvY2svc3RyZWFtLmMg Yi9ibG9jay9zdHJlYW0uYw0KPiBpbmRleCA3YTQ5YWMwLi4xOGU1MWIzIDEwMDY0NA0KPiAtLS0g YS9ibG9jay9zdHJlYW0uYw0KPiArKysgYi9ibG9jay9zdHJlYW0uYw0KPiBAQCAtMTYsNiArMTYs NyBAQA0KPiAgICNpbmNsdWRlICJibG9jay9ibG9ja19pbnQuaCINCj4gICAjaW5jbHVkZSAiYmxv Y2svYmxvY2tqb2JfaW50LmgiDQo+ICAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCINCj4gKyNpbmNs dWRlICJxYXBpL3FtcC9xZGljdC5oIg0KPiAgICNpbmNsdWRlICJxYXBpL3FtcC9xZXJyb3IuaCIN Cj4gICAjaW5jbHVkZSAicWVtdS9yYXRlbGltaXQuaCINCj4gICAjaW5jbHVkZSAic3lzZW11L2Js b2NrLWJhY2tlbmQuaCINCj4gQEAgLTM1LDggKzM2LDI2IEBAIHR5cGVkZWYgc3RydWN0IFN0cmVh bUJsb2NrSm9iIHsNCj4gICAgICAgQmxvY2tkZXZPbkVycm9yIG9uX2Vycm9yOw0KPiAgICAgICBj aGFyICpiYWNraW5nX2ZpbGVfc3RyOw0KPiAgICAgICBib29sIGJzX3JlYWRfb25seTsNCj4gKyAg ICBCbG9ja0RyaXZlclN0YXRlICpjb3JfZmlsdGVyX2JzOw0KPiArICAgIEJsb2NrRHJpdmVyU3Rh dGUgKnRhcmdldF9iczsNCj4gICB9IFN0cmVhbUJsb2NrSm9iOw0KPiAgIA0KPiArc3RhdGljIEJs b2NrRHJpdmVyU3RhdGUgKmNoaWxkX2ZpbGVfYnMoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpDQo+ICt7 DQo+ICsgICAgcmV0dXJuIGJzLT5maWxlID8gYnMtPmZpbGUtPmJzIDogTlVMTDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIEJsb2NrRHJpdmVyU3RhdGUgKnNraXBfZmlsdGVyKEJsb2NrRHJpdmVyU3Rh dGUgKmJzKQ0KPiArew0KPiArICAgIEJsb2NrRHJpdmVyU3RhdGUgKnJldF9icyA9IGJzOw0KPiAr DQo+ICsgICAgd2hpbGUgKHJldF9icyAmJiByZXRfYnMtPmRydiAmJiByZXRfYnMtPmRydi0+aXNf ZmlsdGVyKSB7DQo+ICsgICAgICAgIHJldF9icyA9IGNoaWxkX2ZpbGVfYnMocmV0X2JzKTsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gcmV0X2JzOw0KPiArfQ0KPiArDQo+ICAgc3RhdGlj IGludCBjb3JvdXRpbmVfZm4gc3RyZWFtX3BvcHVsYXRlKEJsb2NrQmFja2VuZCAqYmxrLA0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IG9mZnNldCwg dWludDY0X3QgYnl0ZXMsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmJ1ZikNCj4gQEAgLTUxLDE0ICs3MCwxMiBAQCBzdGF0aWMgaW50IGNvcm91dGlu ZV9mbiBzdHJlYW1fcG9wdWxhdGUoQmxvY2tCYWNrZW5kICpibGssDQo+ICAgICAgIHFlbXVfaW92 ZWNfaW5pdF9leHRlcm5hbCgmcWlvdiwgJmlvdiwgMSk7DQo+ICAgDQo+ICAgICAgIC8qIENvcHkt b24tcmVhZCB0aGUgdW5hbGxvY2F0ZWQgY2x1c3RlcnMgKi8NCj4gLSAgICByZXR1cm4gYmxrX2Nv X3ByZWFkdihibGssIG9mZnNldCwgcWlvdi5zaXplLCAmcWlvdiwgQkRSVl9SRVFfQ09QWV9PTl9S RUFEKTsNCj4gKyAgICByZXR1cm4gYmxrX2NvX3ByZWFkdihibGssIG9mZnNldCwgcWlvdi5zaXpl LCAmcWlvdiwgMCk7DQo+ICAgfQ0KPiAgIA0KPiAtc3RhdGljIGludCBzdHJlYW1fcHJlcGFyZShK b2IgKmpvYikNCj4gK3N0YXRpYyBpbnQgc3RyZWFtX2NoYW5nZV9iYWNraW5nX2ZpbGUoU3RyZWFt QmxvY2tKb2IgKnMpDQo+ICAgew0KPiAtICAgIFN0cmVhbUJsb2NrSm9iICpzID0gY29udGFpbmVy X29mKGpvYiwgU3RyZWFtQmxvY2tKb2IsIGNvbW1vbi5qb2IpOw0KPiAtICAgIEJsb2NrSm9iICpi am9iID0gJnMtPmNvbW1vbjsNCj4gLSAgICBCbG9ja0RyaXZlclN0YXRlICpicyA9IGJsa19icyhi am9iLT5ibGspOw0KPiArICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzID0gcy0+dGFyZ2V0X2JzOw0K PiAgICAgICBCbG9ja0RyaXZlclN0YXRlICpiYXNlID0gcy0+YmFzZTsNCj4gICAgICAgRXJyb3Ig KmxvY2FsX2VyciA9IE5VTEw7DQo+ICAgICAgIGludCByZXQgPSAwOw0KPiBAQCAtODIsMTEgKzk5 LDUzIEBAIHN0YXRpYyBpbnQgc3RyZWFtX3ByZXBhcmUoSm9iICpqb2IpDQo+ICAgICAgIHJldHVy biByZXQ7DQo+ICAgfQ0KPiAgIA0KPiArc3RhdGljIGludCBzdHJlYW1fZXhpdChKb2IgKmpvYiwg Ym9vbCBhYm9ydCkNCj4gK3sNCj4gKyAgICBTdHJlYW1CbG9ja0pvYiAqcyA9IGNvbnRhaW5lcl9v Zihqb2IsIFN0cmVhbUJsb2NrSm9iLCBjb21tb24uam9iKTsNCj4gKyAgICBCbG9ja0pvYiAqYmpv YiA9ICZzLT5jb21tb247DQo+ICsgICAgQmxvY2tEcml2ZXJTdGF0ZSAqdGFyZ2V0X2JzID0gcy0+ dGFyZ2V0X2JzOw0KPiArICAgIGludCByZXQgPSAwOw0KPiArDQo+ICsgICAgLyogUmV0YWluIHRo ZSBCRFMgdW50aWwgd2UgY29tcGxldGUgdGhlIGdyYXBoIGNoYW5nZS4gKi8NCj4gKyAgICBiZHJ2 X3JlZih0YXJnZXRfYnMpOw0KPiArICAgIC8qIEhvbGQgYSBndWVzdCBiYWNrIGZyb20gd3JpdGlu ZyB3aGlsZSBwZXJtaXNzaW9ucyBhcmUgYmVpbmcgcmVzZXQuICovDQo+ICsgICAgYmRydl9kcmFp bmVkX2JlZ2luKHRhcmdldF9icyk7DQo+ICsgICAgLyogRHJvcCBwZXJtaXNzaW9ucyBiZWZvcmUg dGhlIGdyYXBoIGNoYW5nZS4gKi8NCj4gKyAgICBiZHJ2X2NoaWxkX3RyeV9zZXRfcGVybShzLT5j b3JfZmlsdGVyX2JzLT5maWxlLCAwLCBCTEtfUEVSTV9BTEwsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmVycm9yX2Fib3J0KTsNCj4gKyAgICBpZiAoIWFib3J0KSB7DQo+ICsgICAg ICAgIHJldCA9IHN0cmVhbV9jaGFuZ2VfYmFja2luZ19maWxlKHMpOw0KPiArICAgIH0NCj4gKw0K PiArICAgIGJkcnZfcmVwbGFjZV9ub2RlKHMtPmNvcl9maWx0ZXJfYnMsIHRhcmdldF9icywgJmVy cm9yX2Fib3J0KTsNCj4gKyAgICAvKiBTd2l0Y2ggdGhlIEJCIGJhY2sgdG8gdGhlIGZpbHRlciBz byB0aGF0IGpvYiB0ZXJtaW5hdGVkIHByb3Blcmx5LiAqLw0KPiArICAgIGJsa19yZW1vdmVfYnMo YmpvYi0+YmxrKTsNCj4gKyAgICBibGtfc2V0X3Blcm0oYmpvYi0+YmxrLCAwLCBCTEtfUEVSTV9B TEwsICZlcnJvcl9hYm9ydCk7DQo+ICsgICAgYmxrX2luc2VydF9icyhiam9iLT5ibGssIHMtPmNv cl9maWx0ZXJfYnMsICZlcnJvcl9hYm9ydCk7DQo+ICsNCj4gKyAgICBiZHJ2X2RyYWluZWRfZW5k KHRhcmdldF9icyk7DQo+ICsgICAgYmRydl91bnJlZih0YXJnZXRfYnMpOw0KPiArICAgIC8qIFN1 Ym1pdCBjb250cm9sIG92ZXIgZmlsdGVyIHRvIHRoZSBqb2IgaW5zdGFuY2UuICovDQo+ICsgICAg YmRydl91bnJlZihzLT5jb3JfZmlsdGVyX2JzKTsNCj4gKw0KPiArICAgIHJldHVybiByZXQ7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgc3RyZWFtX3ByZXBhcmUoSm9iICpqb2IpDQo+ICt7DQo+ ICsgICAgcmV0dXJuIHN0cmVhbV9leGl0KGpvYiwgZmFsc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBzdHJlYW1fYWJvcnQoSm9iICpqb2IpDQo+ICt7DQo+ICsgICAgc3RyZWFtX2V4aXQo am9iLCBqb2ItPnJldCA8IDApOw0KPiArfQ0KPiArDQo+ICAgc3RhdGljIHZvaWQgc3RyZWFtX2Ns ZWFuKEpvYiAqam9iKQ0KPiAgIHsNCj4gICAgICAgU3RyZWFtQmxvY2tKb2IgKnMgPSBjb250YWlu ZXJfb2Yoam9iLCBTdHJlYW1CbG9ja0pvYiwgY29tbW9uLmpvYik7DQo+ICAgICAgIEJsb2NrSm9i ICpiam9iID0gJnMtPmNvbW1vbjsNCj4gLSAgICBCbG9ja0RyaXZlclN0YXRlICpicyA9IGJsa19i cyhiam9iLT5ibGspOw0KPiArICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzID0gcy0+dGFyZ2V0X2Jz Ow0KPiAgIA0KPiAgICAgICAvKiBSZW9wZW4gdGhlIGltYWdlIGJhY2sgaW4gcmVhZC1vbmx5IG1v ZGUgaWYgbmVjZXNzYXJ5ICovDQo+ICAgICAgIGlmIChzLT5ic19yZWFkX29ubHkpIHsNCj4gQEAg LTEwMiw3ICsxNjEsNyBAQCBzdGF0aWMgaW50IGNvcm91dGluZV9mbiBzdHJlYW1fcnVuKEpvYiAq am9iLCBFcnJvciAqKmVycnApDQo+ICAgew0KPiAgICAgICBTdHJlYW1CbG9ja0pvYiAqcyA9IGNv bnRhaW5lcl9vZihqb2IsIFN0cmVhbUJsb2NrSm9iLCBjb21tb24uam9iKTsNCj4gICAgICAgQmxv Y2tCYWNrZW5kICpibGsgPSBzLT5jb21tb24uYmxrOw0KPiAtICAgIEJsb2NrRHJpdmVyU3RhdGUg KmJzID0gYmxrX2JzKGJsayk7DQo+ICsgICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnMgPSBzLT50YXJn ZXRfYnM7DQo+ICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJhc2UgPSBzLT5iYXNlOw0KPiAgICAg ICBpbnQ2NF90IGxlbjsNCj4gICAgICAgaW50NjRfdCBvZmZzZXQgPSAwOw0KPiBAQCAtMjEzLDEy ICsyNzIsNjQgQEAgc3RhdGljIGNvbnN0IEJsb2NrSm9iRHJpdmVyIHN0cmVhbV9qb2JfZHJpdmVy ID0gew0KPiAgICAgICAgICAgLmZyZWUgICAgICAgICAgPSBibG9ja19qb2JfZnJlZSwNCj4gICAg ICAgICAgIC5ydW4gICAgICAgICAgID0gc3RyZWFtX3J1biwNCj4gICAgICAgICAgIC5wcmVwYXJl ICAgICAgID0gc3RyZWFtX3ByZXBhcmUsDQo+ICsgICAgICAgIC5hYm9ydCAgICAgICAgID0gc3Ry ZWFtX2Fib3J0LA0KPiAgICAgICAgICAgLmNsZWFuICAgICAgICAgPSBzdHJlYW1fY2xlYW4sDQo+ ICAgICAgICAgICAudXNlcl9yZXN1bWUgICA9IGJsb2NrX2pvYl91c2VyX3Jlc3VtZSwNCj4gICAg ICAgICAgIC5kcmFpbiAgICAgICAgID0gYmxvY2tfam9iX2RyYWluLA0KPiAgICAgICB9LA0KPiAg IH07DQo+ICAgDQo+ICtzdGF0aWMgQmxvY2tEcml2ZXJTdGF0ZSAqY3JlYXRlX2ZpbHRlcl9ub2Rl KEJsb2NrRHJpdmVyU3RhdGUgKmJzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFcnJvciAqKmVycnApDQo+ICt7DQo+ICsgICAgUURpY3QgKm9wdHMgPSBx ZGljdF9uZXcoKTsNCj4gKw0KPiArICAgIHFkaWN0X3B1dF9zdHIob3B0cywgImRyaXZlciIsICJj b3B5LW9uLXJlYWQiKTsNCj4gKyAgICBxZGljdF9wdXRfc3RyKG9wdHMsICJmaWxlIiwgYmRydl9n ZXRfbm9kZV9uYW1lKGJzKSk7DQo+ICsNCj4gKyAgICByZXR1cm4gYmRydl9vcGVuKE5VTEwsIE5V TEwsIG9wdHMsIEJEUlZfT19SRFdSLCBlcnJwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg cmVtb3ZlX2ZpbHRlcihCbG9ja0RyaXZlclN0YXRlICpjb3JfZmlsdGVyX2JzKQ0KPiArew0KPiAr ICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzID0gY2hpbGRfZmlsZV9icyhjb3JfZmlsdGVyX2JzKTsN Cj4gKw0KPiArICAgIC8qIEhvbGQgYSBndWVzdCBiYWNrIGZyb20gd3JpdGluZyB1bnRpbCB3ZSBy ZW1vdmUgdGhlIGZpbHRlciAqLw0KPiArICAgIGJkcnZfZHJhaW5lZF9iZWdpbihicyk7DQo+ICsg ICAgYmRydl9jaGlsZF90cnlfc2V0X3Blcm0oY29yX2ZpbHRlcl9icy0+ZmlsZSwgMCwgQkxLX1BF Uk1fQUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9hYm9ydCk7DQo+ ICsgICAgYmRydl9yZXBsYWNlX25vZGUoY29yX2ZpbHRlcl9icywgYnMsICZlcnJvcl9hYm9ydCk7 DQo+ICsgICAgYmRydl9kcmFpbmVkX2VuZChicyk7DQo+ICsNCj4gKyAgICBiZHJ2X3VucmVmKGNv cl9maWx0ZXJfYnMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgQmxvY2tEcml2ZXJTdGF0ZSAqaW5z ZXJ0X2ZpbHRlcihCbG9ja0RyaXZlclN0YXRlICpicywgRXJyb3IgKiplcnJwKQ0KPiArew0KPiAr ICAgIEJsb2NrRHJpdmVyU3RhdGUgKmNvcl9maWx0ZXJfYnM7DQo+ICsgICAgRXJyb3IgKmxvY2Fs X2VyciA9IE5VTEw7DQo+ICsNCj4gKyAgICBjb3JfZmlsdGVyX2JzID0gY3JlYXRlX2ZpbHRlcl9u b2RlKGJzLCBlcnJwKTsNCj4gKyAgICBpZiAoY29yX2ZpbHRlcl9icyA9PSBOVUxMKSB7DQo+ICsg ICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgIkNvdWxkIG5vdCBjcmVhdGUgZmlsdGVyIG5vZGU6 ICIpOw0KPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBiZHJ2 X3NldF9haW9fY29udGV4dChjb3JfZmlsdGVyX2JzLCBiZHJ2X2dldF9haW9fY29udGV4dChicykp Ow0KPiArDQo+ICsgICAgYmRydl9kcmFpbmVkX2JlZ2luKGJzKTsNCj4gKyAgICBiZHJ2X3JlcGxh Y2Vfbm9kZShicywgY29yX2ZpbHRlcl9icywgJmxvY2FsX2Vycik7DQo+ICsgICAgYmRydl9kcmFp bmVkX2VuZChicyk7DQo+ICsNCj4gKyAgICBpZiAobG9jYWxfZXJyKSB7DQo+ICsgICAgICAgIGJk cnZfdW5yZWYoY29yX2ZpbHRlcl9icyk7DQo+ICsgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJw LCBsb2NhbF9lcnIpOw0KPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICByZXR1cm4gY29yX2ZpbHRlcl9iczsNCj4gK30NCj4gKw0KPiAgIHZvaWQgc3RyZWFtX3N0 YXJ0KGNvbnN0IGNoYXIgKmpvYl9pZCwgQmxvY2tEcml2ZXJTdGF0ZSAqYnMsDQo+ICAgICAgICAg ICAgICAgICAgICAgQmxvY2tEcml2ZXJTdGF0ZSAqYmFzZSwgY29uc3QgY2hhciAqYmFja2luZ19m aWxlX3N0ciwNCj4gICAgICAgICAgICAgICAgICAgICBpbnQgY3JlYXRpb25fZmxhZ3MsIGludDY0 X3Qgc3BlZWQsDQo+IEBAIC0yMjcsNiArMzM4LDE0IEBAIHZvaWQgc3RyZWFtX3N0YXJ0KGNvbnN0 IGNoYXIgKmpvYl9pZCwgQmxvY2tEcml2ZXJTdGF0ZSAqYnMsDQo+ICAgICAgIFN0cmVhbUJsb2Nr Sm9iICpzOw0KPiAgICAgICBCbG9ja0RyaXZlclN0YXRlICppdGVyOw0KPiAgICAgICBib29sIGJz X3JlYWRfb25seTsNCj4gKyAgICBCbG9ja0RyaXZlclN0YXRlICpjb3JfZmlsdGVyX2JzOw0KPiAr DQo+ICsgICAgLyoNCj4gKyAgICAgKiBUaGUgYmFzZSBub2RlIG1pZ2h0IGJlIGlkZW50aWZpZWQg YnkgaXRzIGZpbGUgbmFtZSByYXRoZXIgdGhhbg0KPiArICAgICAqIGJ5IGl0cyBub2RlIG5hbWUu IEluIHRoYXQgY2FzZSwgd2UgY2FuIGVuY291bnRlciBhIGZpbHRlciBub2RlDQo+ICsgICAgICog aW5zdGVhZCB3aGljaCBoYXMgb3RoZXIgQlMgcG9pbnRlciBhbmQgdGhlIHNhbWUgZmlsZSBuYW1l Lg0KPiArICAgICAqLw0KPiArICAgIGJhc2UgPSBza2lwX2ZpbHRlcihiYXNlKTsNCj4gICANCj4g ICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIGltYWdlIGlzIG9wZW5lZCBpbiByZWFkLXdyaXRl IG1vZGUgKi8NCj4gICAgICAgYnNfcmVhZF9vbmx5ID0gYmRydl9pc19yZWFkX29ubHkoYnMpOw0K PiBAQCAtMjM2LDEwICszNTUsMTUgQEAgdm9pZCBzdHJlYW1fc3RhcnQoY29uc3QgY2hhciAqam9i X2lkLCBCbG9ja0RyaXZlclN0YXRlICpicywNCj4gICAgICAgICAgIH0NCj4gICAgICAgfQ0KPiAg IA0KPiArICAgIGNvcl9maWx0ZXJfYnMgPSBpbnNlcnRfZmlsdGVyKGJzLCBlcnJwKTsNCj4gKyAg ICBpZiAoY29yX2ZpbHRlcl9icyA9PSBOVUxMKSB7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4g KyAgICB9DQo+ICsNCj4gICAgICAgLyogUHJldmVudCBjb25jdXJyZW50IGpvYnMgdHJ5aW5nIHRv IG1vZGlmeSB0aGUgZ3JhcGggc3RydWN0dXJlIGhlcmUsIHdlDQo+ICAgICAgICAqIGFscmVhZHkg aGF2ZSBvdXIgb3duIHBsYW5zLiBBbHNvIGRvbid0IGFsbG93IHJlc2l6ZSBhcyB0aGUgaW1hZ2Ug c2l6ZSBpcw0KPiAgICAgICAgKiBxdWVyaWVkIG9ubHkgYXQgdGhlIGpvYiBzdGFydCBhbmQgdGhl biBjYWNoZWQuICovDQo+IC0gICAgcyA9IGJsb2NrX2pvYl9jcmVhdGUoam9iX2lkLCAmc3RyZWFt X2pvYl9kcml2ZXIsIE5VTEwsIGJzLA0KPiArICAgIHMgPSBibG9ja19qb2JfY3JlYXRlKGpvYl9p ZCwgJnN0cmVhbV9qb2JfZHJpdmVyLCBOVUxMLCBjb3JfZmlsdGVyX2JzLA0KPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCTEtfUEVSTV9DT05TSVNURU5UX1JFQUQgfCBCTEtfUEVSTV9XUklU RV9VTkNIQU5HRUQgfA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTEtfUEVSTV9HUkFQ SF9NT0QsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMS19QRVJNX0NPTlNJU1RFTlRf UkVBRCB8IEJMS19QRVJNX1dSSVRFX1VOQ0hBTkdFRCB8DQo+IEBAIC0yNDksMTYgKzM3MywyMSBA QCB2b2lkIHN0cmVhbV9zdGFydChjb25zdCBjaGFyICpqb2JfaWQsIEJsb2NrRHJpdmVyU3RhdGUg KmJzLA0KPiAgICAgICAgICAgZ290byBmYWlsOw0KPiAgICAgICB9DQo+ICAgDQo+IC0gICAgLyog QmxvY2sgYWxsIGludGVybWVkaWF0ZSBub2RlcyBiZXR3ZWVuIGJzIGFuZCBiYXNlLCBiZWNhdXNl IHRoZXkgd2lsbA0KPiArICAgIC8qDQo+ICsgICAgICogQmxvY2sgYWxsIGludGVybWVkaWF0ZSBu b2RlcyBiZXR3ZWVuIGJzIGFuZCBiYXNlLCBiZWNhdXNlIHRoZXkgd2lsbA0KPiAgICAgICAgKiBk aXNhcHBlYXIgZnJvbSB0aGUgY2hhaW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24uIFRoZSBzdHJlYW1p bmcgam9iIHJlYWRzDQo+ICAgICAgICAqIGV2ZXJ5IGJsb2NrIG9ubHkgb25jZSwgYXNzdW1pbmcg dGhhdCBpdCBkb2Vzbid0IGNoYW5nZSwgc28gYmxvY2sgd3JpdGVzDQo+IC0gICAgICogYW5kIHJl c2l6ZXMuICovDQo+IC0gICAgZm9yIChpdGVyID0gYmFja2luZ19icyhicyk7IGl0ZXIgJiYgaXRl ciAhPSBiYXNlOyBpdGVyID0gYmFja2luZ19icyhpdGVyKSkgew0KPiArICAgICAqIGFuZCByZXNp emVzLiBXZSBhY2NvdW50IGEgZmlsdGVyIG5vZGUgbWF5IGJlIGEgcGFydCBvZiB0aGUgZ3JhcGgu DQo+ICsgICAgICovDQo+ICsgICAgZm9yIChpdGVyID0gc2tpcF9maWx0ZXIoYmFja2luZ19icyhi cykpOyBpdGVyICYmIGl0ZXIgIT0gYmFzZTsNCj4gKyAgICAgICAgIGl0ZXIgPSBza2lwX2ZpbHRl cihiYWNraW5nX2JzKGl0ZXIpKSkgew0KPiAgICAgICAgICAgYmxvY2tfam9iX2FkZF9iZHJ2KCZz LT5jb21tb24sICJpbnRlcm1lZGlhdGUgbm9kZSIsIGl0ZXIsIDAsDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQkxLX1BFUk1fQ09OU0lTVEVOVF9SRUFEIHwgQkxLX1BFUk1fV1JJVEVf VU5DSEFOR0VELA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9hYm9ydCk7 DQo+ICAgICAgIH0NCj4gICANCj4gKyAgICBzLT5jb3JfZmlsdGVyX2JzID0gY29yX2ZpbHRlcl9i czsNCj4gKyAgICBzLT50YXJnZXRfYnMgPSBiczsNCj4gICAgICAgcy0+YmFzZSA9IGJhc2U7DQo+ ICAgICAgIHMtPmJhY2tpbmdfZmlsZV9zdHIgPSBnX3N0cmR1cChiYWNraW5nX2ZpbGVfc3RyKTsN Cj4gICAgICAgcy0+YnNfcmVhZF9vbmx5ID0gYnNfcmVhZF9vbmx5Ow0KPiBAQCAtMjY5LDYgKzM5 OCw5IEBAIHZvaWQgc3RyZWFtX3N0YXJ0KGNvbnN0IGNoYXIgKmpvYl9pZCwgQmxvY2tEcml2ZXJT dGF0ZSAqYnMsDQo+ICAgICAgIHJldHVybjsNCj4gICANCj4gICBmYWlsOg0KPiArICAgIGlmIChj b3JfZmlsdGVyX2JzKSB7DQo+ICsgICAgICAgIHJlbW92ZV9maWx0ZXIoY29yX2ZpbHRlcl9icyk7 DQo+ICsgICAgfQ0KPiAgICAgICBpZiAoYnNfcmVhZF9vbmx5KSB7DQo+ICAgICAgICAgICBiZHJ2 X3Jlb3Blbl9zZXRfcmVhZF9vbmx5KGJzLCB0cnVlLCBOVUxMKTsNCj4gICAgICAgfQ0KPiANCg0K LS0gDQpXaXRoIHRoZSBiZXN0IHJlZ2FyZHMsDQpBbmRyZXkgU2hpbmtldmljaA0K