From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 06/14] drm/edid: parse YCBCR420 videomodes from EDID Date: Thu, 13 Jul 2017 19:21:18 +0300 Message-ID: <20170713162118.GJ12629@intel.com> References: <1499960000-9232-1-git-send-email-shashank.sharma@intel.com> <1499960000-9232-7-git-send-email-shashank.sharma@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: <1499960000-9232-7-git-send-email-shashank.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Shashank Sharma Cc: intel-gfx@lists.freedesktop.org, Jose Abreu , Emil Velikov , dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMTMsIDIwMTcgYXQgMDk6MDM6MTJQTSArMDUzMCwgU2hhc2hhbmsgU2hhcm1h IHdyb3RlOgo+IEhETUkgMi4wIHNwZWMgYWRkcyBzdXBwb3J0IGZvciBZQ0JDUjQyMCBzdWItc2Ft cGxlZCBvdXRwdXQuCj4gQ0VBLTg2MS1GIGFkZHMgdHdvIG5ldyBibG9ja3MgaW4gRURJRCdzIENF QSBleHRlbnNpb24gYmxvY2tzLAo+IHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgc2luaydz IFlDQkNSNDIwIG91dHB1dCBjYXBhYmlsaXRpZXMuCj4gCj4gVGhlc2UgYmxvY2tzIGFyZToKPiAK PiAtIFlDQkNSNDIwdmRiKFlDQkNSIDQyMCB2aWRlbyBkYXRhIGJsb2NrKToKPiBUaGlzIGJsb2Nr IGNvbnRhaW5zIFZJQ3Mgb2YgdmlkZW8gbW9kZXMsIHdoaWNoIGNhbiBiZSBzb3Bwb3J0ZWQgb25s eQo+IGluIFlDQkNSNDIwIG91dHB1dCBtb2RlIChOb3QgaW4gUkdCL1lDQkNSNDQ0LzQyMi4gSXRz IGxpa2UgYSBub3JtYWwKPiBTVkQgYmxvY2ssIHZhbGlkIGZvciBZQ0JDUjQyMCBtb2RlcyBvbmx5 Lgo+IAo+IC0gWUNCQ1I0MjBjbWRiKFlDQkNSIDQyMCBjYXBhYmlsaXR5IG1hcCBkYXRhIGJsb2Nr KToKPiBUaGlzIGJsb2NrIGdpdmVzIGluZm9ybWF0aW9uIGFib3V0IHZpZGVvIG1vZGVzIHdoaWNo IGNhbiBzdXBwb3J0Cj4gWUNCQ1I0MjAgb3V0cHV0IG1vZGUgYWxzbyAoYWxvbmcgd2l0aCBSR0Is WUNCQ1I0NDQvNDIyIGV0YykgVGhpcwo+IGJsb2NrIGNvbnRhaW5zIGEgYml0bWFwIGluZGV4IG9m IG5vcm1hbCBzdmQgdmlkZW9tb2Rlcywgd2hpY2ggY2FuCj4gc3VwcG9ydCBZQ0JDUjQyMCBvdXRw dXQgdG9vLgo+IFNvIGlmIGJpdCAwIGZyb20gZmlyc3QgdmNiIGJ5dGUgaXMgc2V0LCBmaXJzdCB2 aWRlbyBtb2RlIGluIHRoZSBzdmQKPiBsaXN0IGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0 b28uIEJpdCAxIG1lYW5zIHNlY29uZCB2aWRlbyBtb2RlCj4gZnJvbSBzdmQgbGlzdCBjYW4gc3Vw cG9ydCBZQ0JDUjQyMCBvdXRwdXQgdG9vLCBhbmQgc28gb24uCj4gCj4gVGhpcyBwYXRjaCBhZGRz IHR3byBiaXRtYXBzIGluIGRpc3BsYXkncyBoZG1pX2luZm8gc3RydWN0dXJlLCBvbmUgZWFjaAo+ IGZvciBWQ0IgYW5kIFZEQiBtb2Rlcy4gSWYgdGhlIHNvdXJjZSBpcyBIRE1JIDIuMCBjYXBhYmxl LCB0aGlzIHBhdGNoCj4gYWRkczoKPiAtIFZEQiBtb2RlcyAoWUNCQ1IgNDIwIG9ubHkgbW9kZXMp IGluIGNvbm5lY3RvcidzIG1vZGUgbGlzdCwgYWxzbyBtYWtlcwo+ICAgYW4gZW50cnkgaW4gdGhl IHZkYl9iaXRtYXAgcGVyIHZpYy4KPiAtIFZDQiBtb2RlcyAoWUNCQ1IgNDIwIGFsc28gbW9kZXMp IG9ubHkgZW50cnkgaW4gdGhlIHZjYl9iaXRtYXAuCj4gCj4gQ2M6IFZpbGxlIFN5cmphbGEgPHZp bGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IENjOiBKb3NlIEFicmV1IDxqb2FicmV1QHN5 bm9wc3lzLmNvbT4KPiBDYzogRW1pbCBWZWxpa292IDxlbWlsLmwudmVsaWtvdkBnbWFpbC5jb20+ Cj4gCj4gVjI6IEFkZHJlc3NlZAo+ICAgICBSZXZpZXcgY29tbWVudHMgZnJvbSBFbWlsOgo+ICAg ICAtIFVzZSAxVUxMPDxpIGluc3RlYWQgb2YgMTw8aSB0byBtYWtlIHN1cmUgdGhlIG91dHB1dCBp cyA2NGJpdC4KPiAgICAgLSBVc2UgdGhlIHN1Z2dlc3RlZCBtZXRob2QgZm9yIHVwZGF0aW5nIGRi bWFwLgo+ICAgICAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciBZQ0JDUjQyMF92Y2JfbWFwIHRvIGZp eCBrYnVpbGQgd2FybmluZy4KPiAKPiAgICAgUmV2aWV3IGNvbW1lbnRzIGZyb20gVmlsbGU6Cj4g ICAgIC0gRG8gbm90IGV4cG9zZSB0aGUgWUNCQ1I0MjAgZmxhZ3MgaW4gdWFiaSBsYXllciwga2Vl cCBpdCBpbnRlcm5hbC4KPiAgICAgLSBTYXZlIGEgbWFwIG9mIFlDQkNSNDIwIG1vZGVzIGZvciBm dXR1cmUgcmVmZXJlbmNlLgo+ICAgICAtIENoZWNrIGRiIGxlbmd0aCBiZWZvcmUgdHJ5aW5nIHRv IHBhcnNlIGV4dGVuZGVkIHRhZy4KPiAgICAgLSBBZGQgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSA+ IDY0IG1vZGVzIGluIGNhcGFiaWxpdHkgbWFwIGJsb2NrLgo+ICAgICAtIFVzZSB5NDIwY21kYiBp biBmdW5jdGlvbiBuYW1lcyBhbmQgbWFjcm9zIHdoaWxlIGRlYWxpbmcgd2l0aCB2Y2IKPiAgICAg ICB0byBiZSBhbGlnbmVkIHdpdGggc3BlYy4KPiAgICAgLSBNb3ZlIHRoZSBkaXNwbGF5IGluZm9y bWF0aW9uIHBhcnNpbmcgYmxvY2sgYWhlYWQgb2YgbW9kZSBwYXJzaW5nCj4gICAgICAgYmxvY2tz Lgo+IAo+IFYzOiBBZGRyZXNzZWQgZGVzaWduL3JldmlldyBjb21tZW50cyBmcm9tIFZpbGxlCj4g ICAgIC0gRG8gbm90IGFkZCBmbGFncyBpbiB2aWRlbyBtb2RlcywgZWxzZSB3ZSBoYXZlIHRvIGV4 cG9zZSB0aGVtIHRvIHVzZXIKPiAgICAgLSBUaGVyZSBzaG91bGQgbm90IGJlIGEgVUFCSSBjaGFu Z2UsIGFuZCBrZXJuZWwgc2hvdWxkIGRldGVjdCB0aGUKPiAgICAgICBjaG9pY2Ugb2YgdGhlIG91 dHB1dCBiYXNlZCBvbiB0eXBlIG9mIG1vZGUsIGFuZCB0aGUgYml0bWFwcy4KPiAgICAgLSBVc2Ug c3RhbmRhcmQgYml0b3BzIGZyb20ga2VybmVsIGJpdG1hcCBoZWFkZXIsIGluc3RlYWQgb2YgY2Fs Y3VsYXRpbmcKPiAgICAgICBiaXQgcG9zaXRpb25zIG1hbnVhbGx5Lgo+IAo+IFY0OiBBZGRyZXNz ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gVmlsbGU6Cj4gICAgIC0gcy95Y2Jjcl80MjBfdmRiL3k0 MjB2ZGIKPiAgICAgLSBzL3ljYmNyXzQyMF92Y2IveTQyMGNtZGIKPiAgICAgLSBCZSBsZXNzIHZl cmJvc2Ugb24gZGVzY3JpcHRpb24gb2YgZG9feTQyMHZkYl9tb2Rlcwo+ICAgICAtIE1vdmUgbmV3 bW9kZSB2YXJpYWJsZSBpbiB0aGUgbG9vcCBzY29wZS4KPiAgICAgLSBVc2Ugc3ZkX3RvX3ZpYygp IHRvIGdldCBhIFZJQywgaW5zdGVhZCBvZiAweDdmCj4gICAgIC0gUmVtb3ZlIGJpdG1hcCBkZXNj cmlwdGlvbiBmb3IgQ01EQiBtb2RlcyAmIFZEQiBtb2Rlcwo+ICAgICAtIERvbnQgYWRkIGNvbm5l Y3Rvci0+eWNiY3JfNDIwX2FsbG93ZWQgY2hlY2sgZm9yIGNtZGIgbW9kZXMKPiAgICAgLSBSZW1v dmUgJ2xlbicgdmFyaWFibGUsIGluIGlzX3k0MjBjbWRiIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2Vk Cj4gICAgICAgb25seSBvbmNlCj4gICAgIC0gQWRkIGxlbmd0aCBjaGVjayBpbiBpc195NDIwdmRi IGZ1bmN0aW9uCj4gICAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGlmICghZGIpIGNoZWNrIGluIGZ1 bmN0aW9uIHBhcnNlX3k0MjBjbWRiX2JpdG1hcAo+ICAgICAtIERvIG5vdCBhZGQgcHJpbnQgYWJv dXQgWUNCQ1IgNDIwIG1vZGVzCj4gICAgIC0gRml4IGluZGVudGF0aW9uIGluIGZldyBwbGFjZXMK PiAgICAgLSBNb3ZlIHljYmNyNDIwX2RjX21vZGVzIGluIG5leHQgcGF0Y2gsIHdoZXJlIGl0cyB1 c2VkCj4gICAgIC0gQWRkIGEgc2VwYXJhdGUgcGF0Y2ggZm9yIG1vdmVtZW50IG9mIGRybV9hZGRf ZGlzcGxheV9pbmZvKCkKPiAKPiBWNTogQWRkcmVzc2VkIHJldmlldyBjb21tZW50cyBmcm9tIFZp bGxlOgo+ICAgICAtIEFkZCB0aGUgcGF0Y2ggd2hpY2ggY2xlYW5zIHVwIHRoZSBjdXJyZW50IEVY VEVOREVEX1RBRyB1c2FnZQo+ICAgICAtIE1ha2UgeTQyMF9jbWRiX21hcCB1NjQKPiAgICAgLSBE byBub3QgYmxvY2sgeWNiY3I0MjAgbW9kZXMgd2hpbGUgcGFyc2luZyB0aGUgRURJRCwgcmF0aGVy Cj4gICAgICAgYWRkIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9uIHRvIHBydW5lIHljYmNyNDIw LW9ubHkgbW9kZXMgZnJvbQo+ICAgICAgIGNvbm5lY3RvcidzIHByb2JlZCBtb2Rlcy4KPiAKPiBW NjogUmViYXNlCj4gVjc6IE1vdmUgdGhpcyBwYXRjaCBhZnRlciB0aGUgNDIwX29ubHkgdmFsaWRh dGlvbiBwYXRjaCAoVmlsbGUpCj4gCj4gU2lnbmVkLW9mZi1ieTogU2hhc2hhbmsgU2hhcm1hIDxz aGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Vk aWQuYyAgfCAxNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K PiAgaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oIHwgIDEyICsrKysKPiAgMiBmaWxlcyBjaGFu Z2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwo+ IGluZGV4IDk2ZWVlNWEuLmI4NmFmYjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9lZGlkLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwo+IEBAIC0yNzgzLDYg KzI3ODMsOCBAQCBhZGRfZGV0YWlsZWRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3Rvciwgc3RydWN0IGVkaWQgKmVkaWQsCj4gICNkZWZpbmUgU1BFQUtFUl9CTE9DSwkweDA0Cj4g ICNkZWZpbmUgVVNFX0VYVEVOREVEX1RBRyAweDA3Cj4gICNkZWZpbmUgRVhUX1ZJREVPX0NBUEFC SUxJVFlfQkxPQ0sgMHgwMAo+ICsjZGVmaW5lIEVYVF9WSURFT19EQVRBX0JMT0NLXzQyMAkweDBF Cj4gKyNkZWZpbmUgRVhUX1ZJREVPX0NBUF9CTE9DS19ZNDIwQ01EQiAweDBGCj4gICNkZWZpbmUg RURJRF9CQVNJQ19BVURJTwkoMSA8PCA2KQo+ICAjZGVmaW5lIEVESURfQ0VBX1lDUkNCNDQ0CSgx IDw8IDUpCj4gICNkZWZpbmUgRURJRF9DRUFfWUNSQ0I0MjIJKDEgPDwgNCkKPiBAQCAtMzE1NSwx NSArMzE1Nyw3OSBAQCBkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmljX2luZGV4KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAlyZXR1cm4gbmV3bW9kZTsKPiAgfQo+ICAKPiArLyoK PiArICogZG9feTQyMHZkYl9tb2RlcyAtIFBhcnNlIFlDQkNSIDQyMCBvbmx5IG1vZGVzCj4gKyAq IEBjb25uZWN0b3I6IGNvbm5lY3RvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBIRE1JIHNpbmsKPiAr ICogQHN2ZHM6IHN0YXJ0IG9mIHRoZSBkYXRhIGJsb2NrIG9mIENFQSBZQ0JDUiA0MjAgVkRCCj4g KyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgQ0VBIFlDQkNSIDQyMCBWREIKPiArICoKPiArICogUGFy c2UgdGhlIENFQS04NjEtRiBZQ0JDUiA0MjAgVmlkZW8gRGF0YSBCbG9jayAoWTQyMFZEQikKPiAr ICogd2hpY2ggY29udGFpbnMgbW9kZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBpbiBZQ0JDUiA0 MjAKPiArICogb3V0cHV0IGZvcm1hdCBvbmx5Lgo+ICsgKi8KPiArc3RhdGljIGludCBkb195NDIw dmRiX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCQkgICBjb25z dCB1OCAqc3ZkcywgdTggc3Zkc19sZW4pCj4gK3sKPiArCWludCBtb2RlcyA9IDAsIGk7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2Rp c3BsYXlfaW5mbyAqaW5mbyA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKPiArCXN0cnVjdCBk cm1faGRtaV9pbmZvICpoZG1pID0gJmluZm8tPmhkbWk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IHN2ZHNfbGVuOyBpKyspIHsKPiArCQl1OCB2aWMgPSBzdmRfdG9fdmljKHN2ZHNbaV0pOwo+ICsJ CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwo+ICsKCkhtbS4gTG9va3MgbGlrZSBo ZXJlIHdlIHdpbGwgbmVlZCB0aGUgZHJtX3ZhbGlkX2NlYV92aWMoKSBjaGVjawpiZWNhdXNlIHRo ZSB2aWMgaXMgY29taW5nIGZyb20gYW4gdW50cnVzdGVkIHNvdXJjZS4KCj4gKwkJbmV3bW9kZSA9 IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZlZGlkX2NlYV9tb2Rlc1t2aWNdKTsKPiArCQlpZiAo IW5ld21vZGUpCj4gKwkJCWJyZWFrOwo+ICsJCWJpdG1hcF9zZXQoaGRtaS0+eTQyMF92ZGJfbW9k ZXMsIHZpYywgMSk7Cj4gKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUp Owo+ICsJCW1vZGVzKys7Cj4gKwl9Cj4gKwo+ICsJaWYgKG1vZGVzID4gMCkKPiArCQlpbmZvLT5j b2xvcl9mb3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjA7Cj4gKwlyZXR1cm4gbW9k ZXM7Cj4gK30KPiArCj4gKy8qCj4gKyAqIGRybV9hZGRfY21kYl9tb2RlcyAtIEFkZCBhIFlDQkNS IDQyMCBtb2RlIGludG8gYml0bWFwCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciBjb3JyZXNw b25kaW5nIHRvIHRoZSBIRE1JIHNpbmsKPiArICogQHZpYzogQ0VBIHZpYyBmb3IgdGhlIHZpZGVv IG1vZGUgdG8gYmUgYWRkZWQgaW4gdGhlIG1hcAo+ICsgKgo+ICsgKiBNYWtlcyBhbiBlbnRyeSBm b3IgYSB2aWRlb21vZGUgaW4gdGhlIFlDQkNSIDQyMCBiaXRtYXAKPiArICovCj4gK3N0YXRpYyB2 b2lkCj4gK2RybV9hZGRfY21kYl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LCB1OCBzdmQpCj4gK3sKPiArCXU4IHZpYyA9IHN2ZF90b192aWMoc3ZkKTsKPiArCXN0cnVjdCBk cm1faGRtaV9pbmZvICpoZG1pID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhkbWk7CgpBbmQg bWF5YmUgaGVyZS4gSXQncyBub3QgYWN0dWFsbHkgbmVlZGVkIHNpbmNlIHdlIGtub3cgaXQncyB2 YWxpZApiZWNhdXNlIGRybV9kaXNwbGF5X21vZGVfZnJvbV92aWNfaW5kZXgoKSByZXR1cm5lZCBh IG1vZGUsIGJ1dCBzaW5jZQp0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBoZXJl IHdlIG1pZ2h0IHdhbnQgdG8gaGF2ZSB0aGUKY2hlY2suIEJ1dCBpZiB5b3UgZGlzYWdyZWUgZmVl bCBmcmVlIHRvIGxlYXZlIGl0IG91dC4KCkF0IHNvbWUgcG9pbnQgSSB0aGluayB3ZSBtaWdodCB3 YW50IHRvIHJlb3JnYW5pemUKZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpY19pbmRleCgpIHN1Y2gg dGhhdCB3ZSBhY3R1YWxseSBwYXNzIGl0IHRoZQp2aWMgaW5zdGVhZC4gVGhlbiB3ZSBjb3VsZCBh bHNvIHBhc3MgdGhlIHZpYyBoZXJlIGRpcmVjdGx5LgoKPiArCj4gKwliaXRtYXBfc2V0KGhkbWkt Pnk0MjBfY21kYl9tb2RlcywgdmljLCAxKTsKPiArfQo+ICsKPiAgc3RhdGljIGludAo+ICBkb19j ZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgY29uc3QgdTggKmRiLCB1 OCBsZW4pCj4gIHsKPiAgCWludCBpLCBtb2RlcyA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5m byAqaGRtaSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pOwo+ICAKPiAgCWZvciAoaSA9 IDA7IGkgPCBsZW47IGkrKykgewo+ICAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ ICAJCW1vZGUgPSBkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmljX2luZGV4KGNvbm5lY3RvciwgZGIs IGxlbiwgaSk7Cj4gIAkJaWYgKG1vZGUpIHsKPiArCQkJLyoKPiArCQkJICogWUNCQ1I0MjAgY2Fw YWJpbGl0eSBibG9jayBjb250YWlucyBhIGJpdG1hcCB3aGljaAo+ICsJCQkgKiBnaXZlcyB0aGUg aW5kZXggb2YgQ0VBIG1vZGVzIGZyb20gQ0VBIFZEQiwgd2hpY2gKPiArCQkJICogY2FuIHN1cHBv cnQgWUNCQ1IgNDIwIHNhbXBsaW5nIG91dHB1dCBhbHNvIChhcGFydAo+ICsJCQkgKiBmcm9tIFJH Qi9ZQ0JDUjQ0NCBldGMpLgo+ICsJCQkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGJpdCAwIGluIGJp dG1hcCBpcyBzZXQsCj4gKwkJCSAqIGZpcnN0IG1vZGUgaW4gVkRCIGNhbiBzdXBwb3J0IFlDQkNS NDIwIG91dHB1dCB0b28uCj4gKwkJCSAqIEFkZCBZQ0JDUjQyMCBtb2RlcyBvbmx5IGlmIHNpbmsg aXMgSERNSSAyLjAgY2FwYWJsZS4KPiArCQkJICovCj4gKwkJCWlmIChoZG1pLT55NDIwX2NtZGJf bWFwICYgKDEgPDwgaSkpCgpJIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgc29tZXRoaW5nIGxpa2UK aWYgKGkgPCA2NCAmJiBoZG1pLT55NDIwX2NtZGJfbWFwICYgKDFVTEwgPDwgaSkpCgpXaXRoIHRo b3NlIGNoYW5nZXMgSSB0aGluayB0aGlzIHBhcnQgc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgo+ICsJ CQkJZHJtX2FkZF9jbWRiX21vZGVzKGNvbm5lY3RvciwgZGJbaV0pOwo+ICsKPiAgCQkJZHJtX21v ZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ICAJCQltb2RlcysrOwo+ICAJCX0KPiBA QCAtMzUwNSw5ICszNTcxLDc4IEBAIHN0YXRpYyBib29sIGNlYV9kYl9pc19oZG1pX2ZvcnVtX3Zz ZGIoY29uc3QgdTggKmRiKQo+ICAJcmV0dXJuIG91aSA9PSBIRE1JX0ZPUlVNX0lFRUVfT1VJOwo+ ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbCBjZWFfZGJfaXNfeTQyMGNtZGIoY29uc3QgdTggKmRiKQo+ ICt7Cj4gKwo+ICsJaWYgKGNlYV9kYl90YWcoZGIpICE9IFVTRV9FWFRFTkRFRF9UQUcpCj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmICghY2VhX2RiX3BheWxvYWRfbGVuKGRiKSkKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKGNlYV9kYl9leHRlbmRlZF90YWcoZGIpICE9IEVYVF9W SURFT19DQVBfQkxPQ0tfWTQyMENNREIpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVy biB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBjZWFfZGJfaXNfeTQyMHZkYihjb25zdCB1 OCAqZGIpCj4gK3sKPiArCWlmIChjZWFfZGJfdGFnKGRiKSAhPSBVU0VfRVhURU5ERURfVEFHKQo+ ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoIWNlYV9kYl9wYXlsb2FkX2xlbihkYikpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChjZWFfZGJfZXh0ZW5kZWRfdGFnKGRiKSAhPSBF WFRfVklERU9fREFUQV9CTE9DS180MjApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVy biB0cnVlOwo+ICt9Cj4gKwo+ICAjZGVmaW5lIGZvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0 LCBlbmQpIFwKPiAgCWZvciAoKGkpID0gKHN0YXJ0KTsgKGkpIDwgKGVuZCkgJiYgKGkpICsgY2Vh X2RiX3BheWxvYWRfbGVuKCYoY2VhKVsoaSldKSA8IChlbmQpOyAoaSkgKz0gY2VhX2RiX3BheWxv YWRfbGVuKCYoY2VhKVsoaSldKSArIDEpCj4gIAo+ICtzdGF0aWMgdm9pZCBkcm1fcGFyc2VfeTQy MGNtZGJfYml0bWFwKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCQkgICAg IGNvbnN0IHU4ICpkYikKPiArewo+ICsJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm8gPSAm Y29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAqaGRtaSA9 ICZpbmZvLT5oZG1pOwo+ICsJdTggbWFwX2xlbiA9IGNlYV9kYl9wYXlsb2FkX2xlbihkYikgLSAx Owo+ICsJdTggY291bnQ7Cj4gKwl1NjQgbWFwID0gMDsKPiArCj4gKwlpZiAobWFwX2xlbiA9PSAw KSB7Cj4gKwkJLyogQWxsIENFQSBtb2RlcyBzdXBwb3J0IHljYmNyNDIwIHNhbXBsaW5nIGFsc28u Ki8KPiArCQloZG1pLT55NDIwX2NtZGJfbWFwID0gVTY0X01BWDsKPiArCQlpbmZvLT5jb2xvcl9m b3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjA7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ ICsKPiArCS8qCj4gKwkgKiBUaGlzIG1hcCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGV4aXN0aW5n IENFQSBibG9jayBtb2Rlcwo+ICsJICogZnJvbSBWREIgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0 cHV0IHRvby4gU28gaWYgYml0PTAgaXMKPiArCSAqIHNldCwgZmlyc3QgbW9kZSBmcm9tIFZEQiBj YW4gc3VwcG9ydCBZQ0JDUjQyMCBvdXRwdXQgdG9vLgo+ICsJICogV2Ugd2lsbCBwYXJzZSBhbmQg a2VlcCB0aGlzIG1hcCwgYmVmb3JlIHBhcnNpbmcgVkRCIGl0c2VsZgo+ICsJICogdG8gYXZvaWQg Z29pbmcgdGhyb3VnaCB0aGUgc2FtZSBibG9jayBhZ2FpbiBhbmQgYWdhaW4uCj4gKwkgKgo+ICsJ ICogU3BlYyBpcyBub3QgY2xlYXIgYWJvdXQgbWF4IHBvc3NpYmxlIHNpemUgb2YgdGhpcyBibG9j ay4KPiArCSAqIENsYW1waW5nIG1heCBiaXRtYXAgYmxvY2sgc2l6ZSBhdCA4IGJ5dGVzLiBFdmVy eSBieXRlIGNhbgo+ICsJICogYWRkcmVzcyA4IENFQSBtb2RlcywgaW4gdGhpcyB3YXkgdGhpcyBt YXAgY2FuIGFkZHJlc3MKPiArCSAqIDgqOCA9IGZpcnN0IDY0IFNWRHMuCj4gKwkgKi8KPiArCWlm IChXQVJOX09OX09OQ0UobWFwX2xlbiA+IDgpKQo+ICsJCW1hcF9sZW4gPSA4Owo+ICsKPiArCWZv ciAoY291bnQgPSAwOyBjb3VudCA8IG1hcF9sZW47IGNvdW50KyspCj4gKwkJbWFwIHw9ICh1NjQp ZGJbMiArIGNvdW50XSA8PCAoOCAqIGNvdW50KTsKPiArCj4gKwlpZiAobWFwKQo+ICsJCWluZm8t PmNvbG9yX2Zvcm1hdHMgfD0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMDsKPiArCj4gKwloZG1p LT55NDIwX2NtZGJfbWFwID0gbWFwOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50Cj4gIGFkZF9jZWFf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQp Cj4gIHsKPiBAQCAtMzUzMCwxMCArMzY2NSwxNiBAQCBhZGRfY2VhX21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKQo+ICAJCQkJdmlkZW8gPSBk YiArIDE7Cj4gIAkJCQl2aWRlb19sZW4gPSBkYmw7Cj4gIAkJCQltb2RlcyArPSBkb19jZWFfbW9k ZXMoY29ubmVjdG9yLCB2aWRlbywgZGJsKTsKPiAtCQkJfQo+IC0JCQllbHNlIGlmIChjZWFfZGJf aXNfaGRtaV92c2RiKGRiKSkgewo+ICsJCQl9IGVsc2UgaWYgKGNlYV9kYl9pc19oZG1pX3ZzZGIo ZGIpKSB7Cj4gIAkJCQloZG1pID0gZGI7Cj4gIAkJCQloZG1pX2xlbiA9IGRibDsKPiArCQkJfSBl bHNlIGlmIChjZWFfZGJfaXNfeTQyMHZkYihkYikpIHsKPiArCQkJCWNvbnN0IHU4ICp2ZGI0MjAg PSAmZGJbMl07Cj4gKwo+ICsJCQkJLyogQWRkIDQ6MjowKG9ubHkpIG1vZGVzIHByZXNlbnQgaW4g RURJRCAqLwo+ICsJCQkJbW9kZXMgKz0gZG9feTQyMHZkYl9tb2Rlcyhjb25uZWN0b3IsCj4gKwkJ CQkJCQkgIHZkYjQyMCwKPiArCQkJCQkJCSAgZGJsIC0gMSk7Cj4gIAkJCX0KPiAgCQl9Cj4gIAl9 Cj4gQEAgLTQyMTYsNiArNDM1Nyw4IEBAIHN0YXRpYyB2b2lkIGRybV9wYXJzZV9jZWFfZXh0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAkJCWRybV9wYXJzZV9oZG1pX3ZzZGJf dmlkZW8oY29ubmVjdG9yLCBkYik7Cj4gIAkJaWYgKGNlYV9kYl9pc19oZG1pX2ZvcnVtX3ZzZGIo ZGIpKQo+ICAJCQlkcm1fcGFyc2VfaGRtaV9mb3J1bV92c2RiKGNvbm5lY3RvciwgZGIpOwo+ICsJ CWlmIChjZWFfZGJfaXNfeTQyMGNtZGIoZGIpKQo+ICsJCQlkcm1fcGFyc2VfeTQyMGNtZGJfYml0 bWFwKGNvbm5lY3RvciwgZGIpOwo+ICAJfQo+ICB9Cj4gIAo+IEBAIC00NDc3LDYgKzQ2MjAsNyBA QCBpbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is IHN0cnVjdCBlZGlkICplZGlkKQo+ICAJbnVtX21vZGVzICs9IGFkZF9jZWFfbW9kZXMoY29ubmVj dG9yLCBlZGlkKTsKPiAgCW51bV9tb2RlcyArPSBhZGRfYWx0ZXJuYXRlX2NlYV9tb2Rlcyhjb25u ZWN0b3IsIGVkaWQpOwo+ICAJbnVtX21vZGVzICs9IGFkZF9kaXNwbGF5aWRfZGV0YWlsZWRfbW9k ZXMoY29ubmVjdG9yLCBlZGlkKTsKPiArCj4gIAlpZiAoZWRpZC0+ZmVhdHVyZXMgJiBEUk1fRURJ RF9GRUFUVVJFX0RFRkFVTFRfR1RGKQo+ICAJCW51bV9tb2RlcyArPSBhZGRfaW5mZXJyZWRfbW9k ZXMoY29ubmVjdG9yLCBlZGlkKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9j b25uZWN0b3IuaCBiL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+IGluZGV4IDI2ZGQzZWIu LjIyNWUwOTIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gQEAgLTE0Myw2ICsxNDMsMTcgQEAgc3Ry dWN0IGRybV9oZG1pX2luZm8gewo+ICAJICogdXB0byAxMjggVklDczsKPiAgCSAqLwo+ICAJdW5z aWduZWQgbG9uZyB5NDIwX3ZkYl9tb2Rlc1tCSVRTX1RPX0xPTkdTKDEyOCldOwo+ICsKPiArCS8q Kgo+ICsJICogQHk0MjBfY21kYl9tb2RlczogYml0bWFwIG9mIG1vZGVzIHdoaWNoIGNhbiBzdXBw b3J0IHljYmNyNDIwCj4gKwkgKiBvdXRwdXQgYWxzbywgYWxvbmcgd2l0aCBub3JtYWwgSERNSSBv dXRwdXRzLiBUaGVyZSBhcmUgdG90YWwgMTA3Cj4gKwkgKiBWSUNzIGRlZmluZWQgYnkgQ0VBLTg2 MS1GIHNwZWMsIHNvIHRoZSBzaXplIGlzIDEyOCBiaXRzIHRvIG1hcCB1cHRvCj4gKwkgKiAxMjgg VklDczsKPiArCSAqLwo+ICsJdW5zaWduZWQgbG9uZyB5NDIwX2NtZGJfbW9kZXNbQklUU19UT19M T05HUygxMjgpXTsKPiArCj4gKwkvKiogQHk0MjBfY21kYl9tYXA6IGJpdG1hcCBvZiBTVkQgaW5k ZXgsIHRvIGV4dHJheHQgdmNiIG1vZGVzICovCj4gKwl1NjQgeTQyMF9jbWRiX21hcDsKPiAgfTsK PiAgCj4gIC8qKgo+IEBAIC0yMDYsNiArMjE3LDcgQEAgc3RydWN0IGRybV9kaXNwbGF5X2luZm8g ewo+ICAjZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0CQkoMTw8MCkKPiAgI2RlZmluZSBE Uk1fQ09MT1JfRk9STUFUX1lDUkNCNDQ0CSgxPDwxKQo+ICAjZGVmaW5lIERSTV9DT0xPUl9GT1JN QVRfWUNSQ0I0MjIJKDE8PDIpCj4gKyNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMAko MTw8MykKPiAgCj4gIAkvKioKPiAgCSAqIEBjb2xvcl9mb3JtYXRzOiBIRE1JIENvbG9yIGZvcm1h dHMsIHNlbGVjdHMgYmV0d2VlbiBSR0IgYW5kIFlDckNiCj4gLS0gCj4gMi43LjQKCi0tIApWaWxs ZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=