From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: Re: [PATCH 0/1] drm/xen-zcopy: Add Xen zero-copy helper DRM driver Date: Wed, 18 Apr 2018 10:01:48 -0700 Message-ID: <20180418170148.GB20588__23002.9921433472$1524070968$gmane$org@downor-Z87X-UD5H> References: <20180329131931.29957-1-andr2000@gmail.com> <5d8fec7f-956c-378f-be90-f45029385740@gmail.com> <20180416192905.GA18096@downor-Z87X-UD5H> <20180417075928.GT31310@phenom.ffwll.local> <20180417205744.GA15930@downor-Z87X-UD5H> <41487acb-a67a-8933-d0c3-702c19b0938e@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1f8qUk-0003F9-Lg for xen-devel@lists.xenproject.org; Wed, 18 Apr 2018 17:03:46 +0000 Content-Disposition: inline In-Reply-To: <41487acb-a67a-8933-d0c3-702c19b0938e@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, Artem Mygaiev , airlied@linux.ie, "Oleksandr_Andrushchenko@epam.com" , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, "Potrola, MateuszX" , xen-devel@lists.xenproject.org, daniel.vetter@intel.com, boris.ostrovsky@oracle.com, Matt Roper List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBBcHIgMTgsIDIwMTggYXQgMDk6Mzg6MzlBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gT24gMDQvMTcvMjAxOCAxMTo1NyBQTSwgRG9uZ3dvbiBLaW0gd3Jv dGU6Cj4gPk9uIFR1ZSwgQXByIDE3LCAyMDE4IGF0IDA5OjU5OjI4QU0gKzAyMDAsIERhbmllbCBW ZXR0ZXIgd3JvdGU6Cj4gPj5PbiBNb24sIEFwciAxNiwgMjAxOCBhdCAxMjoyOTowNVBNIC0wNzAw LCBEb25nd29uIEtpbSB3cm90ZToKPiA+Pj5ZZWFoLCBJIGRlZmluaXRlbHkgYWdyZWUgb24gdGhl IGlkZWEgb2YgZXhwYW5kaW5nIHRoZSB1c2UgY2FzZSB0byB0aGUKPiA+Pj5nZW5lcmFsIGRvbWFp biB3aGVyZSBkbWFidWYgc2hhcmluZyBpcyB1c2VkLiBIb3dldmVyLCB3aGF0IHlvdSBhcmUKPiA+ Pj50YXJnZXR0aW5nIHdpdGggcHJvcG9zZWQgY2hhbmdlcyBpcyBpZGVudGljYWwgdG8gdGhlIGNv cmUgZGVzaWduIG9mCj4gPj4+aHlwZXJfZG1hYnVmLgo+ID4+Pgo+ID4+Pk9uIHRvcCBvZiB0aGlz IGJhc2ljIGZ1bmN0aW9uYWxpdGllcywgaHlwZXJfZG1hYnVmIGhhcyBkcml2ZXIgbGV2ZWwKPiA+ Pj5pbnRlci1kb21haW4gY29tbXVuaWNhdGlvbiwgdGhhdCBpcyBuZWVkZWQgZm9yIGRtYS1idWYg cmVtb3RlIHRyYWNraW5nCj4gPj4+KG5vIGZlbmNlIGZvcndhcmRpbmcgdGhvdWdoKSwgZXZlbnQg dHJpZ2dlcmluZyBhbmQgZXZlbnQgaGFuZGxpbmcsIGV4dHJhCj4gPj4+bWV0YSBkYXRhIGV4Y2hh bmdlIGFuZCBoeXBlcl9kbWFidWZfaWQgdGhhdCByZXByZXNlbnRzIGdyZWZzCj4gPj4+KGdyZWZz IGFyZSBzaGFyZWQgaW1wbGljaXRseSBvbiBkcml2ZXIgbGV2ZWwpCj4gPj5UaGlzIHJlYWxseSBp c24ndCBhIHBvc2l0aXZlIGRlc2lnbiBhc3BlY3Qgb2YgaHlwZXJkbWFidWYgaW1vLiBUaGUgY29y ZQo+ID4+Y29kZSBpbiB4ZW4temNvcHkgKGlnbm9yaW5nIHRoZSBpb2N0bCBzaWRlLCB3aGljaCB3 aWxsIGJlIGNsZWFuZWQgdXApIGlzCj4gPj52ZXJ5IHNpbXBsZSAmIGNsZWFuLgo+ID4+Cj4gPj5J ZiB0aGVyZSdzIGEgY2xlYXIgbmVlZCBsYXRlciBvbiB3ZSBjYW4gZXh0ZW5kIHRoYXQuIEJ1dCBm b3Igbm93IHhlbi16Y29weQo+ID4+c2VlbXMgdG8gY292ZXIgdGhlIGJhc2ljIHVzZS1jYXNlIG5l ZWRzLCBzbyBnZXRzIHRoZSBqb2IgZG9uZS4KPiA+Pgo+ID4+PkFsc28gaXQgaXMgZGVzaWduZWQg d2l0aCBmcm9udGVuZCAoY29tbW9uIGNvcmUgZnJhbWV3b3JrKSArIGJhY2tlbmQKPiA+Pj4oaHlw ZXIgdmlzb3Igc3BlY2lmaWMgY29tbSBhbmQgbWVtb3J5IHNoYXJpbmcpIHN0cnVjdHVyZSBmb3Ig cG9ydGFiaWxpdHkuCj4gPj4+V2UganVzdCBjYW4ndCBsaW1pdCB0aGlzIGZlYXR1cmUgdG8gWGVu IGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlIHNhbWUKPiA+Pj51YXBpcyBub3Qgb25seSBmb3Ig WGVuIGJ1dCBhbHNvIG90aGVyIGFwcGxpY2FibGUgaHlwZXJ2aXNvciwgbGlrZSBBQ09STi4KPiA+ PlNlZSB0aGUgZGlzY3Vzc2lvbiBhcm91bmQgdWRtYWJ1ZiBhbmQgdGhlIG5lZWRzIGZvciBrdm0u IEkgdGhpbmsgdHJ5aW5nIHRvCj4gPj5tYWtlIGFuIGlvY3RsL3VhcGkgdGhhdCB3b3JrcyBmb3Ig bXVsdGlwbGUgaHlwZXJ2aXNvcnMgaXMgbWlzZ3VpZGVkIC0gaXQKPiA+Pmxpa2VseSB3b24ndCB3 b3JrLgo+ID4+Cj4gPj5PbiB0b3Agb2YgdGhhdCB0aGUgMm5kIGh5cGVydmlzb3IgeW91J3JlIGFp bWluZyB0byBzdXBwb3J0IGlzIEFDUk4uIFRoYXQncwo+ID4+bm90IGV2ZW4gdXBzdHJlYW0geWV0 LCBub3IgaGF2ZSBJIHNlZW4gYW55IHBhdGNoZXMgcHJvcG9zaW5nIHRvIGxhbmQgbGludXgKPiA+ PnN1cHBvcnQgZm9yIEFDUk4uIFNpbmNlIGl0J3Mgbm90IHVwc3RyZWFtLCBpdCBkb2Vzbid0IHJl YWxseSBtYXR0ZXIgZm9yCj4gPj51cHN0cmVhbSBjb25zaWRlcmF0aW9uLiBJJ20gZG91YnRpbmcg dGhhdCBBQ1JOIHdpbGwgdXNlIHRoZSBzYW1lIGdyYW50Cj4gPj5yZWZlcmVuY2VzIGFzIHhlbiwg c28gdGhlIHNhbWUgdWFwaSB3b24ndCB3b3JrIG9uIEFDUk4gYXMgb24gWGVuIGFueXdheS4KPiA+ WWVhaCwgQUNSTiBkb2Vzbid0IGhhdmUgZ3JhbnQtdGFibGUuIE9ubHkgWGVuIHN1cHBvcnRzIGl0 LiBCdXQgdGhhdCBpcyB3aHkKPiA+aHlwZXJfZG1hYnVmIGhhcyBiZWVuIGFyY2hpdGVjdHVyZWQg d2l0aCB0aGUgY29uY2VwdCBvZiBiYWNrZW5kLgo+ID5JZiB5b3UgbG9vayBhdCB0aGUgc3RydWN0 dXJlIG9mIGJhY2tlbmQsIHlvdSB3aWxsIGZpbmQgdGhhdAo+ID5iYWNrZW5kIGlzIGp1c3QgYSBz ZXQgb2Ygc3RhbmRhcmQgZnVuY3Rpb24gY2FsbHMgYXMgc2hvd24gaGVyZToKPiA+Cj4gPnN0cnVj dCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgewo+ID4gICAgICAgICAvKiBiYWNrZW5kIGluaXRpYWxp emF0aW9uIHJvdXRpbmUgKG9wdGlvbmFsKSAqLwo+ID4gICAgICAgICBpbnQgKCppbml0KSh2b2lk KTsKPiA+Cj4gPiAgICAgICAgIC8qIGJhY2tlbmQgY2xlYW51cCByb3V0aW5lIChvcHRpb25hbCkg Ki8KPiA+ICAgICAgICAgaW50ICgqY2xlYW51cCkodm9pZCk7Cj4gPgo+ID4gICAgICAgICAvKiBy ZXRyZWl2aW5nIGlkIG9mIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5lICovCj4gPiAgICAgICAgIGlu dCAoKmdldF92bV9pZCkodm9pZCk7Cj4gPgo+ID4gICAgICAgICAvKiBnZXQgcGFnZXMgc2hhcmVk IHZpYSBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZCAqLwo+ID4gICAgICAgICBpbnQgKCpzaGFy ZV9wYWdlcykoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHZtX2lkLAo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IG5lbnRzLCB2b2lkICoqcmVmc19pbmZvKTsKPiA+Cj4gPiAgICAg ICAgIC8qIG1ha2Ugc2hhcmVkIHBhZ2VzIHVuc2hhcmVkIHZpYSBoeXBlcnZpc29yIHNwZWNpZmlj IG1ldGhvZCAqLwo+ID4gICAgICAgICBpbnQgKCp1bnNoYXJlX3BhZ2VzKSh2b2lkICoqcmVmc19p bmZvLCBpbnQgbmVudHMpOwo+ID4KPiA+ICAgICAgICAgLyogbWFwIHJlbW90ZWx5IHNoYXJlZCBw YWdlcyBvbiBpbXBvcnRlcidzIHNpZGUgdmlhCj4gPiAgICAgICAgICAqIGh5cGVydmlzb3Itc3Bl Y2lmaWMgbWV0aG9kCj4gPiAgICAgICAgICAqLwo+ID4gICAgICAgICBzdHJ1Y3QgcGFnZSAqKiAo Km1hcF9zaGFyZWRfcGFnZXMpKHVuc2lnbmVkIGxvbmcgcmVmLCBpbnQgdm1faWQsCj4gPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5lbnRzLCB2b2lkICoq cmVmc19pbmZvKTsKPiA+Cj4gPiAgICAgICAgIC8qIHVubWFwIGFuZCBmcmVlIHNoYXJlZCBwYWdl cyBvbiBpbXBvcnRlcidzIHNpZGUgdmlhCj4gPiAgICAgICAgICAqIGh5cGVydmlzb3Itc3BlY2lm aWMgbWV0aG9kCj4gPiAgICAgICAgICAqLwo+ID4gICAgICAgICBpbnQgKCp1bm1hcF9zaGFyZWRf cGFnZXMpKHZvaWQgKipyZWZzX2luZm8sIGludCBuZW50cyk7Cj4gPgo+ID4gICAgICAgICAvKiBp bml0aWFsaXplIGNvbW11bmljYXRpb24gZW52aXJvbm1lbnQgKi8KPiA+ICAgICAgICAgaW50ICgq aW5pdF9jb21tX2Vudikodm9pZCk7Cj4gPgo+ID4gICAgICAgICB2b2lkICgqZGVzdHJveV9jb21t KSh2b2lkKTsKPiA+Cj4gPiAgICAgICAgIC8qIHVwc3RyZWFtIGNoIHNldHVwIChyZWNlaXZpbmcg YW5kIHJlc3BvbmRpbmcpICovCj4gPiAgICAgICAgIGludCAoKmluaXRfcnhfY2gpKGludCB2bV9p ZCk7Cj4gPgo+ID4gICAgICAgICAvKiBkb3duc3RyZWFtIGNoIHNldHVwICh0cmFuc21pdHRpbmcg YW5kIHBhcnNpbmcgcmVzcG9uc2VzKSAqLwo+ID4gICAgICAgICBpbnQgKCppbml0X3R4X2NoKShp bnQgdm1faWQpOwo+ID4KPiA+ICAgICAgICAgaW50ICgqc2VuZF9yZXEpKGludCB2bV9pZCwgc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwgaW50IHdhaXQpOwo+ID59Owo+ID4KPiA+QWxsIG9m IHRoZXNlIGNhbiBiZSBtYXBwZWQgd2l0aCBhbnkgaHlwZXJ2aXNvciBzcGVjaWZpYyBpbXBsZW1l bnRhdGlvbi4KPiA+V2UgZGVzaWduZWQgYmFja2VuZCBpbXBsZW1lbnRhdGlvbiBmb3IgWGVuIHVz aW5nIGdyYW50LXRhYmxlLCBYZW4gZXZlbnQKPiA+YW5kIHJpbmcgYnVmZmVyIGNvbW11bmljYXRp b24uIEZvciBBQ1JOLCB3ZSBoYXZlIGFub3RoZXIgYmFja2VuZCB1c2luZyBWaXJ0LUlPCj4gPmZv ciBib3RoIG1lbW9yeSBzaGFyaW5nIGFuZCBjb21tdW5pY2F0aW9uLgo+ID4KPiA+V2UgdHJpZWQg dG8gZGVmaW5lIHRoaXMgc3RydWN0dXJlIG9mIGJhY2tlbmQgdG8gbWFrZSBpdCBnZW5lcmFsIGVu b3VnaCAob3IKPiA+aXQgY2FuIGJlIGV2ZW4gbW9kaWZpZWQgb3IgZXh0ZW5kZWQgdG8gc3VwcG9y dCBtb3JlIGNhc2VzLikgc28gdGhhdCBpdCBjYW4KPiA+Zml0IHRvIG90aGVyIGh5cGVydmlzb3Ig Y2FzZXMuIE9ubHkgcmVxdWlyZW1lbnRzL2V4cGVjdGF0aW9uIG9uIHRoZSBoeXBlcnZpc29yCj4g PmFyZSBwYWdlLWxldmVsIG1lbW9yeSBzaGFyaW5nIGFuZCBpbnRlci1kb21haW4gY29tbXVuaWNh dGlvbiwgd2hpY2ggSSB0aGluawo+ID5hcmUgc3RhbmRhcmQgZmVhdHVyZXMgb2YgbW9kZXJuIGh5 cGVydmlzb3IuCj4gPgo+ID5BbmQgcGxlYXNlIHJldmlldyBjb21tb24gVUFQSXMgdGhhdCBoeXBl cl9kbWFidWYgYW5kIHhlbi16Y29weSBzdXBwb3J0cy4gVGhleQo+ID5hcmUgdmVyeSBnZW5lcmFs LiBPbmUgaXMgZ2V0dGluZyBGRCAoZG1hYnVmKSBhbmQgZ2V0IHRob3NlIHNoYXJlZC4gVGhlIG90 aGVyCj4gPmlzIGdlbmVyYXRpbmcgZG1hYnVmIGZyb20gZ2xvYmFsIGhhbmRsZSAoc2VjdXJlIGhh bmRsZSBoaWRpbmcgZ3JlZiBiZWhpbmQgaXQpLgo+ID5PbiB0b3Agb2YgdGhpcywgaHlwZXJfZG1h YnVmIGhhcyAidW5zaGFyZSIgYW5kICJxdWVyeSIgd2hpY2ggYXJlIGFsc28gdXNlZnVsCj4gPmZv ciBhbnkgY2FzZXMuCj4gPgo+ID5TbyBJIGRvbid0IGtub3cgd2h5IHdlIHdvdWxkbid0IHdhbnQg dG8gdHJ5IHRvIG1ha2UgdGhlc2Ugc3RhbmRhcmQgaW4gbW9zdCBvZgo+ID5oeXBlcnZpc29yIGNh c2VzIGluc3RlYWQgb2YgbGltaXRpbmcgaXQgdG8gY2VydGFpbiBoeXBlcnZpc29yIGxpa2UgWGVu Lgo+ID5Gcm9udGVuZC1iYWNrZW5kIHN0cnVjdHJlIGlzIG9wdGltYWwgZm9yIHRoaXMgSSB0aGlu ay4KPiA+Cj4gPj4+U28gSSBhbSB3b25kZXJpbmcgd2UgY2FuIHN0YXJ0IHdpdGggdGhpcyBoeXBl cl9kbWFidWYgdGhlbiBtb2RpZnkgaXQgZm9yCj4gPj4+eW91ciB1c2UtY2FzZSBpZiBuZWVkZWQg YW5kIHBvbGlzaCBhbmQgZml4IGFueSBnbGl0Y2hlcyBpZiB3ZSB3YW50IHRvCj4gPj4+dG8gdXNl IHRoaXMgZm9yIGFsbCBnZW5lcmFsIGRtYS1idWYgdXNlY2FzZXMuCj4gPj5JbW8geGVuLXpjb3B5 IGlzIGEgbXVjaCBtb3JlIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVwc3RyZWFtLCB3 aGljaAo+ID4+Y2FuIHRoZW4gYmUgZXh0ZW5kZWQgKGlmIHJlYWxseSBwcm92ZW4gdG8gYmUgbmVj ZXNzYXJ5KS4KPiA+Pgo+ID4+PkFsc28sIEkgc3RpbGwgaGF2ZSBvbmUgdW5yZXNvbHZlZCBxdWVz dGlvbiByZWdhcmRpbmcgdGhlIGV4cG9ydC9pbXBvcnQgZmxvdwo+ID4+PmluIGJvdGggb2YgaHlw ZXJfZG1hYnVmIGFuZCB4ZW4temNvcHkuCj4gPj4+Cj4gPj4+QGRhbnZldDogV291bGQgdGhpcyBm bG93IChndWVzdDEtPmltcG9ydCBleGlzdGluZyBkbWFidWYtPnNoYXJlIHVuZGVybHlpbmcKPiA+ Pj5wYWdlcy0+Z3Vlc3QyLT5tYXAgc2hhcmVkIHBhZ2VzLT5jcmVhdGUvZXhwb3J0IGRtYWJ1Zikg YmUgYWNjZXB0YWJsZSBub3c/Cj4gPj5JIHRoaW5rIGlmIHlvdSBqdXN0IGxvb2sgYXQgdGhlIHBh Z2VzLCBhbmQgbWFrZSBzdXJlIHlvdSBoYW5kbGUgdGhlCj4gPj5zZ19wYWdlID09IE5VTEwgY2Fz ZSBpdCdzIG9rLWlzaC4gSXQncyBub3QgZ3JlYXQsIGJ1dCBtb3N0bHkgaXQgc2hvdWxkCj4gPj53 b3JrLiBUaGUgcmVhbCB0cm91YmxlIHdpdGggaHlwZXJkbWFidWYgd2FzIHRoZSBmb3J3YXJkaW5n IG9mIGFsbCB0aGVzZQo+ID4+Y2FsbHMsIGluc3RlYWQgb2YganVzdCBwYXNzaW5nIGFyb3VuZCBh IGxpc3Qgb2YgZ3JhbnQgcmVmZXJlbmNlcy4KPiA+SSB0YWxrZWQgdG8gZGFudmV0IGFib3V0IHRo aXMgbGl0dGUgYml0Lgo+ID4KPiA+SSB0aGluayB0aGVyZSB3YXMgc29tZSBtaXN1bmRlcnN0YW5k aW5nIG9uIHRoaXMgImZvcndhcmRpbmciLiBFeHBvcnRpbmcKPiA+YW5kIGltcG9ydGluZyBmbG93 IGluIGh5cGVyX2RtYWJ1ZiBhcmUgYmFzaWNhbGx5IHNhbWUgYXMgeGVuLXpjb3B5J3MuIEkgdGhp bmsKPiA+d2hhdCBtYWRlIGNvbmZ1c2lvbiB3YXMgdGhhdCBpbXBvcnRpbmcgZG9tYWluIG5vdGlm aWVzIGV4cG9ydGluZyBkb21haW4gd2hlbgo+ID50aGVyZSBhcmUgZG1hYnVmIG9wZXJhdGlvbnMg KGxpa2UgYXR0YWNoLCBtYXBwaW5nLCBkZXRhY2ggYW5kIHJlbGVhc2UpIHNvIHRoYXQKPiA+ZXhw b3J0aW5nIGRvbWFpbiBjYW4gdHJhY2sgdGhlIHVzYWdlIG9mIGRtYWJ1ZiBvbiB0aGUgaW1wb3J0 aW5nIGRvbWFpbi4KPiA+Cj4gPkkgZGVzaWduZWQgdGhpcyBmb3Igc29tZSBiYXNpYyB0cmFja2lu Zy4gV2UgbWF5IG5vdCBuZWVkIHRvIG5vdGlmeSBmb3IgZXZlcnkKPiA+ZGlmZmVyZW50IGFjdGl2 aXR5IGJ1dCBpZiBub25lIG9mIHRoZW0gaXMgdGhlcmUsIGV4cG9ydGluZyBkb21haW4gY2FuJ3QK PiA+ZGV0ZXJtaW5lIGlmIGl0IGlzIG9rIHRvIHVuc2hhcmUgdGhlIGJ1ZmZlciBvciB0aGUgb3Jp Z2luYXRvciAobGlrZSBpOTE1KQo+ID5jYW4gZnJlZSB0aGUgb2JqZWN0IGV2ZW4gaWYgaXQncyBi ZWluZyBhY2Nlc3NlZCBpbiBpbXBvcnRpbmcgZG9tYWluLgo+ID4KPiA+QW55d2F5IEkgcmVhbGx5 IGhvcGUgd2UgY2FuIGhhdmUgZW5vdWdoIGRpc2N1c3Npb24gYW5kIHJlc29sdmUgYWxsIGNvbmNl cm5zCj4gPmJlZm9yZSBuYWlsaW5nIGl0IGRvd24uCj4gTGV0IG1lIGV4cGxhaW4gaG93IHRoaXMg d29ya3MgaW4gY2FzZSBvZiBwYXJhLXZpcnR1YWwgZGlzcGxheQo+IHVzZS1jYXNlIHdpdGggeGVu LXpjb3B5Lgo+IAo+IDEuIFRoZXJlIGFyZSA0IGNvbXBvbmVudHMgaW4gdGhlIHN5c3RlbToKPiDC oCAtIGRpc3BsaWYgcHJvdG9jb2wgWzFdCj4gwqAgLSB4ZW4tZnJvbnQgLSBwYXJhLXZpcnR1YWwg RFJNIGRyaXZlciBydW5uaW5nIGluIERvbVUgKEd1ZXN0KSBWTQo+IMKgIC0gYmFja2VuZCAtIHVz ZXItc3BhY2UgYXBwbGljYXRpb24gcnVubmluZyBpbiBEb20wCj4gwqAgLSB4ZW4temNvcHkgLSBE Uk0gKGFzIG9mIG5vdykgaGVscGVyIGRyaXZlciBydW5uaW5nIGluIERvbTAKPiAKPiAyLiBBbGwg dGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBkb21haW5zIGhhcHBlbnMgYmV0d2VlbiB4ZW4tZnJv bnQgYW5kIHRoZQo+IGJhY2tlbmQsIHNvIGl0IGlzIHBvc3NpYmxlIHRvIGltcGxlbWVudCBwYXJh LXZpcnR1YWwgZGlzcGxheSB1c2UtY2FzZQo+IHdpdGhvdXQgeGVuLXpjb3B5IGF0IGFsbCAodGhp cyBpcyB3aHkgaXQgaXMgYSBoZWxwZXIgZHJpdmVyKSwgYnV0IGluIHRoaXMKPiBjYXNlCj4gbWVt b3J5IGNvcHlpbmcgb2NjdXJzICh0aGlzIGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcyBkaXNjdXNz aW9uKS4KPiAKPiAzLiBUbyBiZXR0ZXIgdW5kZXJzdGFuZCBzZWN1cml0eSBpc3N1ZXMgbGV0J3Mg c2VlIHdoYXQgdXNlLWNhc2VzIHdlIGhhdmU6Cj4gCj4gMy4xIHhlbi1mcm9udCBleHBvcnRzIGl0 cyBkbWEtYnVmIChkdW1iKSB0byB0aGUgYmFja2VuZAo+IAo+IEluIHRoaXMgY2FzZSB0aGVyZSBh cmUgbm8gc2VjdXJpdHkgaXNzdWVzIGF0IGFsbCBhcyBEb20wIChiYWNrZW5kIHNpZGUpCj4gd2ls bCB1c2UgRG9tVSdzIHBhZ2VzICh4ZW4tZnJvbnQgc2lkZSkgYW5kIERvbTAgaXMgYSB0cnVzdGVk IGRvbWFpbiwgc28KPiB3ZSBhc3N1bWUgaXQgd29uJ3QgaHVydCBEb21VLiBFdmVuIGlmIERvbVUg ZGllcyBub3RoaW5nIGJhZCBoYXBwZW5zIHRvIERvbTAuCj4gSWYgRG9tVSBtaXNiZWhhdmVzIGl0 IGNhbiBvbmx5IHdyaXRlIHRvIGl0cyBvd24gcGFnZXMgc2hhcmVkIHdpdGggRG9tMCwgYnV0Cj4g c3RpbGwKPiBjYW5ub3QgZ28gYmV5b25kIHRoYXQsIGUuZy4gaXQgY2FuJ3QgYWNjZXNzIERvbTAn cyBtZW1vcnkuCj4gCj4gMy4yIEJhY2tlbmQgZXhwb3J0cyBkbWEtYnVmIHRvIHhlbi1mcm9udAo+ IAo+IEluIHRoaXMgY2FzZSBEb20wIHBhZ2VzIGFyZSBzaGFyZWQgd2l0aCBEb21VLiBBcyBiZWZv cmUsIERvbVUgY2FuIG9ubHkgd3JpdGUKPiB0byB0aGVzZSBwYWdlcywgbm90IGFueSBvdGhlciBw YWdlIGZyb20gRG9tMCwgc28gaXQgY2FuIGJlIHN0aWxsIGNvbnNpZGVyZWQKPiBzYWZlLgo+IEJ1 dCwgdGhlIGZvbGxvd2luZyBtdXN0IGJlIGNvbnNpZGVyZWQgKGhpZ2hsaWdodGVkIGluIHhlbi1m cm9udCdzIEtlcm5lbAo+IGRvY3VtZW50YXRpb24pOgo+IMKgLSBJZiBndWVzdCBkb21haW4gZGll cyB0aGVuIHBhZ2VzL2dyYW50cyByZWNlaXZlZCBmcm9tIHRoZSBiYWNrZW5kIGNhbm5vdAo+IMKg wqAgYmUgY2xhaW1lZCBiYWNrIC0gdGhpbmsgb2YgaXQgYXMgbWVtb3J5IGxvc3QgdG8gRG9tMCAo d29uJ3QgYmUgdXNlZCBmb3IKPiBhbnkKPiDCoMKgIG90aGVyIGd1ZXN0KQo+IMKgLSBNaXNiZWhh dmluZyBndWVzdCBtYXkgc2VuZCB0b28gbWFueSByZXF1ZXN0cyB0byB0aGUgYmFja2VuZCBleGhh dXN0aW5nCj4gwqDCoCBpdHMgZ3JhbnQgcmVmZXJlbmNlcyBhbmQgbWVtb3J5IChjb25zaWRlciB0 aGlzIGZyb20gc2VjdXJpdHkgUE9WKS4gQXMgdGhlCj4gwqDCoCBiYWNrZW5kIHJ1bnMgaW4gdGhl IHRydXN0ZWQgZG9tYWluIHdlIGFsc28gYXNzdW1lIHRoYXQgaXQgaXMgdHJ1c3RlZCBhcwo+IHdl bGwsCj4gwqDCoCBlLmcuIG11c3QgdGFrZSBtZWFzdXJlcyB0byBwcmV2ZW50IEREb1MgYXR0YWNr cy4KPiAKClRoZXJlIGlzIGFub3RoZXIgc2VjdXJpdHkgaXNzdWUgdGhhdCB0aGlzIGRyaXZlciBp dHNlbGYgY2FuIGNhdXNlLiBVc2luZyB0aGUKZ3JhbnQtcmVmZXJlbmNlIGFzIGlzIGlzIG5vdCB2 ZXJ5IHNhZmUgYmVjYXVzZSBpdCdzIGVhc3kgdG8gZ3Vlc3MgKGNvdW50aW5nCm51bWJlciBwcm9i YWJseSkgYW5kIGFueSBhdHRhY2tlcnMgcnVubmluZyBvbiB0aGUgc2FtZSBpbXBvcnRpbmcgZG9t YWluIGNhbgp1c2UgdGhlc2UgcmVmZXJlbmNlcyB0byBtYXAgc2hhcmVkIHBhZ2VzIGFuZCBhY2Nl c3MgdGhlIGRhdGEuIFRoaXMgaXMgd2h5IHdlCmltcGxlbWVudGVkICJoeXBlcl9kbWFidWZfaWQi IHRoYXQgY29udGFpbnMgOTYgYml0IHJhbmRvbSBudW1iZXIgdG8gbWFrZSBpdAphbG1vc3QgaW1w b3NzaWJsZSB0byBndWVzcy4gQWxsIGdyYW50IHJlZmVyZW5jZXMgZm9yIHBhZ2VzIGFyZSBzaGFy ZWQgaW4gdGhlCmRyaXZlciBsZXZlbC4gVGhpcyBpcyBhbm90aGVyIHJlYXNvbiBmb3IgaGF2aW5n IGludGVyLVZNIGNvbW0uCgo+IDQuIHhlbi1mcm9udC9iYWNrZW5kL3hlbi16Y29weSBzeW5jaHJv bml6YXRpb24KPiAKPiA0LjEuIEFzIEkgYWxyZWFkeSBzYWlkIGluIDIpIGFsbCB0aGUgaW50ZXIg Vk0gY29tbXVuaWNhdGlvbiBoYXBwZW5zIGJldHdlZW4KPiB4ZW4tZnJvbnQgYW5kIHRoZSBiYWNr ZW5kLCB4ZW4temNvcHkgaXMgTk9UIGludm9sdmVkIGluIHRoYXQuCgpZZWFoLCB1bmRlcnN0b29k IGJ1dCB0aGlzIGlzIGFsc28gbXkgcG9pbnQuIEJvdGggaHlwZXJfZG1hYnVmIGFuZCB4ZW4temNv cHkKaXMgYSBkcml2ZXIgdGhhdCBleHBhbmRzIGRtYWJ1ZiBzaGFyaW5nIHRvIGludGVyLVZNIGxl dmVsLiBUaGVuIHNob3VsZG4ndCB0aGlzCmRyaXZlciBpdHNlbGYgcHJvdmlkZSBzb21lIHdheSB0 byBzeW5jaHJvbml6ZSBiZXR3ZWVuIHR3byBWTXM/IEkgdGhpbmsgdGhlCmFzc3VtcHRpb24gYmVo aW5kIHRoaXMgaXMgdGhhdCBYZW4gUFYgZGlzcGxheSBpbnRlcmZhY2UgYW5kIGJhY2tlbmQgKHJ1 bm5pbmcKb24gdGhlIHVzZXJzcGFjZSkgYXJlIHVzZWQgdG9nZXRoZXIgd2l0aCB4ZW4temNvcHkg YnV0IHdoYXQgaWYgYW4gdXNlciBzcGFjZQpqdXN0IHdhbnQgdG8gdXNlIHhlbi16Y29weSBzZXBh cmF0ZWx5PyBTaW5jZSBpdCBleHBvc2VzIGlvY3RscywgdGhpcyBpcwpwb3NzaWJsZSB1bmxlc3Mg eW91IGFkZCBzb21lIGRlcGVuZGVuY3kgY29uZmlndXJhdGlvbiB0aGVyZS4KCj4gV2hlbiB4ZW4t ZnJvbnQgd2FudHMgdG8gZGVzdHJveSBhIGRpc3BsYXkgYnVmZmVyIChkdW1iL2RtYS1idWYpIGl0 IGlzc3VlcyBhCj4gWEVORElTUExfT1BfREJVRl9ERVNUUk9ZIGNvbW1hbmQgKG9wcG9zaXRlIHRv IFhFTkRJU1BMX09QX0RCVUZfQ1JFQVRFKS4KPiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIHNv IHhlbi1mcm9udCBleHBlY3RzIHRoYXQgYmFja2VuZCBkb2VzIGZyZWUgdGhlCj4gYnVmZmVyIHBh Z2VzIG9uIHJldHVybi4KCkRvZXMgaXQgbWVhbiBpbXBvcnRpbmcgZG9tYWluIChkb20wIGFzc3Vt aW5nIHdlIGRvIGRvbVUgLT4gZG9tMCBkbWFidWYKZXhwb3J0aW5nKSBtYWtlcyBhIGRlc3Rvcnkg cmVxdWVzdCB0byB0aGUgZXhwb3J0aW5nIFZNPyBCdXQgaXNuJ3QgaXQKdGhlIGRvbVUgdG8gbWFr ZSBzdWNoIGRlY2lzaW9uIHNpbmNlIGl0J3MgdGhlIG93bmVyIG9mIGJ1ZmZlci4KCkFuZCB3aGF0 IGFib3V0IHRoZSBvdGhlciB3YXkgYXJvdW5kPyBGb3IgZXhhbXBsZSwgd2hhdCBoYXBwZW5zIGlm IHRoZQpvcmlnaW5hdG9yIG9mIGJ1ZmZlciAobGlrZSBpOTE1KSBkZWNpZGVzIHRvIGZyZWUgdGhl IG9iamVjdCBiZWhpbmQgZG1hYnVmPwpXb3VsZCBpOTE1IG9yIGV4cG9ydGluZyBzaWRlIG9mIHhl bi16Y29weSBrbm93IHdoZXRoZXIgZG9tMCBjdXJyZW50bHkKdXNlcyB0aGUgZG1hYnVmIG9yIG5v dD8KCkFuZCBhZ2FpbiwgSSB0aGluayB0aGlzIHRyYWNraW5nIHNob3VsZCBiZSBoYW5kbGVkIGlu IHRoZSBkcml2ZXIgaXRzZWxmCmltcGxpY2l0bHkgd2l0aG91dCBhbnkgdXNlcnNwYWNlIGludm9s dmVtZW50IGlmIHdlIHdhbnQgdG8gdGhpcyBkbWFidWYKc2hhcmluZyBleGlzdCBhcyBhIGdlbmVy aWMgZmVhdHVyZS4KCj4gCj4gNC4yLiBCYWNrZW5kLCBvbiBYRU5ESVNQTF9PUF9EQlVGX0RFU1RS T1k6Cj4gwqAgLSBjbG9zZXMgYWxsIGR1bWIgaGFuZGxlcy9mZCdzIG9mIHRoZSBidWZmZXIgYWNj b3JkaW5nIHRvIFszXQo+IMKgIC0gaXNzdWVzIERSTV9JT0NUTF9YRU5fWkNPUFlfRFVNQl9XQUlU X0ZSRUUgSU9DVEwgdG8geGVuLXpjb3B5IHRvIG1ha2UKPiBzdXJlCj4gwqDCoMKgIHRoZSBidWZm ZXIgaXMgZnJlZWQgKHRoaW5rIG9mIGl0IGFzIGl0IHdhaXRzIGZvciBkbWEtYnVmLT5yZWxlYXNl Cj4gY2FsbGJhY2spCj4gwqAgLSByZXBsaWVzIHRvIHhlbi1mcm9udCB0aGF0IHRoZSBidWZmZXIg Y2FuIGJlIGRlc3Ryb3llZC4KPiBUaGlzIHdheSBkZWxldGlvbiBvZiB0aGUgYnVmZmVyIGhhcHBl bnMgc3luY2hyb25vdXNseSBvbiBib3RoIERvbTAgYW5kIERvbVUKPiBzaWRlcy4gSW4gY2FzZSBp ZiBEUk1fSU9DVExfWEVOX1pDT1BZX0RVTUJfV0FJVF9GUkVFIHJldHVybnMgd2l0aCB0aW1lLW91 dAo+IGVycm9yCj4gKEJUVywgd2FpdCB0aW1lIGlzIGEgcGFyYW1ldGVyIG9mIHRoaXMgSU9DVEwp LCBYZW4gd2lsbCBkZWZlciBncmFudAo+IHJlZmVyZW5jZQo+IHJlbW92YWwgYW5kIHdpbGwgcmV0 cnkgbGF0ZXIgdW50aWwgdGhvc2UgYXJlIGZyZWUuCj4gCj4gSG9wZSB0aGlzIGhlbHBzIHVuZGVy c3RhbmQgaG93IGJ1ZmZlcnMgYXJlIHN5bmNocm9ub3VzbHkgZGVsZXRlZCBpbiBjYXNlCj4gb2Yg eGVuLXpjb3B5IHdpdGggYSBzaW5nbGUgcHJvdG9jb2wgY29tbWFuZC4KPiAKPiBJIHRoaW5rIHRo ZSBhYm92ZSBsb2dpYyBjYW4gYWxzbyBiZSByZS11c2VkIGJ5IHRoZSBoeXBlci1kbWFidWYgZHJp dmVyIHdpdGgKPiBzb21lIGFkZGl0aW9uYWwgd29yazoKPiAKPiAxLiB4ZW4temNvcHkgY2FuIGJl IHNwbGl0IGludG8gMiBwYXJ0cyBhbmQgZXh0ZW5kOgo+IDEuMS4gWGVuIGdudGRldiBkcml2ZXIg WzRdLCBbNV0gdG8gYWxsb3cgY3JlYXRpbmcgZG1hLWJ1ZiBmcm9tIGdyZWZzIGFuZAo+IHZpc2Ug dmVyc2EsCj4gaW1wbGVtZW50ICJ3YWl0IiBpb2N0bCAod2FpdCBmb3IgZG1hLWJ1Zi0+cmVsZWFz ZSk6IGN1cnJlbnRseSB0aGVzZSBhcmUKPiBEUk1fWEVOX1pDT1BZX0RVTUJfRlJPTV9SRUZTLCBE Uk1fWEVOX1pDT1BZX0RVTUJfVE9fUkVGUyBhbmQKPiBEUk1fWEVOX1pDT1BZX0RVTUJfV0FJVF9G UkVFCj4gMS4yLiBYZW4gYmFsbG9vbiBkcml2ZXIgWzZdIHRvIGFsbG93IGFsbG9jYXRpbmcgY29u dGlndW91cyBidWZmZXJzIChub3QKPiBuZWVkZWQKPiBieSBjdXJyZW50IGh5cGVyLWRtYWJ1Ziwg YnV0IGlzIGEgbXVzdCBmb3IgeGVuLXpjb3B5IHVzZS1jYXNlcykKCk5vdCBzdXJlIGhvdyB0byBt YXRjaCBvdXIgdXNlIGNhc2UgdG8geGVuLXpjb3B5J3MgY2FzZSBidXQgd2UgZG9uJ3QgZG8gYWxs b2MKL2ZyZWUgYWxsIHRoZSB0aW1lLiBBbHNvLCBkb20wIHdvbid0IG1ha2UgYW55IGZyZWVpbmcg cmVxdWVzdCB0byBkb21VIHNpbmNlIGl0CmRvZXNuJ3Qgb3duIHRoZSBidWZmZXIuIEl0IG9ubHkg Zm9sbG93cyBkbWFidWYgcHJvdG9jb2wgYXMgc3VjaCBhdHRhY2gvZGV0YWNoCi9yZWxlYXNlLCB3 aGljaCBhcmUgdHJhY2tlZCBieSBkb21VIChleHBvcnRpbmcgVk0pLiBBbmQgZm9yIGRlc3RydWN0 aW9uIG9mCnNoYXJpbmcsIHdlIGhhdmUgc2VwYXJhdGUgSU9DVEwgZm9yIHRoYXQsIHdoaWNoIHJl dm9rZSBncmFudCByZWZlcmVuY2VzICJJRiIKdGhlcmUgaXMgbm8gZHJpdmVycyBhdHRhY2hlZCB0 byB0aGUgZG1hYnVmIGluIGRvbTAuIE90aGVyd2lzZSwgaXQgc2NoZWR1bGVzCmRlc3RydWN0aW9u IG9mIHNoYXJpbmcgdW50aWwgaXQgZ2V0cyBmaW5hbCBkbWFidWYgcmVsZWFzZSBtZXNzYWdlIGZy b20gZG9tMC4KCkFsc28sIGluIG91ciB1c2VjYXNlLCAoYWx0aG91Z2ggd2UgZGlkbid0IGludGVu ZCB0byBkbyBzbykgaXQgZW5kcyB1cCB1c2luZwozfjQgYnVmZmVycyByZXBlYXRlbHkuIFRoaXMg aXMgYmVjYXVzZSBEUk0gaW4gZG9tVSAodGhhdCByZW5kZXJzKSBkb2Vzbid0CmFsbG9jYXRlIG1v cmUgb2JqZWN0IGZvciBFR0wgaW1hZ2Ugc2luY2UgdGhlcmUgaXMgYWx3YXlzIGZyZWUgb2JqZWN0 cyB1c2VkCmJlZm9yZSBleGlzdCBpbiB0aGUgbGlzdC4gQW5kIHdlIGFjdHVhbGx5IGRvbid0IGRv IGZ1bGwtcGF0aCBleHBvcnRpbmcKKGV4dHJhY3RpbmcgcGFnZXMgLT4gZ3JhbnQtcmVmZXJlbmNl cyAtPiBnZXQgdGhvc2Ugc2hhcmVkKSBhbGwgdGhlIHRpbWUuCklmIHRoZSBzYW1lIGRtYWJ1ZiBp cyBleHBvcnRlZCBhbHJlYWR5LCB3ZSBqdXN0IHVwZGF0ZSBwcml2YXRlIG1lc3NhZ2UgdGhlbgpu b3RpZmllcyBkb20wIChyZWFzb24gZm9yIGhhc2ggdGFibGVzIGZvciBrZWVwaW5nIGV4cG9ydGVk IGFuZCBpbXBvcnRlcgpkbWFidWZzKS4gCgo+IAo+IDIuIFRoZW4gaHlwZXItZG1hYnVmIHVzZXMg WGVuIGdudGRldiBkcml2ZXIgZm9yIFhlbiBzcGVjaWZpYyBkbWEtYnVmCj4gYWxsb2MvZnJlZS93 YWl0Cj4gCj4gMy4gaHlwZXItZG1hYnVmIHVzZXMgaXRzIG93biBwcm90b2NvbCBiZXR3ZWVuIFZN cyB0byBjb21tdW5pY2F0ZSBidWZmZXIKPiBjcmVhdGlvbi9kZWxldGlvbiBhbmQgd2hhdGV2ZXIg ZWxzZSBpcyBuZWVkZWQgKGZlbmNlcz8pLgo+IAo+IFRvIFhlbiBjb21tdW5pdHk6IHBsZWFzZSB0 aGluayBvZiBkbWEtYnVmIGhlcmUgYXMgb2YgYSBidWZmZXIgcmVwcmVzZW50YXRpb24KPiBtZWNo YW5pc20sCj4gZS5nLiBhdCB0aGUgZW5kIG9mIHRoZSBkYXkgaXQncyBqdXN0IGEgc2V0IG9mIHBh Z2VzLgo+IAo+IFRoYW5rIHlvdSwKPiBPbGVrc2FuZHIKPiA+Pi1EYW5pZWwKPiA+Pgo+ID4+PlJl Z2FyZHMsCj4gPj4+RFcKPiA+Pj5PbiBNb24sIEFwciAxNiwgMjAxOCBhdCAwNTozMzo0NlBNICsw MzAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPiA+Pj4+SGVsbG8sIGFsbCEKPiA+ Pj4+Cj4gPj4+PkFmdGVyIGRpc2N1c3NpbmcgeGVuLXpjb3B5IGFuZCBoeXBlci1kbWFidWYgWzFd IGFwcHJvYWNoZXMKPiA+Pj4+Cj4gPj4+Pml0IHNlZW1zIHRoYXQgeGVuLXpjb3B5IGNhbiBiZSBt YWRlIG5vdCBkZXBlbmQgb24gRFJNIGNvcmUgYW55IG1vcmUKPiA+Pj4+Cj4gPj4+PmFuZCBiZSBk bWEtYnVmIGNlbnRyaWMgKHdoaWNoIGl0IGluIGZhY3QgaXMpLgo+ID4+Pj4KPiA+Pj4+VGhlIERS TSBjb2RlIHdhcyBtb3N0bHkgdGhlcmUgZm9yIGRtYS1idWYncyBGRCBpbXBvcnQvZXhwb3J0Cj4g Pj4+Pgo+ID4+Pj53aXRoIERSTSBQUklNRSBVQVBJIGFuZCB3aXRoIERSTSB1c2UtY2FzZXMgaW4g bWluZCwgYnV0IGl0IGNvbWVzIG91dCB0aGF0IGlmCj4gPj4+Pgo+ID4+Pj50aGUgcHJvcG9zZWQg MiBJT0NUTHMgKERSTV9YRU5fWkNPUFlfRFVNQl9GUk9NX1JFRlMgYW5kCj4gPj4+PkRSTV9YRU5f WkNPUFlfRFVNQl9UT19SRUZTKQo+ID4+Pj4KPiA+Pj4+YXJlIGV4dGVuZGVkIHRvIGFsc28gcHJv dmlkZSBhIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgY29ycmVzcG9uZGluZyBkbWEtYnVmLAo+ID4+ Pj50aGVuCj4gPj4+Pgo+ID4+Pj5QUklNRSBzdHVmZiBpbiB0aGUgZHJpdmVyIGlzIG5vdCBuZWVk ZWQgYW55bW9yZS4KPiA+Pj4+Cj4gPj4+PlRoYXQgYmVpbmcgc2FpZCwgeGVuLXpjb3B5IGNhbiBz YWZlbHkgYmUgZGV0YWNoZWQgZnJvbSBEUk0gYW5kIG1vdmVkIGZyb20KPiA+Pj4+Cj4gPj4+PmRy aXZlcnMvZ3B1L2RybS94ZW4gaW50byBkcml2ZXJzL3hlbi9kbWEtYnVmLWJhY2tlbmQoPykuCj4g Pj4+Pgo+ID4+Pj5UaGlzIGRyaXZlciB0aGVuIGJlY29tZXMgYSB1bml2ZXJzYWwgd2F5IHRvIHR1 cm4gYW55IHNoYXJlZCBidWZmZXIgYmV0d2Vlbgo+ID4+Pj5Eb20wL0RvbUQKPiA+Pj4+Cj4gPj4+ PmFuZCBEb21VKHMpIGludG8gYSBkbWEtYnVmLCBlLmcuIG9uZSBjYW4gY3JlYXRlIGEgZG1hLWJ1 ZiBmcm9tIGFueSBncmFudAo+ID4+Pj5yZWZlcmVuY2VzCj4gPj4+Pgo+ID4+Pj5vciByZXByZXNl bnQgYSBkbWEtYnVmIGFzIGdyYW50LXJlZmVyZW5jZXMgZm9yIGV4cG9ydC4KPiA+Pj4+Cj4gPj4+ PlRoaXMgd2F5IHRoZSBkcml2ZXIgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yIERSTSB1c2UtY2Fz ZXMsIGJ1dCBhbHNvIGZvcgo+ID4+Pj5vdGhlcgo+ID4+Pj4KPiA+Pj4+dXNlLWNhc2VzIHdoaWNo IG1heSByZXF1aXJlIHplcm8gY29weWluZyBiZXR3ZWVuIGRvbWFpbnMuCj4gPj4+Pgo+ID4+Pj5G b3IgZXhhbXBsZSwgdGhlIHVzZS1jYXNlcyB3ZSBhcmUgYWJvdXQgdG8gd29yayBpbiB0aGUgbmVh cmVzdCBmdXR1cmUgd2lsbAo+ID4+Pj51c2UKPiA+Pj4+Cj4gPj4+PlY0TCwgZS5nLiB3ZSBwbGFu IHRvIHN1cHBvcnQgY2FtZXJhcywgY29kZWNzIGV0Yy4gYW5kIGFsbCB0aGVzZSB3aWxsIGJlbmVm aXQKPiA+Pj4+Cj4gPj4+PmZyb20gemVybyBjb3B5aW5nIG11Y2guIFBvdGVudGlhbGx5LCBldmVu IGJsb2NrL25ldCBkZXZpY2VzIG1heSBiZW5lZml0LAo+ID4+Pj4KPiA+Pj4+YnV0IHRoaXMgbmVl ZHMgc29tZSBldmFsdWF0aW9uLgo+ID4+Pj4KPiA+Pj4+Cj4gPj4+Pkkgd291bGQgbG92ZSB0byBo ZWFyIGNvbW1lbnRzIGZvciBhdXRob3JzIG9mIHRoZSBoeXBlci1kbWFidWYKPiA+Pj4+Cj4gPj4+ PmFuZCBYZW4gY29tbXVuaXR5LCBhcyB3ZWxsIGFzIERSSS1EZXZlbCBhbmQgb3RoZXIgaW50ZXJl c3RlZCBwYXJ0aWVzLgo+ID4+Pj4KPiA+Pj4+Cj4gPj4+PlRoYW5rIHlvdSwKPiA+Pj4+Cj4gPj4+ Pk9sZWtzYW5kcgo+ID4+Pj4KPiA+Pj4+Cj4gPj4+Pk9uIDAzLzI5LzIwMTggMDQ6MTkgUE0sIE9s ZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+ID4+Pj4+RnJvbTogT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ID4+Pj4+Cj4gPj4+ Pj5IZWxsbyEKPiA+Pj4+Pgo+ID4+Pj4+V2hlbiB1c2luZyBYZW4gUFYgRFJNIGZyb250ZW5kIGRy aXZlciB0aGVuIG9uIGJhY2tlbmQgc2lkZSBvbmUgd2lsbCBuZWVkCj4gPj4+Pj50byBkbyBjb3B5 aW5nIG9mIGRpc3BsYXkgYnVmZmVycycgY29udGVudHMgKGZpbGxlZCBieSB0aGUKPiA+Pj4+PmZy b250ZW5kJ3MgdXNlci1zcGFjZSkgaW50byBidWZmZXJzIGFsbG9jYXRlZCBhdCB0aGUgYmFja2Vu ZCBzaWRlLgo+ID4+Pj4+VGFraW5nIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiBkaXNwbGF5IGJ1 ZmZlcnMgYW5kIGZyYW1lcyBwZXIgc2Vjb25kcwo+ID4+Pj4+aXQgbWF5IHJlc3VsdCBpbiB1bm5l ZWRlZCBodWdlIGRhdGEgYnVzIG9jY3VwYXRpb24gYW5kIHBlcmZvcm1hbmNlIGxvc3MuCj4gPj4+ Pj4KPiA+Pj4+PlRoaXMgaGVscGVyIGRyaXZlciBhbGxvd3MgaW1wbGVtZW50aW5nIHplcm8tY29w eWluZyB1c2UtY2FzZXMKPiA+Pj4+PndoZW4gdXNpbmcgWGVuIHBhcmEtdmlydHVhbGl6ZWQgZnJv bnRlbmQgZGlzcGxheSBkcml2ZXIgYnkKPiA+Pj4+PmltcGxlbWVudGluZyBhIERSTS9LTVMgaGVs cGVyIGRyaXZlciBydW5uaW5nIG9uIGJhY2tlbmQncyBzaWRlLgo+ID4+Pj4+SXQgdXRpbGl6ZXMg UFJJTUUgYnVmZmVycyBBUEkgdG8gc2hhcmUgZnJvbnRlbmQncyBidWZmZXJzIHdpdGgKPiA+Pj4+ PnBoeXNpY2FsIGRldmljZSBkcml2ZXJzIG9uIGJhY2tlbmQncyBzaWRlOgo+ID4+Pj4+Cj4gPj4+ Pj4gIC0gYSBkdW1iIGJ1ZmZlciBjcmVhdGVkIG9uIGJhY2tlbmQncyBzaWRlIGNhbiBiZSBzaGFy ZWQKPiA+Pj4+PiAgICB3aXRoIHRoZSBYZW4gUFYgZnJvbnRlbmQgZHJpdmVyLCBzbyBpdCBkaXJl Y3RseSB3cml0ZXMKPiA+Pj4+PiAgICBpbnRvIGJhY2tlbmQncyBkb21haW4gbWVtb3J5IChpbnRv IHRoZSBidWZmZXIgZXhwb3J0ZWQgZnJvbQo+ID4+Pj4+ICAgIERSTS9LTVMgZHJpdmVyIG9mIGEg cGh5c2ljYWwgZGlzcGxheSBkZXZpY2UpCj4gPj4+Pj4gIC0gYSBkdW1iIGJ1ZmZlciBhbGxvY2F0 ZWQgYnkgdGhlIGZyb250ZW5kIGNhbiBiZSBpbXBvcnRlZAo+ID4+Pj4+ICAgIGludG8gcGh5c2lj YWwgZGV2aWNlIERSTS9LTVMgZHJpdmVyLCB0aHVzIGFsbG93aW5nIHRvCj4gPj4+Pj4gICAgYWNo aWV2ZSBubyBjb3B5aW5nIGFzIHdlbGwKPiA+Pj4+Pgo+ID4+Pj4+Rm9yIHRoYXQgcmVhc29uIG51 bWJlciBvZiBJT0NUTHMgYXJlIGludHJvZHVjZWQ6Cj4gPj4+Pj4gIC0gIERSTV9YRU5fWkNPUFlf RFVNQl9GUk9NX1JFRlMKPiA+Pj4+PiAgICAgVGhpcyB3aWxsIGNyZWF0ZSBhIERSTSBkdW1iIGJ1 ZmZlciBmcm9tIGdyYW50IHJlZmVyZW5jZXMgcHJvdmlkZWQKPiA+Pj4+PiAgICAgYnkgdGhlIGZy b250ZW5kCj4gPj4+Pj4gIC0gRFJNX1hFTl9aQ09QWV9EVU1CX1RPX1JFRlMKPiA+Pj4+PiAgICBU aGlzIHdpbGwgZ3JhbnQgcmVmZXJlbmNlcyB0byBhIGR1bWIvZGlzcGxheSBidWZmZXIncyBtZW1v cnkgcHJvdmlkZWQKPiA+Pj4+PiAgICBieSB0aGUgYmFja2VuZAo+ID4+Pj4+ICAtIERSTV9YRU5f WkNPUFlfRFVNQl9XQUlUX0ZSRUUKPiA+Pj4+PiAgICBUaGlzIHdpbGwgYmxvY2sgdW50aWwgdGhl IGR1bWIgYnVmZmVyIHdpdGggdGhlIHdhaXQgaGFuZGxlIHByb3ZpZGVkCj4gPj4+Pj4gICAgYmUg ZnJlZWQKPiA+Pj4+Pgo+ID4+Pj4+V2l0aCB0aGlzIGhlbHBlciBkcml2ZXIgSSB3YXMgYWJsZSB0 byBkcm9wIENQVSB1c2FnZSBmcm9tIDE3JSB0byAzJQo+ID4+Pj4+b24gUmVuZXNhcyBSLUNhciBN MyBib2FyZC4KPiA+Pj4+Pgo+ID4+Pj4+VGhpcyB3YXMgdGVzdGVkIHdpdGggUmVuZXNhcycgV2F5 bGFuZC1LTVMgYW5kIGJhY2tlbmQgcnVubmluZyBhcyBEUk0gbWFzdGVyLgo+ID4+Pj4+Cj4gPj4+ Pj5UaGFuayB5b3UsCj4gPj4+Pj5PbGVrc2FuZHIKPiA+Pj4+Pgo+ID4+Pj4+T2xla3NhbmRyIEFu ZHJ1c2hjaGVua28gKDEpOgo+ID4+Pj4+ICAgZHJtL3hlbi16Y29weTogQWRkIFhlbiB6ZXJvLWNv cHkgaGVscGVyIERSTSBkcml2ZXIKPiA+Pj4+Pgo+ID4+Pj4+ICBEb2N1bWVudGF0aW9uL2dwdS9k cml2ZXJzLnJzdCAgICAgICAgICAgICAgIHwgICAxICsKPiA+Pj4+PiAgRG9jdW1lbnRhdGlvbi9n cHUveGVuLXpjb3B5LnJzdCAgICAgICAgICAgICB8ICAzMiArCj4gPj4+Pj4gIGRyaXZlcnMvZ3B1 L2RybS94ZW4vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgMjUgKwo+ID4+Pj4+ICBkcml2ZXJz L2dwdS9kcm0veGVuL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICA1ICsKPiA+Pj4+PiAgZHJp dmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX3pjb3B5LmMgICAgICAgICB8IDg4MCArKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gPj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV96 Y29weV9iYWxsb29uLmMgfCAxNTQgKysrKysKPiA+Pj4+PiAgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX3pjb3B5X2JhbGxvb24uaCB8ICAzOCArKwo+ID4+Pj4+ICBpbmNsdWRlL3VhcGkvZHJt L3hlbl96Y29weV9kcm0uaCAgICAgICAgICAgIHwgMTI5ICsrKysKPiA+Pj4+PiAgOCBmaWxlcyBj aGFuZ2VkLCAxMjY0IGluc2VydGlvbnMoKykKPiA+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERv Y3VtZW50YXRpb24vZ3B1L3hlbi16Y29weS5yc3QKPiA+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV96Y29weS5jCj4gPj4+Pj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1femNvcHlfYmFsbG9vbi5jCj4gPj4+ Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1femNvcHlf YmFsbG9vbi5oCj4gPj4+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvZHJtL3hl bl96Y29weV9kcm0uaAo+ID4+Pj4+Cj4gPj4+PlsxXQo+ID4+Pj5odHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTgtMDIvbXNnMDEyMDIuaHRtbAo+ ID4+Pl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPj4+ ZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4+PmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiA+Pj5odHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo+ID4+LS0gCj4gPj5EYW5pZWwgVmV0dGVyCj4gPj5Tb2Z0d2FyZSBFbmdpbmVlciwg SW50ZWwgQ29ycG9yYXRpb24KPiA+Pmh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4gCj4gWzFdIGh0dHBz Oi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y0LjE3LXJjMS9zb3VyY2UvaW5jbHVkZS94ZW4v aW50ZXJmYWNlL2lvL2Rpc3BsaWYuaAo+IFsyXSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9s aW51eC92NC4xNy1yYzEvc291cmNlL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmgj TDUzOQo+IFszXSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51eC92NC4xNy1yYzEvc291 cmNlL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYyNMMzkKPiBbNF0gaHR0cHM6Ly9lbGl4aXIu Ym9vdGxpbi5jb20vbGludXgvdjQuMTctcmMxL3NvdXJjZS9kcml2ZXJzL3hlbi9nbnRkZXYuYwo+ IFs1XQo+IGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y0LjE3LXJjMS9zb3VyY2Uv aW5jbHVkZS91YXBpL3hlbi9nbnRkZXYuaAo+IFs2XSBodHRwczovL2VsaXhpci5ib290bGluLmNv bS9saW51eC92NC4xNy1yYzEvc291cmNlL2RyaXZlcnMveGVuL2JhbGxvb24uYwoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==