From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 2/5] drm: bridge: add API to query the expected input formats of bridges Date: Wed, 04 Apr 2018 16:07:37 +0300 Message-ID: <1811029.jLvDxETu2H@avalon> References: <20180326212447.7380-1-peda@axentia.se> <20180327130231.GO27746@w540> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180327130231.GO27746@w540> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: jacopo mondi Cc: Mark Rutland , Boris Brezillon , Alexandre Belloni , devicetree@vger.kernel.org, David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Nicolas Ferre , Rob Herring , Daniel Vetter , Peter Rosin , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SGVsbG8sCgpGaXJzdCBvZiBhbGwsIHRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLiBUaGlzIGdlbmVy YXRlcyBtb3JlIGRpc2N1c3Npb24gdGhhbiBJIApoYWQgYW50aWNpcGF0ZWQsIHdoaWNoIGlzIGJv dGggZ29vZCBhbmQgYmFkLiBJJ2xsIGNvbW1lbnQgdGhyb3VnaCB0aGUgZS1tYWlsLCAKYW5kIHRy eSB0byBleHBsYWluIGJvdGggbXkgaW5pdGlhbCBpZGVhLCBhbmQgYWxzbyB3aGVyZSBpdCBjb3Vs ZCBsZWFkIHVzLgoKT24gVHVlc2RheSwgMjcgTWFyY2ggMjAxOCAxNjowMjozMSBFRVNUIGphY29w byBtb25kaSB3cm90ZToKPiBPbiBUdWUsIE1hciAyNywgMjAxOCBhdCAwMjoxMjo0MlBNICswMjAw LCBQZXRlciBSb3NpbiB3cm90ZToKPiA+IE9uIDIwMTgtMDMtMjcgMTE6NDcsIGphY29wbyBtb25k aSB3cm90ZToKPiA+PiBPbiBNb24sIE1hciAyNiwgMjAxOCBhdCAxMToyNDo0NFBNICswMjAwLCBQ ZXRlciBSb3NpbiB3cm90ZToKPiA+Pj4gQnJpZGdlcyBtYXkgYWZmZWN0IHRoZSByZXF1aXJlZCBi dXMgb3V0cHV0IGZvcm1hdCBvZiB0aGUgZW5jb2RlciwgaW4KPiA+Pj4gd2hpY2ggY2FzZSBpdCBt YXkgYmUgd3JvbmcgdG8gdXNlIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBwYW5lbCBvcgo+ID4+ PiBjb25uZWN0b3IgYXMgaXMuIEFkZCBpbmZyYXN0cnVjdHVyZSB0byBhZGRyZXNzIHRoaXMgcHJv YmxlbS4KPiA+PiAKPiA+PiBCcmlkZ2VzIG5vdCBvbmx5IGFmZmVjdCB0aGUgZm9ybWF0IGV4cGVj dGVkIGJ5IHRoZSBjb25uZWN0b3IgYXQgdGhlCj4gPj4gZW5kIG9mIHRoZSBkaXNwbGF5IHBpcGVs aW5lLCB0aGV5IG1heSBwZXJmb3JtIGVuY29kaW5nL2RlY29kaW5nCj4gPj4gYmV0d2VlbiBwcm90 b2NvbHMgYW5kIHRoZWlyIGFjY2VwdGVkIGlucHV0IGZvcm1hdHMgbWF5IGJlIHVucmVsYXRlZCB0 bwo+ID4+IHRoZSBjb25uZWN0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGlwZWxpbmUgYXMgdGhlcmUg bWF5IGFuIGFyYml0cmFyeQo+ID4+IG51bWJlciBvZiBicmlkZ2VzIGluIGJldHdlZW4uCj4gPj4g Cj4gPj4gRWcuCj4gPj4gCj4gPj4gRU5DT0RFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUgo+ID4+IAo+ID4+IHxEVSBMVkRTfCAtPmx2ZHMt PiB8VEhDNjN8IC0+cmdiLT4gfEFEVjc1MTF8IC0+aGRtaS0+IHxIRE1JIGNvbm5lY3RvcnwKPiA+ PiAKPiA+PiBUaGUgZmFjdCB0aGF0IFRIQzYzIHdhbnRzIGEgc3BlY2lmaWMgTFZEUyBpbnB1dCBm b3JtYXQgaXMgdW5yZWxhdGVkIHRvCj4gPj4gdGhlIGZvcm1hdCByZXF1aXJlZCBieSB0aGUgSERN SSBjb25uZWN0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGlwZWxpbmUuCj4gPj4gCj4gPj4gSSB3b3Vs ZCBqdXN0IHN0YXRlIGhlcmUgdGhhdCBicmlkZ2VzIG5lZWQgYSB3YXkgdG8gcmVwb3J0IHRoZWly Cj4gPj4gYWNjZXB0ZWQgbWVkaWEgYnVzIGZvcm1hdHMsIGFuZCB0aGlzIHBhdGNoIGV4dGVuZHMg dGhlIERSTSBCcmlkZ2UgQVBJcwo+ID4+IHRvIGltcGxlbWVudCB0aGF0Lgo+ID4gCj4gPiBZZXMs IEkgY2FuIGFkZCBzb21lIHdvcmRzLCBidXQgSSB3b3VsZCBsaWtlIHRvIGNsZWFyIHVwIHRoZSBu YW1pbmcKPiA+IGJlZm9yZSByZS1zcGlubmluZy4KPiA+IAo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBQ ZXRlciBSb3NpbiA8cGVkYUBheGVudGlhLnNlPgo+ID4+PiAtLS0KPiA+Pj4gCj4gPj4+ICBkcml2 ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+Pj4gIGluY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCAgICAgfCAxOCArKysrKysrKysr KysrKysrKysKPiA+PiAgMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspCj4gPj4+IAo+ ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+ID4+PiBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+Pj4gaW5kZXggMTYzOGJmZTk2MjdjLi5mODVl NjFiNzQxNmUgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMK PiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+ID4+PiBAQCAtMzQ4LDYg KzM0OCwzOCBAQCB2b2lkIGRybV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCj4gPj4+IAo+ID4+PiAgfQo+ID4+PiAgRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX2VuYWJs ZSk7Cj4gPj4+IAo+ID4+PiArLyoqCj4gPj4+ICsgKiBkcm1fYnJpZGdlX2lucHV0X2Zvcm1hdHMg LSBnZXQgdGhlIGV4cGVjdGVkIGJ1cyBpbnB1dCBmb3JtYXQgb2YgdGhlCj4gPj4+IGJyaWRnZQo+ ID4+IAo+ID4+IEkgbWF5IGJlIGJpYXNlZCBieSB0aGUgVjRMMiBBUElzLCBidXQgdGhpcyBzZWVt cyB0byBtZSB2ZXJ5IG11Y2ggbGlrZQo+ID4+IHNpbWlsYXIgdG8gZ19mbXQvc19mbXQgY2FsbGJh Y2tzIHdlIGhhdmUgdGhlcmUuIEJyaWRnZXMgaGF2ZSBhbiBpbnB1dAo+ID4+IGFuZAo+ID4gCj4g PiBnX2ZtdC9zX2ZtdCBzYXlzIG5vdGhpbmcgdG8gbWUuIEdyYXBoaWNzIGZvcm1hdD8gU291cmNl IEZvcm1hdD8gSSBoYXZlCj4gPiBubyBpZGVhIGlmIHRob3NlIGd1ZXNzZXMgYXJlIGV2ZW4gY2xv c2U/IFNvLCB0aGF0IHNlZW1zIGxpa2UgcG9vciBuYW1pbmcKPiA+IHRvIG1lLiBUaGUgb25seSBy ZWFzb24gSSBzZWUgdG8gZ28gdGhhdCB3YXkgaXMgZm9yIHRoZSBzYWtlIG9mCj4gPiBjb25zaXN0 ZW5jeS4KPiAKPiBTb3JyeSwgSSB3YXNuJ3QgY2xlYXIgaGVyZS4KPiAKPiBUbyBtZSB0aGlzIG9w ZXJhdGlvbiBzZWVtcyBsaWtlIGEgImdldCBmb3JtYXQiIGFuZCBJIHNlZSBzcGFjZSBmb3IKPiBm dXR1cmUgaW1wbGVtZW50YXRpb24gb2YgInNldCBmb3JtYXQiIG9wZXJhdGlvbnMgIGFuZCBhbHNv Cj4gImVudW1fZm9ybWF0cyIgdG8gaW1wbGVtZW50IGZvcm1hdCBuZWdvdGlhdGlvbiBiZXR3ZWVu IGJyaWRnZXMuLi4KCkEgYml0IG9mIGNvbnRleHQgaXMgcHJvYmFibHkgbmVlZGVkIGhlcmUgdG8g YnJpZGdlIChubyBwdW4gaW50ZW5kZWQpIERSTSBhbmQgClY0TDIuCgpPbiB0aGUgVjRMMiBzaWRl IHdlIGhhdmUgYW4gb2JqZWN0LCBuYW1lZCB2NGwyX3N1YmRldiwgdGhhdCBpcyBhbmFsb2dvdXMg dG8gCmRybV9icmlkZ2UuIEEgdjRsMl9zdWJkZXYgbW9kZWxzIGEgY29tcG9uZW50IGluIGEgdmlk ZW8gcGlwZWxpbmUsIHVzaW5nIAphYnN0cmFjdCBvcGVyYXRpb25zIGluIGEgc2ltaWxhciBmYXNo aW9uIHRvIHRoZSBkcm1fYnJpZGdlX2Z1bmNzLiBUaGVyZSBhcmUsIApob3dldmVyLCBzZXZlcmFs IG1ham9yIGRpZmZlcmVuY2VzIGJldHdlZW4gZHJtX2JyaWRnZSBhbmQgdjRsMl9zdWJkZXYuCgpk cm1fYnJpZGdlIG1vZGVscyBhIHBhcnRpY3VsYXIga2luZCBvZiBjb21wb25lbnQsIG5hbWVseSB2 aWRlbyBlbmNvZGVycywgCmRlY29kZXJzIG9yIHRyYW5zY29kZXJzLiBBIGJyaWRnZSBpcyB0aHVz IGJhc2VkIG9uIHRoZSBpbXBsaWNpdCBub3Rpb24gb2YgCmhhdmluZyBhIHNpbmdsZSBpbnB1dCBh bmQgYSBzaW5nbGUgb3V0cHV0LCBuZWl0aGVyIG9mIHRoZW0gZXhwb3NlZCBleHBsaWNpdGx5LgoK djRsMl9zdWJkZXYgbW9kZWxzIGFueSB0eXBlIG9mIGNvbXBvbmVudCBpbiBhIHZpZGVvIHBpcGVs aW5lIGFuZCBmb3IgdGhhdCAKcmVhc29uIGhhcyBhIHZhcmlhYmxlIG51bWJlciBvZiBpbnB1dHMg YW5kIG91dHB1dHMuIFRoZSBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIApleHBvc2VkIGV4cGxpY2l0 bHkgdGhyb3VnaCB0aGUgdjRsMl9zdWJkZXYgQVBJIChpbiB0ZXJtcyBvZiB0aGUgbnVtYmVyIG9m IAppbnB1dHMvb3V0cHV0cywgdGhlaXIgdHlwZSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGgg dGhlIHY0bDJfc3ViZGV2IApvcGVyYXRpb25zKS4KCkFzIGRybV9icmlkZ2UgbW9kZWxzIG9uZSBw YXJ0aWN1bGFyIGtpbmQgb2YgY29tcG9uZW50LCB0aGUgYnJpZGdlIG9wZXJhdGlvbnMgCmFyZSB0 YWlsb3JlZCB0byB0aGUgZmVhdHVyZSBvZiB0aG9zZSBjb21wb25lbnRzLiBOb3QgYWxsIG9wZXJh dGlvbnMgYXJlIAptYW5kYXRvcnkgKHByZV9lbmFibGUgb3IgcG9zdF9kaXNhYmxlIGFyZSBvcHRp b25hbCBmb3IgaW5zdGFuY2UpLCBidXQgdGhleSBhbGwgCmFwcGx5IHRvIGFsbCBicmlkZ2VzIGNv bmNlcHR1YWxseS4KCkFzIHY0bDJfc3ViZGV2IG1vZGVscyBhbnkgdHlwZSBvZiBjb21wb25lbnQs IHRoZSBzdWJkZXYgb3BlcmF0aW9ucyBoYXZlIHRvIApzdXBwb3J0IGEgd2lkZSB2YXJpZXR5IG9m IGRldmljZSBmZWF0dXJlcy4gVGhlcmUgYXJlIHRodXMgbWFueSBtb3JlIApvcGVyYXRpb25zLCBh bmQgbm90IGFsbCBvZiB0aGVtIGFyZSBhcHBsaWNhYmxlIHRvIGFsbCB0eXBlIG9mIHY0bDJfc3Vi ZGV2LiAKT3BlcmF0aW9ucyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGEgcGFydGljdWxhciB2 NGwyX3N1YmRldiBpbnN0YW5jZSAodGhpbmsgCmFib3V0IHZpZGVvIHR1bmVyIGNvbnRyb2wgZm9y IGEgY2FtZXJhIHNlbnNvciBmb3IgaW5zdGFuY2UpIGFyZSBzaW1wbHkgbm90IAppbXBsZW1lbnRl ZC4KClRoZSBkcm1fYnJpZGdlIGZyYW1ld29yayBoYXJkY29kZXMgYW4gb3BlcmF0aW9uYWwgbW9k ZWwgZm9yIGJyaWRnZXMuIApPcGVyYXRpb25zIGFyZSBjYWxsZWQgaW4gYSBwYXJ0aWN1bGFyIG9y ZGVyIG9uIGFsbCBicmlkZ2VzIGluIGEgY2hhaW4uIEZvciAKaW5zdGFuY2UgdGhlIGVuYWJsZSBv cGVyYXRpb24gaXMgY2FsbGVkIGZyb20gc291cmNlIHRvIHNpbmsgKGJyaWRnZSBjbG9zZXN0IHRv IAp0aGUgZGlzcGxheSBjb250cm9sbGVyIHRvIGJyaWRnZSBjbG9zZXN0IHRvIHRoZSBjb25uZWN0 b3IpLCB3aGlsZSB0aGUgZGlzYWJsZSAKb3BlcmF0aW9uIGlzIGNhbGxlZCBmcm9tIHNpbmsgdG8g c291cmNlLgoKVGhlIHY0bDJfc3ViZGV2IGZyYW1ld29yayBkb2Vzbid0IGhhcmRjb2RlIGFuIG9w ZXJhdGlvbiBtb2RlbC4gSXQgaXMgdXAgdG8gdGhlIAp0b3AtbGV2ZWwgVjRMMiBkcml2ZXIgKGVx dWl2YWxlbnQgdG8gdGhlIGRpc3BsYXkgY29udHJvbGxlciBkcml2ZXIpIHRvIGNhbGwgCnN1YmRl diBvcGVyYXRpb25zIGluIG9yZGVyIGFwcGxpY2FibGUgZm9yIHRoZSB1c2UgY2FzZXMgaXQgbmVl ZHMgdG8gc3VwcG9ydC4KClRoaXMgYmVpbmcgc2FpZCwgbGV0J3MgdGFsayBhYm91dCBmb3JtYXRz LiBJbiBWNEwyIGEgdjRsMl9zdWJkZXYgZXhwb3NlcyAKb3BlcmF0aW9ucyB0byBleHBsaWNpdGx5 IGNvbmZpZ3VyZSBmb3JtYXRzIG9uIGFsbCBpbnB1dHMgYW5kIG91dHB1dHMgCihnZW5lcmljYWxs eSBjYWxsZWQgcGFkcyBpbiBWNEwyKS4gVGhyZWUgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkOiAu Z2V0X2ZtdCgpIAp0byByZXRyaWV2ZSB0aGUgY3VycmVudCBmb3JtYXQsIC5zZXRfZm10KCkgdG8g c2V0IGEgZm9ybWF0LCBhbmQgCmVudW1fbWJ1c19jb2RlKCkgYW5kIC5lbnVtX2ZyYW1lX3NpemUo KSB0byBlbnVtZXJhdGUgc3VwcG9ydGVkIGZvcm1hdHMgKEkgCndvbid0IGdvIGludG8gZGV0YWls cyByZWdhcmRpbmcgd2h5IGVudW1lcmF0aW9uIGlzIHNwbGl0IGluIHR3byBvcGVyYXRpb25zLCAK dGhhdCdzIGlycmVsZXZhbnQgaGVyZSkuIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgZm9y bWF0IGVudW1lcmF0aW9uIGlzIAptb3N0bHkgc3RhdGljIChpdCB0ZWxscyB3aGF0IGEgdjRsMl9z dWJkZXYgc3VwcG9ydHMpLCB3aGlsZSBnZXQgYW5kIHNldCAKb3BlcmF0aW9ucyBhcmUgZHluYW1p YyAoZ2V0dGluZyBhbmQgc2V0dGluZywgYW5kIG1vcmUgZ2VuZXJpY2FsbHkgbmVnb3RpYXRpbmcs IApmb3JtYXRzKS4KCkRSTSBoYXMgYW4gQVBJIHRvIGVudW1lcmF0ZSB0aGUgZm9ybWF0cyBzdXBw b3J0ZWQgYnkgY29ubmVjdG9ycyAodGhyb3VnaCB0aGUgCmRybV9jb25uZWN0b3ItPmRpc3BsYXlf aW5mby5idXNfZm9ybWF0cyBmaWVsZCkuIFRoZXJlIGlzIG5vIEFQSSBleHBvc2VkIHRvIAp1c2Vy c3BhY2UgdG8gcGljayB0aGUgZGVzaXJlZCBmb3JtYXQsIG5laXRoZXIgYXQgdGhlIGNvbm5lY3Rv ciBsZXZlbCwgb3IgZm9yIApicmlkZ2VzIGluIHRoZSBwaXBlbGluZSAoYnJpZGdlcyBhcmUgbm90 IGV4cG9zZWQgdG8gdXNlcnNwYWNlIGF0IGFsbCkuIFRoZXJlIAppcyBhbHNvIG5vIGluLWtlcm5l bCBBUEkgdG8gZW51bWVyYXRlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGJyaWRnZXMgb3IgdG8gZ2V0 LwpzZXQgYSBicmlkZ2UgZm9ybWF0LiBEaXNwbGF5IGNvbnRyb2xsZXIgYXJlIGV4cGVjdGVkIHRv IHBpY2sgYW4gb3V0cHV0IGZvcm1hdCAKc3VpdGFibGUgZm9yIHRoZSBvdXRwdXQgcGlwZWxpbmUg YmFzZWQgb24gdGhlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSAKY29ubmVjdG9yIGFuZCB0aGUg c2VsZWN0ZWQgZGlzcGxheSBtb2RlLCBhbmQgYnJpZGdlcyBhcmUgZXhwZWN0ZWQgdG8ganVzdCB3 b3JrIAp3aXRob3V0IG5lZWRpbmcgdG8gY2FyZSBhYm91dCBmb3JtYXRzLgoKVGhpcyBtb2RlbCBp cyBzdGFydGluZyB0byBzaG93IGl0cyBzaG9ydGNvbWluZ3Mgbm93IHRoYXQgd2UgbmVlZCB0byBz dXBwb3J0IApicmlkZ2VzIHRoYXQgY29udmVydCBmb3JtYXRzLiBJbiBKYWNvcG8ncyBjYXNlLCBh biBMVkRTIGRlY29kZXIgdHJhbnNmb3JtcyAKTFZEUyBSR0IgdG8gcGFyYWxsZWwgUkdCLCBhbmQg dGhlIGRpc3BsYXkgY29udHJvbGxlciBuZWVkcyB0byBrbm93IHdoaWNoIExWRFMgCmZvcm1hdCB0 byBvdXRwdXQgYmFzZWQgb24gd2hhdCB0aGUgYnJpZGdlIGV4cGVjdHMuIEluIFBldGVyJ3MgY2Fz ZSwgYW4gTFZEUyAKZW5jb2RlciB0cmFuc2ZlciAyNC1iaXQgUkdCIHRvIExWRFMgUkdCLCBidXQg aGFzIHRoZSBMU0JzIHRpZWQgdG8gZ3JvdW5kIG9uIAp0aGUgaW5wdXQgc2lkZSwgYW5kIHRodXMg cmVxdWlyZXMgdGhlIGRpc3BsYXkgY29udHJvbGxlciB0byBvdXRwdXQgUkdCNTY1LgoKTm93IHRo YXQgd2UncmUgZG9uZSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24sIGxldCdzIG1vdmUgb24sIHBsZWFz ZSBzZWUgYmVsb3cuCgo+ID4+IGFuIG91dHB1dCBmb3JtYXRzLCBhbmQgdGhhdCBjYWxscyBmb3Ig c29tZXRoaW5nIHRoYXQgdGFrZXMgdGhhdCBpbnRvCj4gPj4gYWNjb3VudCwgYXMgd2VsbCBhcyB0 aGV5IG1heSBoYXZlIGRpZmZlcmVudCBpbnB1dCBwb3J0cyB3aXRoIGRpZmZlcmVudAo+ID4+IGFj Y2VwdGVkIGZvcm1hdHMgYnV0IEkgd291bGQgZm9yIG5vdyBzaW1wbGlmeSB0aGlzIHRvIGp1c3Qg J2dfZm10KCknCj4gPiAKPiA+IFlvdSBtZWFuIHJlbmFtZSB0aGUgZnVuY3Rpb24gdG8gZHJtX2Jy aWRnZV9nX2ZtdCgpLCByaWdodD8KPiAKPiBZZWFoLCBzb21ldGhpbmcgbGlrZSAiZHJtX2JyaWRn ZV9nZXRfZm9ybWF0KG5leHRfYnJpZGdlKSIKPiAKPiA+IEFzIGluZGljYXRlZCBhYm92ZSwgSSdt IG5vdCB0aGF0IGZvbmQgb2YgaXQsIGJ1dCBkb24ndCByZWFsbHkgY2FyZQo+ID4gZWl0aGVyLiBN YWludGFpbmVycz8KPiAKPiBJIGRvIG5vdCBjYXJlIG11Y2ggYWJvdXQgdGhlIG5hbWUgdG9vIG9m YywgSSB0aGluayB0aGUgcmVhbCBtZWF0IGlzCj4gYmVsb3cuLi4KPiAKPiA+Pj4gKyAqIEBicmlk Z2U6IGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+PiArICogQGJ1c19mb3JtYXRzOiB3aGVy ZSB0byBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlIGJ1cyBpbnB1dCBmb3JtYXRzCj4gPj4+ICsgKgo+ ID4+PiArICogQ2FsbHMgdGhlICZkcm1fYnJpZGdlX2Z1bmNzLmlucHV0X2Zvcm1hdHMgb3AgZm9y IHRoZSBmcmlzdCBicmlkZ2UKPiA+Pj4gaW4gdGhlCj4gPj4+ICsgKiBjaGFpbiB0aGF0IGhhcyBy ZWdpc3RlcmVkIHRoaXMgb3AuCj4gPj4gCj4gPj4gSSdtIG5vdCBzdXJlIHBhc3NpbmcgdGhlIGNh bGwgZG93biB0aGUgcGlwZWxpbmUgaXMgZGVzaXJhYmxlLiBFYWNoCj4gPj4gY29tcG9uZW50IHNo b3VsZCBtYWtlIHN1cmUgaXRzIG91dHB1dCBmb3JtYXQgaXMgYWNjZXB0ZWQgYXMgdGhlIG5leHQK PiA+PiBicmlkZ2UgaW5wdXQgZm9ybWF0LCBwYXNzaW5nIHRoZSBjYWxsIHRvIHRoZSBuZXh0IGJy aWRnZSBpcyBub3QKPiA+PiBkaWZmZXJlbnQgdGhhdCBnZXR0aW5nIHRvIHRoZSBjb25uZWN0b3Ig YXQgdGhlIGVuZCBvZiB0aGUgcGlwZWxpbmUgYW5kCj4gPj4gcmV0dXJuIHRvIHRoZSBpbml0aWFs IGNhbGxlciBpdHMgc3VwcG9ydGVkIGZvcm1hdC4gRG8geW91IGFncmVlIHdpdGgKPiA+PiB0aGlz Pwo+ID4gCj4gPiBOb3QgcGFzc2luZyBkb3duIHRoZSBjYWxsIGRvZXMgb25lIG9mIHR3byB0aGlu Z3MuIEVpdGhlciBhbGwgYnJpZGdlcyBoYXZlCj4gPiB0byBpbXBsZW1lbnQgdGhlIGNhbGwgb3Ig YWxsIHVzZXJzIGhhdmUgdG8gd2FsayB0aGUgcGlwZWxpbmUgIm1hbnVhbGx5Ii4KPiA+IEkgZG9u J3QgbGlrZSBlaXRoZXIgb3IgdGhvc2Ugb3B0aW9ucywgc28gSSBzdGlsbCB0aGluayBpdCBpcyBn b29kIHRvCj4gPiBwYXNzIHRoZSBjYWxsIGRvd24gdGhlIHBpcGVsaW5lLgo+ID4gCj4gPiAqdGlt ZSBwYXNzZXMqCj4gPiAKPiA+IE9oLCB5b3UgZG8gbm90IHRoaW5rIGl0IGlzIHVzZWZ1bCBmb3Ig dGhlIGJyaWRnZSB0byBoYXZlIGEgY2FsbGJhY2sgYnV0Cj4gPiBzdGlsbCByZXBvcnQgIm5vIGZv cm1hdCBjaGFuZ2UiLCBhbmQgdGhhdCB0aGUgY2FsbCBkb3duIHRvIHBpcGVsaW5lCj4gPiBzaG91 bGQgb25seSBoYXBwZW4gZm9yIGJyaWRnZXMgdGhhdCBoYXZlIG5vdCBpbXBsZW1lbnRlZCB0aGUg b3AuIEJ1dCBJCj4gPiBkbyB0aGluayB0aGF0IGlzIHVzZWZ1bCwgc2VlIGJlbG93Lgo+ID4gCj4g Pj4+ICsgKgo+ID4+PiArICogTm90ZSB0aGF0IHRoZSBicmlkZ2UgcGFzc2VkIHNob3VsZCBub3Jt YWxseSBiZSB0aGUgYnJpZGdlIGNsb3Nlc3QgdG8KPiA+Pj4gdGhlCj4gPj4+ICsgKiBlbmNvZGVy LCBidXQgcG9zc2libHkgdGhlIGJyaWRnZSBjbG9zZXN0IHRvIGFuIGludGVybWVkaWF0ZSBicmlk Z2UKPiA+Pj4gaW4KPiA+Pj4gKyAqIGNvbnZvbHV0ZWQgY2FzZXMuCj4gPj4+ICsgKgo+ID4+IAo+ ID4+IEFzIEkgc2VlIHRoaXMsIGFueSBicmlkZ2UgaW4gdGhlIGFyYml0cmFyeSBsb25nIHBpcGVs aW5lIHNob3VsZCBjYWxsCj4gPj4gdGhpcyBvcGVyYXRpb24gb24gbmV4dCBicmlkZ2UgaWYgaXQg c3VwcG9ydHMgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzLgo+ID4+IEllLiBJIHdvdWxkIG5vdCBu YW1lIGhlcmUgdGhlIGVuY29kZXIgbm9yIHJlZmVyIHRvIHRoZSBicmlkZ2UgcG9zaXRpb24KPiA+ PiBpbiB0aGUgcGlwZWxpbmUuCj4gPiAKPiA+IE9rLCBJIGNhbiBjaGFuZ2UgdGhhdCwgaXQganVz dCBzZWVtZWQgbGlrZSBhIGNvbnZvbHV0ZWQgY2FzZSB0byBtZS4KPiA+IEkgbWVhbiwgaWYgdGhp cyB3YXMgYSByZWFsIGlzc3VlIGFuZCBjb21wbGljYXRlZCBwaXBlbGluZXMgd2VyZQo+ID4gY29t bW9uLCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIHdvdWxk IGJlCj4gPiBhdmFpbGFibGUgYWxyZWFkeS4gUmlnaHQ/IEkgZ3Vlc3Mgbm90LCBidXQgaG93IHRo ZSAmIy8lIyBoYXZlIHBlb3BsZQo+ID4gYmVlbiBjb3Bpbmc/Cj4gPiAKPiA+Pj4gKyAqIFJFVFVS TlM6Cj4gPj4+ICsgKiBUaGUgbnVtYmVyIG9mIGJ1cyBpbnB1dCBmb3JtYXRzIHRoZSBicmlkZ2Ug YWNjZXB0cy4gWmVybyBtZWFucyB0aGF0Cj4gPj4+ICsgKiB0aGUgY2hhaW4gb2YgYnJpZGdlcyBh cmUgbm90IGNvbnZlcnRpbmcgdGhlIGJ1cyBmb3JtYXQgYW5kIHRoYXQgdGhlCj4gPj4+ICsgKiBm b3JtYXQgb2YgdGhlIGRybV9jb25uZWN0b3Igc2hvdWxkIGJlIHVzZWQuCj4gPj4gCj4gPj4gSG93 IGRvIHdlIGdldCB0byB0aGUgY29ubmVjdG9yIGZvcm1hdCBmcm9tIGEgYnJpZGdlIHRoYXQgaGFz IG1heWJlCj4gPj4gb3RoZXIgY29tcG9uZW50cyBpbiBiZXR3ZWVuIGluIHRoZSBwaXBlbGluZT8K PiA+PiAKPiA+PiBJZiBhIGJyaWRnZSBkbyBub3QgcmVwb3J0IGFueSBzdXBwb3J0ZWQgZm9ybWF0 LCBpdCB3b24ndCBpbXBsZW1lbnQKPiA+PiB0aGlzIGNhbGxiYWNrIGFuZCB0aGluZ3Mgd2lsbCB3 b3JrIGFzIHRoZXkgd29yayB0b2RheS4KPiA+IAo+ID4gVW5sZXNzIHRoZSBicmlkZ2Ugb3B0aW9u YWxseSBjaGFuZ2VzIHRoZSBmb3JtYXQuIElmIHRoZSBicmlkZ2UgaGFzIG5vCj4gPiB3YXkgdG8g c2F5ICJubyBmb3JtYXQgY2hhbmdlIiBldmVuIHdpdGggdGhlIGNhbGxiYWNrIGluIHBsYWNlLCBp dAo+ID4gaGFzIHRvIGp1Z2dsZSBkaWZmZXJlbnQgb3BzIHN0cnVjdHMsIHdoaWNoIHNlZW1zIGxp a2UgYSBiaWcgaGFtbWVyLgo+ID4gU28sIEknbSBpbiBmYXZvciBvZiBjYWxsaW5nIGRvd24gdGhl IHBpcGVsaW5lIGluIHR3byBjYXNlcy4gQSkgd2hlbgo+ID4gYSBicmlkZ2UgZG9lcyBub3QgaW1w bGVtZW50IHRoZSBvcCBhbmQgQikgd2hlbiB0aGUgb3AgcmV0dXJucyB6ZXJvLgo+IAo+IFdoeSBk byB5b3UgdGhpbmsgdGhlIGJyaWRnZSBmb3JtYXQgY29udmVyc2lvbiBwbGF5cyBhIHJvbGUgaGVy ZT8KPiAKPiBNYXliZSBoZXJlJ3Mgd2hlcmUgSSBsb3N0IHlvdSwgcG9zc2libHkgYmVjYXVzZSBv ZiBteSBsaW1pdGVkCj4ga25vd2xlZGdlIG9mIHRoZSBEUk0gcmVhbG0gYW5kIGl0cyBhY3R1YWwg dXNlIGNhc2VzLgo+IAo+IEFzIEkgc2VlIGl0LCB0aGlzIG5ldyBBUEkgYWxsb3dzIHR3byBicmlk Z2VzIHRvIHN5bmNocm9uaXplIG9uIHdoaWNoCj4gaW1hZ2UgZm9ybWF0IG9yIExWRFMgbW9kZSAn YnJpZGdlJyBzaG91bGQgb3V0cHV0IHRvICduZXh0X2JyaWRnZScKPiBpbnB1dC4KPiAKPiBUaGUg Im1vZGVfc2V0IiBjYWxsYmFjayB3YWxrcyBhbGwgZWxlbWVudCBvZiB0aGUgZGlzcGxheSBwaXBl bGluZSwKPiBhbmQgd2hlbiBvbmUgY29tcG9uZW50IGhhcyB0byBzZWxlY3Qgd2hpY2ggaW1hZ2Ug Zm9ybWF0IG9yIExWRFMgbW9kZQo+IHRvIG91dHB1dCB0byBpdHMgbmV4dCBraW4sIGlmIHRoZSBu ZXh0IG9uZSBpcyBhIHBhbmVsIGl0IGluc3BlY3RzIHRoZQo+IGRpc3BsYXlfaW5mbyBmaWVsZCwg aXQgaXQncyBhIGJyaWRnZSBpdCB1c2VzIHRoaXMgbmV3IEFQSSB0byBnZXQgdGhlCj4gZm9ybWF0 IGl0IGFjY2VwdHMuCj4gCj4gSWYgdGhlIG5leHQgYnJpZGdlIGRvZXMgbm90IGltcGxlbWVudCB0 aGlzIGNhbGxiYWNrLCB0aGluZ3Mgd29yayBhcyB0aGV5Cj4gZG8gdG9kYXkgKGluIG91ciBzcGVj aWZpYyB1c2UgY2FzZSwgYnkgY2hhbmNlIDopCj4gCj4gPiBNYWludGFpbmVycz8KPiAKPiBZZXMs IGxldCdzIHNjYWxlIHRvIG1vcmUga25vd2xlZGdlYWJsZSBwZW9wbGUgdGhhbiBtZSwgYXMgSSBn YXZlIG15Cj4gb3BpbmlvbiBhbHJlYWR5IGJ1dCBpdCBpcyBiYXNlZCBvbiB0aGUgc2luZ2xlIHVz ZSBjYXNlIEkga25vdyBmb3IKPiByZWFsLgoKSSB0aGluayBpdCdzIGltcG9ydGFudCBoZXJlIHRv IHRha2UgYSBzdGVwIGJhY2sgYW5kIGxvb2sgd2hlcmUgd2UgY29tZSBmcm9tLCAKd2hhdCB3ZSBu ZWVkLCBhbmQgd2hlcmUgd2Ugd2FudCB0byBnby4KClRoZSBmaXJzdCBwYXJ0IGlzIGVhc3kuIEFz IGV4cGxhaW5lZCBhYm92ZSwgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdGhhdCB3ZSBrbm93IAp3aGF0 IGZvcm1hdHMgYSBjb25uZWN0b3Igc3VwcG9ydHMsIGFuZCB3ZSBoYXZlIG5vIG90aGVyIEFQSSB3 aGF0c29ldmVyLCAKbmVpdGhlciB0byB1c2Vyc3BhY2Ugb3IgaW5zaWRlIHRoZSBrZXJuZWwsIHRv IGhhbmRsZSBmb3JtYXQgaW4gdGhlIGRpc3BsYXkgCm91dHB1dCBwaXBlbGluZS4KCldoYXQgd2Ug bmVlZCBpcyBhdCBsZWFzdCBzdGF0aWMgZm9ybWF0IGluZm9ybWF0aW9uLiBJbiB0aGUgdHdvIGNh c2VzIGRlc2NyaWJlZCAKYWJvdmUgdGhlIGJyaWRnZSBjb25uZWN0ZWQgdG8gdGhlIGRpc3BsYXkg Y29udHJvbGxlciBvdXRwdXQgcmVxdWlyZXMgYSAKc3BlY2lmaWMgZm9ybWF0IChSR0I1NjUgZm9y IFBldGVyLCBMVkRTIEpFSURBIGZvciBKYWNvcG8pLiBUaGVyZSBpcyBubyBuZWVkIHRvIAp3YWxr IHRvIHBpcGVsaW5lIGFuZCBxdWVyeSBhbGwgYnJpZGdlcywgd2UgY2FuIGdldCB0aGUgbmVjZXNz YXJ5IGluZm9ybWF0aW9uIApmcm9tIHRoZSBmaXJzdCBicmlkZ2UgaW4gdGhlIGNoYWluLgoKV2hl cmUgd2Ugd2FudCB0byBnbyBpcyB0aGUgcmVhbCBxdWVzdGlvbi4gV2UgbmVlZCBhdCBsZWFzdCBz dGF0aWMgaW5mb3JtYXRpb24sIApzbyB3ZSBjb3VsZCBleHBvc2UgaXQgdGhyb3VnaCBhIG5ldyBi dXNfZm9ybWF0cyBmaWVsZCBpbiB0aGUgZHJtX2JyaWRnZSAKc3RydWN0dXJlLCBzaW1pbGFyIHRv IHRoZSBidXNfZm9ybWF0cyBmaWVsZCBpbiB0aGUgZHJtX2Rpc3BsYXlfaW5mbyBzdHJ1Y3R1cmUu IApUaGlzIHdvdWxkIHNvbHZlIHRoZSB0d28gcHJvYmxlbXMgYXQgaGFuZC4gSG93ZXZlciwgc3Vj aCBhIHNvbHV0aW9uIHdvdWxkbid0IAphbGxvdyB1cyB0byBjb25maWd1cmUgZm9ybWF0cyB0aHJv dWdoIHRoZSBwaXBlbGluZSwgYW5kIHdvdWxkbid0IGFsbG93IHVzIHRvIApxdWVyeSB0aGUgZm9y bWF0IGEgYnJpZGdlIG5lZWRzIGJhc2VkIG9uIHRoZSBmb3JtYXQgbmVlZGVkIGJ5IHRoZSBuZXh0 IGJyaWRnZSAKaW4gdGhlIGNoYWluLiBJdCB3b3VsZCB0aHVzIGJlIGxpbWl0ZWQgdG8gc3BlY2lm aWMgY2FzZXMsIGFuZCBvbmUgY291bGQgYXJndWUgCnRoYXQgaXQgd291bGQgYmUgdG9vIGxpbWl0 ZWQuCgpBIG1vcmUgZ2VuZXJpYyBzb2x1dGlvbiBtaWdodCBiZSBiZXR0ZXIsIHRvIHN1cHBvcnQg ZHluYW1pYyBuZWdvdGlhdGlvbiBvZiAKZm9ybWF0cyB0aHJvdWdoIHRoZSBwaXBlbGluZS4gSSBi ZWxpZXZlIHRoaXMgd291bGQgYmUgbmVlZGVkIGluIHRoZSBsb25nIHJ1biAKYW55d2F5LCBzbyBp dCdzIHRlbXB0aW5nIHRvIGdpdmUgaXQgYSB0cnkgdG9kYXkuIEhvd2V2ZXIsIGFzIHdlIGRvbid0 IGhhdmUgYW55IApyZWFsIHVzZSBjYXNlIHlldCwgb25lIG1pZ2h0IGFyZ3VlIHRoYXQgd2Ugd291 bGQgZGVzaWduIHRoZSBBUEkgaW5jb3JyZWN0bHksIAp3aGljaCBJIGNhbid0IGNvbXBsZXRlbHkg ZGlzYWdyZWUgd2l0aC4gTm9uZXRoZWxlc3MsIGlmIHdlIHdlcmUgdG8gZGVzaWduIHN1Y2ggCmFu IEFQSSwgSSBhZ3JlZSB3aXRoIERhbmllbCB0aGF0IGl0IHNob3VsZCBiZSBiYXNlZCBvbiBicmlk Z2Ugc3RhdGVzLiBTdWNoIGEgCnNvbHV0aW9uIHdvdWxkIGFsbG93IG5lZ290aWF0aW9uIG9mIGZv cm1hdHMgdGhyb3VnaCB0aGUgcGlwZWxpbmUgKHVzaW5nIGEgeWV0IAp0byBiZSBkZXNpZ25lZCBw cm9jZXNzKSwgYW5kIHdvdWxkIHRoZW4gYWxsb3cgdGhlIGRpc3BsYXkgY29udHJvbGxlciB0byAK cmV0cmlldmUgdGhlIG5lZ290aWF0ZWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBmaXJzdCBicmlk Z2UgZnJvbSB0aGUgYnJpZGdlIApzdGF0ZS4KCkkgZG9uJ3QgdGhpbmsgd2Ugd291bGQgZGVzaWdu IHRoZSBBUEkgYmV0d2VlbiB0aGUgZGlzcGxheSBjb250cm9sbGVyIGFuZCB0aGUgCmZpcnN0IGJy aWRnZSB3cm9uZyAoaXQgd291bGQganVzdCBiZSBhIG1hdHRlciBvZiByZWFkaW5nIHRoZSBuZWdv dGlhdGVkIGZvcm1hdCAKZnJvbSB0aGUgZmlyc3QgYnJpZGdlJ3Mgc3RhdGUsIHRoZXJlJ3MgbGl0 dGxlIHJvb20gZm9yIGRlc2lnbiBpc3N1ZXMgdGhlcmUpLCAKYnV0IHRoZSBmb3JtYXQgbmVnb3Rp YXRpb24gdGhyb3VnaCB0aGUgcGlwZWxpbmUgd291bGQgbmVlZCBtb3JlIHRob3VnaHRzLiBPbmUg Cm9wdGlvbiAoanVzdCB0aGlua2luZyBvdXQgbG91ZCkgd291bGQgYmUgdG8gc3RhcnQgd2l0aCB0 aGUgY29ubmVjdG9yIGZvcm1hdCwgCmFuZCB0aGVuIGFzayBlYWNoIGJyaWRnZSBpbiB0aGUgY2hh aW4sIGZyb20gbGFzdCB0byBmaXJzdCwgZm9yIHRoZSBpbnB1dCAKZm9ybWF0IGl0IG5lZWRzIHRv IGdlbmVyYXRlIHRoZSBleHBlY3RlZCBvdXRwdXQgZm9ybWF0LiBNb3JlIGNvbXBsZXggc2NoZW1l cyAKbWlnaHQgYmUgbmVlZGVkLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGNvbm5lY3RvciBzdXBwb3J0 cyBtdWx0aXBsZSBmb3JtYXRzLCBvciAKd2hlbiBhIGJyaWRnZSBjYW4gYWNjZXB0IG11bHRpcGxl IGlucHV0IGZvcm1hdHMgdG8gZ2VuZXJhdGUgYSBnaXZlbiBvdXRwdXQgCmZvcm1hdC4gSW4gdGhv c2UgY2FzZXMgcGlja2luZyB0aGUgZmlyc3Qgc3VwcG9ydGVkIGZvcm1hdCBjb3VsZCB3b3JrLCBi dXQgaXQgCm1pZ2h0IG5vdCBhbHdheXMgbGVhZCB0byB0aGUgb3B0aW1hbCBwaXBlbGluZSBjb25m aWd1cmF0aW9uLgoKQW5vdGhlciBwb2ludCBJIHdhbnQgdG8gbWVudGlvbiBpcyB0aGF0IGluIFBl dGVyJ3MgY2FzZSB0aGUgTFZEUyBlbmNvZGVyIApyZXF1aXJlcyBSR0I4ODggYXQgaXRzIGlucHV0 LCBidXQgdGhlIFBDQiByb3V0aW5nIHRyYW5zZm9ybXMgUkdCNTY1IHRvIFJHQjg4OCAKYnkgc2hp ZnRpbmcgc2lnbmFscyBhbmQgdHlpbmcgdGhlIExTQnMgdG8gZ3JvdW5kLiBUaGF0IGluZm9ybWF0 aW9uIHJlYWxseSAKYmVsb25ncyB0byBEVCBhcyBpdCBpc24ndCBpbnRyaW5zaWMgdG8gZWl0aGVy IHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgb3IgdGhlIApMVkRTIGVuY29kZXIuIEkgaG93ZXZlciB3 b25kZXIgd2hldGhlciBpdCBzaG91bGQgYmUgZXhwcmVzc2VkIGFzIGEgZm9ybWF0LCBvciAKaW4g YSBkaWZmZXJlbnQgZm9ybS4gSW4gVjRMMiB3ZSBoYXZlIHN0YW5kYXJkaXplZCBidXMtd2lkdGgg YW5kIGRhdGEtc2hpZnQgRFQgCnByb3BlcnRpZXMgKHNlZSBEb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvbWVkaWEvdmlkZW8taW50ZXJmYWNlcy50eHQpIAp0byBleHBvc2UgaG93IHNp Z25hbHMgYXJlIGNvbm5lY3RlZCBpbiB0aGUgUENCLiBUaGlzIGFsbG93cyBleHByZXNzaW5nIAp0 cmFuc2Zvcm1hdGlvbnMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIGZvcm1hdHMsIHdoaWNoIGNhbiBi ZSB1c2VmdWwgaWYgdGhlIApicmlkZ2UgY2FuIHN0aWxsIGFjY2VwdCBtdWx0aXBsZSBpbnB1dCBm b3JtYXRzLiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHJhdyAKY2FtZXJhIHNlbnNvcnMgdGhhdCBj YW4gb3V0cHV0IG11bHRpcGxlIGJheWVyIHBhdHRlcm5zIChCR0dSLCBHQlJHLCBHUkJHIG9yIApS R0dCKSB3aXRoIDEwIGJpdHMgcGVyIHBpeGVsLCBjb21iaW5lZCB3aXRoIGEgUENCIHRoYXQgY29u bmVjdHMgRFs5OjJdIG9mIHRoZSAKc2Vuc29yIHRvIERbNzowXSBvZiB0aGUgY2FtZXJhIGNvbnRy b2xsZXIuIEJHR1IxMCB3b3VsZCBiZSB0dXJuZWQgaW50byBCR0dSOCwgCkdCUkcxMCBpbnRvIEdC Ukc4LCBhbmQgc28gb24uIFRoZSBjYW1lcmEgY29udHJvbGxlciBzaG91bGQgdGh1cyBub3QgaGFy ZGNvZGUgYSAKcGFydGljdWxhciBmb3JtYXQgaW4gRFQgYXMgdGhlcmUgYXJlIG11bHRpcGxlIG9w dGlvbnMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgYXQgCnJ1bnRpbWUuIEkgY2FuIGltYWdpbmUgYSBz aW1pbGFyIHNldHVwIGZvciB0aGUgZGlzcGxheSwgd2l0aCBhIGJyaWRnZSAKY29uZmlndXJhYmxl IHRocm91Z2ggSTJDIHRoYXQgY291bGQgYWNjZXB0IGRpZmZlcmVudCBmb3JtYXRzLCBjb21iaW5l ZCB3aXRoIAp0aGUgUENCIHBlcmZvcm1pbmcgc29tZSB3ZWlyZCByb3V0aW5nLgoKRmluYWxseSwg c3RpbGwgcmVnYXJkaW5nIFBldGVyJ3MgY2FzZSwgdGhlIGRlY2lzaW9uIHRvIG91dHB1dCBSR0I1 NjUgaW5zdGVhZCAKb2YgUkdCODg4ICh3aGljaCB0aGUgTFZEUyBlbmNvZGVyIGV4cGVjdHMpIGlz IGR1ZSB0byBQQ0Igcm91dGluZyBiZXR3ZWVuIHRoZSAKZGlzcGxheSBjb250cm9sbGVyIGFuZCB0 aGUgTFZEUyBlbmNvZGVyLiBUaGlzIGlzbid0IGEgcHJvcGVydHkgb2YgdGhlIExWRFMgCmVuY29k ZXIgb3IgdGhlIGRpc3BsYXkgY29udHJvbGxlciwgYnV0IG9mIHRoZWlyIGhhcmR3YXJlIGNvbm5l Y3Rpb24uIFRoaXMgCnBhdGNoIHNlcmllcyB1c2VzIGEgRFQgcHJvcGVydHkgaW4gdGhlIExWRFMg ZW5jb2RlciBEVCBub2RlIHRvIGNvbnZleSB0aGF0IAppbmZvcm1hdGlvbiwgYnV0IHdvdWxkbid0 IGl0IGJlIGVxdWFsbHkgY29ycmVjdCAob3IgaW5jb3JyZWN0IDotKSkgdG8gaW5zdGVhZCAKdXNl IGEgRFQgcHJvcGVydHkgaW4gdGhlIGRpc3BsYXkgY29udHJvbGxlciBEVCBub2RlID8KCj4gPj4+ ICsgKi8KPiA+Pj4gK2ludCBkcm1fYnJpZGdlX2lucHV0X2Zvcm1hdHMoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKPiA+Pj4gKwkJCSAgICAgY29uc3QgdTMyICoqYnVzX2Zvcm1hdHMpCj4gPj4+ ICt7Cj4gPj4+ICsJaW50IHJldCA9IDA7Cj4gPj4+ICsKPiA+Pj4gKwlpZiAoIWJyaWRnZSkKPiA+ Pj4gKwkJcmV0dXJuIDA7Cj4gPj4+ICsKPiA+Pj4gKwlpZiAoYnJpZGdlLT5mdW5jcy0+aW5wdXRf Zm9ybWF0cykKPiA+Pj4gKwkJcmV0ID0gYnJpZGdlLT5mdW5jcy0+aW5wdXRfZm9ybWF0cyhicmlk Z2UsIGJ1c19mb3JtYXRzKTsKPiA+Pj4gKwo+ID4+PiArCXJldHVybiByZXQgPzogZHJtX2JyaWRn ZV9pbnB1dF9mb3JtYXRzKGJyaWRnZS0+bmV4dCwgYnVzX2Zvcm1hdHMpOwo+ID4+IAo+ID4+IFNl ZSBteSBjb21tZW50IG9uIHRoZSBjYWxsIHByb3BhZ2F0aW9uIGRvd24gaW4gdGhlIHBpcGVsaW5l Lgo+ID4+IAo+ID4+PiArfQo+ID4+PiArRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX2lucHV0X2Zv cm1hdHMpOwo+ID4+PiArCj4gPj4+ICAjaWZkZWYgQ09ORklHX09GCj4gPj4+ICAvKioKPiA+Pj4g ICAqIG9mX2RybV9maW5kX2JyaWRnZSAtIGZpbmQgdGhlIGJyaWRnZSBjb3JyZXNwb25kaW5nIHRv IHRoZSBkZXZpY2UKPiA+Pj4gICBub2RlIGluCj4gPj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fYnJpZGdlLmggYi9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4gaW5kZXggNjgy ZDAxYmE5MjBjLi5hZThkM2M0YWYwYjggMTAwNjQ0Cj4gPj4+IC0tLSBhL2luY2x1ZGUvZHJtL2Ry bV9icmlkZ2UuaAo+ID4+PiArKysgYi9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4gQEAg LTIyMCw2ICsyMjAsMjIgQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgewo+ID4+PiAgCSAqIFRo ZSBlbmFibGUgY2FsbGJhY2sgaXMgb3B0aW9uYWwuCj4gPj4+ICAJICovCj4gPj4+ICAJdm9pZCAo KmVuYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPj4+ICsKPiA+Pj4gKwkvKioK PiA+Pj4gKwkgKiBAaW5wdXRfZm9ybWF0czoKPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRoZSBjYWxs YmFjayByZXBvcnRzIHRoZSBleHBlY3RlZCBidXMgaW5wdXQgZm9ybWF0cyBvZiB0aGUKPiA+Pj4g YnJpZGdlLgo+ID4+PiArCSAqCj4gPj4+ICsJICogVGhlIEBpbnB1dF9mb3JtYXRzIGNhbGxiYWNr IGlzIG9wdGlvbmFsLiBUaGUgYnJpZGdlIGlzIGFzc3VtZWQgdG8KPiA+Pj4gKwkgKiBub3QgY29u dmVydCB0aGUgYnVzIGZvcm1hdCBpZiB0aGUgY2FsbGJhY2sgaXMgbm90IGluc3RhbGxlZC4KPiA+ Pj4gKwkgKgo+ID4+PiArCSAqIFJFVFVSTlM6Cj4gPj4+ICsJICoKPiA+Pj4gKwkgKiBaZXJvIGlm IHRoZSBicmlkZ2UgZG9lcyBub3QgY29udmVydCB0aGUgYnVzIGZvcm1hdCwgb3RoZXJ3aXNlIHRo ZQo+ID4+PiArCSAqIG51bWJlciBvZiBidXMgaW5wdXQgZm9ybWF0cyByZXR1cm5lZCBpbiAmYnVz X2Zvcm1hdHMuCj4gPj4+ICsJICovCj4gPj4+ICsJaW50ICgqaW5wdXRfZm9ybWF0cykoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+Pj4gKwkJCSAgICAgY29uc3QgdTMyICoqYnVzX2Zvcm1h dHMpOwo+ID4+IAo+ID4+IENvbnNpZGVyIGdfZm10KCkgaGVyZSBhcyB3ZWxsLCBvciBhIGZ1bmN0 aW9uIG5hbWUgdGhhdCBjYXB0dXJlcyB0aGF0IHdlCj4gPj4gd2FudCB0byBrbm93IHRoZSBzdXBw b3J0ZWQgZm9ybWF0IChhbmQgcG9zc2libHkgY29uZmlndXJlIGl0IGFzIHdlbGwKPiA+PiBvbmUg ZGF5LCBpZiBldmVyIHBvc3NpYmxlKS4KPiA+IAo+ID4gVGhlIG5hbWluZyBoZXJlIHNob3VsZCBv YnZpb3VzbHkgZm9sbG93IHRoZSBuYW1pbmcgb2YgdGhlIGV4cG9ydGVkCj4gPiBmdW5jdGlvbi4K PiA+IAo+ID4+PiAgfTsKPiA+Pj4gIAo+ID4+PiAgLyoqCj4gPj4+IEBAIC0yNjMsNiArMjc5LDgg QEAgdm9pZCBkcm1fYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4g Pj4+ICAJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7Cj4gPj4+ICB2 b2lkIGRybV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+ Pj4gIHZvaWQgZHJtX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4g Pj4+ICtpbnQgZHJtX2JyaWRnZV9pbnB1dF9mb3JtYXRzKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCj4gPj4+ICsJCQkgICAgIGNvbnN0IHUzMiAqKmJ1c19mb3JtYXRzKTsKPiA+Pj4gCj4gPj4+ ICAjaWZkZWYgQ09ORklHX0RSTV9QQU5FTF9CUklER0UKPiA+PiAgc3RydWN0IGRybV9icmlkZ2Ug KmRybV9wYW5lbF9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAoKLS0gClJlZ2Fy ZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=