From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-194.mimecast.com ([63.128.21.194]:59275 "EHLO us-smtp-delivery-194.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752854AbdIGOy6 (ORCPT ); Thu, 7 Sep 2017 10:54:58 -0400 From: Trond Myklebust To: "anna.schumaker@netapp.com" , "jlayton@redhat.com" , "neilb@suse.com" , "jlayton@kernel.org" CC: "linux-nfs@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" Subject: Re: [PATCH] nfs: track writeback errors with errseq_t Date: Thu, 7 Sep 2017 14:54:49 +0000 Message-ID: <1504796087.3561.7.camel@primarydata.com> References: <20170720194227.7830-1-jlayton@kernel.org> <1503683981.22608.0.camel@redhat.com> <87h8wsiog4.fsf@notabene.neil.brown.name> <1503920855.4563.12.camel@redhat.com> <87pobfgo9q.fsf@notabene.neil.brown.name> <1504004058.4679.7.camel@redhat.com> <87efrjb2mn.fsf@notabene.neil.brown.name> <1504784132.4954.12.camel@redhat.com> In-Reply-To: <1504784132.4954.12.camel@redhat.com> Content-Language: en-US Content-ID: <188AC018E81DB7489303E196C474684F@namprd11.prod.outlook.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Sender: linux-fsdevel-owner@vger.kernel.org List-ID: T24gVGh1LCAyMDE3LTA5LTA3IGF0IDA3OjM1IC0wNDAwLCBKZWZmIExheXRvbiB3cm90ZToNCj4g T24gVGh1LCAyMDE3LTA5LTA3IGF0IDEzOjM3ICsxMDAwLCBOZWlsQnJvd24gd3JvdGU6DQo+ID4g T24gVHVlLCBBdWcgMjkgMjAxNywgSmVmZiBMYXl0b24gd3JvdGU6DQo+ID4gDQo+ID4gPiBPbiBU dWUsIDIwMTctMDgtMjkgYXQgMTE6MjMgKzEwMDAsIE5laWxCcm93biB3cm90ZToNCj4gPiA+ID4g T24gTW9uLCBBdWcgMjggMjAxNywgSmVmZiBMYXl0b24gd3JvdGU6DQo+ID4gPiA+IA0KPiA+ID4g PiA+IE9uIE1vbiwgMjAxNy0wOC0yOCBhdCAwOToyNCArMTAwMCwgTmVpbEJyb3duIHdyb3RlOg0K PiA+ID4gPiA+ID4gT24gRnJpLCBBdWcgMjUgMjAxNywgSmVmZiBMYXl0b24gd3JvdGU6DQo+ID4g PiA+ID4gPiANCj4gPiA+ID4gPiA+ID4gT24gVGh1LCAyMDE3LTA3LTIwIGF0IDE1OjQyIC0wNDAw LCBKZWZmIExheXRvbiB3cm90ZToNCj4gPiA+ID4gPiA+ID4gPiBGcm9tOiBKZWZmIExheXRvbiA8 amxheXRvbkByZWRoYXQuY29tPg0KPiA+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiA+IFRo ZXJlIGlzIHNvbWUgYW1iaWd1aXR5IGluIG5mcyBhYm91dCBob3cgd3JpdGViYWNrDQo+ID4gPiA+ ID4gPiA+ID4gZXJyb3JzIGFyZQ0KPiA+ID4gPiA+ID4gPiA+IHRyYWNrZWQuDQo+ID4gPiA+ID4g PiA+ID4gDQo+ID4gPiA+ID4gPiA+ID4gRm9yIGluc3RhbmNlLCBuZnNfcGFnZWlvX2FkZF9yZXF1 ZXN0IGNhbGxzDQo+ID4gPiA+ID4gPiA+ID4gbWFwcGluZ19zZXRfZXJyb3Igd2hlbg0KPiA+ID4g PiA+ID4gPiA+IHRoZQ0KPiA+ID4gPiA+ID4gPiA+IGFkZCBmYWlscywgYnV0IHdlIHRyYWNrIGVy cm9ycyB0aGF0IG9jY3VyIGFmdGVyIGFkZGluZw0KPiA+ID4gPiA+ID4gPiA+IHRoZQ0KPiA+ID4g PiA+ID4gPiA+IHJlcXVlc3QNCj4gPiA+ID4gPiA+ID4gPiB3aXRoIGEgZGVkaWNhdGVkIGludCBl cnJvciBpbiB0aGUgb3BlbiBjb250ZXh0Lg0KPiA+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4g PiA+IE5vdyB0aGF0IHdlIGhhdmUgYmV0dGVyIGluZnJhc3RydWN0dXJlIGZvciB0aGUgdmZzDQo+ ID4gPiA+ID4gPiA+ID4gbGF5ZXIsIHRoaXMNCj4gPiA+ID4gPiA+ID4gPiBsYXR0ZXIgaW50IGlz IG5vdyB1bm5lY2Vzc2FyeS4gSnVzdCBoYXZlDQo+ID4gPiA+ID4gPiA+ID4gbmZzX2NvbnRleHRf c2V0X3dyaXRlX2Vycm9yIHNldA0KPiA+ID4gPiA+ID4gPiA+IHRoZSBlcnJvciBpbiB0aGUgbWFw cGluZyB3aGVuIG9uZSBvY2N1cnMuDQo+ID4gPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+ID4g SGF2ZSBORlMgdXNlIGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UgdG8gaW5pdGlhdGUgYW5kDQo+ ID4gPiA+ID4gPiA+ID4gd2FpdCBvbg0KPiA+ID4gPiA+ID4gPiA+IHdyaXRlYmFjaw0KPiA+ID4g PiA+ID4gPiA+IG9mIHRoZSBkYXRhLCBhbmQgdGhlbiBjaGVjayBhZ2FpbiBhZnRlciBpc3N1aW5n IHRoZQ0KPiA+ID4gPiA+ID4gPiA+IGNvbW1pdChzKS4NCj4gPiA+ID4gPiA+ID4gPiANCj4gPiA+ ID4gPiA+ID4gPiBXaXRoIHRoaXMsIHdlIGFsc28gZG9uJ3QgbmVlZCB0byBwYXkgYXR0ZW50aW9u IHRvIHRoZQ0KPiA+ID4gPiA+ID4gPiA+IEVSUk9SX1dSSVRFDQo+ID4gPiA+ID4gPiA+ID4gZmxh ZyBmb3IgcmVwb3J0aW5nLCBhbmQganVzdCBjbGVhciBpdCB0byBpbmRpY2F0ZSB0bw0KPiA+ID4g PiA+ID4gPiA+IHN1YnNlcXVlbnQNCj4gPiA+ID4gPiA+ID4gPiB3cml0ZXJzIHRoYXQgdGhleSBz aG91bGQgdHJ5IHRvIGdvIGFzeW5jaHJvbm91cyBhZ2Fpbi4NCj4gPiA+ID4gPiA+ID4gPiANCj4g PiA+ID4gPiA+ID4gPiBJbiBuZnNfcGFnZV9hc3luY19mbHVzaCwgc2FtcGxlIHRoZSBlcnJvciBi ZWZvcmUNCj4gPiA+ID4gPiA+ID4gPiBsb2NraW5nIGFuZA0KPiA+ID4gPiA+ID4gPiA+IGpvaW5p bmcNCj4gPiA+ID4gPiA+ID4gPiB0aGUgcmVxdWVzdHMsIGFuZCBjaGVjayBmb3IgZXJyb3JzIHNp bmNlIHRoYXQgcG9pbnQuDQo+ID4gPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+ID4gU2lnbmVk LW9mZi1ieTogSmVmZiBMYXl0b24gPGpsYXl0b25AcmVkaGF0LmNvbT4NCj4gPiA+ID4gPiA+ID4g PiAtLS0NCj4gPiA+ID4gPiA+ID4gPiAgZnMvbmZzL2ZpbGUuYyAgICAgICAgICB8IDI0ICsrKysr KysrKysrLS0tLS0tLS0tLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ICBmcy9uZnMvaW5vZGUuYyAgICAg ICAgIHwgIDMgKy0tDQo+ID4gPiA+ID4gPiA+ID4gIGZzL25mcy93cml0ZS5jICAgICAgICAgfCAg OCArKysrKystLQ0KPiA+ID4gPiA+ID4gPiA+ICBpbmNsdWRlL2xpbnV4L25mc19mcy5oIHwgIDEg LQ0KPiA+ID4gPiA+ID4gPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDE4 IGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiA+IEkgaGF2ZSBh IGJhbGluZyB3aXJlIGFuZCBkdWN0IHRhcGUgc29sdXRpb24gZm9yIHRlc3RpbmcNCj4gPiA+ID4g PiA+ID4gPiB0aGlzIHdpdGgNCj4gPiA+ID4gPiA+ID4gPiB4ZnN0ZXN0cyAodXNpbmcgaXB0YWJs ZXMgUkVKRUNUIHRhcmdldHMgYW5kIHNvZnQNCj4gPiA+ID4gPiA+ID4gPiBtb3VudHMpLiBUaGlz DQo+ID4gPiA+ID4gPiA+ID4gc2VlbXMgdG8NCj4gPiA+ID4gPiA+ID4gPiBtYWtlIG5mcyBkbyB0 aGUgcmlnaHQgdGhpbmcuDQo+ID4gPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+ID4gZGlmZiAt LWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jDQo+ID4gPiA+ID4gPiA+ID4gaW5k ZXggNTcxM2ViMzJhNDVlLi4xNWQzYzZmYWFmZDMgMTAwNjQ0DQo+ID4gPiA+ID4gPiA+ID4gLS0t IGEvZnMvbmZzL2ZpbGUuYw0KPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2ZzL25mcy9maWxlLmMNCj4g PiA+ID4gPiA+ID4gPiBAQCAtMjEyLDI1ICsyMTIsMjMgQEAgbmZzX2ZpbGVfZnN5bmNfY29tbWl0 KHN0cnVjdCBmaWxlDQo+ID4gPiA+ID4gPiA+ID4gKmZpbGUsDQo+ID4gPiA+ID4gPiA+ID4gbG9m Zl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpDQo+ID4gPiA+ID4gPiA+ID4gIHsN Cj4gPiA+ID4gPiA+ID4gPiAgCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPQ0KPiA+ID4g PiA+ID4gPiA+IG5mc19maWxlX29wZW5fY29udGV4dChmaWxlKTsNCj4gPiA+ID4gPiA+ID4gPiAg CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOw0KPiA+ID4gPiA+ID4gPiA+ IC0JaW50IGhhdmVfZXJyb3IsIGRvX3Jlc2VuZCwgc3RhdHVzOw0KPiA+ID4gPiA+ID4gPiA+IC0J aW50IHJldCA9IDA7DQo+ID4gPiA+ID4gPiA+ID4gKwlpbnQgZG9fcmVzZW5kLCBzdGF0dXM7DQo+ ID4gPiA+ID4gPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gPiA+ID4gPiA+ICANCj4gPiA+ID4gPiA+ ID4gPiAgCWRwcmludGsoIk5GUzogZnN5bmMgZmlsZSglcEQyKSBkYXRhc3luYyAlZFxuIiwNCj4g PiA+ID4gPiA+ID4gPiBmaWxlLA0KPiA+ID4gPiA+ID4gPiA+IGRhdGFzeW5jKTsNCj4gPiA+ID4g PiA+ID4gPiAgDQo+ID4gPiA+ID4gPiA+ID4gIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1Nf VkZTRlNZTkMpOw0KPiA+ID4gPiA+ID4gPiA+ICAJZG9fcmVzZW5kID0NCj4gPiA+ID4gPiA+ID4g PiB0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0NPTlRFWFRfUkVTRU5EX1dSSVRFUywgJmN0eC0NCj4g PiA+ID4gPiA+ID4gPiA+ZmxhZ3MpOw0KPiA+ID4gPiA+ID4gPiA+IC0JaGF2ZV9lcnJvciA9DQo+ ID4gPiA+ID4gPiA+ID4gdGVzdF9hbmRfY2xlYXJfYml0KE5GU19DT05URVhUX0VSUk9SX1dSSVRF LA0KPiA+ID4gPiA+ID4gPiA+ICZjdHgtPmZsYWdzKTsNCj4gPiA+ID4gPiA+ID4gPiAtCXN0YXR1 cyA9IG5mc19jb21taXRfaW5vZGUoaW5vZGUsIEZMVVNIX1NZTkMpOw0KPiA+ID4gPiA+ID4gPiA+ IC0JaGF2ZV9lcnJvciB8PQ0KPiA+ID4gPiA+ID4gPiA+IHRlc3RfYml0KE5GU19DT05URVhUX0VS Uk9SX1dSSVRFLCAmY3R4LQ0KPiA+ID4gPiA+ID4gPiA+ID4gZmxhZ3MpOw0KPiA+ID4gPiA+ID4g PiA+IA0KPiA+ID4gPiA+ID4gPiA+IC0JaWYgKGhhdmVfZXJyb3IpIHsNCj4gPiA+ID4gPiA+ID4g PiAtCQlyZXQgPSB4Y2hnKCZjdHgtPmVycm9yLCAwKTsNCj4gPiA+ID4gPiA+ID4gPiAtCQlpZiAo cmV0KQ0KPiA+ID4gPiA+ID4gPiA+IC0JCQlnb3RvIG91dDsNCj4gPiA+ID4gPiA+ID4gPiAtCX0N Cj4gPiA+ID4gPiA+ID4gPiAtCWlmIChzdGF0dXMgPCAwKSB7DQo+ID4gPiA+ID4gPiA+ID4gKwlj bGVhcl9iaXQoTkZTX0NPTlRFWFRfRVJST1JfV1JJVEUsICZjdHgtDQo+ID4gPiA+ID4gPiA+ID4g PmZsYWdzKTsNCj4gPiA+ID4gPiA+ID4gPiArCXJldCA9IG5mc19jb21taXRfaW5vZGUoaW5vZGUs IEZMVVNIX1NZTkMpOw0KPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiArCS8qIFJl Y2hlY2sgYW5kIGFkdmFuY2UgYWZ0ZXIgdGhlIGNvbW1pdCAqLw0KPiA+ID4gPiA+ID4gPiA+ICsJ c3RhdHVzID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7DQo+ID4gPiA+ID4g PiANCj4gPiA+ID4gPiA+IFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBjb2RlIGluY29uc2lzdGVudCB3 aXRoIHRoZSBjb21tZW50DQo+ID4gPiA+ID4gPiBhYm92ZSB0aGUNCj4gPiA+ID4gPiA+IGZ1bmN0 aW9uLCB3aGljaCBzdGlsbCByZWZlcmVuY2VzIGN0eC0+ZXJyb3IuICBUaGUgaW50ZW50IG9mDQo+ ID4gPiA+ID4gPiB0aGUNCj4gPiA+ID4gPiA+IGNvbW1lbnQNCj4gPiA+ID4gPiA+IGlzIHN0aWxs IGNvcnJlY3QsIGJ1dCB0aGUgZGV0YWlscyBoYXZlIGNoYW5nZWQuDQo+ID4gPiA+ID4gPiANCj4g PiA+ID4gPiANCj4gPiA+ID4gPiBHb29kIGNhdGNoLiBJJ2xsIGZpeCB0aGF0IHVwIGluIGEgcmVz cGluLg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gQWxzbywgdGhlcmUgaXMgYSBjYWxsIHRvIG1h cHBpbmdfc2V0X2Vycm9yKCkgaW4NCj4gPiA+ID4gPiA+IG5mc19wYWdlaW9fYWRkX3JlcXVlc3Qo KS4NCj4gPiA+ID4gPiA+IEkgd29uZGVyIGlmIHRoYXQgc2hvdWxkIGJlIGNoYW5nZWQgdG8NCj4g PiA+ID4gPiA+ICAgbmZzX2NvbnRleHRfc2V0X3dyaXRlX2Vycm9yKHJlcS0+d2JfY29udGV4dCwg ZGVzYy0NCj4gPiA+ID4gPiA+ID5wZ19lcnJvcikNCj4gPiA+ID4gPiA+ID8/DQo+ID4gPiA+ID4g PiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBUcmlja2llciBxdWVzdGlvbi4uLg0KPiA+ID4gPiA+ IA0KPiA+ID4gPiA+IEknbSBub3QgcXVpdGUgc3VyZSB3aGF0IHNlbWFudGljcyB3ZSdyZSBsb29r aW5nIGZvciB3aXRoDQo+ID4gPiA+ID4gTkZTX0NPTlRFWFRfRVJST1JfV1JJVEUuIEkga25vdyB0 aGF0IGl0IGZvcmNlcyB3cml0ZXMgdG8gYmUNCj4gPiA+ID4gPiBzeW5jaHJvbm91cywgYnV0IEkn bSBub3QgcXVpdGUgc3VyZSB3aHkgaXQgZ2V0cyBjbGVhcmVkIHRoZQ0KPiA+ID4gPiA+IHdheSBp dA0KPiA+ID4gPiA+IGRvZXMuIEl0J3Mgc2V0IG9uIGFueSBlcnJvciBidXQgY2xlYXJlZCBiZWZv cmUgaXNzdWluZyBhDQo+ID4gPiA+ID4gY29tbWl0Lg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IEkg YWRkZWQgYSBzaW1pbGFyIGZsYWcgdG8gQ2VwaCBpbm9kZXMgcmVjZW50bHksIGJ1dCBvbmx5DQo+ ID4gPiA+ID4gY2xlYXIgaXQgd2hlbg0KPiA+ID4gPiA+IGEgd3JpdGUgc3VjY2VlZHMuIFdvdWxk bid0IHRoYXQgbWFrZSBtb3JlIHNlbnNlIGhlcmUgYXMgd2VsbD8NCj4gPiA+ID4gDQo+ID4gPiA+ IEl0IGlzIGEgYml0IGhhcmQgdG8gd3JhcCBvbmUncyBtaW5kIGFyb3VuZC4NCj4gPiA+ID4gDQo+ ID4gPiA+IEluIHRoZSBvcmlnaW5hbCBjb2RlIChjb21taXQgN2IxNTlmYzE4ZDQxNzk4MCkgaXQg bG9va3MgbGlrZToNCj4gPiA+ID4gIC0gdGVzdC1hbmQtY2xlYXIgYml0DQo+ID4gPiA+ICAtIHdy aXRlIGFuZCBzeW5jDQo+ID4gPiA+ICAtIHRlc3QtYml0DQo+ID4gPiA+IA0KPiA+ID4gPiBUaGlz IGRvZXMsIEkgdGhpbmssIHNlZW0gc2FmZXIgdGhhbiAiY2xlYXIgb24gc3VjY2Vzc2Z1bCB3cml0 ZSINCj4gPiA+ID4gYXMgdGhlDQo+ID4gPiA+IHdyaXRlcyBjb3VsZCBjb21wbGV0ZSBvdXQtb2Yt b3JkZXIgYW5kIEkgd291bGRuJ3QgYmUgc3VycHJpc2VkDQo+ID4gPiA+IGlmIHRoZQ0KPiA+ID4g PiB1bnN1Y2Nlc3NmdWwgb25lcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciBiZWZvcmUgdGhlIHN1 Y2Nlc3NmdWwNCj4gPiA+ID4gb25lIC0NCj4gPiA+ID4gcGFydGljdWxhcmx5IHdpdGggYW4gZXJy b3IgbGlrZSBFRFFVT1QuDQo+ID4gPiA+IA0KPiA+ID4gPiBIb3dldmVyIHRoZSBjdXJyZW50IGNv ZGUgZG9lcyB0aGUgd3JpdGVzIGJlZm9yZSB0aGUgdGVzdC1hbmQtDQo+ID4gPiA+IGNsZWFyLCBh bmQNCj4gPiA+ID4gb25seSBkb2VzIHRoZSBjb21taXQgYWZ0ZXJ3YXJkcy4gIFRoYXQgbWFrZXMg aXQgbGVzcyBjbGVhciB3aHkNCj4gPiA+ID4gdGhlDQo+ID4gPiA+IGN1cnJlbnQgc2VxdWVuY2Ug aXMgYSBnb29kIGlkZWEuDQo+ID4gPiA+IA0KPiA+ID4gPiBIb3dldmVyIC4uLiBuZnNfZmlsZV9m c3luY19jb21taXQoKSBpcyBvbmx5IGNhbGxlZCBpZg0KPiA+ID4gPiBmaWxlbWFwX3dyaXRlX2Fu ZF93YWl0X3JhbmdlKCkgcmV0dXJuZWQgd2l0aCBzdWNjZXNzLCBzbyB3ZQ0KPiA+ID4gPiBvbmx5 IGNsZWFyDQo+ID4gPiA+IHRoZSBmbGFnIGFmdGVyIHN1Y2Nlc3NmdWwgd3JpdGVzKD8pLg0KPiA+ ID4gPiANCj4gPiA+ID4gT2guLi4uDQo+ID4gPiA+IFRoaXMgcGF0Y2ggZnJvbSBtZToNCj4gPiA+ ID4gDQo+ID4gPiA+IENvbW1pdDogMmVkYjZiYzM4NTJjICgiTkZTIC0gZml4IHJlY2VudCBicmVh a2FnZSB0byBORlMgZXJyb3INCj4gPiA+ID4gaGFuZGxpbmcuIikNCj4gPiA+ID4gDQo+ID4gPiA+ IHNlZW1zIHRvIGhhdmUgYmVlbiByZXZlcnRlZCBieQ0KPiA+ID4gPiANCj4gPiA+ID4gQ29tbWl0 OiA3YjI4MWVlMDI2NTUgKCJORlM6IGZzeW5jKCkgbXVzdCBleGl0IHdpdGggYW4gZXJyb3IgaWYN Cj4gPiA+ID4gcGFnZSB3cml0ZWJhY2sgZmFpbGVkIikNCj4gPiA+ID4gDQo+ID4gPiA+IHdoaWNo IHByb2JhYmx5IGlzbid0IGdvb2QuICBJdCBhcHBlYXJzIHRoYXQgdGhpcyBjb2RlIGlzIHZlcnkN Cj4gPiA+ID4gZnJhZ2lsZQ0KPiA+ID4gPiBhbmQgZWFzaWx5IGJyb2tlbi4NCj4gPiANCj4gPiBP biBmdXJ0aGVyIGludmVzdGlnYXRpb24sIEkgdGhpbmsgdGhlIHByb2JsZW0gdGhhdCBJIGZpeGVk IGFuZCB0aGVuDQo+ID4gd2UNCj4gPiByZWludHJvZHVjZWQgd2lsbCBiZSBmaXhlZCBhZ2FpbiAt IG1vcmUgcGVybWFuZW50bHkgLSBieSB5b3VyDQo+ID4gcGF0Y2guDQo+ID4gVGhlIHJvb3QgcHJv YmxlbSBpcyB0aGF0IG5mcyBrZWVwcyBlcnJvciBjb2RlcyBpbiBhIGRpZmZlcmVudCB3YXkNCj4g PiB0byB0aGUNCj4gPiBNTSBjb3JlLiAgQnkgdW5pZnlpbmcgdGhvc2UsIHRoZSBwcm9ibGVtIGdv ZXMuDQo+ID4gKFRoZSBzcGVjaWZpYyBwcm9ibGVtIGlzIHRoYXQgd3JpdGVzIHdoaWNoIGhpdCBF RFFVT1Qgb24gdGhlIHNlcnZlcg0KPiA+IGNhbg0KPiA+ICByZXBvcnQgRUlPIG9uIHRoZSBjbGll bnQpLg0KPiA+IA0KPiA+IA0KPiA+ID4gPiBNYXliZSB3ZSBuZWVkIHRvIHdvcmsgb3V0IGV4YWN0 bHkgd2hhdCBpcyByZXF1aXJlZCwgYW5kDQo+ID4gPiA+IGRvY3VtZW50IGl0IC0gc28NCj4gPiA+ ID4gd2UgY2FuIHN0b3AgYnJlYWtpbmcgaXQuDQo+ID4gPiA+IE9yIG1heWJlIHdlIG5lZWQgc29t ZSB1bml0IHRlc3RzLi4uLi4NCj4gPiA+ID4gDQo+ID4gPiANCj4gPiA+IFllcywgbGF5aW5nIG91 dCB3aGF0J3MgbmVjZXNzYXJ5IGZvciB0aGlzIHdvdWxkIGJlIHZlcnkgaGVscGZ1bC4NCj4gPiA+ IFdlDQo+ID4gPiBjbGVhcmx5IHdhbnQgdG8gc2V0IHRoZSBmbGFnIHdoZW4gYW4gZXJyb3Igb2Nj dXJzLiBVbmRlciB3aGF0DQo+ID4gPiBjaXJjdW1zdGFuY2VzIHNob3VsZCB3ZSBiZSBjbGVhcmlu ZyBpdD8NCj4gPiANCj4gPiBXZWxsLi4uLiBsb29raW5nIGJhY2sgYXQgIDdiMTU5ZmMxOGQ0MTc5 ODBmNTdhZSB3aGljaCBpbnRyb2R1Y2VkDQo+ID4gdGhlDQo+ID4gZmxhZywgcHJpb3IgdG8gdGhh dCB3cml0ZSBlcnJvcnMgKGN0eC0+ZXJyb3IpIHdlcmUgb25seSByZXBvcnRlZCBieQ0KPiA+IG5m c19maWxlX2ZsdXNoIGFuZCBuZnNfZnN5bmMsIHNvIG9ubHkgb25lIGNsb3NlKCkgYW5kIGZzeW5j KCkuDQo+ID4gDQo+ID4gQWZ0ZXIgdGhhdCBjb21taXQsIHNldHRpbmcgdGhlIGZsYWcgd291bGQg bWVhbiB0aGF0IGVycm9ycyBjb3VsZCBiZQ0KPiA+IHJldHVybmVkIGJ5ICd3cml0ZScuICBTbyBj bGVhcmluZyBhcyBwYXJ0IG9mIHJldHVybmluZyB0aGUgZXJyb3INCj4gPiBtYWtlcw0KPiA+IHBl cmZlY3Qgc2Vuc2UuDQo+ID4gDQo+ID4gQXMgbG9uZyBhcyB0aGUgZXJyb3IgZ2V0cyByZWNvcmRl ZCwgYW5kIGdldHMgcmV0dXJuZWQgd2hlbiBpdCBpcw0KPiA+IHJlY29yZGVkLCBpdCBkb2Vzbid0 IG11Y2ggbWF0dGVyIHdoZW4gdGhlIGZsYWcgaXMgY2xlYXJlZC4gIFdpdGgNCj4gPiB5b3VyDQo+ ID4gcGF0Y2hlcyB3ZSBkb24ndCBuZWVkIHRvIGZsYWcgYW55IG1vcmUgdG8gZ2V0IGVycm9ycyBy ZWxpYWJseQ0KPiA+IHJlcG9ydGVkLg0KPiA+IA0KPiA+IExlYXZpbmcgdGhlIGZsYWcgc2V0IG1l YW5zIHRoYXQgd3JpdGVzIGdvIG1vcmUgc2xvd2x5IC0gd2UgZG9uJ3QNCj4gPiBnZXQNCj4gPiBs YXJnZSBxdWV1ZSBvZiBiYWNrZ3JvdW5kIHJpZ2h0cyBidWlsZGluZyB1cCBidXQgZGVzdGluZWQg Zm9yDQo+ID4gZmFpbHVyZS4NCj4gPiBUaGlzIGlzIHRoZSBtYWluIHBvaW50IG1hZGUgaW4gdGhl IGNvbW1lbnQgbWVzc2FnZSB3aGVuIHRoZSBmbGFnDQo+ID4gd2FzDQo+ID4gaW50cm9kdWNlZC4N Cj4gPiBPZiBjb3Vyc2UsIGJ5IHRoZSB0aW1lIHdlIGZpcnN0IGdldCBhbiBlcnJvciB0aGVyZSBj b3VsZCBhbHJlYWR5DQo+ID4gYnkgYSBsYXJnZSBxdWV1ZSwgc28gd2UgcHJvYmFibHkgd2FudCB0 aGF0IHRvIGRyYWluIGNvbXBsZXRlbHkNCj4gPiBiZWZvcmUNCj4gPiBhbGxvd2luZyBhc3luYyB3 cml0ZXMgYWdhaW4uDQoNCldlIGFscmVhZHkgaGF2ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW1wbGVt ZW50ZWQgaW4gdGhlIGV4aXN0aW5nIGNvZGUuDQoNCj4gPiANCj4gPiBJdCBtaWdodCBtYWtlIHNl bnNlIHRvIGhhdmUgMiBmbGFncy4gIE9uZSB3aGljaCBzYXlzICJ3cml0ZXMgc2hvdWxkDQo+ID4g YmUNCj4gPiBzeW5jaHJvbm91cyIsIGFub3RoZXIgdGhhdCBzYXlzICJUaGVyZSB3YXMgYW4gZXJy b3IgcmVjZW50bHkiLg0KPiA+IFdlIGNsZWFyIHRoZSBlcnJvciBmbGFnIGJlZm9yZSBjYWxsaW5n IG5mc19mc3luYywgYW5kIGlmIGl0IGlzDQo+ID4gc3RpbGwNCj4gPiBjbGVhciBhZnRlcndhcmRz LCB3ZSBjbGVhciB0aGUgc3luYy13cml0ZXMgZmxhZy4gIE1heWJlIHRoYXQgaXMNCj4gPiBtb3Jl DQo+ID4gY29tcGxleCB0aGFuIG5lZWRlZCB0aG91Z2guDQo+ID4gDQoNCldlIGFsc28gbmVlZCB0 byBwcmVzZXJ2ZSB0aGUgTkZTX0NPTlRFWFRfUkVTRU5EX1dSSVRFUyBmbGFnLiBJIGRvbid0DQpz ZWUgYW55IGdsb2JhbCBtZWNoYW5pc20gdGhhdCB3aWxsIHJlcGxhY2UgdGhhdC4NCg0KPiA+IEkn bSBsZWFuaW5nIHRvd2FyZHMgeW91ciBzdWdnZXN0aW9uIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIg dmVyeQ0KPiA+IG11Y2gNCj4gPiB3aGVuIGl0IGdldHMgY2xlYXJlZCwgYW5kIGNsZWFyaW5nIGl0 IG9uIGFueSBzdWNjZXNzZnVsIHdyaXRlIGlzDQo+ID4gc2ltcGxlc3QuDQo+ID4gDQo+ID4gU28g SSdtIHN0aWxsIGluIGZhdm9yIG9mIHVzaW5nIG5mc19jb250ZXh0X3NldF93cml0ZV9lcnJvcigp IGluDQo+ID4gbmZzX3BhZ2Vpb19hZGRfcmVxdWVzdCgpLCBwcmltYXJpbHkgYmVjYXVzZSBpdCBp cyBtb3N0IGNvbnNpc3RlbnQgLQ0KPiA+IHdlDQo+ID4gZG9uJ3QgbmVlZCBleGNlcHRpb25zLg0K PiANCj4gVGhhbmtzIGZvciB0YWtpbmcgYSBjbG9zZXIgbG9vay4gSSBjYW4gZWFzaWx5IG1ha2Ug dGhlIGNoYW5nZSBhYm92ZSwNCj4gYW5kDQo+IEkgZG8gdGhpbmsgdGhhdCBrZWVwaW5nIHRoaXMg bWVjaGFuaXNtIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSB3aWxsDQo+IG1ha2UNCj4gaXQgZWFzaWVy IHRvIHByZXZlbnQgYml0cm90Lg0KPiANCj4gVGhhdCBzYWlkLi4uIE5GU19DT05URVhUX0VSUk9S X1dSSVRFIGlzIGEgcGVyIGN0eCBmbGFnLCBhbmQgdGhlIGN0eA0KPiBpcyBhDQo+IHBlciBvcGVu IGZpbGUgZGVzY3JpcHRpb24gb2JqZWN0Lg0KPiANCj4gSXMgdGhhdCB0aGUgY29ycmVjdCB3YXkg dG8gdHJhY2sgdGhpcz8gQWxsIG9mIHRoZSBjdHgncyB3aWxsIHNoYXJlDQo+IHRoZQ0KPiBzYW1l IGlub2RlLiBJZiB3ZSdyZSBnZXR0aW5nIHdyaXRlYmFjayBlcnJvcnMgZm9yIG9uZSBjb250ZXh0 LCBpdCdzDQo+IHF1aXRlIGxpa2VseSB0aGF0IHdlJ2xsIGJlIHNlZWluZyB0aGVtIHZpYSBvdGhl cnMuDQo+IA0KPiBJIHN1cHBvc2UgdGhlIGNvdW50ZXJhcmd1bWVudCBpcyB3aGVuIHdlIGhhdmUg dGhpbmdzIGxpa2UgZXhwaXJpbmcNCj4ga3JiNQ0KPiB0aWNrZXRzLiBXcml0ZSBmYWlsdXJlcyB2 aWEgYW4gZXhwaXJpbmcgc2V0IG9mIGNyZWRzIG1heSBoYXZlIG5vDQo+IGVmZmVjdA0KPiBvbiB3 cml0ZWJhY2sgdmlhIG90aGVyIGNyZWRzLg0KPiANCj4gU3RpbGwsIEkgdGhpbmsgYSBwZXItaW5v ZGUgZmxhZyBtaWdodCBtYWtlIG1vcmUgc2Vuc2UgaGVyZS4NCj4gDQo+IFRob3VnaHRzPw0KDQpB cyBmYXIgYXMgSSdtIGNvbmNlcm5lZCwgdGhhdCB3b3VsZCBiZSBhIHJlZ3Jlc3Npb24uIFRoZSBt b3N0IGNvbW1vbg0KcHJvYmxlbSB3aGVuIGZsdXNoaW5nIHdyaXRlYmFjayBkYXRhIHRvIHRoZSBz ZXJ2ZXIgYXNpZGUgZnJvbSBFTk9TUEMNCihhbmQgcG9zc2libHkgRVNUQUxFKSBpcyBFQUNDRVMs IHdoaWNoIGlzIHBhcnRpY3VsYXIgdG8gdGhlIGZpbGUNCmRlc2NyaXB0b3IgdGhhdCBvcGVuZWQg dGhlIGZpbGUuDQoNCkZpbGUgY29udGV4dHMsIGFuZCBORlNfQ09OVEVYVF9FUlJPUl9XUklURSBz b2x2ZSB0aGF0IHByb2JsZW0gYnkgYmVpbmcNCnByaXZhdGUgdG8gdGhlIGZpbGUgZGVzY3JpcHRv ci4NCg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwg UHJpbWFyeURhdGENCnRyb25kLm15a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20NCg==