From mboxrd@z Thu Jan 1 00:00:00 1970 From: Allen Samuels Subject: RE: Adding compression support for bluestore. Date: Wed, 24 Feb 2016 18:43:10 +0000 Message-ID: References: <56C1FCF3.4030505@mirantis.com> <56C3BAA3.3070804@mirantis.com> <56CDF40C.9060405@mirantis.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-bn1on0054.outbound.protection.outlook.com ([157.56.110.54]:18531 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756398AbcBXTQj (ORCPT ); Wed, 24 Feb 2016 14:16:39 -0500 In-Reply-To: <56CDF40C.9060405@mirantis.com> Content-Language: en-US Sender: ceph-devel-owner@vger.kernel.org List-ID: To: Igor Fedotov , Sage Weil Cc: ceph-devel dy5yLnQuICgxKSBFeGNlcHQgZm9yICJwZXJtYW5lbnQiIC0tIGVzc2VudGlhbGx5IHllcy4gTXkg Y2VudHJhbCBwb2ludCBpcyB0aGF0IGJ5IGhhdmluZyB0aGUgZnVsbCB0dXBsZSB5b3UgZGVjb3Vw bGUgdGhlIGFjdHVhbCBhbGdvcml0aG0gZnJvbSBpdHMgcGVyc2lzdGVudCBleHByZXNzaW9uLiBJ biB0aGUgZXhhbXBsZSB0aGF0IHlvdSBnaXZlLCB5b3UgaGF2ZSBvbmUgcmVwcmVzZW50YXRpb24g b2YgdGhlIGZpbmFsIHJlc3VsdC4gVGhlcmUgYXJlIG90aGVyIHBvc3NpYmxlIGZpbmFsIHJlc3Vs dHMgKGkuZS4sIGJ5IFJNV2luZyBzb21lIG9mIHRoZSBzbWFsbGVyIGNodW5rcyAtLSBhcyB5b3Ug b3JpZ2luYWxseSBwcm9wb3NlZCkuIFlvdSBldmVuIGhhdmUgdGhlIG9wdGlvbiBvZiBkb2luZyB0 aGUgUk1XaW5nL2NvbXBhY3Rpb24gaW4gYSBiYWNrZ3JvdW5kIGxvdy1wcmlvcml0eSBwcm9jZXNz IChwYXJ0IG9mIHRoZSBzY3J1Yj8pLg0KDQpZb3UgbWF5IGJlIHJpZ2h0IGFib3V0IHRoZSBlZmZl Y3Qgb2YgKDIpLCBidXQgbWF5YmUgbm90Lg0KDQpJIGFncmVlIHRoYXQgbW9yZSBkaXNjdXNzaW9u IGFib3V0IGNoZWNrc3VtcyBpcyB1c2VmdWwuIEl0J3MgZXNzZW50aWFsIHRoYXQgQmx1ZVN0b3Jl IHByb3Blcmx5IGF1Z21lbnQgZGV2aWNlLWxldmVsIGludGVncml0eSBjaGVja3MuIA0KDQpBbGxl biBTYW11ZWxzDQpTb2Z0d2FyZSBBcmNoaXRlY3QsIEVtZXJnaW5nIFN0b3JhZ2UgU29sdXRpb25z IA0KDQoyODgwIEp1bmN0aW9uIEF2ZW51ZSwgTWlscGl0YXMsIENBIDk1MTM0DQpUOiArMSA0MDgg ODAxIDcwMzB8IE06ICsxIDQwOCA3ODAgNjQxNg0KYWxsZW4uc2FtdWVsc0BTYW5EaXNrLmNvbQ0K DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBJZ29yIEZlZG90b3YgW21haWx0 bzppZmVkb3RvdkBtaXJhbnRpcy5jb21dIA0KU2VudDogV2VkbmVzZGF5LCBGZWJydWFyeSAyNCwg MjAxNiAxMDoxOSBBTQ0KVG86IFNhZ2UgV2VpbCA8c2FnZUBuZXdkcmVhbS5uZXQ+OyBBbGxlbiBT YW11ZWxzIDxBbGxlbi5TYW11ZWxzQHNhbmRpc2suY29tPg0KQ2M6IGNlcGgtZGV2ZWwgPGNlcGgt ZGV2ZWxAdmdlci5rZXJuZWwub3JnPg0KU3ViamVjdDogUmU6IEFkZGluZyBjb21wcmVzc2lvbiBz dXBwb3J0IGZvciBibHVlc3RvcmUuDQoNCkFsbGVuLCBTYWdlDQoNCnRoYW5rcyBhIGxvdCBmb3Ig aW50ZXJlc3RpbmcgaW5wdXQuDQoNCk1heSBJIGhhdmUgc29tZSBjbGFyaWZpY2F0aW9uIGFuZCBo aWdobGlnaHQgc29tZSBjYXZlYXRzIHRob3VnaD8NCg0KMSkgQWxsZW4sIGFyZSB5b3Ugc3VnZ2Vz dGluZyB0byBoYXZlIHBlcm1hbmVudCBsb2dpY2FsIGJsb2NrcyBsYXlvdXQgZXN0YWJsaXNoZWQg YWZ0ZXIgdGhlIGluaXRpYWwgd3JpdGluZz8NClBsZWFzZSBmaW5kIHdoYXQgSSBtZWFuIGF0IHRo ZSBleGFtcGxlIGJlbG93ICggbG9naWNhbCBvZmZzZXQvc2l6ZSBhcmUgcHJvdmlkZWQgb25seSBm b3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSkuDQpJbWFnaW5lIGNsaWVudCBoYXMgcGVyZm9ybWVk IG11bHRpcGxlIHdyaXRlcyB0aGF0IGNyZWF0ZWQgZm9sbG93aW5nIG1hcCA8bG9naWNhbCBvZmZz ZXQsIGxvZ2ljYWwgc2l6ZT46DQo8MCwgMTAwPg0KPDEwMCwgNTA+DQo8MTUwLCA3MD4NCjwyMzAs IDcwPg0KYW5kIGFuIG92ZXJ3cml0ZSByZXF1ZXN0IDwxMjAsNzA+IGlzIGNvbWluZy4NClRoZSBx dWVzdGlvbiBpcyBpZiByZXN1bHRpbmcgbWFwcGluZyB0byBiZSB0aGUgc2FtZSBvciBzaG91bGQg YmUgdXBkYXRlZCBhcyBiZWxvdzoNCjwwLDEwMD4NCjwxMDAsIDIwPiAgICAvL3VwZGF0ZWQgZXh0 ZW50DQo8MTIwLCAxMDA+IC8vbmV3IGV4dGVudA0KPDIyMCwgMTA+ICAgLy91cGRhdGVkIGV4dGVu dA0KPDIzMCwgNzA+DQoNCjIpIEluIGZhY3QgIkFwcGxpY2F0aW9uIHVuaXRzIiB0aGF0IHdyaXRl IHJlcXVlc3RzIGRlbGl2ZXJzIHRvIEJsdWVTdG9yZSBhcmUgcHJldHR5KCBvciBldmVuIGNvbXBs ZXRlbHkpIGRpc3RvcnRlZCBieSBDZXBoIGludGVybmFscyAoQ2FjaGluZyBpbmZyYSwgc3RyaXBp bmcsIEVDKS4gVGh1cyB0aGVyZSBpcyBhIGNoYW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgYnJv a2VuIHBpY3R1cmUgYW5kIHN1Z2dlc3RlZCBtb2RpZmljYXRpb24gYnJpbmdzIG5vL21pbm9yIGJl bmVmaXQuDQoNCjMpIFNhZ2UgLSBjb3VsZCB5b3UgcGxlYXNlIGVsYWJvcmF0ZSB0aGUgcGVyLWV4 dGVudCBjaGVja3N1bSB1c2UgY2FzZSAtIGhvdyBhcmUgd2UgcGxhbmluZyB0byB1c2UgdGhhdD8N Cg0KVGhhbmtzLA0KSWdvci4NCg0KT24gMjIuMDIuMjAxNiAxNToyNSwgU2FnZSBXZWlsIHdyb3Rl Og0KPiBPbiBGcmksIDE5IEZlYiAyMDE2LCBBbGxlbiBTYW11ZWxzIHdyb3RlOg0KPj4gVGhpcyBp cyBhIGdvb2Qgc3RhcnQgdG8gYW4gYXJjaGl0ZWN0dXJlIGZvciBwZXJmb3JtaW5nIGNvbXByZXNz aW9uLg0KPj4NCj4+IEkgYW0gY29uY2VybmVkIHRoYXQgaXQncyBhIGJpdCB0b28gc2ltcGxlIGF0 IHRoZSBleHBlbnNlIG9mIA0KPj4gcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2Uu IEluIHBhcnRpY3VsYXIsIEkgYmVsaWV2ZSBpdCdzIA0KPj4gb2Z0ZW4gaW5lZmZpY2llbnQgdG8g Zm9yY2UgY29tcHJlc3Npb24gdG8gYmUgcGVyZm9ybWVkIGluIGJsb2NrIHNpemVzIA0KPj4gYW5k IGFsaWdubWVudHMgdGhhdCBtYXkgbm90IG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIHVzYWdlLg0K Pj4NCj4+ICAgSSB0aGluayB0aGF0IGV4dGVudCBtYXBwaW5nIHNob3VsZCBiZSBlbmhhbmNlZCB0 byBpbmNsdWRlIHRoZSBmdWxsDQo+PiAgIHR1cGxlOiA8TG9naWNhbCBvZmZzZXQsIExvZ2ljYWwg U2l6ZSwgUGh5c2ljYWwgb2Zmc2V0LCBQaHlzaWNhbCBzaXplLA0KPj4gICBjb21wcmVzc2lvbiBh bGdvPg0KPiBJIGFncmVlLg0KPiAgIA0KPj4gV2l0aCB0aGUgZnVsbCB0dXBsZSwgeW91IGNhbiBj b21wcmVzcyBkYXRhIGluIHRoZSBuYXR1cmFsIHVuaXRzIG9mIA0KPj4gdGhlIGFwcGxpY2F0aW9u ICh3aGljaCBpcyBtb3N0IGxpa2VseSB0aGUgc2l6ZSBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIA0K Pj4gdGhhdCB5b3UgcmVjZWl2ZWQpIGFuZCBvbiBpdHMgbmF0dXJhbCBhbGlnbm1lbnQgKHdoaWNo IHdpbGwgZWxpbWluYXRlIA0KPj4gYSBsb3Qgb2YgZXhwZW5zaXZlLWFuZC1oYXJkLXRvLWhhbmRs ZSBwYXJ0aWFsIG92ZXJ3cml0ZXMpIHJhdGhlciB0aGFuIA0KPj4gdGhlIHByb3Bvc2FsIG9mIGEg Zml4ZWQgc2l6ZSBjb21wcmVzc2lvbiBibG9jayBvbiBmaXhlZCBib3VuZGFyaWVzLg0KPj4NCj4+ IFVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIG5hdHVyYWwgYmxvY2sgc2l6ZSBmb3IgcGVyZm9ybWlu ZyBjb21wcmVzc2lvbiANCj4+IG1heSBhbGxvdyB5b3UgYSBncmVhdGVyIGNob2ljZSBvZiBjb21w cmVzc2lvbiBhbGdvcml0aG1zLiBGb3IgDQo+PiBleGFtcGxlLCBpZiB5b3UncmUgZG9pbmcgMU1C IG9iamVjdCB3cml0ZXMsIHRoZW4geW91IG1pZ2h0IHdhbnQgdG8gYmUgDQo+PiB1c2luZyBiemlw LWlzaCBhbGdvcml0aG1zIHRoYXQgaGF2ZSBsYXJnZSBjb21wcmVzc2lvbiB3aW5kb3dzIHJhdGhl ciANCj4+IHRoYW4gdGhlIDMyLUsgbGltaXRlZCB6bGliIGFsZ29yaXRobSBvciB0aGUgNjQtayBs aW1pdGVkIHNuYXBweS4gWW91IA0KPj4gd291bGRuJ3Qgd2FudCB0byBkbyB0aGF0IGlmIGFsbCBj b21wcmVzc2lvbiB3YXMgbGltaXRlZCB0byBhIGZpeGVkIDY0SyB3aW5kb3cuDQo+Pg0KPj4gV2l0 aCB0aGlzIGV4dHJhIGluZm9ybWF0aW9uIGEgbnVtYmVyIG9mIGludGVyZXN0aW5nIGFsZ29yaXRo bSBjaG9pY2VzIA0KPj4gYmVjb21lIGF2YWlsYWJsZS4gRm9yIGV4YW1wbGUsIGluIHRoZSBwYXJ0 aWFsLW92ZXJ3cml0ZSBjYXNlIHlvdSBjYW4gDQo+PiBqdXN0IGRlbGF5IHJlY292ZXJpbmcgdGhl IHBhcnRpYWxseSBvdmVyd3JpdHRlbiBkYXRhIGJ5IGhhdmluZyBhbiANCj4+IGV4dGVudCB0aGF0 IG92ZXJsYXBzIGEgcHJldmlvdXMgZXh0ZW50Lg0KPiBZZXAuDQo+DQo+PiBPbmUgb2JqZWN0aW9u IHRvIHRoZSBpbmNyZWFzZWQgZXh0ZW50IHR1cGxlIGlzIHRoYXQgYW1vdW50IG9mIA0KPj4gc3Bh Y2UvbWVtb3J5IGl0IHdvdWxkIGNvbnN1bWUuIFRoaXMgbmVlZCBub3QgYmUgdGhlIGNhc2UsIHRo ZSANCj4+IGV4aXN0aW5nIEJsdWVTdG9yZSBhcmNoaXRlY3R1cmUgc3RvcmVzIHRoZSBleHRlbnQg bWFwIGluIGEgc2VyaWFsaXplZCANCj4+IGZvcm1hdCBkaWZmZXJlbnQgZnJvbSB0aGUgaW4tbWVt b3J5IGZvcm1hdC4gSXQgd291bGQgYmUgcmVsYXRpdmVseSANCj4+IHNpbXBsZSB0byBjcmVhdGUg bXVsdGlwbGUgc2VyaWFsaXphdGlvbiBmb3JtYXRzIHRoYXQgb3B0aW1pemUgZm9yIHRoZSANCj4+ IHR5cGljYWwgY2FzZXMgb2Ygd2hlbiB0aGUgbG9naWNhbCBzcGFjZSBpcyBjb250aWd1b3VzIChp LmUuLCBsb2dpY2FsIA0KPj4gb2Zmc2V0IGlzIHByZXZpb3VzIGxvZ2ljYWwgb2Zmc2V0ICsgbG9n aWNhbCBzaXplKSBhbmQgd2hlbiB0aGVyZSdzIG5vIA0KPj4gY29tcHJlc3Npb24gKGxvZ2ljYWwg c2l6ZSA9PSBwaHlzaWNhbCBzaXplKS4gT25seSB0aGUgZGVzZXJpYWxpemVkIA0KPj4gaW4tbWVt b3J5IGZvcm1hdCBvZiB0aGUgZXh0ZW50IHRhYmxlIGhhcyB0aGUgZnVsbHkgcG9wdWxhdGVkIHR1 cGxlcy4gDQo+PiBJbiBmYWN0IHRoaXMgaXMgYSBkZXNpcmFibGUgb3B0aW1pemF0aW9uIGZvciB0 aGUgY3VycmVudCBibHVlc3RvcmUgDQo+PiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBjb21w cmVzc2lvbiBwcm9wb3NhbCBpcyBhZG9wdGVkIG9yIG5vdC4NCj4gWWVhaC4NCj4NCj4gVGhlIG90 aGVyIGJpdCB3ZSBzaG91bGQgcHJvYmFibHkgdGhpbmsgYWJvdXQgaGVyZSBpcyBob3cgdG8gc3Rv cmUgDQo+IGNoZWNrc3Vtcy4gIEluIHRoZSBjb21wcmVzc2VkIGV4dGVudCBjYXNlLCBhIHNpbXBs ZSBhcHByb2FjaCB3b3VsZCBiZSANCj4gdG8ganVzdCBhZGQgdGhlIGNoZWNrc3VtIChlaXRoZXIg Y29tcHJlc3NlZCwgdW5jb21wcmVzc2VkLCBvciBib3RoKSB0byANCj4gdGhlIGV4dGVudCB0dXBs ZSwgc2luY2UgdGhlIGV4dGVudCB3aWxsIGdlbmVyYWxseSBuZWVkIHRvIGJlIHJlYWQgaW4gDQo+ IGl0cyBlbnRpcmV0eSBhbnl3YXkuICBGb3IgdW5jb21wcmVzc2VkIGV4dGVudHMsIHRoYXQncyBu b3QgdGhlIGNhc2UsIA0KPiBhbmQgaGF2aW5nIGFuIGluZGVwZW5kZW50IG1hcCBvZiBjaGVja3N1 bXMgb3ZlciBzbWFsbGVyIGJsb2NrIHNpemVzIA0KPiBtYWtlcyBzZW5zZSwgYnV0IHRoYXQgZG9l c24ndCBwbGF5IHdlbGwgd2l0aCB0aGUgdmFyaWFibGUgDQo+IGFsaWdubWVudC9leHRlbnQgc2l6 ZSBhcHByb2FjaC4gIEkga2luZCBvZiBzdWNrcyB0byBoYXZlIG11bHRpcGxlIA0KPiBmb3JtYXRz IGhlcmUsIGJ1dCBpZiB3ZSBjYW4gaGlkZSBpdCBiZWhpbmQgdGhlIGluLW1lbW9yeSANCj4gcmVw cmVzZW50YXRpb24gYW5kL29yIGludGVyZmFjZSAoc28gdGhhdCwgZS5nLiwgZWFjaCBleHRlbnQg aGFzIGEgDQo+IGNoZWNrc3VtIGJsb2NrIHNpemUgYW5kIGEgdmVjdG9yIG9mIGNoZWNrc3Vtcykg d2UgY2FuIG9wdGltaXplIHRoZSBlbmNvZGluZyBob3dldmVyIHdlIGxpa2Ugd2l0aG91dCBhZmZl Y3Rpbmcgb3RoZXIgY29kZS4NCj4NCj4gc2FnZQ0KPg0KPj4NCj4+IEFsbGVuIFNhbXVlbHMNCj4+ IFNvZnR3YXJlIEFyY2hpdGVjdCwgRmVsbG93LCBTeXN0ZW1zIGFuZCBTb2Z0d2FyZSBTb2x1dGlv bnMNCj4+DQo+PiAyODgwIEp1bmN0aW9uIEF2ZW51ZSwgU2FuIEpvc2UsIENBIDk1MTM0DQo+PiBU OiArMSA0MDggODAxIDcwMzB8IE06ICsxIDQwOCA3ODAgNjQxNiBhbGxlbi5zYW11ZWxzQFNhbkRp c2suY29tDQo+Pg0KPj4NCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+PiBGcm9tOiBj ZXBoLWRldmVsLW93bmVyQHZnZXIua2VybmVsLm9yZyBbbWFpbHRvOmNlcGgtZGV2ZWwtb3duZXJA dmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YgSWdvciBGZWRvdG92DQo+PiBTZW50OiBUdWVz ZGF5LCBGZWJydWFyeSAxNiwgMjAxNiA0OjExIFBNDQo+PiBUbzogSGFvbWFpIFdhbmcgPGhhb21h aXdhbmdAZ21haWwuY29tPg0KPj4gQ2M6IGNlcGgtZGV2ZWwgPGNlcGgtZGV2ZWxAdmdlci5rZXJu ZWwub3JnPg0KPj4gU3ViamVjdDogUmU6IEFkZGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IGZvciBi bHVlc3RvcmUuDQo+Pg0KPj4gSGkgSGFvbWFpLA0KPj4gVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRz Lg0KPj4gUGxlYXNlIGZpbmQgbXkgcmVzcG9uc2UgaW5saW5lLg0KPj4NCj4+IE9uIDIvMTYvMjAx NiA1OjA2IEFNLCBIYW9tYWkgV2FuZyB3cm90ZToNCj4+PiBPbiBUdWUsIEZlYiAxNiwgMjAxNiBh dCAxMjoyOSBBTSwgSWdvciBGZWRvdG92IDxpZmVkb3RvdkBtaXJhbnRpcy5jb20+IHdyb3RlOg0K Pj4+PiBIaSBndXlzLA0KPj4+PiBIZXJlIGlzIG15IHByZWxpbWluYXJ5IG92ZXJ2aWV3IGhvdyBv bmUgY2FuIGFkZCBjb21wcmVzc2lvbiBzdXBwb3J0DQo+Pj4+IGFsbG93aW5nIHJhbmRvbSByZWFk cy93cml0ZXMgZm9yIGJsdWVzdG9yZS4NCj4+Pj4NCj4+Pj4gUHJlZmFjZToNCj4+Pj4gQmx1ZXN0 b3JlIGtlZXBzIG9iamVjdCBjb250ZW50IHVzaW5nIGEgc2V0IG9mIGRpc3BlcnNlZCBleHRlbnRz DQo+Pj4+IGFsaWduZWQgYnkgNjRLIChjb25maWd1cmFibGUgcGFyYW0pLiBJdCBhbHNvIHBlcm1p dHMgZ2FwcyBpbiBvYmplY3QNCj4+Pj4gY29udGVudCBpLmUuIGl0IHByZXZlbnRzIHN0b3JhZ2Ug c3BhY2UgYWxsb2NhdGlvbiBmb3Igb2JqZWN0IGRhdGENCj4+Pj4gcmVnaW9ucyB1bmFmZmVjdGVk IGJ5IHVzZXIgd3JpdGVzLg0KPj4+PiBBIHNvcnQgb2YgZm9sbG93aW5nIG1hcHBpbmcgaXMgdXNl ZCBmb3IgdHJhY2tpbmcgc3RvcmVkIG9iamVjdA0KPj4+PiBjb250ZW50IGRpc3Bvc2l0aW9uIChh Y3R1YWwgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYXkgZGlmZmVyIGJ1dA0KPj4+PiByZXByZXNl bnRhdGlvbiBiZWxvdyBzZWVtcyB0byBiZSBzdWZmaWNpZW50IGZvciBvdXIgcHVycG9zZXMpOg0K Pj4+PiBFeHRlbnQgTWFwDQo+Pj4+IHsNCj4+Pj4gPCBsb2dpY2FsIG9mZnNldCAwIC0+IGV4dGVu dCAwICdwaHlzaWNhbCcgb2Zmc2V0LCBleHRlbnQgMCBzaXplID4gLi4uDQo+Pj4+IDwgbG9naWNh bCBvZmZzZXQgTiAtPiBleHRlbnQgTiAncGh5c2ljYWwnIG9mZnNldCwgZXh0ZW50IE4gc2l6ZSA+ IH0NCj4+Pj4NCj4+Pj4NCj4+Pj4gQ29tcHJlc3Npb24gc3VwcG9ydCBhcHByb2FjaDoNCj4+Pj4g VGhlIGFpbSBpcyB0byBwcm92aWRlIGdlbmVyaWMgY29tcHJlc3Npb24gc3VwcG9ydCBhbGxvd2lu ZyByYW5kb20NCj4+Pj4gb2JqZWN0IHJlYWQvd3JpdGUuDQo+Pj4+IFRvIGRvIHRoYXQgY29tcHJl c3Npb24gZW5naW5lIHRvIGJlIHBsYWNlZCAobG9naWNhbGx5IC0gYWN0dWFsDQo+Pj4+IGltcGxl bWVudGF0aW9uIG1heSBiZSBkaXNjdXNzZWQgbGF0ZXIpIG9uIHRvcCBvZiBibHVlc3RvcmUgdG8g ImludGVyY2VwdCINCj4+Pj4gcmVhZC13cml0ZSByZXF1ZXN0cyBhbmQgbW9kaWZ5IHRoZW0gYXMg bmVlZGVkLg0KPj4+PiBUaGUgbWFqb3IgaWRlYSBpcyB0byBzcGxpdCBvYmplY3QgY29udGVudCBp bnRvIGZpeGVkIHNpemUgbG9naWNhbA0KPj4+PiBibG9ja3MgKCBNQVhfQkxPQ0tfU0laRSwgIGUu Zy4gMU1iKS4gQmxvY2tzIGFyZSBjb21wcmVzc2VkDQo+Pj4+IGluZGVwZW5kZW50bHkuIER1ZSB0 byBjb21wcmVzc2lvbiBlYWNoIGJsb2NrIGNhbiBwb3RlbnRpYWxseSBvY2N1cHkNCj4+Pj4gc21h bGxlciBzdG9yZSBzcGFjZSBjb21wYXJpbmcgdG8gdGhlaXIgb3JpZ2luYWwgc2l6ZS4gRWFjaCBi bG9jayBpcw0KPj4+PiBhZGRyZXNzZWQgdXNpbmcgb3JpZ2luYWwgZGF0YSBvZmZzZXQgKCBBS0Eg J2xvZ2ljYWwgb2Zmc2V0JyBhYm92ZSApLg0KPj4+PiBBZnRlciBjb21wcmVzc2lvbiBpcyBhcHBs aWVkIGVhY2ggYmxvY2sgaXMgd3JpdHRlbiB1c2luZyB0aGUgZXhpc3RpbmcNCj4+Pj4gYmx1ZXN0 b3JlIGluZnJhLiBJbiBmYWN0IHNpbmdsZSBvcmlnaW5hbCB3cml0ZSByZXF1ZXN0IG1heSBhZmZl Y3QNCj4+Pj4gbXVsdGlwbGUgYmxvY2tzIHRodXMgaXQgdHJhbnNmb3JtcyBpbnRvIG11bHRpcGxl IHN1Yi13cml0ZSByZXF1ZXN0cy4NCj4+Pj4gQmxvY2sgbG9naWNhbCBvZmZzZXQsIGNvbXByZXNz ZWQgYmxvY2sgZGF0YSBhbmQgY29tcHJlc3NlZCBkYXRhIGxlbmd0aCBhcmUgdGhlIHBhcmFtZXRl cnMgZm9yIGluamVjdGVkIHN1Yi13cml0ZSByZXF1ZXN0cy4NCj4+Pj4gQXMgYSByZXN1bHQgc3Rv cmVkIG9iamVjdCBjb250ZW50Og0KPj4+PiBhKSBIYXMgZ2Fwcw0KPj4+PiBiKSBVc2VzIGxlc3Mg c3BhY2UgaWYgY29tcHJlc3Npb24gd2FzIGJlbmVmaWNpYWwgZW5vdWdoLg0KPj4+Pg0KPj4+PiBP dmVyd3JpdGUgcmVxdWVzdCBoYW5kbGluZyBpcyBwcmV0dHkgc2ltcGxlLiBXcml0ZSByZXF1ZXN0 IGRhdGEgaXMNCj4+Pj4gc3BsaXR0ZWQgaW50byBmdWxseSBhbmQgcGFydGlhbGx5IG92ZXJsYXBw aW5nIGJsb2Nrcy4gRnVsbHkNCj4+Pj4gb3ZlcmxhcHBpbmcgYmxvY2tzIGFyZSBjb21wcmVzc2Vk IGFuZCB3cml0dGVuIHRvIHRoZSBzdG9yZSAoZ2l2ZW4gdGhlDQo+Pj4+IGV4dGVuZGVkIHdyaXRl IGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJlbG93KS4gRm9yIHBhcnRpYWxseQ0KPj4+PiBvdmVy d2xhcHBpbmcgYmxvY2tzICggbm8gbW9yZSB0aGFuIDIgb2YgdGhlbQ0KPj4+PiAtIGhlYWQgYW5k IHRhaWwgaW4gZ2VuZXJhbCBjYXNlKSAgd2UgbmVlZCB0byByZXRyaWV2ZSBhbHJlYWR5IHN0b3Jl ZA0KPj4+PiBibG9ja3MsIGRlY29tcHJlc3MgdGhlbSwgbWVyZ2UgdGhlIGV4aXN0aW5nIGFuZCBy ZWNlaXZlZCBkYXRhIGludG8gYQ0KPj4+PiBibG9jaywgY29tcHJlc3MgaXQgYW5kIHNhdmUgdG8g dGhlIHN0b3JlIHVzaW5nIG5ldyBzaXplLg0KPj4+PiBUaGUgdHJpY2t5IHRoaW5nIGZvciBhbnkg d3JpdHRlbiBibG9jayBpcyB0aGF0IGl0IGNhbiBiZSBib3RoIGxvbmdlcg0KPj4+PiBhbmQgc2hv cnRlciB0aGFuIHByZXZpb3VzbHkgc3RvcmVkIG9uZS4gIEhvd2V2ZXIgaXQgYWx3YXlzIGhhcyB1 cHBlcg0KPj4+PiBsaW1pdA0KPj4+PiAoTUFYX0JMT0NLX1NJWkUpIHNpbmNlIHdlIGNhbiBvbWl0 IGNvbXByZXNzaW9uIGFuZCB1c2Ugb3JpZ2luYWwgYmxvY2sNCj4+Pj4gaWYgY29tcHJlc3Npb24g cmF0aW8gaXMgcG9vci4gVGh1cyBjb3JyZXNwb25kaW5nIGJsdWVzdG9yZSBleHRlbnQgZm9yDQo+ Pj4+IHRoaXMgYmxvY2sgaXMgbGltaXRlZCB0b28gYW5kIGV4aXN0aW5nIGJsdWVzdG9yZSBtYXBw aW5nIGRvZXNuJ3QNCj4+Pj4gc3VmZmVyOiBvZmZzZXRzIGFyZSBwZXJtYW5lbnQgYW5kIGFyZSBl cXVhbCB0byBvcmlnaW5hbGx5IG9uZXMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4NCj4+Pj4gVGhl IG9ubHkgZXh0ZW5zaW9uIHJlcXVpcmVkIGZvciBibHVlc3RvcmUgaW50ZXJmYWNlIGlzIHRvIHBy b3ZpZGUgYW4NCj4+Pj4gYWJpbGl0eSB0byByZW1vdmUgZXhpc3RpbmcgZXh0ZW50cyggc3BlY2lm aWVkIGJ5IGxvZ2ljYWwgb2Zmc2V0LA0KPj4+PiBzaXplKS4gSW4gb3RoZXIgd29yZHMgd2UgbmVl ZCB3cml0ZSByZXF1ZXN0IHNlbWFudGljcyBleHRlbnNpb24gKA0KPj4+PiByYXRoZXIgYnkgaW50 cm9kdWNpbmcgYW4gYWRkaXRpb25hbCBleHRlbmRlZCB3cml0ZSBtZXRob2QpLiBDdXJyZW50bHkN Cj4+Pj4gb3ZlcndyaXRpbmcgcmVxdWVzdCBjYW4gZWl0aGVyIGluY3JlYXNlIGFsbG9jYXRlZCBz cGFjZSBvciBsZWF2ZSBpdA0KPj4+PiB1bmFmZmVjdGVkIG9ubHkuIEFuZCBpdCBjYW4gaGF2ZSBh cmJpdHJhcnkgb2Zmc2V0LHNpemUgcGFyYW1ldGVycw0KPj4+PiBwYWlyLiBFeHRlbmRlZCBvbmUg c2hvdWxkIGJlIGFibGUgdG8gc3F1ZWV6ZSBzdG9yZSBzcGFjZSAoIGUuZy4gYnkNCj4+Pj4gcmVt b3ZpbmcgZXhpc3RpbmcgZXh0ZW50cyBmb3IgYSBibG9jayBhbmQgYWxsb2NhdGluZyByZWR1Y2Vk IHNldCBvZg0KPj4+PiBuZXcgb25lcykgYXMgd2VsbC4gQW5kIGV4dGVuZGVkIHdyaXRlIHNob3Vs ZCBiZSBhcHBsaWVkIHRvIGEgc3BlY2lmaWMNCj4+Pj4gYmxvY2sgb25seSwgaS5lLiBsb2dpY2Fs IG9mZnNldCB0byBiZSBhbGlnbmVkIHdpdGggYmxvY2sgc3RhcnQgb2Zmc2V0DQo+Pj4+IGFuZCBz aXplIGxpbWl0ZWQgdG8gTUFYX0JMT0NLX1NJWkUuIEl0IHNlZW1zIHRoaXMgaXMgcHJldHR5IHNp bXBsZSB0bw0KPj4+PiBhZGQgLSBtb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBleHRlbnQg YXBwZW5kL3JlbW92YWwgaWYgYWxyZWFkeSBwcmVzZW50Lg0KPj4+Pg0KPj4+PiBUbyBwcm92aWRl IHJlYWRpbmcgYW5kIChvdmVyKXdyaXRpbmcgY29tcHJlc3Npb24gZW5naW5lIG5lZWRzIHRvDQo+ Pj4+IHRyYWNrIGFkZGl0aW9uYWwgYmxvY2sgbWFwcGluZzoNCj4+Pj4gQmxvY2sgTWFwDQo+Pj4+ IHsNCj4+Pj4gPCBsb2dpY2FsIG9mZnNldCAwIC0+IGNvbXByZXNzaW9uIG1ldGhvZCwgY29tcHJl c3NlZCBibG9jayAwIHNpemUgPg0KPj4+PiAuLi4NCj4+Pj4gPCBsb2dpY2FsIG9mZnNldCBOIC0+ IGNvbXByZXNzaW9uIG1ldGhvZCwgY29tcHJlc3NlZCBibG9jayBOIHNpemUgPiB9DQo+Pj4+IFBs ZWFzZSBub3RlIHRoYXQgZGVzcGl0ZSB0aGUgc2ltaWxhcml0eSB3aXRoIHRoZSBvcmlnaW5hbCBi bHVlc3RvcmUNCj4+Pj4gZXh0ZW50IG1hcCB0aGUgZGlmZmVyZW5jZSBpcyBpbiByZWNvcmQgZ3Jh bnVsYXJpdHk6IDFNYiB2cyA2NEtiLiBUaHVzDQo+Pj4+IGVhY2ggYmxvY2sgbWFwcGluZyByZWNv cmQgbWlnaHQgaGF2ZSBtdWx0aXBsZSBjb3JyZXNwb25kaW5nIGV4dGVudCBtYXBwaW5nIHJlY29y ZHMuDQo+Pj4+DQo+Pj4+IEJlbG93IGlzIGEgc2FtcGxlIG9mIG1hcHBpbmdzIHRyYW5zZm9ybSBm b3IgYSBwYWlyIG9mIG92ZXJ3cml0ZXMuDQo+Pj4+IDEpIE9yaWdpbmFsIG1hcHBpbmcgKCAzIE1i IHdlcmUgd3JpdHRlbiBiZWZvcmUsIGNvbXByZXNzIHJhdGlvIDIgZm9yDQo+Pj4+IGVhY2gNCj4+ Pj4gYmxvY2spDQo+Pj4+IEJsb2NrIE1hcA0KPj4+PiB7DQo+Pj4+ICAgIDAgLT4gemxpYiwgNTEy S2INCj4+Pj4gICAgMU1iIC0+IHpsaWIsIDUxMktiDQo+Pj4+ICAgIDJNYiAtPiB6bGliLCA1MTJL Yg0KPj4+PiB9DQo+Pj4+IEV4dGVudCBNYXANCj4+Pj4gew0KPj4+PiAgICAwIC0+IDAsIDUxMkti DQo+Pj4+ICAgIDFNYiAtPiA1MTJLYiwgNTEyS2INCj4+Pj4gICAgMk1iIC0+IDFNYiwgNTEyS2IN Cj4+Pj4gfQ0KPj4+PiAxLjVNYiBhbGxvY2F0ZWQgWyAwLCAxLjUgTWJdIHJhbmdlICkNCj4+Pj4N Cj4+Pj4gMSkgUmVzdWx0IG1hcHBpbmcgKCBhZnRlciBvdmVyd3JpdGluZyAxTWIgZGF0YSBhdCA1 MTIgS2Igb2Zmc2V0LA0KPj4+PiBjb21wcmVzcyByYXRpbyAxIGZvciBib3RoIGFmZmVjdGVkIGJs b2NrcykgQmxvY2sgTWFwIHsNCj4+Pj4gICAgMCAtPiBub25lLCAxTWINCj4+Pj4gICAgMU1iIC0+ IG5vbmUsIDFNYg0KPj4+PiAgICAyTWIgLT4gemxpYiwgNTEyS2INCj4+Pj4gfQ0KPj4+PiBFeHRl bnQgTWFwDQo+Pj4+IHsNCj4+Pj4gICAgMCAtPiAxLjVNYiwgMU1iDQo+Pj4+ICAgIDFNYiAtPiAy LjVNYiwgMU1iDQo+Pj4+ICAgIDJNYiAtPiAxTWIsIDUxMktiDQo+Pj4+IH0NCj4+Pj4gMi41TWIg YWxsb2NhdGVkICggWzFNYiwgMy41IE1iXSByYW5nZSApDQo+Pj4+DQo+Pj4+IDIpIFJlc3VsdCBt YXBwaW5nICggYWZ0ZXIgKG92ZXIpd3JpdGluZyAzTWIgZGF0YSBhdCAxTWIgb2Zmc2V0LA0KPj4+ PiBjb21wcmVzcyByYXRpbyA0IGZvciBhbGwgYWZmZWN0ZWQgYmxvY2tzKSBCbG9jayBNYXAgew0K Pj4+PiAgICAwIC0+IG5vbmUsIDFNYg0KPj4+PiAgICAxTWIgLT4gemxpYiwgMjU2S2INCj4+Pj4g ICAgMk1iIC0+IHpsaWIsIDI1NktiDQo+Pj4+ICAgIDNNYiAtPiB6bGliLCAyNTZLYg0KPj4+PiB9 DQo+Pj4+IEV4dGVudCBNYXANCj4+Pj4gew0KPj4+PiAgICAwIC0+IDEuNU1iLCAxTWINCj4+Pj4g ICAgMU1iIC0+IDBNYiwgMjU2S2INCj4+Pj4gICAgMk1iIC0+IDAuMjVNYiwgMjU2S2INCj4+Pj4g ICAgM01iIC0+IDAuNU1iLCAyNTZLYg0KPj4+PiB9DQo+Pj4+IDEuNzVNYiBhbGxvY2F0ZWQgKCAg WzBNYi0wLjc1TWJdIFsxLjUgTWIsIDIuNSBNYiApDQo+Pj4+DQo+Pj4gVGhhbmtzIGZvciBJZ29y ZSENCj4+Pg0KPj4+IE1heWJlIEknbSBtaXNzaW5nIHNvbWV0aGluZywgaXMgaXQgY29tcHJlc3Nl ZCBpbmxpbmUgbm90IG9mZmxpbmU/DQo+PiBUaGF0J3MgYWJvdXQgaW5saW5lIGNvbXByZXNzaW9u Lg0KPj4+IElmIHNvLCBJIGd1ZXNzIHdlIG5lZWQgdG8gcHJvdmlkZSB3aXRoIG1vcmUgZmxleGli bGUgY29udHJvbHMgdG8NCj4+PiB1cHBlciwgbGlrZSBleHBsaWNhdGUgY29tcHJlc3Npb24gZmxh ZyBvciBjb21wcmVzc2lvbiB1bml0Lg0KPj4gWWVzIEkgYWdyZWUuIFdlIG5lZWQgYSBzb3J0IG9m IGNvbnRyb2wgZm9yIGNvbXByZXNzaW9uIC0gb24gcGVyIG9iamVjdCBvciBwZXIgcG9vbCBiYXNp cy4uLg0KPj4gQnV0IGF0IHRoZSBvdmVydmlldyBhYm92ZSBJIHdhcyBtb3JlIGNvbmNlcm5lZCBh Ym91dCBhbGdvcml0aG1pYyBhc3BlY3QgaS5lLiBob3cgdG8gaW1wbGVtZW50IHJhbmRvbSByZWFk L3dyaXRlIGhhbmRsaW5nIGZvciBjb21wcmVzc2VkIG9iamVjdHMuDQo+PiBDb21wcmVzc2lvbiBt YW5hZ2VtZW50IGZyb20gdGhlIHVzZXIgc2lkZSBjYW4gYmUgY29uc2lkZXJlZCBhIGJpdCBsYXRl ci4NCj4+DQo+Pj4+IEFueSBjb21tZW50cy9zdWdnZXN0aW9ucyBhcmUgaGlnaGx5IGFwcHJlY2lh dGVkLg0KPj4+Pg0KPj4+PiBLaW5kIHJlZ2FyZHMsDQo+Pj4+IElnb3IuDQo+Pj4+DQo+Pj4+DQo+ Pj4+DQo+Pj4+DQo+Pj4+DQo+Pj4+IC0tDQo+Pj4+IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBs aXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBjZXBoLWRldmVsIg0KPj4+PiBpbiB0aGUg Ym9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZyBNb3JlIG1ham9y ZG9tbw0KPj4+PiBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZv Lmh0bWwNCj4+IFRoYW5rcywNCj4+IElnb3INCj4+IC0tDQo+PiBUbyB1bnN1YnNjcmliZSBmcm9t IHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgY2VwaC1kZXZlbCIgaW4gdGhl IGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgTW9yZSBtYWpv cmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1s DQo+PiBQTEVBU0UgTk9URTogVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGVsZWN0 cm9uaWMgbWFpbCBtZXNzYWdlIGlzIGludGVuZGVkIG9ubHkgZm9yIHRoZSB1c2Ugb2YgdGhlIGRl c2lnbmF0ZWQgcmVjaXBpZW50KHMpIG5hbWVkIGFib3ZlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMg bWVzc2FnZSBpcyBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBoZXJlYnkgbm90 aWZpZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIG1lc3NhZ2UgaW4gZXJyb3IgYW5kIHRo YXQgYW55IHJldmlldywgZGlzc2VtaW5hdGlvbiwgZGlzdHJpYnV0aW9uLCBvciBjb3B5aW5nIG9m IHRoaXMgbWVzc2FnZSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBJZiB5b3UgaGF2ZSByZWNlaXZl ZCB0aGlzIGNvbW11bmljYXRpb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBi eSB0ZWxlcGhvbmUgb3IgZS1tYWlsIChhcyBzaG93biBhYm92ZSkgaW1tZWRpYXRlbHkgYW5kIGRl c3Ryb3kgYW55IGFuZCBhbGwgY29waWVzIG9mIHRoaXMgbWVzc2FnZSBpbiB5b3VyIHBvc3Nlc3Np b24gKHdoZXRoZXIgaGFyZCBjb3BpZXMgb3IgZWxlY3Ryb25pY2FsbHkgc3RvcmVkIGNvcGllcyku DQo+PiBOPz8/Pz9yPz95Pz8/Pz8/WD8/x6d2Pz8/Kd66ey5uPz8/Pz96P116Pz8/P2F5Px3Kh9qZ Pz9qID8/Zj8/P2g/Pz8/Px4/dz8/Pw0KPz8/ajordj8/P3c/Pz8/Pz8/PyA/Pz8/elorPz8/Pz8/ P2oiPz8/P2kNCg0K