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 17:43:12 +0300 Message-ID: <20170615144312.GC12629@intel.com> References: <1497462465-14066-1-git-send-email-shashank.sharma@intel.com> <1497462465-14066-5-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: <1497462465-14066-5-git-send-email-shashank.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Shashank Sharma Cc: ander.conselvan.de.oliveira@intel.com, intel-gfx@lists.freedesktop.org, Jose Abreu , dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKdW4gMTQsIDIwMTcgYXQgMTE6MTc6MzVQTSArMDUzMCwgU2hhc2hhbmsgU2hhcm1h 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+IFNpZ25lZC1vZmYt Ynk6IFNoYXNoYW5rIFNoYXJtYSA8c2hhc2hhbmsuc2hhcm1hQGludGVsLmNvbT4KPiAtLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgIHwgMTkzICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tCj4gIGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCB8ICAy MyArKysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCAyMTEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwo+IGluZGV4IDZmZDhhOTguLjQ5NTNmODcgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2VkaWQuYwo+IEBAIC0yNzgxLDcgKzI3ODEsOSBAQCBhZGRfZGV0YWlsZWRfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQsCj4gICNkZWZp bmUgVklERU9fQkxPQ0sgICAgIDB4MDIKPiAgI2RlZmluZSBWRU5ET1JfQkxPQ0sgICAgMHgwMwo+ ICAjZGVmaW5lIFNQRUFLRVJfQkxPQ0sJMHgwNAo+IC0jZGVmaW5lIFZJREVPX0NBUEFCSUxJVFlf QkxPQ0sJMHgwNwo+ICsjZGVmaW5lIFZJREVPX0NBUEFCSUxJVFlfQkxPQ0sgMHgwNwo+ICsjZGVm aW5lIFZJREVPX0RBVEFfQkxPQ0tfNDIwCTB4MEUKPiArI2RlZmluZSBWSURFT19DQVBfQkxPQ0tf WTQyMENNREIgMHgwRgo+ICAjZGVmaW5lIEVESURfQkFTSUNfQVVESU8JKDEgPDwgNikKPiAgI2Rl ZmluZSBFRElEX0NFQV9ZQ1JDQjQ0NAkoMSA8PCA1KQo+ICAjZGVmaW5lIEVESURfQ0VBX1lDUkNC NDIyCSgxIDw8IDQpCj4gQEAgLTMxNDMsMTUgKzMxNDUsMTAzIEBAIGRybV9kaXNwbGF5X21vZGVf ZnJvbV92aWNfaW5kZXgoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCXJldHVy biBuZXdtb2RlOwo+ICB9Cj4gIAo+ICsvKgo+ICsgKiBkb195Y2Jjcl80MjBfdmRiX21vZGVzIC0g UGFyc2UgWUNCQ1IgNDIwIG9ubHkgbW9kZXMKPiArICogQGNvbm5lY3RvcjogY29ubmVjdG9yIGNv cnJlc3BvbmRpbmcgdG8gdGhlIEhETUkgc2luawo+ICsgKiBAc3Zkczogc3RhcnQgb2YgdGhlIGRh dGEgYmxvY2sgb2YgQ0VBIFlDQkNSIDQyMCBWREIKPiArICogQGxlbjogbGVuZ3RoIG9mIHRoZSBD RUEgWUNCQ1IgNDIwIFZEQgo+ICsgKgo+ICsgKiBDRUEtODYxLUYgaGFzIGFkZGVkIGEgbmV3IHZp ZGVvIGJsb2NrIGNhbGxlZCBZQ0JDUiA0MjAgVmlkZW8KPiArICogRGF0YSBCbG9jayAoeWNiY3Ig NDIwIHZkYikuIFRoaXMgYmxvY2sgY29udGFpbnMgbW9kZXMgd2hpY2gKPiArICogc3VwcG9ydCBZ Q0JDUiA0MjAgSERNSSBvdXRwdXQgKG9ubHkgWUNCQ1IgNDIwKS4gVGhpcyBmdW5jdGlvbgo+ICsg KiBwYXJzZXMgdGhlIGJsb2NrIGFuZCBhZGRzIHRoZXNlIG1vZGVzIGludG8gY29ubmVjdG9yJ3Mg bW9kZSBsaXN0LgoKU2VlbXMgYSBiaXQgdmVyYm9zZS4gTWF5YmUgc29tZXRoaW5nIGxpa2U6CiJQ YXJzZSB0aGUgQ0VBLTg2MS1GIFlDYkNyIDQ6MjowIFZpZGVvIERhdGEgQmxvY2sgKFk0MjBWREIp CndoaWNoIGNvbnRhaW5zIG1vZGVzIHdoaWNoIG9ubHkgc3VwcG9ydCBZQ2JDciA0OjI6MCBvdXRw dXQuIgoKPiArICovCj4gK3N0YXRpYyBpbnQgZG9feWNiY3JfNDIwX3ZkYl9tb2RlcyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkJICAgY29uc3QgdTggKnN2ZHMsIHU4IHN2 ZHNfbGVuKQoKUHJvYmFibHkgd2UgY291bGQgcy95Y2Jjcl80MjBfdmRiL3k0MjB2ZGIvIGFsbCBv dmVyIHRvIGtlZXAgdGhpbmdzCnNob3J0ZXIgYW5kIG1hdGNoIHRoZSB0ZXJtaW5vbG9neSBpbiB0 aGUgc3BlYy4gU2FtZSBmb3IgeTQyMGNtZGIuCgo+ICt7Cj4gKwlpbnQgbW9kZXMgPSAwLCBpOwo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ICsJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CgpUaGlzIHZhcmlhYmxlIGNhbiBiZSBtb3ZlZCBpbnRv IHRoZSBsb29wIHNjb3BlLgoKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvID0gJmNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvOwo+ICsJc3RydWN0IGRybV9oZG1pX2luZm8gKmhkbWkgPSAm aW5mby0+aGRtaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgc3Zkc19sZW47IGkrKykgewo+ICsJ CXU4IHZpYyA9IHN2ZHNbaV0gJiAweDdmOwoKV2hhdCdzIHRoZSAweDdmIGhlcmU/IE5hdGl2ZSBi aXQgc3R1ZmY/IEknbSB0aGlua2lnbiB3ZSBwcm9iYWJseSB3YW50CnNvbWUga2luZCBvZiBzdmRf dG9fdmljKCkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIGV2ZXJ5b25lIGRlYWxzIHdpdGgKdGhpcyBz dHVmZiBjb3JyZWN0bHkuCgo+ICsKPiArCQluZXdtb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRl diwgJmVkaWRfY2VhX21vZGVzW3ZpY10pOwo+ICsJCWlmICghbmV3bW9kZSkKPiArCQkJYnJlYWs7 Cj4gKwkJLyoKPiArCQkgKiB5Y2JjcjQyMF92ZGJfbW9kZXMgaXMgYSBmaXggcG9zaXRpb24gMTI4 IGJpdCBiaXRtYXAuCj4gKwkJICogRXZlcnkgYml0IGhlcmUgcmVwcmVzZW50cyBhIFZJQywgZnJv bSBDRUEtODYxLUYgbGlzdC4KPiArCQkgKiBTbyBpZiBiaXRbbl0gaXMgc2V0LCBpdCBpbmRpY2F0 ZXMgdmljW24rMV0gc3VwcG9ydHMKPiArCQkgKiBZQ0JDUjQyMCBvdXRwdXQuIEJpdCAwIGlzIGR1 bW15LCBhcyBWSUNzIHN0YXJ0IGF0IDEuCj4gKwkJICogeWNiY3I0MjBfdmNiX21vZGVzWzBdID0g fFZJQz02NCB8VklDPTYzIHwuLi4uLnxWSUM9MiB8VklDPTEgfAo+ICsJCSAqIHljYmNyNDIwX3Zj Yl9tb2Rlc1sxXSA9IHxWSUM9MTI4fFZJQz0xMjd8Li4uLi58VklDPTY2fFZJQz02NXwKPiArCQkg Ki8KCkkgdGhpbmsgcGVvcGxlIGNhbiBmaWd1cmUgb3V0IGhvdyB0aGUgc3RhbmRhcmQgYml0bWFw cyB3b3JrIHdpdGhvdXQKaGF2aW5nIHRvIGV4cGxhaW4gaXQgd2l0aCBzdWNoIGRldGFpbC4gSWYg eW91IHdhbnQgdG8gZWxhYm9yYXRlIG9uIHRoZQpjb250ZW50cyBvZiB0aGUgYml0bWFwLCB0aGVu IEkgdGhpbmsgdGhlIGNvbW1lbnQgc2hvdWxkIGJlIG5leHQgdG8Kd2hlcmUgdGhlIGJpdG1hcCBp cyBkZWZpbmVkLgoKPiArCQliaXRtYXBfc2V0KGhkbWktPnljYmNyNDIwX3ZkYl9tb2Rlcywgdmlj LCAxKTsKCl9fc2V0X2JpdCgpCgo+ICsJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBu ZXdtb2RlKTsKPiArCQltb2RlcysrOwo+ICsJfQo+ICsKPiArCWlmIChtb2RlcyA+IDApCj4gKwkJ aW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOwo+ICsJcmV0 dXJuIG1vZGVzOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBkcm1fYWRkX3ZjYl9tb2RlcyAtIEFkZCBh IFlDQkNSIDQyMCBtb2RlIGludG8gYml0bWFwCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciBj b3JyZXNwb25kaW5nIHRvIHRoZSBIRE1JIHNpbmsKPiArICogQHZpYzogQ0VBIHZpYyBmb3IgdGhl IHZpZGVvIG1vZGUgdG8gYmUgYWRkZWQgaW4gdGhlIG1hcAo+ICsgKgo+ICsgKiBNYWtlcyBhbiBl bnRyeSBmb3IgYSB2aWRlb21vZGUgaW4gdGhlIFlDQkNSIDQyMCBiaXRtYXAKPiArICovCj4gK3N0 YXRpYyB2b2lkCj4gK2RybV9hZGRfdmNiX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsIHU4IHZpYykKClRoZSAidmNiIiB0ZXJtIGRvZXNuJ3Qgc2VlbSB0byBiZSBpbiB0aGUg c3BlYy4gU2hvdWxkIGJlICJjbWRiIiBtYXliZT8KCk9yIG1heWJlIHdlIHdhbnQgeWNiY3I0MjBf dmRiX21vZGVzIGFuZCB5Y2JjcjQyMF95NDIwdmRiX21vZGVzIGp1c3QgdG8KbWFrZSBpdCBjbGVh ciB0byB3aGljaCBWREIgdGhleSByZWxhdGUgd2l0aC4KCj4gK3sKPiArCXN0cnVjdCBkcm1faGRt aV9pbmZvICpoZG1pID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhkbWk7Cj4gKwo+ICsJLyog VklDcyBhcmUgMSB0byAxMjcoMTA3IGRlZmluZWQgdGlsbCBDRUEtODYxLUYpICovCj4gKwl2aWMg Jj0gMTI3Owo+ICsKPiArCS8qCj4gKwkgKiB5Y2JjcjQyMF92Y2JfbW9kZXMgaXMgYSBmaXggcG9z aXRpb24gMTI4IGJpdCBiaXRtYXAuCj4gKwkgKiBFdmVyeSBiaXQgaGVyZSByZXByZXNlbnRzIGEg VklDLCBmcm9tIENFQS04NjEtRiBsaXN0Lgo+ICsJICogU28gaWYgYml0W25dIGlzIHNldCwgaXQg aW5kaWNhdGVzIHZpY1tuKzFdIHN1cHBvcnRzCj4gKwkgKiBZQ0JDUjQyMCBvdXRwdXQuIEJpdCAw IGlzIGR1bW15LCBhcyBWSUNzIHN0YXJ0IGF0IDEuCj4gKwkgKiB5Y2JjcjQyMF92Y2JfbW9kZXNb MF0gPSB8VklDPTY0IHxWSUM9NjMgfC4uLi4ufFZJQz0yIHxWSUM9MSB8Cj4gKwkgKiB5Y2JjcjQy MF92Y2JfbW9kZXNbMV0gPSB8VklDPTEyOHxWSUM9MTI3fC4uLi4ufFZJQz02NnxWSUM9NjV8Cj4g KwkgKiBEaWZmZXJlbmNlIGJldHdlZW4gYSB2Y2JfbW9kZSBhbmQgdmRiX21vZGUgaXMgdGhhdCBh IHZjYl9tb2RlCj4gKwkgKiBjYW4gc3VwcG9ydCBvdGhlciBIRE1JIG91dHB1dHMgbGlrZSBSR0Iv WUNCQ1I0NDQvNDIyIGFsc28KPiArCSAqIGFsb25nIHdpdGggWUNCQ1IgMjQwLCB3aGVyZWFzIGEg dmRiX21vZGUgY2FuIG9ubHkgc3VwcG9ydCBZQ0JDUgo+ICsJICogNDIwIEhETUkgb3V0cHV0Lgo+ ICsJICovCj4gKwliaXRtYXBfc2V0KGhkbWktPnljYmNyNDIwX3ZjYl9tb2RlcywgdmljLCAxKTsK PiArfQo+ICsKPiAgc3RhdGljIGludAo+ICBkb19jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwgY29uc3QgdTggKmRiLCB1OCBsZW4pCj4gIHsKPiAgCWludCBpLCBtb2Rl cyA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAqaGRtaSA9ICZjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5oZG1pOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewo+ICAJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ICAJCW1vZGUgPSBkcm1fZGlzcGxheV9tb2Rl X2Zyb21fdmljX2luZGV4KGNvbm5lY3RvciwgZGIsIGxlbiwgaSk7Cj4gIAkJaWYgKG1vZGUpIHsK PiArCQkJLyoKPiArCQkJICogWUNCQ1I0MjAgY2FwYWJpbGl0eSBibG9jayBjb250YWlucyBhIGJp dG1hcCB3aGljaAo+ICsJCQkgKiBnaXZlcyB0aGUgaW5kZXggb2YgQ0VBIG1vZGVzIGZyb20gQ0VB IFZEQiwgd2hpY2gKPiArCQkJICogY2FuIHN1cHBvcnQgWUNCQ1IgNDIwIHNhbXBsaW5nIG91dHB1 dCBhbHNvIChhcGFydAo+ICsJCQkgKiBmcm9tIFJHQi9ZQ0JDUjQ0NCBldGMpLgo+ICsJCQkgKiBG b3IgZXhhbXBsZSwgaWYgdGhlIGJpdCAwIGluIGJpdG1hcCBpcyBzZXQsCj4gKwkJCSAqIGZpcnN0 IG1vZGUgaW4gVkRCIGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0b28uCj4gKwkJCSAqIEFk ZCBZQ0JDUjQyMCBtb2RlcyBvbmx5IGlmIHNpbmsgaXMgSERNSSAyLjAgY2FwYWJsZS4KPiArCQkJ ICovCj4gKwkJCWlmIChjb25uZWN0b3ItPmlzX2hkbWkyX3NyYyAmJgoKSG1tLiBJIHdvbmRlciBp ZiBuZWVkIHRoaXMgaGVyZSBhdCBhbGwuIEkgZ3Vlc3Mgd2UgZG8gbmVlZCBzb21ldGhpbmcgZm9y CnRoZSAiNDIwIG9ubHkiIG1vZGVzLCBidXQgbm90IHN1cmUgaWYgaXQgc2hvdWxkIGJlIGhlcmUg b3IgaWYgd2Ugc2hvdWxkCnJlamVjdCB0aGVtIG9ubHkgZHVyaW5nIG1vZGUgdmFsaWRhdGlvbi4g VGhlIGxhdHRlciB3b3VsZCBiZSBuaWNlCmJlY2F1c2UgaXQgd291bGQgdGhlbiBsZWF2ZSBhIG1l c3NhZ2UgaW50byB0aGUgbG9nIHRoYXQgdGhlIG1vZGUgd2FzCnByZXNlbnQgYnV0IHdhcyByZWpl Y3RlZC4gSSdtIHRoaW5raW5nIHdlIHNob3VsZCBwcm9iYWJseSBjYWxsIHRoaXMKZmxhZyB5Y2Jj cjQyMF9hbGxvd2VkIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgdG8gbWF0Y2ggdGhlIG90aGVyCmZv b19hbGxvd2VkIGZsYWdzIHdlIGhhdmUgaW4gdGhlIGNvbm5lY3RvciBmb3IgbW9kZSB2YWxpZGF0 aW9uLgoKU28gSSB0aGluayB0aGlzIGNvdWxkIHBlcmhhcHMganVzdCBiZSBhbiB1bmNvZGl0aW9u YWwKaWYgKHRlc3RfYml0KGksIC4uLikpCglfX3NldF9iaXQodmljLCAuLi4pOwoKPiArCQkJCXRl c3RfYml0KGksICZoZG1pLT55Y2JjcjQyMF92Y2JfbWFwKSkKPiArCQkJCWRybV9hZGRfdmNiX21v ZGVzKGNvbm5lY3RvciwgZGJbaV0pOwo+ICsKPiAgCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25u ZWN0b3IsIG1vZGUpOwo+ICAJCQltb2RlcysrOwo+ICAJCX0KPiBAQCAtMzQyNyw2ICszNTE3LDEy IEBAIGRvX2hkbWlfdnNkYl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBj b25zdCB1OCAqZGIsIHU4IGxlbiwKPiAgfQo+ICAKPiAgc3RhdGljIGludAo+ICtjZWFfZGJfZXh0 ZW5kZWRfdGFnKGNvbnN0IHU4ICpkYikKPiArewo+ICsJcmV0dXJuIGRiWzFdOwo+ICt9CgpDb3Vs ZCB5b3UgY2xlYW4gdXAgdGhlIGN1cnJlbnQgZXh0ZW5kZWQgdGFnIHVzYWdlIGFzIGEgc2VwYXJh dGUKcHJlcCBwYXRjaD8gV291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29uZnVzaW9uIG9mIGNh bGxpbmcgdGhlCiJVc2UgZXh0ZW5kZWQgdGFnIiB0YWcgVklERU9fQ0FQQUJJTElUWV9CTE9DSy4K Cj4gKwo+ICtzdGF0aWMgaW50Cj4gIGNlYV9kYl9wYXlsb2FkX2xlbihjb25zdCB1OCAqZGIpCj4g IHsKPiAgCXJldHVybiBkYlswXSAmIDB4MWY7Cj4gQEAgLTM0ODcsOSArMzU4Myw4MSBAQCBzdGF0 aWMgYm9vbCBjZWFfZGJfaXNfaGRtaV9mb3J1bV92c2RiKGNvbnN0IHU4ICpkYikKPiAgCXJldHVy biBvdWkgPT0gSERNSV9GT1JVTV9JRUVFX09VSTsKPiAgfQo+ICAKPiArc3RhdGljIGJvb2wgY2Vh X2RiX2lzX3ljYmNyXzQyMF9jbWRiKGNvbnN0IHU4ICpkYikKPiArewo+ICsJdTggbGVuID0gY2Vh X2RiX3BheWxvYWRfbGVuKGRiKTsKCidsZW4nIHNlZW1zIGxpa2UgYSBmYWlybHkgcG9pbnRsZXNz IHZhcmlhYmxlIHNpbmNlIGl0J3MgdXNlZCBleGFjdGx5Cm9uY2UuCgo+ICsKPiArCWlmIChjZWFf ZGJfdGFnKGRiKSAhPSBWSURFT19DQVBBQklMSVRZX0JMT0NLKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlpZiAoIWxlbikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKGNlYV9kYl9l eHRlbmRlZF90YWcoZGIpICE9IFZJREVPX0NBUF9CTE9DS19ZNDIwQ01EQikKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGNlYV9k Yl9pc195Y2Jjcl80MjBfdmRiKGNvbnN0IHU4ICpkYikKPiArewo+ICsJaWYgKGNlYV9kYl90YWco ZGIpICE9IFZJREVPX0NBUEFCSUxJVFlfQkxPQ0spCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKCkxl bmd0aCBjaGVjayBtaXNzaW5nLgoKPiArCWlmIChjZWFfZGJfZXh0ZW5kZWRfdGFnKGRiKSAhPSBW SURFT19EQVRBX0JMT0NLXzQyMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRy dWU7Cj4gK30KPiArCj4gICNkZWZpbmUgZm9yX2VhY2hfY2VhX2RiKGNlYSwgaSwgc3RhcnQsIGVu ZCkgXAo+ICAJZm9yICgoaSkgPSAoc3RhcnQpOyAoaSkgPCAoZW5kKSAmJiAoaSkgKyBjZWFfZGJf cGF5bG9hZF9sZW4oJihjZWEpWyhpKV0pIDwgKGVuZCk7IChpKSArPSBjZWFfZGJfcGF5bG9hZF9s ZW4oJihjZWEpWyhpKV0pICsgMSkKPiAgCj4gK3N0YXRpYyB2b2lkIGRybV9wYXJzZV95NDIwY21k Yl9iaXRtYXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCSAgICAgY29u c3QgdTggKmRiKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbyA9ICZjb25u ZWN0b3ItPmRpc3BsYXlfaW5mbzsKPiArCXN0cnVjdCBkcm1faGRtaV9pbmZvICpoZG1pID0gJmlu Zm8tPmhkbWk7Cj4gKwl1OCBtYXBfbGVuID0gY2VhX2RiX3BheWxvYWRfbGVuKGRiKSAtIDE7Cj4g Kwl1OCBjb3VudDsKPiArCXU2NCBtYXAgPSAwOwo+ICsKPiArCWlmICghZGIpCj4gKwkJcmV0dXJu OwoKQ2FuJ3QgaGFwcGVuLgoKPiArCj4gKwlpZiAobWFwX2xlbiA9PSAwKSB7Cj4gKwkJLyogQWxs IENFQSBtb2RlcyBzdXBwb3J0IHljYmNyNDIwIHNhbXBsaW5nIGFsc28uKi8KPiArCQloZG1pLT55 Y2JjcjQyMF92Y2JfbWFwID0gVTY0X01BWDsKPiArCQlpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERS TV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjA7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCS8qCj4g KwkgKiBUaGlzIG1hcCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIGV4aXN0aW5nIENFQSBibG9jayBt b2Rlcwo+ICsJICogZnJvbSBWREIgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRvby4gU28g aWYgYml0PTAgaXMKPiArCSAqIHNldCwgZmlyc3QgbW9kZSBmcm9tIFZEQiBjYW4gc3VwcG9ydCBZ Q0JDUjQyMCBvdXRwdXQgdG9vLgo+ICsJICogV2Ugd2lsbCBwYXJzZSBhbmQga2VlcCB0aGlzIG1h cCwgYmVmb3JlIHBhcnNpbmcgVkRCIGl0c2VsZgo+ICsJICogdG8gYXZvaWQgZ29pbmcgdGhyb3Vn aCB0aGUgc2FtZSBibG9jayBhZ2FpbiBhbmQgYWdhaW4uCj4gKwkgKgo+ICsJICogU3BlYyBpcyBu b3QgY2xlYXIgYWJvdXQgbWF4IHBvc3NpYmxlIHNpemUgb2YgdGhpcyBibG9jay4KPiArCSAqIENs YW1waW5nIG1heCBiaXRtYXAgYmxvY2sgc2l6ZSBhdCA4IGJ5dGVzLiBFdmVyeSBieXRlIGNhbgo+ ICsJICogYWRkcmVzcyA4IENFQSBtb2RlcywgaW4gdGhpcyB3YXkgdGhpcyBtYXAgY2FuIGFkZHJl c3MKPiArCSAqIDgqOCA9IGZpcnN0IDY0IFNWRHMuCj4gKwkgKi8KPiArCWlmIChXQVJOX09OX09O Q0UobWFwX2xlbiA+IDgpKQo+ICsJCW1hcF9sZW4gPSA4Owo+ICsKPiArCWZvciAoY291bnQgPSAw OyBjb3VudCA8IG1hcF9sZW47IGNvdW50KyspCj4gKwkJbWFwIHw9ICh1NjQpZGJbMiArIGNvdW50 XSA8PCAoOCAqIGNvdW50KTsKPiArCj4gKwlpZiAobWFwKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygi U2luayBzdXBwb3J0cyB5Y2JjciA0MjBcbiIpOwoKSWYgd2Ugd2FudCB0byBwcmludCBzb21ldGhp bmcgYWJvdXQgdGhlIHNpbmtzIGNvbG9yIGNhcGFiaWxpdGllcyBJIHRoaW5rCml0IHNob3VsZCBi ZSBpbiBjZW50cmFsIHBsYWNlIGluc3RlYWQgb2YgYmVpbmcgc3ByaW5rbGVkIGFsbCBvdmVyIHRo ZQpwbGFjZS4KCj4gKwkJaW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lD UkNCNDIwOwo+ICsJfQo+ICsKPiArCWhkbWktPnljYmNyNDIwX3ZjYl9tYXAgPSBtYXA7Cj4gK30K PiArCj4gIHN0YXRpYyBpbnQKPiAgYWRkX2NlYV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKPiAgewo+IEBAIC0zNTEyLDEwICszNjgwLDE3 IEBAIGFkZF9jZWFfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0 IGVkaWQgKmVkaWQpCj4gIAkJCQl2aWRlbyA9IGRiICsgMTsKPiAgCQkJCXZpZGVvX2xlbiA9IGRi bDsKPiAgCQkJCW1vZGVzICs9IGRvX2NlYV9tb2Rlcyhjb25uZWN0b3IsIHZpZGVvLCBkYmwpOwo+ IC0JCQl9Cj4gLQkJCWVsc2UgaWYgKGNlYV9kYl9pc19oZG1pX3ZzZGIoZGIpKSB7Cj4gKwkJCX0g ZWxzZSBpZiAoY2VhX2RiX2lzX2hkbWlfdnNkYihkYikpIHsKPiAgCQkJCWhkbWkgPSBkYjsKPiAg CQkJCWhkbWlfbGVuID0gZGJsOwo+ICsJCQl9IGVsc2UgaWYgKGNlYV9kYl9pc195Y2Jjcl80MjBf dmRiKGRiKSAmJgo+ICsJCQkJCWNvbm5lY3Rvci0+aXNfaGRtaTJfc3JjKSB7CgpCcm9rZW4gaW5k ZW50YXRpb24gaW4gYSBidW5jaCBvZiBwbGFjZXMuCgo+ICsJCQkJY29uc3QgdTggKnZkYjQyMCA9 ICZkYlsyXTsKPiArCj4gKwkJCQkvKiBBZGQgNDoyOjAob25seSkgbW9kZXMgcHJlc2VudCBpbiBF RElEICovCj4gKwkJCQltb2RlcyArPSBkb195Y2Jjcl80MjBfdmRiX21vZGVzKGNvbm5lY3RvciwK PiArCQkJCQkJCQl2ZGI0MjAsCj4gKwkJCQkJCQkJZGJsIC0gMSk7Cj4gIAkJCX0KPiAgCQl9Cj4g IAl9Cj4gQEAgLTQxOTYsNiArNDM3MSw4IEBAIHN0YXRpYyB2b2lkIGRybV9wYXJzZV9jZWFfZXh0 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAkJCWRybV9wYXJzZV9oZG1pX3Zz ZGJfdmlkZW8oY29ubmVjdG9yLCBkYik7Cj4gIAkJaWYgKGNlYV9kYl9pc19oZG1pX2ZvcnVtX3Zz ZGIoZGIpKQo+ICAJCQlkcm1fcGFyc2VfaGRtaV9mb3J1bV92c2RiKGNvbm5lY3RvciwgZGIpOwo+ ICsJCWlmIChjZWFfZGJfaXNfeWNiY3JfNDIwX2NtZGIoZGIpKQo+ICsJCQlkcm1fcGFyc2VfeTQy MGNtZGJfYml0bWFwKGNvbm5lY3RvciwgZGIpOwo+ICAJfQo+ICB9Cj4gIAo+IEBAIC00NDMwLDYg KzQ2MDcsMTMgQEAgaW50IGRybV9hZGRfZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKPiAgCXF1aXJrcyA9IGVkaWRfZ2V0X3F1aXJr cyhlZGlkKTsKPiAgCj4gIAkvKgo+ICsJICogQ0VBLTg2MS1GIGFkZHMgeWNiY3IgY2FwYWJpbGl0 eSBtYXAgYmxvY2ssIGZvciBIRE1JIDIuMCBzaW5rcy4KPiArCSAqIFRvIGF2b2lkIG11bHRpcGxl IHBhcnNpbmcgb2Ygc2FtZSBibG9jaywgbGV0cyBnZXQgdGhlIHNpbmsgaW5mbwo+ICsJICogYmVm b3JlIHBhcnNpbmcgQ0VBIG1vZGVzLgo+ICsJICovCj4gKwlkcm1fYWRkX2Rpc3BsYXlfaW5mbyhj b25uZWN0b3IsIGVkaWQpOwo+ICsKPiArCS8qCj4gIAkgKiBFRElEIHNwZWMgc2F5cyBtb2RlcyBz aG91bGQgYmUgcHJlZmVycmVkIGluIHRoaXMgb3JkZXI6Cj4gIAkgKiAtIHByZWZlcnJlZCBkZXRh aWxlZCBtb2RlCj4gIAkgKiAtIG90aGVyIGRldGFpbGVkIG1vZGVzIGZyb20gYmFzZSBibG9jawo+ IEBAIC00NDUwLDE0ICs0NjM0LDEzIEBAIGludCBkcm1fYWRkX2VkaWRfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpCj4gIAludW1fbW9kZXMg Kz0gYWRkX2NlYV9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ICAJbnVtX21vZGVzICs9IGFkZF9h bHRlcm5hdGVfY2VhX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7Cj4gIAludW1fbW9kZXMgKz0gYWRk X2Rpc3BsYXlpZF9kZXRhaWxlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ICsKPiAgCWlmIChl ZGlkLT5mZWF0dXJlcyAmIERSTV9FRElEX0ZFQVRVUkVfREVGQVVMVF9HVEYpCj4gIAkJbnVtX21v ZGVzICs9IGFkZF9pbmZlcnJlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ICAKPiAgCWlmIChx dWlya3MgJiAoRURJRF9RVUlSS19QUkVGRVJfTEFSR0VfNjAgfCBFRElEX1FVSVJLX1BSRUZFUl9M QVJHRV83NSkpCj4gIAkJZWRpZF9maXh1cF9wcmVmZXJyZWQoY29ubmVjdG9yLCBxdWlya3MpOwo+ ICAKPiAtCWRybV9hZGRfZGlzcGxheV9pbmZvKGNvbm5lY3RvciwgZWRpZCk7Cj4gLQoKSSB0aGlu ayB0aGlzIGNvdWxkIGJlIGEgc2VwYXJhdGUgcGF0Y2gsIGp1c3QgaW4gY2FzZSBpdCBjYXVzZXMg YQpyZWdyZXNzaW9uLgoKPiAgCWlmIChxdWlya3MgJiBFRElEX1FVSVJLX0ZPUkNFXzZCUEMpCj4g IAkJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnBjID0gNjsKPiAgCj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCBiL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+ IGluZGV4IDM5MDMxOWMuLjVhNDdjMzMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Nv bm5lY3Rvci5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gQEAgLTEzNyw2 ICsxMzcsMjggQEAgc3RydWN0IGRybV9zY2RjIHsKPiAgc3RydWN0IGRybV9oZG1pX2luZm8gewo+ ICAJLyoqIEBzY2RjOiBzaW5rJ3Mgc2NkYyBzdXBwb3J0IGFuZCBjYXBhYmlsaXRpZXMgKi8KPiAg CXN0cnVjdCBkcm1fc2NkYyBzY2RjOwo+ICsKPiArCS8qKgo+ICsJICogQHljYmNyNDIwX3ZkYl9t b2RlczogYml0bWFwIG9mIG1vZGVzIHdoaWNoIGNhbiBzdXBwb3J0IHljYmNyNDIwCj4gKwkgKiBv dXRwdXQgb25seSAobm90IG5vcm1hbCBSR0IvWUNCQ1I0NDQvNDIyIG91dHB1dHMpLiBUaGVyZSBh cmUgdG90YWwKPiArCSAqIDEwNyBWSUNzIGRlZmluZWQgYnkgQ0VBLTg2MS1GIHNwZWMsIHNvIHRo ZSBzaXplIGlzIDEyOCBiaXRzIHRvIG1hcAo+ICsJICogdXB0byAxMjggVklDczsKPiArCSAqLwo+ ICsJdW5zaWduZWQgbG9uZyB5Y2JjcjQyMF92ZGJfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsK PiArCj4gKwkvKioKPiArCSAqIEB5Y2JjcjQyMF92Y2JfbW9kZXM6IGJpdG1hcCBvZiBtb2RlcyB3 aGljaCBjYW4gc3VwcG9ydCB5Y2JjcjQyMAo+ICsJICogb3V0cHV0IGFsc28sIGFsb25nIHdpdGgg bm9ybWFsIEhETUkgb3V0cHV0cy4gVGhlcmUgYXJlIHRvdGFsIDEwNwo+ICsJICogVklDcyBkZWZp bmVkIGJ5IENFQS04NjEtRiBzcGVjLCBzbyB0aGUgc2l6ZSBpcyAxMjggYml0cyB0byBtYXAgdXB0 bwo+ICsJICogMTI4IFZJQ3M7Cj4gKwkgKi8KPiArCXVuc2lnbmVkIGxvbmcgeWNiY3I0MjBfdmNi X21vZGVzW0JJVFNfVE9fTE9OR1MoMTI4KV07Cj4gKwo+ICsJLyoqIEB5Y2JjcjQyMF92Y2JfbWFw OiBiaXRtYXAgb2YgU1ZEIGluZGV4LCB0byBleHRyYXh0IHZjYiBtb2RlcyAqLwo+ICsJdW5zaWdu ZWQgbG9uZyB5Y2JjcjQyMF92Y2JfbWFwOwo+ICsKPiArCS8qKiBAeWNiY3I0MjBfZGNfbW9kZXM6 IGJpdG1hcCBvZiBkZWVwIGNvbG9yIHN1cHBvcnQgaW5kZXggKi8KPiArCXU4IHljYmNyNDIwX2Rj X21vZGVzOwoKdW51c2VkCgo+ICB9Owo+ICAKPiAgLyoqCj4gQEAgLTIwMCw2ICsyMjIsNyBAQCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyB7Cj4gICNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1BVF9SR0I0 NDQJCSgxPDwwKQo+ICAjZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQJKDE8PDEpCj4g ICNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMgkoMTw8MikKPiArI2RlZmluZSBEUk1f Q09MT1JfRk9STUFUX1lDUkNCNDIwCSgxPDwzKQo+ICAKPiAgCS8qKgo+ICAJICogQGNvbG9yX2Zv cm1hdHM6IEhETUkgQ29sb3IgZm9ybWF0cywgc2VsZWN0cyBiZXR3ZWVuIFJHQiBhbmQgWUNyQ2IK PiAtLSAKPiAyLjcuNAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==