From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 04/14] drm/edid: parse YCBCR 420 videomodes from EDID Date: Thu, 15 Jun 2017 19:12:54 +0300 Message-ID: <20170615161254.GE12629@intel.com> References: <1497462465-14066-1-git-send-email-shashank.sharma@intel.com> <1497462465-14066-5-git-send-email-shashank.sharma@intel.com> <20170615144312.GC12629@intel.com> <61012ee7-eb13-2487-c6ca-39c2add259a2@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <61012ee7-eb13-2487-c6ca-39c2add259a2@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Sharma, Shashank" Cc: ander.conselvan.de.oliveira@intel.com, intel-gfx@lists.freedesktop.org, Emil Velikov , Jose Abreu , dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdW4gMTUsIDIwMTcgYXQgMDk6MDU6MTBQTSArMDUzMCwgU2hhcm1hLCBTaGFzaGFu ayB3cm90ZToKPiBSZWdhcmRzCj4gCj4gU2hhc2hhbmsKPiAKPiAKPiBPbiA2LzE1LzIwMTcgODox MyBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4gT24gV2VkLCBKdW4gMTQsIDIwMTcgYXQg MTE6MTc6MzVQTSArMDUzMCwgU2hhc2hhbmsgU2hhcm1hIHdyb3RlOgo+ID4+IEhETUkgMi4wIHNw ZWMgYWRkcyBzdXBwb3J0IGZvciBZQ0JDUjQyMCBzdWItc2FtcGxlZCBvdXRwdXQuCj4gPj4gQ0VB LTg2MS1GIGFkZHMgdHdvIG5ldyBibG9ja3MgaW4gRURJRCdzIENFQSBleHRlbnNpb24gYmxvY2tz LAo+ID4+IHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgc2luaydzIFlDQkNSNDIwIG91dHB1 dCBjYXBhYmlsaXRpZXMuCj4gPj4KPiA+PiBUaGVzZSBibG9ja3MgYXJlOgo+ID4+Cj4gPj4gLSBZ Q0JDUjQyMHZkYihZQ0JDUiA0MjAgdmlkZW8gZGF0YSBibG9jayk6Cj4gPj4gVGhpcyBibG9jayBj b250YWlucyBWSUNzIG9mIHZpZGVvIG1vZGVzLCB3aGljaCBjYW4gYmUgc29wcG9ydGVkIG9ubHkK PiA+PiBpbiBZQ0JDUjQyMCBvdXRwdXQgbW9kZSAoTm90IGluIFJHQi9ZQ0JDUjQ0NC80MjIuIEl0 cyBsaWtlIGEgbm9ybWFsCj4gPj4gU1ZEIGJsb2NrLCB2YWxpZCBmb3IgWUNCQ1I0MjAgbW9kZXMg b25seS4KPiA+Pgo+ID4+IC0gWUNCQ1I0MjBjbWRiKFlDQkNSIDQyMCBjYXBhYmlsaXR5IG1hcCBk YXRhIGJsb2NrKToKPiA+PiBUaGlzIGJsb2NrIGdpdmVzIGluZm9ybWF0aW9uIGFib3V0IHZpZGVv IG1vZGVzIHdoaWNoIGNhbiBzdXBwb3J0Cj4gPj4gWUNCQ1I0MjAgb3V0cHV0IG1vZGUgYWxzbyAo YWxvbmcgd2l0aCBSR0IsWUNCQ1I0NDQvNDIyIGV0YykgVGhpcwo+ID4+IGJsb2NrIGNvbnRhaW5z IGEgYml0bWFwIGluZGV4IG9mIG5vcm1hbCBzdmQgdmlkZW9tb2Rlcywgd2hpY2ggY2FuCj4gPj4g c3VwcG9ydCBZQ0JDUjQyMCBvdXRwdXQgdG9vLgo+ID4+IFNvIGlmIGJpdCAwIGZyb20gZmlyc3Qg dmNiIGJ5dGUgaXMgc2V0LCBmaXJzdCB2aWRlbyBtb2RlIGluIHRoZSBzdmQKPiA+PiBsaXN0IGNh biBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0b28uIEJpdCAxIG1lYW5zIHNlY29uZCB2aWRlbyBt b2RlCj4gPj4gZnJvbSBzdmQgbGlzdCBjYW4gc3VwcG9ydCBZQ0JDUjQyMCBvdXRwdXQgdG9vLCBh bmQgc28gb24uCj4gPj4KPiA+PiBUaGlzIHBhdGNoIGFkZHMgdHdvIGJpdG1hcHMgaW4gZGlzcGxh eSdzIGhkbWlfaW5mbyBzdHJ1Y3R1cmUsIG9uZSBlYWNoCj4gPj4gZm9yIFZDQiBhbmQgVkRCIG1v ZGVzLiBJZiB0aGUgc291cmNlIGlzIEhETUkgMi4wIGNhcGFibGUsIHRoaXMgcGF0Y2gKPiA+PiBh ZGRzOgo+ID4+IC0gVkRCIG1vZGVzIChZQ0JDUiA0MjAgb25seSBtb2RlcykgaW4gY29ubmVjdG9y J3MgbW9kZSBsaXN0LCBhbHNvIG1ha2VzCj4gPj4gICAgYW4gZW50cnkgaW4gdGhlIHZkYl9iaXRt YXAgcGVyIHZpYy4KPiA+PiAtIFZDQiBtb2RlcyAoWUNCQ1IgNDIwIGFsc28gbW9kZXMpIG9ubHkg ZW50cnkgaW4gdGhlIHZjYl9iaXRtYXAuCj4gPj4KPiA+PiBDYzogVmlsbGUgU3lyamFsYSA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPj4gQ2M6IEpvc2UgQWJyZXUgPGpvYWJyZXVA c3lub3BzeXMuY29tPgo+ID4+IENjOiBFbWlsIFZlbGlrb3YgPGVtaWwubC52ZWxpa292QGdtYWls LmNvbT4KPiA+Pgo+ID4+IFYyOiBBZGRyZXNzZWQKPiA+PiAgICAgIFJldmlldyBjb21tZW50cyBm cm9tIEVtaWw6Cj4gPj4gICAgICAtIFVzZSAxVUxMPDxpIGluc3RlYWQgb2YgMTw8aSB0byBtYWtl IHN1cmUgdGhlIG91dHB1dCBpcyA2NGJpdC4KPiA+PiAgICAgIC0gVXNlIHRoZSBzdWdnZXN0ZWQg bWV0aG9kIGZvciB1cGRhdGluZyBkYm1hcC4KPiA+PiAgICAgIC0gQWRkIGRvY3VtZW50YXRpb24g Zm9yIFlDQkNSNDIwX3ZjYl9tYXAgdG8gZml4IGtidWlsZCB3YXJuaW5nLgo+ID4+Cj4gPj4gICAg ICBSZXZpZXcgY29tbWVudHMgZnJvbSBWaWxsZToKPiA+PiAgICAgIC0gRG8gbm90IGV4cG9zZSB0 aGUgWUNCQ1I0MjAgZmxhZ3MgaW4gdWFiaSBsYXllciwga2VlcCBpdCBpbnRlcm5hbC4KPiA+PiAg ICAgIC0gU2F2ZSBhIG1hcCBvZiBZQ0JDUjQyMCBtb2RlcyBmb3IgZnV0dXJlIHJlZmVyZW5jZS4K PiA+PiAgICAgIC0gQ2hlY2sgZGIgbGVuZ3RoIGJlZm9yZSB0cnlpbmcgdG8gcGFyc2UgZXh0ZW5k ZWQgdGFnLgo+ID4+ICAgICAgLSBBZGQgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSA+IDY0IG1vZGVz IGluIGNhcGFiaWxpdHkgbWFwIGJsb2NrLgo+ID4+ICAgICAgLSBVc2UgeTQyMGNtZGIgaW4gZnVu Y3Rpb24gbmFtZXMgYW5kIG1hY3JvcyB3aGlsZSBkZWFsaW5nIHdpdGggdmNiCj4gPj4gICAgICAg IHRvIGJlIGFsaWduZWQgd2l0aCBzcGVjLgo+ID4+ICAgICAgLSBNb3ZlIHRoZSBkaXNwbGF5IGlu Zm9ybWF0aW9uIHBhcnNpbmcgYmxvY2sgYWhlYWQgb2YgbW9kZSBwYXJzaW5nCj4gPj4gICAgICAg IGJsb2Nrcy4KPiA+Pgo+ID4+IFYzOiBBZGRyZXNzZWQgZGVzaWduL3JldmlldyBjb21tZW50cyBm cm9tIFZpbGxlCj4gPj4gICAgICAtIERvIG5vdCBhZGQgZmxhZ3MgaW4gdmlkZW8gbW9kZXMsIGVs c2Ugd2UgaGF2ZSB0byBleHBvc2UgdGhlbSB0byB1c2VyCj4gPj4gICAgICAtIFRoZXJlIHNob3Vs ZCBub3QgYmUgYSBVQUJJIGNoYW5nZSwgYW5kIGtlcm5lbCBzaG91bGQgZGV0ZWN0IHRoZQo+ID4+ ICAgICAgICBjaG9pY2Ugb2YgdGhlIG91dHB1dCBiYXNlZCBvbiB0eXBlIG9mIG1vZGUsIGFuZCB0 aGUgYml0bWFwcy4KPiA+PiAgICAgIC0gVXNlIHN0YW5kYXJkIGJpdG9wcyBmcm9tIGtlcm5lbCBi aXRtYXAgaGVhZGVyLCBpbnN0ZWFkIG9mIGNhbGN1bGF0aW5nCj4gPj4gICAgICAgIGJpdCBwb3Np dGlvbnMgbWFudWFsbHkuCj4gPj4KPiA+PiBTaWduZWQtb2ZmLWJ5OiBTaGFzaGFuayBTaGFybWEg PHNoYXNoYW5rLnNoYXJtYUBpbnRlbC5jb20+Cj4gPj4gLS0tCj4gPj4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2VkaWQuYyAgfCAxOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0KPiA+PiAgIGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCB8ICAyMyArKysrKysK PiA+PiAgIDIgZmlsZXMgY2hhbmdlZCwgMjExIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0p Cj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwo+ID4+IGluZGV4IDZmZDhhOTguLjQ5NTNmODcgMTAwNjQ0 Cj4gPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKPiA+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2VkaWQuYwo+ID4+IEBAIC0yNzgxLDcgKzI3ODEsOSBAQCBhZGRfZGV0YWls ZWRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVk aWQsCj4gPj4gICAjZGVmaW5lIFZJREVPX0JMT0NLICAgICAweDAyCj4gPj4gICAjZGVmaW5lIFZF TkRPUl9CTE9DSyAgICAweDAzCj4gPj4gICAjZGVmaW5lIFNQRUFLRVJfQkxPQ0sJMHgwNAo+ID4+ IC0jZGVmaW5lIFZJREVPX0NBUEFCSUxJVFlfQkxPQ0sJMHgwNwo+ID4+ICsjZGVmaW5lIFZJREVP X0NBUEFCSUxJVFlfQkxPQ0sgMHgwNwo+ID4+ICsjZGVmaW5lIFZJREVPX0RBVEFfQkxPQ0tfNDIw CTB4MEUKPiA+PiArI2RlZmluZSBWSURFT19DQVBfQkxPQ0tfWTQyMENNREIgMHgwRgo+ID4+ICAg I2RlZmluZSBFRElEX0JBU0lDX0FVRElPCSgxIDw8IDYpCj4gPj4gICAjZGVmaW5lIEVESURfQ0VB X1lDUkNCNDQ0CSgxIDw8IDUpCj4gPj4gICAjZGVmaW5lIEVESURfQ0VBX1lDUkNCNDIyCSgxIDw8 IDQpCj4gPj4gQEAgLTMxNDMsMTUgKzMxNDUsMTAzIEBAIGRybV9kaXNwbGF5X21vZGVfZnJvbV92 aWNfaW5kZXgoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+PiAgIAlyZXR1cm4g bmV3bW9kZTsKPiA+PiAgIH0KPiA+PiAgIAo+ID4+ICsvKgo+ID4+ICsgKiBkb195Y2Jjcl80MjBf dmRiX21vZGVzIC0gUGFyc2UgWUNCQ1IgNDIwIG9ubHkgbW9kZXMKPiA+PiArICogQGNvbm5lY3Rv cjogY29ubmVjdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEhETUkgc2luawo+ID4+ICsgKiBAc3Zk czogc3RhcnQgb2YgdGhlIGRhdGEgYmxvY2sgb2YgQ0VBIFlDQkNSIDQyMCBWREIKPiA+PiArICog QGxlbjogbGVuZ3RoIG9mIHRoZSBDRUEgWUNCQ1IgNDIwIFZEQgo+ID4+ICsgKgo+ID4+ICsgKiBD RUEtODYxLUYgaGFzIGFkZGVkIGEgbmV3IHZpZGVvIGJsb2NrIGNhbGxlZCBZQ0JDUiA0MjAgVmlk ZW8KPiA+PiArICogRGF0YSBCbG9jayAoeWNiY3IgNDIwIHZkYikuIFRoaXMgYmxvY2sgY29udGFp bnMgbW9kZXMgd2hpY2gKPiA+PiArICogc3VwcG9ydCBZQ0JDUiA0MjAgSERNSSBvdXRwdXQgKG9u bHkgWUNCQ1IgNDIwKS4gVGhpcyBmdW5jdGlvbgo+ID4+ICsgKiBwYXJzZXMgdGhlIGJsb2NrIGFu ZCBhZGRzIHRoZXNlIG1vZGVzIGludG8gY29ubmVjdG9yJ3MgbW9kZSBsaXN0Lgo+ID4gU2VlbXMg YSBiaXQgdmVyYm9zZS4gTWF5YmUgc29tZXRoaW5nIGxpa2U6Cj4gPiAiUGFyc2UgdGhlIENFQS04 NjEtRiBZQ2JDciA0OjI6MCBWaWRlbyBEYXRhIEJsb2NrIChZNDIwVkRCKQo+ID4gd2hpY2ggY29u dGFpbnMgbW9kZXMgd2hpY2ggb25seSBzdXBwb3J0IFlDYkNyIDQ6MjowIG91dHB1dC4iCj4gR290 IGl0Lgo+ID4+ICsgKi8KPiA+PiArc3RhdGljIGludCBkb195Y2Jjcl80MjBfdmRiX21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPj4gKwkJCQkgICBjb25zdCB1OCAqc3Zk cywgdTggc3Zkc19sZW4pCj4gPiBQcm9iYWJseSB3ZSBjb3VsZCBzL3ljYmNyXzQyMF92ZGIveTQy MHZkYi8gYWxsIG92ZXIgdG8ga2VlcCB0aGluZ3MKPiA+IHNob3J0ZXIgYW5kIG1hdGNoIHRoZSB0 ZXJtaW5vbG9neSBpbiB0aGUgc3BlYy4gU2FtZSBmb3IgeTQyMGNtZGIuCj4gR290IGl0Lgo+ID4+ ICt7Cj4gPj4gKwlpbnQgbW9kZXMgPSAwLCBpOwo+ID4+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21v ZGU7Cj4gPiBUaGlzIHZhcmlhYmxlIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBsb29wIHNjb3BlLgo+ IE9rLgo+ID4+ICsJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5k aXNwbGF5X2luZm87Cj4gPj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAqaGRtaSA9ICZpbmZvLT5o ZG1pOwo+ID4+ICsKPiA+PiArCWZvciAoaSA9IDA7IGkgPCBzdmRzX2xlbjsgaSsrKSB7Cj4gPj4g KwkJdTggdmljID0gc3Zkc1tpXSAmIDB4N2Y7Cj4gPiBXaGF0J3MgdGhlIDB4N2YgaGVyZT8gTmF0 aXZlIGJpdCBzdHVmZj8gSSdtIHRoaW5raWduIHdlIHByb2JhYmx5IHdhbnQKPiA+IHNvbWUga2lu ZCBvZiBzdmRfdG9fdmljKCkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIGV2ZXJ5b25lIGRlYWxzIHdp dGgKPiA+IHRoaXMgc3R1ZmYgY29ycmVjdGx5Lgo+IEN1cnJlbnQgVklDcyBhcmUgMSA8IFZJQyA8 IDEwOCwgc28gc2V2ZW4gYml0cyByZXF1aXJlZCB0byBzaG93IGEgVklDLiAKPiBUaGlzIGlzIGlu c3BpcmVkIGZyb20KPiBkcm1fbW9kZV9mcm9tX2NlYV92aWNfaW5kZXgoKS4KPiA+PiArCj4gPj4g KwkJbmV3bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZlZGlkX2NlYV9tb2Rlc1t2aWNd KTsKPiA+PiArCQlpZiAoIW5ld21vZGUpCj4gPj4gKwkJCWJyZWFrOwo+ID4+ICsJCS8qCj4gPj4g KwkJICogeWNiY3I0MjBfdmRiX21vZGVzIGlzIGEgZml4IHBvc2l0aW9uIDEyOCBiaXQgYml0bWFw Lgo+ID4+ICsJCSAqIEV2ZXJ5IGJpdCBoZXJlIHJlcHJlc2VudHMgYSBWSUMsIGZyb20gQ0VBLTg2 MS1GIGxpc3QuCj4gPj4gKwkJICogU28gaWYgYml0W25dIGlzIHNldCwgaXQgaW5kaWNhdGVzIHZp Y1tuKzFdIHN1cHBvcnRzCj4gPj4gKwkJICogWUNCQ1I0MjAgb3V0cHV0LiBCaXQgMCBpcyBkdW1t eSwgYXMgVklDcyBzdGFydCBhdCAxLgo+ID4+ICsJCSAqIHljYmNyNDIwX3ZjYl9tb2Rlc1swXSA9 IHxWSUM9NjQgfFZJQz02MyB8Li4uLi58VklDPTIgfFZJQz0xIHwKPiA+PiArCQkgKiB5Y2JjcjQy MF92Y2JfbW9kZXNbMV0gPSB8VklDPTEyOHxWSUM9MTI3fC4uLi4ufFZJQz02NnxWSUM9NjV8Cj4g Pj4gKwkJICovCj4gPiBJIHRoaW5rIHBlb3BsZSBjYW4gZmlndXJlIG91dCBob3cgdGhlIHN0YW5k YXJkIGJpdG1hcHMgd29yayB3aXRob3V0Cj4gPiBoYXZpbmcgdG8gZXhwbGFpbiBpdCB3aXRoIHN1 Y2ggZGV0YWlsLiBJZiB5b3Ugd2FudCB0byBlbGFib3JhdGUgb24gdGhlCj4gPiBjb250ZW50cyBv ZiB0aGUgYml0bWFwLCB0aGVuIEkgdGhpbmsgdGhlIGNvbW1lbnQgc2hvdWxkIGJlIG5leHQgdG8K PiA+IHdoZXJlIHRoZSBiaXRtYXAgaXMgZGVmaW5lZC4KPiBUaGVyZSBpcyBhbHJlYWR5IHNpbWls YXIgZXhwbGFuYXRpb24gOiksIEkgd2lsbCBwcm9iYWJseSByZW1vdmUgdGhpcy4KPiA+PiArCQli aXRtYXBfc2V0KGhkbWktPnljYmNyNDIwX3ZkYl9tb2RlcywgdmljLCAxKTsKPiA+IF9fc2V0X2Jp dCgpCj4gQW55IGhhcm0gb24gYml0bWFwX3NldCA/IEkgZ3Vlc3MgdGhpcyBpcyBzcGVjaWFsbHkg Zm9yIGJpdG1hcHMgLi4uCj4gPgo+ID4+ICsJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9y LCBuZXdtb2RlKTsKPiA+PiArCQltb2RlcysrOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCWlmICht b2RlcyA+IDApCj4gPj4gKwkJaW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFU X1lDUkNCNDIwOwo+ID4+ICsJcmV0dXJuIG1vZGVzOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICsvKgo+ ID4+ICsgKiBkcm1fYWRkX3ZjYl9tb2RlcyAtIEFkZCBhIFlDQkNSIDQyMCBtb2RlIGludG8gYml0 bWFwCj4gPj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBI RE1JIHNpbmsKPiA+PiArICogQHZpYzogQ0VBIHZpYyBmb3IgdGhlIHZpZGVvIG1vZGUgdG8gYmUg YWRkZWQgaW4gdGhlIG1hcAo+ID4+ICsgKgo+ID4+ICsgKiBNYWtlcyBhbiBlbnRyeSBmb3IgYSB2 aWRlb21vZGUgaW4gdGhlIFlDQkNSIDQyMCBiaXRtYXAKPiA+PiArICovCj4gPj4gK3N0YXRpYyB2 b2lkCj4gPj4gK2RybV9hZGRfdmNiX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsIHU4IHZpYykKPiA+IFRoZSAidmNiIiB0ZXJtIGRvZXNuJ3Qgc2VlbSB0byBiZSBpbiB0aGUg c3BlYy4gU2hvdWxkIGJlICJjbWRiIiBtYXliZT8KPiA+Cj4gPiBPciBtYXliZSB3ZSB3YW50IHlj YmNyNDIwX3ZkYl9tb2RlcyBhbmQgeWNiY3I0MjBfeTQyMHZkYl9tb2RlcyBqdXN0IHRvCj4gPiBt YWtlIGl0IGNsZWFyIHRvIHdoaWNoIFZEQiB0aGV5IHJlbGF0ZSB3aXRoLgo+IGNtZGIgc2VlbXMg YXBwcm9wcmlhdGUsIHdoaWNoIGlzIGFsaWduZWQgdG8gdGhlIHNwZWMgdG9vLCB3aWxsIGRvIHRo ZSAKPiBjaGFuZ2UuCj4gPgo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAqaGRt aSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pOwo+ID4+ICsKPiA+PiArCS8qIFZJQ3Mg YXJlIDEgdG8gMTI3KDEwNyBkZWZpbmVkIHRpbGwgQ0VBLTg2MS1GKSAqLwo+ID4+ICsJdmljICY9 IDEyNzsKPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJICogeWNiY3I0MjBfdmNiX21vZGVzIGlzIGEg Zml4IHBvc2l0aW9uIDEyOCBiaXQgYml0bWFwLgo+ID4+ICsJICogRXZlcnkgYml0IGhlcmUgcmVw cmVzZW50cyBhIFZJQywgZnJvbSBDRUEtODYxLUYgbGlzdC4KPiA+PiArCSAqIFNvIGlmIGJpdFtu XSBpcyBzZXQsIGl0IGluZGljYXRlcyB2aWNbbisxXSBzdXBwb3J0cwo+ID4+ICsJICogWUNCQ1I0 MjAgb3V0cHV0LiBCaXQgMCBpcyBkdW1teSwgYXMgVklDcyBzdGFydCBhdCAxLgo+ID4+ICsJICog eWNiY3I0MjBfdmNiX21vZGVzWzBdID0gfFZJQz02NCB8VklDPTYzIHwuLi4uLnxWSUM9MiB8VklD PTEgfAo+ID4+ICsJICogeWNiY3I0MjBfdmNiX21vZGVzWzFdID0gfFZJQz0xMjh8VklDPTEyN3wu Li4uLnxWSUM9NjZ8VklDPTY1fAo+ID4+ICsJICogRGlmZmVyZW5jZSBiZXR3ZWVuIGEgdmNiX21v ZGUgYW5kIHZkYl9tb2RlIGlzIHRoYXQgYSB2Y2JfbW9kZQo+ID4+ICsJICogY2FuIHN1cHBvcnQg b3RoZXIgSERNSSBvdXRwdXRzIGxpa2UgUkdCL1lDQkNSNDQ0LzQyMiBhbHNvCj4gPj4gKwkgKiBh bG9uZyB3aXRoIFlDQkNSIDI0MCwgd2hlcmVhcyBhIHZkYl9tb2RlIGNhbiBvbmx5IHN1cHBvcnQg WUNCQ1IKPiA+PiArCSAqIDQyMCBIRE1JIG91dHB1dC4KPiA+PiArCSAqLwo+ID4+ICsJYml0bWFw X3NldChoZG1pLT55Y2JjcjQyMF92Y2JfbW9kZXMsIHZpYywgMSk7Cj4gPj4gK30KPiA+PiArCj4g Pj4gICBzdGF0aWMgaW50Cj4gPj4gICBkb19jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgY29uc3QgdTggKmRiLCB1OCBsZW4pCj4gPj4gICB7Cj4gPj4gICAJaW50IGks IG1vZGVzID0gMDsKPiA+PiArCXN0cnVjdCBkcm1faGRtaV9pbmZvICpoZG1pID0gJmNvbm5lY3Rv ci0+ZGlzcGxheV9pbmZvLmhkbWk7Cj4gPj4gICAKPiA+PiAgIAlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspIHsKPiA+PiAgIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gPj4gICAJ CW1vZGUgPSBkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmljX2luZGV4KGNvbm5lY3RvciwgZGIsIGxl biwgaSk7Cj4gPj4gICAJCWlmIChtb2RlKSB7Cj4gPj4gKwkJCS8qCj4gPj4gKwkJCSAqIFlDQkNS NDIwIGNhcGFiaWxpdHkgYmxvY2sgY29udGFpbnMgYSBiaXRtYXAgd2hpY2gKPiA+PiArCQkJICog Z2l2ZXMgdGhlIGluZGV4IG9mIENFQSBtb2RlcyBmcm9tIENFQSBWREIsIHdoaWNoCj4gPj4gKwkJ CSAqIGNhbiBzdXBwb3J0IFlDQkNSIDQyMCBzYW1wbGluZyBvdXRwdXQgYWxzbyAoYXBhcnQKPiA+ PiArCQkJICogZnJvbSBSR0IvWUNCQ1I0NDQgZXRjKS4KPiA+PiArCQkJICogRm9yIGV4YW1wbGUs IGlmIHRoZSBiaXQgMCBpbiBiaXRtYXAgaXMgc2V0LAo+ID4+ICsJCQkgKiBmaXJzdCBtb2RlIGlu IFZEQiBjYW4gc3VwcG9ydCBZQ0JDUjQyMCBvdXRwdXQgdG9vLgo+ID4+ICsJCQkgKiBBZGQgWUNC Q1I0MjAgbW9kZXMgb25seSBpZiBzaW5rIGlzIEhETUkgMi4wIGNhcGFibGUuCj4gPj4gKwkJCSAq Lwo+ID4+ICsJCQlpZiAoY29ubmVjdG9yLT5pc19oZG1pMl9zcmMgJiYKPiA+IEhtbS4gSSB3b25k ZXIgaWYgbmVlZCB0aGlzIGhlcmUgYXQgYWxsLiBJIGd1ZXNzIHdlIGRvIG5lZWQgc29tZXRoaW5n IGZvcgo+ID4gdGhlICI0MjAgb25seSIgbW9kZXMsIGJ1dCBub3Qgc3VyZSBpZiBpdCBzaG91bGQg YmUgaGVyZSBvciBpZiB3ZSBzaG91bGQKPiA+IHJlamVjdCB0aGVtIG9ubHkgZHVyaW5nIG1vZGUg dmFsaWRhdGlvbi4gVGhlIGxhdHRlciB3b3VsZCBiZSBuaWNlCj4gPiBiZWNhdXNlIGl0IHdvdWxk IHRoZW4gbGVhdmUgYSBtZXNzYWdlIGludG8gdGhlIGxvZyB0aGF0IHRoZSBtb2RlIHdhcwo+ID4g cHJlc2VudCBidXQgd2FzIHJlamVjdGVkLgo+IFNlZW1zIGxpa2UgYSBnb29kIGlkZWEsIHRoZSBv bmx5IGJlbmVmaXQgb2YgZG9pbmcgdGhpcyBpcywgdGhpcyBpcyBpbiAKPiBEUk0gbGF5ZXIsIGFu ZCB3aWxsIHByb3RlY3Qgb3RoZXIgZHJpdmVycwo+IGZyb20gYWNjaWRlbnRhbGx5IGFkZGluZyA0 MjBfdmNiIG1vZGVzLiBNb2RlIHZhbGlkIHdvdWxkIGJlIGludGVybmFsIHRvIAo+IGRyaXZlciwg YW5kIGFwcGxpY2FibGUgaW4gSTkxNSBsYXllci4KCk5vLCB3ZSBzaG91bGQgcHV0IGludG8gdGhl IHByb2JlIGhlbHBlcnMgc3RhbmRhcmQgbW9kZSB2YWxpZGF0aW9uIHN0dWZmLgpObyBkcml2ZXIg c3BlY2lmaWNzIG5lZWRlZCBhcGFydCBmcm9tIHNldHRpbmcgdGhlIHN1cHBvcnRfeWNiY3I0MjAg b3IKd2hhdGV2ZXIgZmxhZy4KCj4gU28geW91ciB3aXNoIGlzIG15IGNvbW1hbmQgOikKPiA+IEkn bSB0aGlua2luZyB3ZSBzaG91bGQgcHJvYmFibHkgY2FsbCB0aGlzCj4gPiBmbGFnIHljYmNyNDIw X2FsbG93ZWQgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB0byBtYXRjaCB0aGUgb3RoZXIKPiA+IGZv b19hbGxvd2VkIGZsYWdzIHdlIGhhdmUgaW4gdGhlIGNvbm5lY3RvciBmb3IgbW9kZSB2YWxpZGF0 aW9uLgo+IEkgZG9uJ3QgbGlrZSB0aGF0IGhvbmVzdGx5LiBJIGFtIGhvcGluZyB0aGF0IHRoaXMg ZmxhZyB3b3VsZCBiZSB1c2VkIAo+IGZ1cnRoZXIsIHRvIGlkZW50aWZ5IGEgSERNSSAyLjAgc3Jj IG92ZXIgSERNSSAxLjQKCkFuZCB3aGF0IGhhcHBlbnMgd2hlbiB3aGVuIHlvdSBoYXZlIGFuIG90 aGVyd2lzZSBIRE1JIDIuMCBjYXBhYmxlCnNvdXJjZSB0aGF0IGNhbid0IG91dHB1dCBZQ2JDciA0 OjI6MD8KCj4gc291cmNlLCBiZXlvbmQgWUNCQ1I0MjAgZmVhdHVyZSwgYW5kIGF0IHRoYXQgdGlt ZSwgaXQgbWlnaHQgYmUgbW9yZSAKPiBzdWl0YWJsZSB0byBoYXZlIGhkbWlfMl9zcmMuIERvZXMg aXQgbWFrZSBzZW5zZSA/Cj4gPiBTbyBJIHRoaW5rIHRoaXMgY291bGQgcGVyaGFwcyBqdXN0IGJl IGFuIHVuY29kaXRpb25hbAo+ID4gaWYgKHRlc3RfYml0KGksIC4uLikpCj4gPiAJX19zZXRfYml0 KHZpYywgLi4uKTsKPiA+Cj4gPj4gKwkJCQl0ZXN0X2JpdChpLCAmaGRtaS0+eWNiY3I0MjBfdmNi X21hcCkpCj4gPj4gKwkJCQlkcm1fYWRkX3ZjYl9tb2Rlcyhjb25uZWN0b3IsIGRiW2ldKTsKPiA+ PiArCj4gPj4gICAJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4gPj4g ICAJCQltb2RlcysrOwo+ID4+ICAgCQl9Cj4gPj4gQEAgLTM0MjcsNiArMzUxNywxMiBAQCBkb19o ZG1pX3ZzZGJfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgY29uc3QgdTgg KmRiLCB1OCBsZW4sCj4gPj4gICB9Cj4gPj4gICAKPiA+PiAgIHN0YXRpYyBpbnQKPiA+PiArY2Vh X2RiX2V4dGVuZGVkX3RhZyhjb25zdCB1OCAqZGIpCj4gPj4gK3sKPiA+PiArCXJldHVybiBkYlsx XTsKPiA+PiArfQo+ID4gQ291bGQgeW91IGNsZWFuIHVwIHRoZSBjdXJyZW50IGV4dGVuZGVkIHRh ZyB1c2FnZSBhcyBhIHNlcGFyYXRlCj4gPiBwcmVwIHBhdGNoPyBXb3VsZCBiZSBuaWNlIHRvIGF2 b2lkIHRoZSBjb25mdXNpb24gb2YgY2FsbGluZyB0aGUKPiA+ICJVc2UgZXh0ZW5kZWQgdGFnIiB0 YWcgVklERU9fQ0FQQUJJTElUWV9CTE9DSy4KPiBTdXJlLCBhZGRpbmcgaW4gbXkgdG8tZG8gbGlz dC4KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQKPiA+PiAgIGNlYV9kYl9wYXlsb2FkX2xlbihjb25z dCB1OCAqZGIpCj4gPj4gICB7Cj4gPj4gICAJcmV0dXJuIGRiWzBdICYgMHgxZjsKPiA+PiBAQCAt MzQ4Nyw5ICszNTgzLDgxIEBAIHN0YXRpYyBib29sIGNlYV9kYl9pc19oZG1pX2ZvcnVtX3ZzZGIo Y29uc3QgdTggKmRiKQo+ID4+ICAgCXJldHVybiBvdWkgPT0gSERNSV9GT1JVTV9JRUVFX09VSTsK PiA+PiAgIH0KPiA+PiAgIAo+ID4+ICtzdGF0aWMgYm9vbCBjZWFfZGJfaXNfeWNiY3JfNDIwX2Nt ZGIoY29uc3QgdTggKmRiKQo+ID4+ICt7Cj4gPj4gKwl1OCBsZW4gPSBjZWFfZGJfcGF5bG9hZF9s ZW4oZGIpOwo+ID4gJ2xlbicgc2VlbXMgbGlrZSBhIGZhaXJseSBwb2ludGxlc3MgdmFyaWFibGUg c2luY2UgaXQncyB1c2VkIGV4YWN0bHkKPiA+IG9uY2UuCj4gQWdyZWUsCj4gPgo+ID4+ICsKPiA+ PiArCWlmIChjZWFfZGJfdGFnKGRiKSAhPSBWSURFT19DQVBBQklMSVRZX0JMT0NLKQo+ID4+ICsJ CXJldHVybiBmYWxzZTsKPiA+PiArCj4gPj4gKwlpZiAoIWxlbikKPiA+PiArCQlyZXR1cm4gZmFs c2U7Cj4gPj4gKwo+ID4+ICsJaWYgKGNlYV9kYl9leHRlbmRlZF90YWcoZGIpICE9IFZJREVPX0NB UF9CTE9DS19ZNDIwQ01EQikKPiA+PiArCQlyZXR1cm4gZmFsc2U7Cj4gPj4gKwo+ID4+ICsJcmV0 dXJuIHRydWU7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBib29sIGNlYV9kYl9pc195Y2Jj cl80MjBfdmRiKGNvbnN0IHU4ICpkYikKPiA+PiArewo+ID4+ICsJaWYgKGNlYV9kYl90YWcoZGIp ICE9IFZJREVPX0NBUEFCSUxJVFlfQkxPQ0spCj4gPj4gKwkJcmV0dXJuIGZhbHNlOwo+ID4+ICsK PiA+IExlbmd0aCBjaGVjayBtaXNzaW5nLgo+IE9vcHMsIGdvdCBpdC4KPiA+PiArCWlmIChjZWFf ZGJfZXh0ZW5kZWRfdGFnKGRiKSAhPSBWSURFT19EQVRBX0JMT0NLXzQyMCkKPiA+PiArCQlyZXR1 cm4gZmFsc2U7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIHRydWU7Cj4gPj4gK30KPiA+PiArCj4gPj4g ICAjZGVmaW5lIGZvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0LCBlbmQpIFwKPiA+PiAgIAlm b3IgKChpKSA9IChzdGFydCk7IChpKSA8IChlbmQpICYmIChpKSArIGNlYV9kYl9wYXlsb2FkX2xl bigmKGNlYSlbKGkpXSkgPCAoZW5kKTsgKGkpICs9IGNlYV9kYl9wYXlsb2FkX2xlbigmKGNlYSlb KGkpXSkgKyAxKQo+ID4+ICAgCj4gPj4gK3N0YXRpYyB2b2lkIGRybV9wYXJzZV95NDIwY21kYl9i aXRtYXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+PiArCQkJCSAgICAgY29u c3QgdTggKmRiKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbyA9 ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKPiA+PiArCXN0cnVjdCBkcm1faGRtaV9pbmZvICpo ZG1pID0gJmluZm8tPmhkbWk7Cj4gPj4gKwl1OCBtYXBfbGVuID0gY2VhX2RiX3BheWxvYWRfbGVu KGRiKSAtIDE7Cj4gPj4gKwl1OCBjb3VudDsKPiA+PiArCXU2NCBtYXAgPSAwOwo+ID4+ICsKPiA+ PiArCWlmICghZGIpCj4gPj4gKwkJcmV0dXJuOwo+ID4gQ2FuJ3QgaGFwcGVuLgo+IEkgYXNzdW1l ZCB5b3Ugd2VyZSBjb252aW5jZSBvbiBteSBwcmV2aW91cyAobGFtZSkgZXhjdXNlIG9mIGNvcnJ1 cHQgZGIgOikKPiBXaWxsIHJlbW92ZSB0aGlzIGNoZWNrLgo+ID4KPiA+PiArCj4gPj4gKwlpZiAo bWFwX2xlbiA9PSAwKSB7Cj4gPj4gKwkJLyogQWxsIENFQSBtb2RlcyBzdXBwb3J0IHljYmNyNDIw IHNhbXBsaW5nIGFsc28uKi8KPiA+PiArCQloZG1pLT55Y2JjcjQyMF92Y2JfbWFwID0gVTY0X01B WDsKPiA+PiArCQlpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0 MjA7Cj4gPj4gKwkJcmV0dXJuOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCS8qCj4gPj4gKwkgKiBU aGlzIG1hcCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGV4aXN0aW5nIENFQSBibG9jayBtb2Rlcwo+ ID4+ICsJICogZnJvbSBWREIgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRvby4gU28gaWYg Yml0PTAgaXMKPiA+PiArCSAqIHNldCwgZmlyc3QgbW9kZSBmcm9tIFZEQiBjYW4gc3VwcG9ydCBZ Q0JDUjQyMCBvdXRwdXQgdG9vLgo+ID4+ICsJICogV2Ugd2lsbCBwYXJzZSBhbmQga2VlcCB0aGlz IG1hcCwgYmVmb3JlIHBhcnNpbmcgVkRCIGl0c2VsZgo+ID4+ICsJICogdG8gYXZvaWQgZ29pbmcg dGhyb3VnaCB0aGUgc2FtZSBibG9jayBhZ2FpbiBhbmQgYWdhaW4uCj4gPj4gKwkgKgo+ID4+ICsJ ICogU3BlYyBpcyBub3QgY2xlYXIgYWJvdXQgbWF4IHBvc3NpYmxlIHNpemUgb2YgdGhpcyBibG9j ay4KPiA+PiArCSAqIENsYW1waW5nIG1heCBiaXRtYXAgYmxvY2sgc2l6ZSBhdCA4IGJ5dGVzLiBF dmVyeSBieXRlIGNhbgo+ID4+ICsJICogYWRkcmVzcyA4IENFQSBtb2RlcywgaW4gdGhpcyB3YXkg dGhpcyBtYXAgY2FuIGFkZHJlc3MKPiA+PiArCSAqIDgqOCA9IGZpcnN0IDY0IFNWRHMuCj4gPj4g KwkgKi8KPiA+PiArCWlmIChXQVJOX09OX09OQ0UobWFwX2xlbiA+IDgpKQo+ID4+ICsJCW1hcF9s ZW4gPSA4Owo+ID4+ICsKPiA+PiArCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG1hcF9sZW47IGNv dW50KyspCj4gPj4gKwkJbWFwIHw9ICh1NjQpZGJbMiArIGNvdW50XSA8PCAoOCAqIGNvdW50KTsK PiA+PiArCj4gPj4gKwlpZiAobWFwKSB7Cj4gPj4gKwkJRFJNX0RFQlVHX0tNUygiU2luayBzdXBw b3J0cyB5Y2JjciA0MjBcbiIpOwo+ID4gSWYgd2Ugd2FudCB0byBwcmludCBzb21ldGhpbmcgYWJv dXQgdGhlIHNpbmtzIGNvbG9yIGNhcGFiaWxpdGllcyBJIHRoaW5rCj4gPiBpdCBzaG91bGQgYmUg aW4gY2VudHJhbCBwbGFjZSBpbnN0ZWFkIG9mIGJlaW5nIHNwcmlua2xlZCBhbGwgb3ZlciB0aGUK PiA+IHBsYWNlLgo+IFllcywgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4gSSB3aWxsIHJlbW92ZSB0 aGlzLCBhbmQgbWF5IGJlIGFkZCBhIAo+IHNlcGFyYXRlIHBhdGNoIHRvIGR1bXAKPiBzaW5rIGNh cGFiaWxpdGllcy4KPiA+PiArCQlpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERSTV9DT0xPUl9GT1JN QVRfWUNSQ0I0MjA7Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJaGRtaS0+eWNiY3I0MjBfdmNiX21h cCA9IG1hcDsKPiA+PiArfQo+ID4+ICsKPiA+PiAgIHN0YXRpYyBpbnQKPiA+PiAgIGFkZF9jZWFf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQp Cj4gPj4gICB7Cj4gPj4gQEAgLTM1MTIsMTAgKzM2ODAsMTcgQEAgYWRkX2NlYV9tb2RlcyhzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKPiA+PiAgIAkJ CQl2aWRlbyA9IGRiICsgMTsKPiA+PiAgIAkJCQl2aWRlb19sZW4gPSBkYmw7Cj4gPj4gICAJCQkJ bW9kZXMgKz0gZG9fY2VhX21vZGVzKGNvbm5lY3RvciwgdmlkZW8sIGRibCk7Cj4gPj4gLQkJCX0K PiA+PiAtCQkJZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlfdnNkYihkYikpIHsKPiA+PiArCQkJfSBl bHNlIGlmIChjZWFfZGJfaXNfaGRtaV92c2RiKGRiKSkgewo+ID4+ICAgCQkJCWhkbWkgPSBkYjsK PiA+PiAgIAkJCQloZG1pX2xlbiA9IGRibDsKPiA+PiArCQkJfSBlbHNlIGlmIChjZWFfZGJfaXNf eWNiY3JfNDIwX3ZkYihkYikgJiYKPiA+PiArCQkJCQljb25uZWN0b3ItPmlzX2hkbWkyX3NyYykg ewo+ID4gQnJva2VuIGluZGVudGF0aW9uIGluIGEgYnVuY2ggb2YgcGxhY2VzLgo+IERhbW4sIEkg dGhvdWdodCBJIGFtIGltcHJvdmluZyA6KAo+ID4KPiA+PiArCQkJCWNvbnN0IHU4ICp2ZGI0MjAg PSAmZGJbMl07Cj4gPj4gKwo+ID4+ICsJCQkJLyogQWRkIDQ6MjowKG9ubHkpIG1vZGVzIHByZXNl bnQgaW4gRURJRCAqLwo+ID4+ICsJCQkJbW9kZXMgKz0gZG9feWNiY3JfNDIwX3ZkYl9tb2Rlcyhj b25uZWN0b3IsCj4gPj4gKwkJCQkJCQkJdmRiNDIwLAo+ID4+ICsJCQkJCQkJCWRibCAtIDEpOwo+ ID4+ICAgCQkJfQo+ID4+ICAgCQl9Cj4gPj4gICAJfQo+ID4+IEBAIC00MTk2LDYgKzQzNzEsOCBA QCBzdGF0aWMgdm9pZCBkcm1fcGFyc2VfY2VhX2V4dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+ID4+ICAgCQkJZHJtX3BhcnNlX2hkbWlfdnNkYl92aWRlbyhjb25uZWN0b3IsIGRi KTsKPiA+PiAgIAkJaWYgKGNlYV9kYl9pc19oZG1pX2ZvcnVtX3ZzZGIoZGIpKQo+ID4+ICAgCQkJ ZHJtX3BhcnNlX2hkbWlfZm9ydW1fdnNkYihjb25uZWN0b3IsIGRiKTsKPiA+PiArCQlpZiAoY2Vh X2RiX2lzX3ljYmNyXzQyMF9jbWRiKGRiKSkKPiA+PiArCQkJZHJtX3BhcnNlX3k0MjBjbWRiX2Jp dG1hcChjb25uZWN0b3IsIGRiKTsKPiA+PiAgIAl9Cj4gPj4gICB9Cj4gPj4gICAKPiA+PiBAQCAt NDQzMCw2ICs0NjA3LDEzIEBAIGludCBkcm1fYWRkX2VkaWRfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpCj4gPj4gICAJcXVpcmtzID0gZWRp ZF9nZXRfcXVpcmtzKGVkaWQpOwo+ID4+ICAgCj4gPj4gICAJLyoKPiA+PiArCSAqIENFQS04NjEt RiBhZGRzIHljYmNyIGNhcGFiaWxpdHkgbWFwIGJsb2NrLCBmb3IgSERNSSAyLjAgc2lua3MuCj4g Pj4gKwkgKiBUbyBhdm9pZCBtdWx0aXBsZSBwYXJzaW5nIG9mIHNhbWUgYmxvY2ssIGxldHMgZ2V0 IHRoZSBzaW5rIGluZm8KPiA+PiArCSAqIGJlZm9yZSBwYXJzaW5nIENFQSBtb2Rlcy4KPiA+PiAr CSAqLwo+ID4+ICsJZHJtX2FkZF9kaXNwbGF5X2luZm8oY29ubmVjdG9yLCBlZGlkKTsKPiA+PiAr Cj4gPj4gKwkvKgo+ID4+ICAgCSAqIEVESUQgc3BlYyBzYXlzIG1vZGVzIHNob3VsZCBiZSBwcmVm ZXJyZWQgaW4gdGhpcyBvcmRlcjoKPiA+PiAgIAkgKiAtIHByZWZlcnJlZCBkZXRhaWxlZCBtb2Rl Cj4gPj4gICAJICogLSBvdGhlciBkZXRhaWxlZCBtb2RlcyBmcm9tIGJhc2UgYmxvY2sKPiA+PiBA QCAtNDQ1MCwxNCArNDYzNCwxMyBAQCBpbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKQo+ID4+ICAgCW51bV9tb2Rl cyArPSBhZGRfY2VhX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7Cj4gPj4gICAJbnVtX21vZGVzICs9 IGFkZF9hbHRlcm5hdGVfY2VhX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7Cj4gPj4gICAJbnVtX21v ZGVzICs9IGFkZF9kaXNwbGF5aWRfZGV0YWlsZWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+ PiArCj4gPj4gICAJaWYgKGVkaWQtPmZlYXR1cmVzICYgRFJNX0VESURfRkVBVFVSRV9ERUZBVUxU X0dURikKPiA+PiAgIAkJbnVtX21vZGVzICs9IGFkZF9pbmZlcnJlZF9tb2Rlcyhjb25uZWN0b3Is IGVkaWQpOwo+ID4+ICAgCj4gPj4gICAJaWYgKHF1aXJrcyAmIChFRElEX1FVSVJLX1BSRUZFUl9M QVJHRV82MCB8IEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzc1KSkKPiA+PiAgIAkJZWRpZF9maXh1 cF9wcmVmZXJyZWQoY29ubmVjdG9yLCBxdWlya3MpOwo+ID4+ICAgCj4gPj4gLQlkcm1fYWRkX2Rp c3BsYXlfaW5mbyhjb25uZWN0b3IsIGVkaWQpOwo+ID4+IC0KPiA+IEkgdGhpbmsgdGhpcyBjb3Vs ZCBiZSBhIHNlcGFyYXRlIHBhdGNoLCBqdXN0IGluIGNhc2UgaXQgY2F1c2VzIGEKPiA+IHJlZ3Jl c3Npb24uCj4gR290IGl0Lgo+ID4KPiA+PiAgIAlpZiAocXVpcmtzICYgRURJRF9RVUlSS19GT1JD RV82QlBDKQo+ID4+ICAgCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgPSA2Owo+ID4+ICAg Cj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCBiL2luY2x1ZGUv ZHJtL2RybV9jb25uZWN0b3IuaAo+ID4+IGluZGV4IDM5MDMxOWMuLjVhNDdjMzMgMTAwNjQ0Cj4g Pj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gPj4gKysrIGIvaW5jbHVkZS9k cm0vZHJtX2Nvbm5lY3Rvci5oCj4gPj4gQEAgLTEzNyw2ICsxMzcsMjggQEAgc3RydWN0IGRybV9z Y2RjIHsKPiA+PiAgIHN0cnVjdCBkcm1faGRtaV9pbmZvIHsKPiA+PiAgIAkvKiogQHNjZGM6IHNp bmsncyBzY2RjIHN1cHBvcnQgYW5kIGNhcGFiaWxpdGllcyAqLwo+ID4+ICAgCXN0cnVjdCBkcm1f c2NkYyBzY2RjOwo+ID4+ICsKPiA+PiArCS8qKgo+ID4+ICsJICogQHljYmNyNDIwX3ZkYl9tb2Rl czogYml0bWFwIG9mIG1vZGVzIHdoaWNoIGNhbiBzdXBwb3J0IHljYmNyNDIwCj4gPj4gKwkgKiBv dXRwdXQgb25seSAobm90IG5vcm1hbCBSR0IvWUNCQ1I0NDQvNDIyIG91dHB1dHMpLiBUaGVyZSBh cmUgdG90YWwKPiA+PiArCSAqIDEwNyBWSUNzIGRlZmluZWQgYnkgQ0VBLTg2MS1GIHNwZWMsIHNv IHRoZSBzaXplIGlzIDEyOCBiaXRzIHRvIG1hcAo+ID4+ICsJICogdXB0byAxMjggVklDczsKPiA+ PiArCSAqLwo+ID4+ICsJdW5zaWduZWQgbG9uZyB5Y2JjcjQyMF92ZGJfbW9kZXNbQklUU19UT19M T05HUygxMjgpXTsKPiA+PiArCj4gPj4gKwkvKioKPiA+PiArCSAqIEB5Y2JjcjQyMF92Y2JfbW9k ZXM6IGJpdG1hcCBvZiBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydCB5Y2JjcjQyMAo+ID4+ICsJICog b3V0cHV0IGFsc28sIGFsb25nIHdpdGggbm9ybWFsIEhETUkgb3V0cHV0cy4gVGhlcmUgYXJlIHRv dGFsIDEwNwo+ID4+ICsJICogVklDcyBkZWZpbmVkIGJ5IENFQS04NjEtRiBzcGVjLCBzbyB0aGUg c2l6ZSBpcyAxMjggYml0cyB0byBtYXAgdXB0bwo+ID4+ICsJICogMTI4IFZJQ3M7Cj4gPj4gKwkg Ki8KPiA+PiArCXVuc2lnbmVkIGxvbmcgeWNiY3I0MjBfdmNiX21vZGVzW0JJVFNfVE9fTE9OR1Mo MTI4KV07Cj4gPj4gKwo+ID4+ICsJLyoqIEB5Y2JjcjQyMF92Y2JfbWFwOiBiaXRtYXAgb2YgU1ZE IGluZGV4LCB0byBleHRyYXh0IHZjYiBtb2RlcyAqLwo+ID4+ICsJdW5zaWduZWQgbG9uZyB5Y2Jj cjQyMF92Y2JfbWFwOwo+ID4+ICsKPiA+PiArCS8qKiBAeWNiY3I0MjBfZGNfbW9kZXM6IGJpdG1h cCBvZiBkZWVwIGNvbG9yIHN1cHBvcnQgaW5kZXggKi8KPiA+PiArCXU4IHljYmNyNDIwX2RjX21v ZGVzOwo+ID4gdW51c2VkCj4gSXRzIHVzZWQuIFdlIGFyZSBwYXJzaW5nIDQyMCBkZWVwIGNvbG9y IGluZm8gYW5kIGNoZWNraW5nIHRoZSBpdCBpbiAKPiBoZG1pXzEyYnBjX3Bvc3NpYmxlKCkKCk5v dCBpbiB0aGlzIHBhdGNoLgoKPiBTaGFzaGFuawo+ID4KPiA+PiAgIH07Cj4gPj4gICAKPiA+PiAg IC8qKgo+ID4+IEBAIC0yMDAsNiArMjIyLDcgQEAgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gewo+ ID4+ICAgI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NAkJKDE8PDApCj4gPj4gICAjZGVm aW5lIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQJKDE8PDEpCj4gPj4gICAjZGVmaW5lIERSTV9D T0xPUl9GT1JNQVRfWUNSQ0I0MjIJKDE8PDIpCj4gPj4gKyNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1B VF9ZQ1JDQjQyMAkoMTw8MykKPiA+PiAgIAo+ID4+ICAgCS8qKgo+ID4+ICAgCSAqIEBjb2xvcl9m b3JtYXRzOiBIRE1JIENvbG9yIGZvcm1hdHMsIHNlbGVjdHMgYmV0d2VlbiBSR0IgYW5kIFlDckNi Cj4gPj4gLS0gCj4gPj4gMi43LjQKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=