From mboxrd@z Thu Jan 1 00:00:00 1970 From: kedacomkernel Subject: Re: Re: [patch v2]raid5: fix directio regression Date: Fri, 24 Aug 2012 12:21:30 +0800 Message-ID: <201208241221216404240@gmail.com> References: <201208071421033759628@gmail.com> <201208081321202343795@gmail.com> <201208090919591567972@gmail.com> <20120809113230.152aade3@notabene.brown> <20120814063343.GA30353@kernel.org> <20120815105610.74fe418e@notabene.brown> <20120815014436.GA355@kernel.org> <201208161536313436886@gmail.com> <201208231446557815641@gmail.com> <201208232017099682142@gmail.com>, Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: shli , majianpeng Cc: Neil Brown , linux-raid , axboe List-Id: linux-raid.ids T24gMjAxMi0wOC0yNCAxMToxMiBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0K PjIwMTIvOC8yMyBKaWFucGVuZyBNYSA8bWFqaWFucGVuZ0BnbWFpbC5jb20+Og0KPj4gT24gMjAx Mi0wOC0yMyAxNTo1NSBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0KPj4+MjAx Mi84LzIzIEppYW5wZW5nIE1hIDxtYWppYW5wZW5nQGdtYWlsLmNvbT46DQo+Pj4+IE9uIDIwMTIt MDgtMjMgMTQ6MDggU2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+MjAx Mi84LzE2IFNoYW9odWEgTGkgPHNobGlAa2VybmVsLm9yZz46DQo+Pj4+Pj4gMjAxMi84LzE2IEpp YW5wZW5nIE1hIDxtYWppYW5wZW5nQGdtYWlsLmNvbT46DQo+Pj4+Pj4+IE9uIDIwMTItMDgtMTUg MDk6NDQgU2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+Pj4+T24gV2Vk LCBBdWcgMTUsIDIwMTIgYXQgMTA6NTY6MTBBTSArMTAwMCwgTmVpbEJyb3duIHdyb3RlOg0KPj4+ Pj4+Pj4+IE9uIFR1ZSwgMTQgQXVnIDIwMTIgMTQ6MzM6NDMgKzA4MDAgU2hhb2h1YSBMaSA8c2hs aUBrZXJuZWwub3JnPiB3cm90ZToNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+ID4gT24gVGh1LCBBdWcg MDksIDIwMTIgYXQgMDE6MDc6MDFQTSArMDgwMCwgU2hhb2h1YSBMaSB3cm90ZToNCj4+Pj4+Pj4+ PiA+ID4gMjAxMi84LzkgTmVpbEJyb3duIDxuZWlsYkBzdXNlLmRlPjoNCj4+Pj4+Pj4+PiA+ID4g PiBPbiBUaHUsIDkgQXVnIDIwMTIgMDk6MjA6MDUgKzA4MDAgIkppYW5wZW5nIE1hIiA8bWFqaWFu cGVuZ0BnbWFpbC5jb20+IHdyb3RlOg0KPj4+Pj4+Pj4+ID4gPiA+DQo+Pj4+Pj4+Pj4gPiA+ID4+ IE9uIDIwMTItMDgtMDggMjA6NTMgU2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToN Cj4+Pj4+Pj4+PiA+ID4gPj4gPjIwMTIvOC84IEppYW5wZW5nIE1hIDxtYWppYW5wZW5nQGdtYWls LmNvbT46DQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+IE9uIDIwMTItMDgtMDggMTA6NTggU2hhb2h1YSBM aSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+MjAxMi84Lzcg SmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29tPjoNCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+ PiBPbiAyMDEyLTA4LTA3IDEzOjMyIFNoYW9odWEgTGkgPHNobGlAa2VybmVsLm9yZz4gV3JvdGU6 DQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+MjAxMi84LzcgSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdA Z21haWwuY29tPjoNCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+Pj4+IE9uIDIwMTItMDgtMDcgMTE6MjIg U2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+ Pj4+Pk15IGRpcmVjdElPIHJhbmRvbXdyaXRlIDRrIHdvcmtsb2FkIHNob3dzIGEgMTB+MjAlIHJl Z3Jlc3Npb24gY2F1c2VkIGJ5IGNvbW1pdA0KPj4+Pj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+ODk1ZTNj NWM1OGE4MGJiLiBkaXJlY3RJTyB1c3VhbGx5IGlzIHJhbmRvbSBJTyBhbmQgaWYgcmVxdWVzdCBz aXplIGlzbid0IGJpZw0KPj4+Pj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+KHdoaWNoIGlzIHRoZSBjb21t b24gY2FzZSksIGRlbGF5IGhhbmRsaW5nIG9mIHRoZSBzdHJpcGUgaGFzbid0IGFueSBhZHZhbnRh Z2VzLg0KPj4+Pj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+Rm9yIGJpZyBzaXplIHJlcXVlc3QsIGRlbGF5 IGNhbiBzdGlsbCByZWR1Y2UgSU8uDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+Pj4NCj4+Pj4+Pj4+ PiA+ID4gPj4gPj4+Pj4+PlNpZ25lZC1vZmYtYnk6IFNoYW9odWEgTGkgPHNobGlAZnVzaW9uaW8u Y29tPg0KPj4+Pj4+Pj4+ID4gPiA+PiA+Pj4+IFtzbmlwXQ0KPj4+Pj4+Pj4+ID4gPiA+PiA+Pj4+ Pj4+LS0NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+Pj4+IE1heSBiZSB1c2VkIHNpemUgdG8ganVkZ2Ug aXMgbm90IGEgZ29vZCBtZXRob2QuDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+PiBJIGZpcnN0bHkg c2VuZGVkIHRoaXMgcGF0Y2gsIG9ubHkgd2FudCB0byBjb250cm9sIGRpcmVjdC13cml0ZS1ibG9j ayxub3QgZm9yIHJlcXVsYXIgZmlsZS4NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+Pj4+IEJlY2F1c2Ug aSB0aGluayBpZiBzb21lb25lIHVzZWQgZGlyZWN0LXdyaXRlLWJsb2NrIGZvciByYWlkNSxoZSBz aG91bGQga25vdyB0aGUgZmVhdHVyZSBvZiByYWlkNSBhbmQgaGUgY2FuIGNvbnRyb2wNCj4+Pj4+ Pj4+PiA+ID4gPj4gPj4+Pj4+IGZvciB3cml0ZSB0byBmdWxsLXdyaXRlLg0KPj4+Pj4+Pj4+ID4g PiA+PiA+Pj4+Pj4gQnV0IGF0IHRoYXQgdGltZSwgaSBkaWQga25vdyBob3cgdG8gZGlmZmVyZW50 aWF0ZSBiZXR3ZWVuIHJlZ3VsYXIgZmlsZSBhbmQgYmxvY2stZGV2aWNlLg0KPj4+Pj4+Pj4+ID4g PiA+PiA+Pj4+Pj4gSSB0aGlrIHdlIHNob3VsZCBkbyBzb21ldGhpbmcgdG8gZG8gdGhpcy4NCj4+ Pj4+Pj4+PiA+ID4gPj4gPj4+Pj4NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+Pj5JIGRvbid0IHRoaW5r IGl0J3MgcG9zc2libGUgdXNlciBjYW4gY29udHJvbCBoaXMgd3JpdGUgdG8gYmUgYQ0KPj4+Pj4+ Pj4+ID4gPiA+PiA+Pj4+PmZ1bGwtd3JpdGUgZXZlbiBmb3INCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+ Pj5yYXcgZGlzayBJTy4gV2h5IHJlZ3VsYXIgZmlsZSBhbmQgYmxvY2sgZGV2aWNlIGlvIG1hdHRl cnMgaGVyZT8NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+Pj4NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+Pj5U aGFua3MsDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+U2hhb2h1YQ0KPj4+Pj4+Pj4+ID4gPiA+PiA+ Pj4+IEFub3RoZXIgcHJvYmxlbSBpcyB0aGUgc2l6ZS4gSG93IHRvIGp1ZGdlIHRoZSBzaXplIGlz IGxhcmdlIG9yIG5vdD8NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+PiBBIHN5c2NhbGwgd3JpdGUgaXMg YSBkaW8gYW5kIGEgZGlvIG1heSBiZSBzcGxpdCBtb3JlIGJpb3MuDQo+Pj4+Pj4+Pj4gPiA+ID4+ ID4+Pj4gRm9yIG15IHdvcmtsb2FkLCBpIHVzdWFseSB3cml0ZSBjaHVuay1zaXplLg0KPj4+Pj4+ Pj4+ID4gPiA+PiA+Pj4+IEJ1dCB5b3VyIHBhdGNoIGlzIGp1ZGdlIGJ5IGJpby1zaXplLg0KPj4+ Pj4+Pj4+ID4gPiA+PiA+Pj4NCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+SSdkIGlnbm9yZSB3b3JrbG9h ZCB3aGljaCBkb2VzIHNlcXVlbnRpYWwgZGlyZWN0SU8sIHRob3VnaA0KPj4+Pj4+Pj4+ID4gPiA+ PiA+Pj55b3VyIHdvcmtsb2FkIGlzLCBidXQgSSBiZXQgbm8gcmVhbCB3b3JrbG9hZHMgYXJlLiBT byBJJ2QgbGlrZQ0KPj4+Pj4+Pj4+ID4gPiA+PiA+PiBTb3JyeSxteSBleHBsYWluIG1heWJlIG5v dCBjb3JjcmVjdC4gSSB3cml0ZSBkYXRhIG9uY2Ugd2hpY2ggc2l6ZSBpcyBhbG1vc3QgY2h1bmtz LXNpemUgKiBkZXZpY2VzLGluIG9yZGVyIHRvIGZ1bGwtd3JpdGUNCj4+Pj4+Pj4+PiA+ID4gPj4g Pj4gYW5kIGFzIHBvc3NpYmxlIGFzIHRvIG5vIHByZS1yZWFkIG9wZXJhdGlvbi4NCj4+Pj4+Pj4+ PiA+ID4gPj4gPj4+b25seSB0byBjb25zaWRlciBiaWcgc2l6ZSByYW5kb20gZGlyZWN0aW8uIEkg YWdyZWUgdGhlIHNpemUNCj4+Pj4+Pj4+PiA+ID4gPj4gPj4+anVkZ2UgaXMgYXJiaXRyYXJ5LiBJ IGNhbiBvcHRpbWl6ZSBpdCB0byBiZSBvbmx5IGNvbnNpZGVyIHN0cmlwZQ0KPj4+Pj4+Pj4+ID4g PiA+PiA+Pj53aGljaCBoaXRzIHR3byBvciBtb3JlIGRpc2tzIGluIG9uZSBiaW8sIGJ1dCBub3Qg c3VyZSBpZiBpdCdzDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+PndvcnRoeSBkb2luZy4gTm90IHdhcmUg YmlnIHNpemUgZGlyZWN0aW8gaXMgY29tbW9uLCBhbmQgZXZlbg0KPj4+Pj4+Pj4+ID4gPiA+PiA+ Pj5pcywgYmlnIHNpemUgcmVxdWVzdCBJT1BTIGlzIGxvdywgYSBiaXQgZGVsYXkgbWF5YmUgbm90 IGEgYmlnDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+PmRlYWwuDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4+IElm IGFkZCBhIGFjY190aW1lIGZvciAnc3RyaWVwX2hlYWQnIHRvIGNvbnRyb2w/DQo+Pj4+Pj4+Pj4g PiA+ID4+ID4+IFdoZW4gZ2V0X2FjdGl2ZV9zdHJpcGUoKSBpcyBvaywgdXBkYXRlIGFjY190aW1l Lg0KPj4+Pj4+Pj4+ID4gPiA+PiA+PiBGb3Igc29tZSB0aW1lLCBzdHJpcGVfaGVhZCBkaWQgbm90 IGFjY2VzcyBhbmQgaXQgc2hvbGQgcHJlLXJlYWQuDQo+Pj4+Pj4+Pj4gPiA+ID4+ID4NCj4+Pj4+ Pj4+PiA+ID4gPj4gPkRvIHlvdSB3YW50IHRvIGFkZCBhIHRpbWVyIGZvciBlYWNoIHN0cmlwZT8g VGhpcyBpcyBldmVuIHVnbHkuDQo+Pj4+Pj4+Pj4gPiA+ID4+ID5Ib3cgZG8geW91IGNob29zZSB0 aGUgZXhwaXJlIHRpbWU/IEEgdGltZSB3b3JrcyBmb3IgaGFyZGRpc2sNCj4+Pj4+Pj4+PiA+ID4g Pj4gPmRlZmluaXRlbHkgd2lsbCBub3Qgd29yayBmb3IgYSBmYXN0IFNTRC4NCj4+Pj4+Pj4+PiA+ ID4gPj4gQSB0aW1lIGlzIGxpa2UgdGhlIHNpemUgd2hpY2ggaXMgYXJiaXRyYXJ5Lg0KPj4+Pj4+ Pj4+ID4gPiA+PiBIb3cgYWJvdXQgYWRkIGEgaW50ZXJmYWNlIGluIHN5c2ZzIHRvIGNvbnRyb2wg YnkgdXNlcj8NCj4+Pj4+Pj4+PiA+ID4gPj4gT25seSB1c2VyIGNhbiBqdWRnZSB0aGUgd29ya2xv YWQsIHdoaWNoIHNlcXVhdGlhbCB3cml0ZSBvciByYW5kb20gd3JpdGUuDQo+Pj4+Pj4+Pj4gPiA+ ID4NCj4+Pj4+Pj4+PiA+ID4gPiBUaGlzIGlzIGdldHRpbmcgd29yc2UgYnkgdGhlIG1pbnV0ZS4g IEEgc3lzZnMgaW50ZXJmYWNlIGZvciB0aGlzIGlzDQo+Pj4+Pj4+Pj4gPiA+ID4gZGVmaW5pdGVs eSBub3QgYSBnb29kIGlkZWEuDQo+Pj4+Pj4+Pj4gPiA+ID4NCj4+Pj4+Pj4+PiA+ID4gPiBUaGUg UkVRX05PSURMRSBmbGFnIGlzIGEgcHJldHR5IGNsZWFyIHN0YXRlbWVudCB0aGF0IG5vIG1vcmUg cmVxdWVzdHMgdGhhdA0KPj4+Pj4+Pj4+ID4gPiA+IG1lcmdlIHdpdGggdGhpcyBvbmUgYXJlIGV4 cGVjdGVkLiAgSWYgc29tZSB1c2UgY2FzZXMgc2VuZHMgcmFuZG9tIHJlcXVlc3RzLA0KPj4+Pj4+ Pj4+ID4gPiA+IG1heWJlIGl0IHNob3VsZCBiZSBzZXR0aW5nIFJFUV9OT0lETEUuDQo+Pj4+Pj4+ Pj4gPiA+ID4NCj4+Pj4+Pj4+PiA+ID4gPiBNYXliZSBzb21lb25lIHNob3VsZCBkbyBzb21lIHJl c2VhcmNoIGFuZCBmaW5kIG91dCB3aHkgV1JJVEVfT0RJUkVDVCBkb2Vzbid0DQo+Pj4+Pj4+Pj4g PiA+ID4gaW5jbHVkZSBSRVFfTk9JRExFLiAgVW5kZXJzdGFuZGluZyB0aGF0IHdvdWxkIGhlbHAg dW5kZXJzdGFuZCB0aGUgY3VycmVudA0KPj4+Pj4+Pj4+ID4gPiA+IHByb2JsZW0uDQo+Pj4+Pj4+ Pj4gPiA+DQo+Pj4+Pj4+Pj4gPiA+IEEgcXVpY2sgc2VhcmNoIHNob3dzIG9ubHkgY2ZxLWlvc2No ZWQgdXNlcyBSRVFfTk9JRExFLiBJbg0KPj4+Pj4+Pj4+ID4gPiBjZnEsIGEgcXVldWUgaXMgaWRs ZWQgdG8gYXZvaWQgbG9zaW5nIGl0cyBzaGFyZS4gUkVRX05PSURMRQ0KPj4+Pj4+Pj4+ID4gPiB0 ZWxscyBjZnEgdG8gYXZvaWQgaWRsZSwgc2luY2UgdGhlIHRhc2sgd2lsbCBub3QgZGlzcGF0Y2gg ZnVydGhlcg0KPj4+Pj4+Pj4+ID4gPiByZXF1ZXN0cyBhbnkgbW9yZS4gTm90ZSB0aGlzIGlzbid0 IG5vIG1lcmdlLg0KPj4+Pj4+Pj4+ID4NCj4+Pj4+Pj4+PiA+IFNpbmNlIFJFUV9OT0lETEUgaGFz IG5vIHJlbGF0aW9uc2hpcCB3aXRoIHJlcXVlc3QgbWVyZ2UsIHdlJ2QgYmV0dGVyIHJlbW92ZSBp dC4NCj4+Pj4+Pj4+PiA+IEkgY2FtZSBvdXQgYSBuZXcgcGF0Y2gsIHdoaWNoIGRvZXNuJ3QgZGVw ZW5kIG9uIHJlcXVlc3Qgc2l6ZSBhbnkgbW9yZS4gV2l0aA0KPj4+Pj4+Pj4+ID4gdGhpcyBwYXRj aCwgc2VxdWVudGlhbCBkaXJlY3RpbyB3aWxsIHN0aWxsIGludHJvZHVjZSB1bm5lY2Vzc2FyeSBy YWlkNSBwcmVyZWFkDQo+Pj4+Pj4+Pj4gPiAoZXNwZWNpYWxseSBmb3Igc21hbGwgc2l6ZSBJTyks IGJ1dCBJIGJldCBubyBhcHAgZG9lcyBzZXF1ZW50aWFsIHNtYWxsIHNpemUNCj4+Pj4+Pj4+PiA+ IGRpcmVjdElPLg0KPj4+Pj4+Pj4+ID4NCj4+Pj4+Pj4+PiA+IFRoYW5rcywNCj4+Pj4+Pj4+PiA+ IFNoYW9odWENCj4+Pj4+Pj4+PiA+DQo+Pj4+Pj4+Pj4gPiBTdWJqZWN0OiByYWlkNTogZml4IGRp cmVjdGlvIHJlZ3Jlc3Npb24NCj4+Pj4+Pj4+PiA+DQo+Pj4+Pj4+Pj4gPiBNeSBkaXJlY3RJTyBy YW5kb213cml0ZSA0ayB3b3JrbG9hZCBzaG93cyBhIDEwfjIwJSByZWdyZXNzaW9uIGNhdXNlZCBi eSBjb21taXQNCj4+Pj4+Pj4+PiA+IDg5NWUzYzVjNThhODBiYi4gVGhpcyBjb21taXQgaXNuJ3Qg ZnJpZW5kbHkgZm9yIHNtYWxsIHNpemUgcmFuZG9tIElPLCBiZWNhdXNlDQo+Pj4+Pj4+Pj4gPiBk ZWxheWluZyBzdWNoIHJlcXVlc3QgaGFzbid0IGFueSBhZHZhbnRhZ2VzLg0KPj4+Pj4+Pj4+ID4N Cj4+Pj4+Pj4+PiA+IERpcmVjdElPIHVzdWFsbHkgaXMgcmFuZG9tIElPLiBJIHRob3VnaHQgd2Ug Y2FuIGlnbm9yZSByZXF1ZXN0IG1lcmdlIGJldHdlZW4NCj4+Pj4+Pj4+PiA+IGJpb3MgZnJvbSBk aWZmZXJlbnQgaW9fc3VibWl0LiBTbyB3ZSBvbmx5IGNvbnNpZGVyIG9uZSBiaW8gd2hpY2ggY2Fu IGRyaXZlDQo+Pj4+Pj4+Pj4gPiB1bm5lY2Vzc2FyeSBwcmVyZWFkIGluIHJhaWQ1LCB3aGljaCBp cyBsYXJnZSByZXF1ZXN0LiBJZiBhIGJpbyBpcyBsYXJnZSBlbm91Z2gNCj4+Pj4+Pj4+PiA+IGFu ZCBzb21lIG9mIGl0cyBzdHJpcGVzIHdpbGwgYWNjZXNzIHR3byBvciBtb3JlIGRpc2tzLCBzdWNo IHN0cmlwZXMgc2hvdWxkIGJlDQo+Pj4+Pj4+Pj4gPiBkZWxheWVkIHRvIGF2b2lkIHVubmVjZXNz YXJ5IHByZXJlYWQgdGlsbCBiaW8gZm9yIHRoZSBsYXN0IGRpc2sgb2YgdGhlIHN0cmlwcw0KPj4+ Pj4+Pj4+ID4gaXMgYWRkZWQuDQo+Pj4+Pj4+Pj4gPg0KPj4+Pj4+Pj4+ID4gUkVRX05PSURMRSBk b2Vzbid0IG1lYW4gYWJvdXQgcmVxdWVzdCBtZXJnZSwgSSBkZWxldGVkIGl0Lg0KPj4+Pj4+Pj4+ DQo+Pj4+Pj4+Pj4gSGksDQo+Pj4+Pj4+Pj4gIEhhdmUgeW91IHRlc3RlZCB3aGF0IGVmZmVjdCB0 aGlzIGhhcyBvbiBsYXJnZSBzZXF1ZW50aWFsIGRpcmVjdCB3cml0ZXM/DQo+Pj4+Pj4+Pj4gIEJl Y2F1c2UgaXQgZG9uJ3QgbWFrZSBzZW5zZSB0byBtZSBhbmQgSSB3b3VsZCBiZSBzdXJwcmlzZWQg aWYgaXQgaW1wcm92ZXMNCj4+Pj4+Pj4+PiAgdGhpbmdzLg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4g IFlvdSBhcmUgZGVsYXlpbmcgc2V0dGluZyB0aGUgU1RSSVBFX1BSRVJFQURfQUNUSVZFIGJpdCB1 bnRpbCB5b3UgdGhpbmsgeW91DQo+Pj4+Pj4+Pj4gIGhhdmUgc3VibWl0dGVkIGFsbCB0aGUgd3Jp dGVzIGZyb20gdGhpcyBiaW8gdGhhdCBhcHBseSB0byB0aGUgZ2l2ZSBzdHJpcGUuDQo+Pj4+Pj4+ Pj4gIFRoYXQgZG9lcyBtYWtlIHNvbWUgc2Vuc2UsIGhvd2V2ZXIgaXQgZG9lc24ndCBzZWVtIHRv IGRlYWwgd2l0aCB0aGUNCj4+Pj4+Pj4+PiAgcG9zc2liaWxpdHkgdGhhdCB0aGUgb25lIGJpbyBj b3ZlcnMgcGFydHMgb2YgdHdvIGRpZmZlcmVudCBzdHJpcGVzLiAgSW4gdGhhdA0KPj4+Pj4+Pj4+ ICBjYXNlIHRoZSBmaXJzdCBzdHJpcGUgbmV2ZXIgZ2V0cyBTVFJJUEVfUFJFUkVBRF9BQ1RJVkUg c2V0LCBzbyBpdCBpcyBkZWxheWVkDQo+Pj4+Pj4+Pj4gIGRlc3BpdGUgaGF2aW5nICdSRVFfU1lO Qycgc2V0Lg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+SSBkaWRuJ3QgZ2V0IHlvdXIgcG9pbnQuIElzbid0 IGxhc3Rfc2VjdG9yIC0gbG9naWNhbF9zZWN0b3IgPCBjaHVua19zZWN0b3JzIHRydWUNCj4+Pj4+ Pj4+aW4gdGhlIGNhc2U/DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+ICBBbHNvLCBhbmQgbW9yZSBzaWdu aWZpY2FudGx5LCBwbHVnZ2luZyBzaG91bGQgbWVhbiB0aGF0IHRoZSB2YXJpb3VzDQo+Pj4+Pj4+ Pj4gIHN0cmlwZV9oZWFkcyBhcmUgbm90IGV2ZW4gbG9va2VkIGF0IHVudGlsIGFsbCBvZiB0aGUg b3JpZ2luYWwgYmlvIGlzDQo+Pj4+Pj4+Pj4gIHByb2Nlc3NlZCwgc28gd2hpbGUgU1RSSVBFX1BS RVJFQURfQUNUSVZFIG1pZ2h0IGdldCBzZXQgZWFybHksIGl0IHNob3VsZCBub3QNCj4+Pj4+Pj4+ PiAgZ2V0IHByb2Nlc3NlZCB1bnRpbCB0aGUgd2hvbGUgYmlvIGlzIHByb2Nlc3NlZCBhbmQgdGhl IHF1ZXVlIGlzIHVucGx1Z2dlZC4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+ICBTbyBJIGRvbid0IHRo aW5rIHRoaXMgcGF0Y2ggc2hvdWxkIG1ha2UgYSBkaWZmZXJlbmNlIG9uIGxhcmdlIGRpcmVjdCB3 cml0ZXMsDQo+Pj4+Pj4+Pj4gIGFuZCBpZiBpdCBkb2VzIHRoZW4gc29tZXRoaW5nIHN0cmFuZ2Ug aXMgZ29pbmcgb24gdGhhdCBJJ2QgbGlrZSB0bw0KPj4+Pj4+Pj4+ICB1bmRlcnN0YW5kIGZpcnN0 Lg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+QWhhLCBvaywgdGhpcyBtYWtlcyBzZW5zZS4gcmVjZW50IGRl bGF5ZWQgc3RyaXBlIHJlbGVhc2Ugc2hvdWxkIG1ha2UgdGhlDQo+Pj4+Pj4+PnByb2JsZW0gZ28g YXdheS4gU28gSmlhbnBlbmcsIGNhbiB5b3UgdHJ5IHlvdXIgd29ya2xvYWQgd2l0aCB0aGUgY29t bWl0DQo+Pj4+Pj4+PnJldmVydGVkIHdpdGggYSByZWNlbnQga2VybmVsIHBsZWFzZT8NCj4+Pj4+ Pj4+DQo+Pj4+Pj4+IEkgdGVzdGVkIHVzZWQgeW91ciBwYXRjaCBpbiBteSB3b3JrbG9hZC4NCj4+ Pj4+Pj4gTGlrZSB0aGUgbmVpbCBzYWlkLCB0aGUgcGVyZm9ybWFuY2UgZG9lcyBub3QgcmVncmVz cy4NCj4+Pj4+Pj4gQnV0IGlmIHRoZSBjb2RlIGlzIDoNCj4+Pj4+Pj4+ICAgICAgICAgICAgICAg ICAgICAgICBpZiAodGVzdF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLCAmc2gtPnN0YXRlKSkN Cj4+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2Vfc3RyaXBlKHNo KTsNCj4+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+Pj4+Pj4+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX3N0cmlwZV9wbHVnKG1kZGV2LCBzaCk7DQo+ Pj4+Pj4+IFRoZSBzcGVlZCBpcyBhYm91dCA3Nk1CL3MuV2l0aCB0aG9zZSBjb2RlIHRoZSBzcGVl ZCBpcyAyMDBNQi9zLg0KPj4+Pj4+DQo+Pj4+Pj4gSG1tLCB3aGF0IEkgd2FudCB0byB0ZXN0IGlz IHVwc3RyZWFtIGtlcm5lbCB3aXRoIGNvbW1pdCA4OTVlM2M1YzU4YTgwYmINCj4+Pj4+PiByZXZl cnRlZC4gZG9uJ3QgYXBwbHkgbXkgcGF0Y2guIFdlIHdhbnQgdG8ganVzdCByZXZlcnQgdGhlIGNv bW1pdC4NCj4+Pj4+DQo+Pj4+PkRpZCB5b3UgaGF2ZSBkYXRhIGZvciB5b3VyIG9yaWdpbmFsIHdv cmtsb2FkIHdpdGggODk1ZTNjNWM1OGE4MGJiDQo+Pj4+PnJldmVydGVkIG5vdz8NCj4+Pj4gb3Vy IHJhaWQ1IHdoaWNoIGhhZCAxNCBTQVRBIEhERHMuDQo+Pj4+DQo+Pj4+IHdpdGggIDg5NWUzYzVj NThhODBiYiByZXZlcnRlZDoNCj4+Pj4gdXNpbmcgZGQgdG8gdGVzdCA1NU1CL3MNCj4+Pj4gdXNp bmcgb3VyLWZzIDIwMC0yNTBNYi9zDQo+Pj4+DQo+Pj4+IHdpdGggIDg5NWUzYzVjNThhODBiYjoN Cj4+Pj4gdXNpbmcgZGQgdG8gdGVzdCAyNzVNQi9zDQo+Pj4+IHVzaW5nIG91ci1mcyA1MDAtNTUw TWIvcw0KPj4+DQo+Pj53aGF0J3MgYmxvY2sgc2l6ZSBvZiBkZCBpbiB0aGlzIHRlc3Q/IEluIHlv dXIgb3JpZ2luYWwgdGVzdCwgeW91cg0KPj4+QlMgY292ZXJzIGNodW5rX3NlY3RvcipkYXRhX2Rp c2tzLiBJbiB0aGF0IGNhc2UsDQo+Pj44OTVlM2M1YzU4YTgwYmIgaXMgbGlrZWx5IG5vdCByZXF1 aXJlZC4NCj4+Pg0KPj4gV2l0aCBsYXRlc3Qga2VybmVsKDMuNi1yYzMpLCB3LyBvciB3L28gODk1 ZTNjNWM1OGE4MGJiLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lLg0KPj4gVGhlIGJsb2NrIHNpemUg b2YgZGQgaXMgY2h1bmtfc2VjdG9yICogZGF0YV9kaXNrcy4NCj4+IFlvdXIgcGF0Y2goODgxMWI1 OTY4ZjYyMTZlOTcpIGlzIGdvb2QuDQo+PiBJIHRoaW5rIGl0IHNob3VsIHJldmVydCA4ODExYjU5 NjhmNjIxNmU5Ny4NCj4NCj5yZXZlcnQgODk1ZTNjNWM1OGE4MGJiLCByaWdodD8NCnllcy4gQmVj YXVzZSB0aGUgODgxMWI1OTY4ZjYyMTZlOTcsIGl0IGNhbiByZXZlcnQuDQo+LS0NCj5UbyB1bnN1 YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgt cmFpZCIgaW4NCj50aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVs Lm9yZw0KPk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFq b3Jkb21vLWluZm8uaHRtbA==