From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 18CBF89B33 for ; Tue, 16 Apr 2019 11:03:20 +0000 (UTC) From: Jani Nikula In-Reply-To: References: <20190415123815.27258-1-simon.ser@intel.com> <20190415142043.29723-1-simon.ser@intel.com> <20190416081150.j2jrotpwg4xn4k6b@ahiler-desk1.fi.intel.com> Date: Tue, 16 Apr 2019 14:05:44 +0300 Message-ID: <87k1fuw6pj.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v2] lib/igt_edid: new library for generating EDIDs List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Ser, Simon" , "Hiler, Arkadiusz" Cc: "igt-dev@lists.freedesktop.org" List-ID: T24gVHVlLCAxNiBBcHIgMjAxOSwgIlNlciwgU2ltb24iIDxzaW1vbi5zZXJAaW50ZWwuY29tPiB3 cm90ZToKPiBUaGFua3MgZm9yIHlvdXIgcmV2aWV3IQo+Cj4gT24gVHVlLCAyMDE5LTA0LTE2IGF0 IDExOjExICswMzAwLCBBcmthZGl1c3ogSGlsZXIgd3JvdGU6Cj4+IE9uIE1vbiwgQXByIDE1LCAy MDE5IGF0IDA1OjIwOjQzUE0gKzAzMDAsIFNpbW9uIFNlciB3cm90ZToKPj4gPiBGb3IgdGhlIHB1 cnBvc2VzIG9mIHRlc3RpbmcgZGlmZmVyZW50IEVESUQgZmVhdHVyZXMsIHdlIG5lZWQgdG8gZ2Vu ZXJhdGUgbW9yZQo+PiA+IGFuZCBtb3JlIGNvbXBsZXggRURJRCBibG9icyAoZS5nLiB3aXRoIGF1 ZGlvIHN1cHBvcnQpLiBIb3dldmVyIGN1cnJlbnRseSBJR1QKPj4gPiB1c2VzIGEgbWFjcm8tYmFz ZWQgc3lzdGVtIHRvIGdlbmVyYXRlIEVESURzLiBUaGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCBhbmQg aXMKPj4gPiBwcmV0dHkgaW5mbGV4aWJsZS4KPj4gPiAKPj4gPiBUaGlzIGNvbW1pdCBpbnRyb2R1 Y2VzIGEgbmV3IGxpdHRsZSBsaWJyYXJ5IHRvIGdlbmVyYXRlIEVESURzLiBGb3Igbm93IGl0IGNh bid0Cj4+ID4gZG8gbW9yZSB0aGFuIHRoZSBvbGQgbWFjcm8uIEZ1dHVyZSBjb21taXRzIHdpbGwg ZXh0ZW5kIHRoZSBBUEkuCj4+ID4gCj4+ID4gVGhlIHN0cnVjdHVyZXMgYXJlIG1vc3RseSBiYXNl ZCBvbiB0aGUgTGludXgga2VybmVsIGNvZGUgKGRybV9lZGlkLmgpLiBTZXR0ZXJzCj4+ID4gaGF2 ZSBiZWVuIGFkZGVkIGZvciBjb252ZW5pZW5jZS4KPj4gPiAKPj4gPiBTaWduZWQtb2ZmLWJ5OiBT aW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Cj4+ID4gLS0tCj4+ID4gCj4+ID4gQ2hhbmdl cyBpbiB2MjogZml4IGluY2x1ZGUgZ3VhcmQgbmFtZQo+PiA+IAo+PiA+IEFkZGluZyBWaWxsZSBi ZWNhdXNlIGhlIHdyb3RlIHRoZSBjdXJyZW50IEVESUQgY29kZSwgYW5kIEFyZWsgYmVjYXVzZSBo ZSdzCj4+ID4gaW50ZXJlc3RlZCBpbiB0aGlzIHBhdGNoLgo+PiA+IAo+PiA+ICBsaWIvaWd0X2Vk aWQuYyAgICAgICAgICB8IDI2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4+ID4gIGxpYi9pZ3RfZWRpZC5oICAgICAgICAgIHwgMTk2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4+ID4gIGxpYi9pZ3RfZWRpZF90ZW1wbGF0ZS5oIHwgIDc0IC0tLS0tLS0t LS0tCj4+ID4gIGxpYi9pZ3Rfa21zLmMgICAgICAgICAgIHwgMTEzICsrKysrKysrKy0tLS0tLS0t Cj4+ID4gIGxpYi9tZXNvbi5idWlsZCAgICAgICAgIHwgICAzICstCj4+ID4gIDUgZmlsZXMgY2hh bmdlZCwgNTIxIGluc2VydGlvbnMoKyksIDEzMyBkZWxldGlvbnMoLSkKPj4gPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9pZ3RfZWRpZC5jCj4+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0 X2VkaWQuaAo+PiA+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGliL2lndF9lZGlkX3RlbXBsYXRlLmgK Pj4gPiAKPj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9lZGlkLmMgYi9saWIvaWd0X2VkaWQuYwo+ PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ID4gaW5kZXggMDAwMDAwMDAuLjE1NWViZWJlCj4+ ID4gLS0tIC9kZXYvbnVsbAo+PiA+ICsrKyBiL2xpYi9pZ3RfZWRpZC5jCj4+ID4gQEAgLTAsMCAr MSwyNjggQEAKPj4gPiArLyoKPj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9y YXRpb24KPj4gPiArICoKPj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4gPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKPj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+PiA+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+ID4gKyAqCj4+ ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+PiA+ICsg KiBTb2Z0d2FyZS4KPj4gPiArICoKPj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPj4gPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiA+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgo+PiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+PiA+ICsgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCj4+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPj4gPiArICoKPj4gPiArICogQXV0aG9y czogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgo+PiA+ICsgKi8KPj4gPiArCj4+ID4g KyNpbmNsdWRlICJjb25maWcuaCIKPj4gPiArCj4+ID4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPj4g PiArI2luY2x1ZGUgPHN0cmluZy5oPgo+PiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4+ID4gKyNp bmNsdWRlIDx0aW1lLmg+Cj4+ID4gKyNpbmNsdWRlIDx4Zjg2ZHJtTW9kZS5oPgo+PiA+ICsKPj4g PiArI2luY2x1ZGUgImlndF9jb3JlLmgiCj4+ID4gKyNpbmNsdWRlICJpZ3RfZWRpZC5oIgo+PiA+ ICsKPj4gPiArc3RhdGljIGNvbnN0IGNoYXIgZWRpZF9oZWFkZXJbXSA9IHsKPj4gPiArCTB4MDAs IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKPj4gPiArfTsKPj4gPiAr Cj4+ID4gKy8qIHZmcmVxIGlzIGluIEh6ICovCj4+ID4gK3N0YXRpYyB2b2lkIHN0ZF90aW1pbmdf c2V0KHN0cnVjdCBzdGRfdGltaW5nICpzdCwgaW50IGhzaXplLCBpbnQgdmZyZXEsCj4+ID4gKwkJ CSAgIGVudW0gc3RkX3RpbWluZ19hc3BlY3QgYXNwZWN0KQo+PiA+ICt7Cj4+ID4gKwlhc3NlcnQo aHNpemUgPj0gMjU2ICYmIGhzaXplIDw9IDIyODgpOwo+PiA+ICsJc3QtPmhzaXplID0gaHNpemUg LyA4IC0gMzE7Cj4+ID4gKwlzdC0+dmZyZXFfYXNwZWN0ID0gYXNwZWN0IDw8IDYgfCAodmZyZXEg LSA2MCk7Cj4+ID4gK30KPj4gPiArCj4+ID4gK3N0YXRpYyB2b2lkIHN0ZF90aW1pbmdfdW5zZXQo c3RydWN0IHN0ZF90aW1pbmcgKnN0KQo+PiA+ICt7Cj4+ID4gKwltZW1zZXQoc3QsIDB4MDEsIHNp emVvZihzdHJ1Y3Qgc3RkX3RpbWluZykpOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICsvKioKPj4gPiAr ICogZGV0YWlsZWRfdGltaW5nX3NldF9tb2RlOiBmaWxsIGEgZGV0YWlsZWQgdGltaW5nIGJhc2Vk IG9uIGEgbW9kZQo+PiA+ICsgKi8KPj4gPiArdm9pZCBkZXRhaWxlZF90aW1pbmdfc2V0X21vZGUo c3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPj4gPiAr CQkJICAgICAgaW50IHdpZHRoX21tLCBpbnQgaGVpZ2h0X21tKQo+PiA+ICt7Cj4+ID4gKwlpbnQg aGFjdGl2ZSwgaGJsYW5rLCB2YWN0aXZlLCB2YmxhbmssIGhzeW5jX29mZnNldCwgaHN5bmNfcHVs c2Vfd2lkdGgsCj4+ID4gKwkgICAgdnN5bmNfb2Zmc2V0LCB2c3luY19wdWxzZV93aWR0aDsKPj4g PiArCXN0cnVjdCBkZXRhaWxlZF9waXhlbF90aW1pbmcgKnB0ID0gJmR0LT5kYXRhLnBpeGVsX2Rh dGE7Cj4+ID4gKwo+PiA+ICsJaGFjdGl2ZSA9IG1vZGUtPmhkaXNwbGF5Owo+PiA+ICsJaHN5bmNf b2Zmc2V0ID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKPj4gPiArCWhzeW5j X3B1bHNlX3dpZHRoID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7Cj4+ID4g KwloYmxhbmsgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsKPj4gPiArCj4+ID4gKwl2 YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7Cj4+ID4gKwl2c3luY19vZmZzZXQgPSBtb2RlLT52c3lu Y19zdGFydCAtIG1vZGUtPnZkaXNwbGF5Owo+PiA+ICsJdnN5bmNfcHVsc2Vfd2lkdGggPSBtb2Rl LT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKPj4gPiArCXZibGFuayA9IG1vZGUtPnZ0 b3RhbCAtIG1vZGUtPnZkaXNwbGF5Owo+PiA+ICsKPj4gPiArCWR0LT5waXhlbF9jbG9ja1swXSA9 IChtb2RlLT5jbG9jayAvIDEwKSAmIDB4MDBGRjsKPj4gPiArCWR0LT5waXhlbF9jbG9ja1sxXSA9 ICgobW9kZS0+Y2xvY2sgLyAxMCkgJiAweEZGMDApID4+IDg7Cj4+ID4gKwo+PiA+ICsJYXNzZXJ0 KGhhY3RpdmUgPD0gMHhGRkYpOwo+PiA+ICsJYXNzZXJ0KGhibGFuayA8PSAweEZGRik7Cj4+ID4g KwlwdC0+aGFjdGl2ZV9sbyA9IGhhY3RpdmUgJiAweDBGRjsKPj4gPiArCXB0LT5oYmxhbmtfbG8g PSBoYmxhbmsgJiAweDBGRjsKPj4gPiArCXB0LT5oYWN0aXZlX2hibGFua19oaSA9IChoYWN0aXZl ICYgMHhGMDApID4+IDQgfCAoaGJsYW5rICYgMHhGMDApID4+IDg7Cj4+ID4gKwo+PiA+ICsJYXNz ZXJ0KHZhY3RpdmUgPD0gMHhGRkYpOwo+PiA+ICsJYXNzZXJ0KHZibGFuayA8PSAweEZGRik7Cj4+ ID4gKwlwdC0+dmFjdGl2ZV9sbyA9IHZhY3RpdmUgJiAweDBGRjsKPj4gPiArCXB0LT52Ymxhbmtf bG8gPSB2YmxhbmsgJiAweDBGRjsKPj4gPiArCXB0LT52YWN0aXZlX3ZibGFua19oaSA9ICh2YWN0 aXZlICYgMHhGMDApID4+IDQgfCAodmJsYW5rICYgMHhGMDApID4+IDg7Cj4+ID4gKwo+PiA+ICsJ YXNzZXJ0KGhzeW5jX29mZnNldCA8PSAweDNGRik7Cj4+ID4gKwlhc3NlcnQoaHN5bmNfcHVsc2Vf d2lkdGggPD0gMHgzRkYpOwo+PiA+ICsJYXNzZXJ0KHZzeW5jX29mZnNldCA8PSAweDNGKTsKPj4g PiArCWFzc2VydCh2c3luY19wdWxzZV93aWR0aCA8PSAweDNGKTsKPj4gPiArCXB0LT5oc3luY19v ZmZzZXRfbG8gPSBoc3luY19vZmZzZXQgJiAweDBGRjsKPj4gPiArCXB0LT5oc3luY19wdWxzZV93 aWR0aF9sbyA9IGhzeW5jX3B1bHNlX3dpZHRoICYgMHgwRkY7Cj4+ID4gKwlwdC0+dnN5bmNfb2Zm c2V0X3B1bHNlX3dpZHRoX2xvID0gKHZzeW5jX29mZnNldCAmIDB4RikgPDwgNAo+PiA+ICsJCQkJ CSAgfCAodnN5bmNfcHVsc2Vfd2lkdGggJiAweEYpOwo+PiA+ICsJcHQtPmhzeW5jX3ZzeW5jX29m ZnNldF9wdWxzZV93aWR0aF9oaSA9IAo+PiAKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeIHRhaWxpbmcgd2hpdGVzcGFjZQo+PiAKPj4gPiArCQkoKGhz eW5jX29mZnNldCAmIDB4MzAwKSA+PiAyKSB8ICgoaHN5bmNfcHVsc2Vfd2lkdGggJiAweDMwMCkg Pj4gNCkKPj4gPiArCQl8ICgodnN5bmNfb2Zmc2V0ICYgMHgzMCkgPj4gMikgfCAoKHZzeW5jX3B1 bHNlX3dpZHRoICYgMHgzMCkgPj4gNCk7Cj4+ID4gKwo+PiA+ICsJYXNzZXJ0KHdpZHRoX21tIDw9 IDB4RkZGKTsKPj4gPiArCWFzc2VydChoZWlnaHRfbW0gPD0gMHhGRkYpOwo+PiA+ICsJcHQtPndp ZHRoX21tX2xvID0gd2lkdGhfbW0gJiAweDBGRjsKPj4gPiArCXB0LT5oZWlnaHRfbW1fbG8gPSBo ZWlnaHRfbW0gJiAweDBGRjsKPj4gPiArCXB0LT53aWR0aF9oZWlnaHRfbW1faGkgPSAod2lkdGhf bW0gJiAweEYwMCkgPj4gNAo+PiA+ICsJCQkJIHwgKGhlaWdodF9tbSAmIDB4RjAwKSA+PiA4Owo+ PiA+ICsJCj4+IAo+PiAgICBeXl5eXiB0YWIKPj4gCj4+IGF1dG9jbWQgQnVmV3JpdGVQcmUgKiAl cy9cc1wrJC8vZQo+PiAKPj4gbWF5IGhlbHAgeW91Cj4KPiBBaCwgdGhhbmtzIGZvciB0aGUgdGlw IQo+Cj4gQWxzbyBwdWxsZWQgbXkgdmltIGRvdGZpbGVzIHNvIHRoYXQgd2hpdGVzcGFjZSBjaGFy YWN0ZXJzIGFyZSB2aXNpYmxlLgo+Cj4+ID4gKwlwdC0+bWlzYyA9IDA7Cj4+ID4gKwlpZiAobW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKPj4gPiArCQlwdC0+bWlzYyB8PSBFRElE X1BUX0hTWU5DX1BPU0lUSVZFOwo+PiA+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19QVlNZTkMpCj4+ID4gKwkJcHQtPm1pc2MgfD0gRURJRF9QVF9WU1lOQ19QT1NJVElWRTsKPj4g PiArfQo+PiA+ICsKPj4gPiArLyoqCj4+ID4gKyAqIGRldGFpbGVkX3RpbWluZ19zZXRfbW9uaXRv cl9yYW5nZV9tb2RlOiBzZXQgYSBkZXRhaWxlZCB0aW1pbmcgdG8gYmUgYQo+PiA+ICsgKiBtb25p dG9yIHJhbmdlIGJhc2VkIG9uIGEgbW9kZQo+PiA+ICsgKi8KPj4gPiArdm9pZCBkZXRhaWxlZF90 aW1pbmdfc2V0X21vbml0b3JfcmFuZ2VfbW9kZShzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwK Pj4gPiArCQkJCQkgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlKQo+PiA+ICt7Cj4+ID4gKwlzdHJ1 Y3QgZGV0YWlsZWRfbm9uX3BpeGVsICpucCA9ICZkdC0+ZGF0YS5vdGhlcl9kYXRhOwo+PiA+ICsJ c3RydWN0IGRldGFpbGVkX2RhdGFfbW9uaXRvcl9yYW5nZSAqbXIgPSAmbnAtPmRhdGEucmFuZ2U7 Cj4+ID4gKwo+PiA+ICsJZHQtPnBpeGVsX2Nsb2NrWzBdID0gZHQtPnBpeGVsX2Nsb2NrWzFdID0g MDsKPj4gPiArCj4+ID4gKwlucC0+dHlwZSA9IEVESURfREVUQUlMX01PTklUT1JfUkFOR0U7Cj4+ ID4gKwo+PiA+ICsJbXItPm1pbl92ZnJlcSA9IG1vZGUtPnZyZWZyZXNoIC0gMTsKPj4gPiArCW1y LT5tYXhfdmZyZXEgPSBtb2RlLT52cmVmcmVzaCArIDE7Cj4+ID4gKwltci0+bWluX2hmcmVxX2to eiA9IChtb2RlLT5jbG9jayAvIG1vZGUtPmh0b3RhbCkgLSAxOwo+PiA+ICsJbXItPm1heF9oZnJl cV9raHogPSAobW9kZS0+Y2xvY2sgLyBtb2RlLT5odG90YWwpICsgMTsKPj4gPiArCW1yLT5waXhl bF9jbG9ja19taHogPSAobW9kZS0+Y2xvY2sgLyAxMDAwMCkgKyAxOwo+PiA+ICsJbXItPmZsYWdz ID0gMDsKPj4gPiArCj4+ID4gKwlzdGF0aWMgY29uc3QgY2hhciBwYWRkaW5nW10gPSB7Cj4+ID4g KwkJMHgwYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMAo+PiA+ICsJfTsKPj4g PiArCW1lbWNweShtci0+Zm9ybXVsYS5wYWQsIHBhZGRpbmcsIHNpemVvZihwYWRkaW5nKSk7Cj4+ ID4gK30KPj4gPiArCj4+ID4gKy8qKgo+PiA+ICsgKiBkZXRhaWxlZF90aW1pbmdfc2V0X3N0cmlu Zzogc2V0IGEgZGV0YWlsZWQgdGltaW5nIHRvIGJlIGEgc3RyaW5nCj4+ID4gKyAqLwo+PiA+ICt2 b2lkIGRldGFpbGVkX3RpbWluZ19zZXRfc3RyaW5nKHN0cnVjdCBkZXRhaWxlZF90aW1pbmcgKmR0 LAo+PiA+ICsJCQkJZW51bSBkZXRhaWxlZF9ub25fcGl4ZWxfdHlwZSB0eXBlLAo+PiA+ICsJCQkJ Y29uc3QgY2hhciAqc3RyKQo+PiA+ICt7Cj4+ID4gKwlzdHJ1Y3QgZGV0YWlsZWRfbm9uX3BpeGVs ICpucCA9ICZkdC0+ZGF0YS5vdGhlcl9kYXRhOwo+PiA+ICsJc3RydWN0IGRldGFpbGVkX2RhdGFf c3RyaW5nICpkcyA9ICZucC0+ZGF0YS5zdHJpbmc7Cj4+ID4gKwlzaXplX3QgbGVuOwo+PiA+ICsK Pj4gPiArCXN3aXRjaCAodHlwZSkgewo+PiA+ICsJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX05B TUU6Cj4+ID4gKwljYXNlIEVESURfREVUQUlMX01PTklUT1JfU1RSSU5HOgo+PiA+ICsJY2FzZSBF RElEX0RFVEFJTF9NT05JVE9SX1NFUklBTDoKPj4gPiArCQlicmVhazsKPj4gPiArCWRlZmF1bHQ6 Cj4+ID4gKwkJYXNzZXJ0KDApOyAvKiBub3QgYSBzdHJpbmcgdHlwZSAqLwo+PiA+ICsJfQo+PiA+ ICsKPj4gPiArCWR0LT5waXhlbF9jbG9ja1swXSA9IGR0LT5waXhlbF9jbG9ja1sxXSA9IDA7Cj4+ ID4gKwo+PiA+ICsJbnAtPnR5cGUgPSB0eXBlOwo+PiA+ICsKPj4gPiArCXN0cm5jcHkoZHMtPnN0 ciwgc3RyLCBzaXplb2YoZHMtPnN0cikpOwo+PiA+ICsJbGVuID0gc3RybGVuKHN0cik7Cj4+ID4g KwlpZiAobGVuIDwgc2l6ZW9mKGRzLT5zdHIpKQo+PiA+ICsJCWRzLT5zdHJbbGVuXSA9ICdcbic7 Cj4+ID4gK30KPj4gPiArCj4+ID4gK3N0YXRpYyB2b2lkIGVkaWRfc2V0X21mZyhzdHJ1Y3QgZWRp ZCAqZWRpZCwgY2hhciBtZmdbc3RhdGljIDNdKQo+PiA+ICt7Cj4+ID4gKwllZGlkLT5tZmdfaWRb MF0gPSAobWZnWzBdIC0gJ0AnKSA8PCAyIHwgKG1mZ1sxXSAtICdAJykgPj4gMzsKPj4gPiArCWVk aWQtPm1mZ19pZFsxXSA9IChtZmdbMV0gLSAnQCcpIDw8IDUgfCAobWZnWzJdIC0gJ0AnKTsKPj4g PiArfQo+PiA+ICsKPj4gPiArc3RhdGljIHZvaWQgZWRpZF9zZXRfZ2FtbWEoc3RydWN0IGVkaWQg KmVkaWQsIGZsb2F0IGdhbW1hKQo+PiA+ICt7Cj4+ID4gKwllZGlkLT5nYW1tYSA9IChnYW1tYSAq IDEwMCkgLSAxMDA7Cj4+ID4gK30KPj4gPiArCj4+ID4gKy8qKgo+PiA+ICsgKiBlZGlkX2luaXQ6 IGluaXRpYWxpemUgYW4gRURJRAo+PiA+ICsgKgo+PiA+ICsgKiBUaGUgRURJRCB3aWxsIGJlIHBy ZS1maWxsZWQgd2l0aCBlc3RhYmxpc2hlZCBhbmQgc3RhbmRhcmQgdGltaW5nczoKPj4gPiArICoK Pj4gPiArICogIC0gMTkyMHgxMDgwIDYwSHoKPj4gPiArICogIC0gMTI4MHg3MjAgNjBIego+PiA+ ICsgKiAgLSAxMDI0eDc2OCA2MEh6Cj4+ID4gKyAqICAtIDgwMHg2MDAgNjBIego+PiA+ICsgKiAg LSA2NDB4NDgwIDYwSHoKPj4gPiArICovCj4+ID4gK3ZvaWQgZWRpZF9pbml0KHN0cnVjdCBlZGlk ICplZGlkKQo+PiA+ICt7Cj4+ID4gKwlzaXplX3QgaTsKPj4gPiArCXRpbWVfdCB0Owo+PiA+ICsJ c3RydWN0IHRtICp0bTsKPj4gPiArCj4+ID4gKwltZW1zZXQoZWRpZCwgMCwgc2l6ZW9mKHN0cnVj dCBlZGlkKSk7Cj4+ID4gKwo+PiA+ICsJbWVtY3B5KGVkaWQtPmhlYWRlciwgZWRpZF9oZWFkZXIs IHNpemVvZihlZGlkX2hlYWRlcikpOwo+PiA+ICsJZWRpZF9zZXRfbWZnKGVkaWQsICJJR1QiKTsK Pj4gPiArCWVkaWQtPnZlcnNpb24gPSAxOwo+PiA+ICsJZWRpZC0+cmV2aXNpb24gPSAzOwo+PiA+ ICsJZWRpZC0+aW5wdXQgPSAweDgwOwo+PiA+ICsJZWRpZC0+d2lkdGhfY20gPSA1MjsKPj4gPiAr CWVkaWQtPmhlaWdodF9jbSA9IDMwOwo+PiA+ICsJZWRpZF9zZXRfZ2FtbWEoZWRpZCwgMi4yMCk7 Cj4+ID4gKwllZGlkLT5mZWF0dXJlcyA9IDB4MDI7Cj4+ID4gKwo+PiA+ICsJLyogWWVhciBvZiBt YW51ZmFjdHVyZSAqLwo+PiA+ICsJdCA9IHRpbWUoTlVMTCk7Cj4+ID4gKwl0bSA9IGxvY2FsdGlt ZSgmdCk7Cj4+ID4gKwllZGlkLT5tZmdfeWVhciA9IHRtLT50bV95ZWFyIC0gOTA7Cj4+ID4gKwo+ PiA+ICsJLyogRXN0YWJsaXNoZWQgdGltaW5nczogNjQweDQ4MCA2MEh6LCA4MDB4NjAwIDYwSHos IDEwMjR4NzY4IDYwSHogKi8KPj4gPiArCWVkaWQtPmVzdGFibGlzaGVkX3RpbWluZ3MudDEgPSAw eDIxOwo+PiA+ICsJZWRpZC0+ZXN0YWJsaXNoZWRfdGltaW5ncy50MiA9IDB4MDg7Cj4+ID4gKwo+ PiA+ICsJLyogU3RhbmRhcmQgdGltaW5ncyAqLwo+PiA+ICsJLyogMTkyMHgxMDgwIDYwSHogKi8K Pj4gPiArCXN0ZF90aW1pbmdfc2V0KCZlZGlkLT5zdGFuZGFyZF90aW1pbmdzWzBdLCAxOTIwLCA2 MCwgU1REX1RJTUlOR18xNl85KTsKPj4gPiArCS8qIDEyODB4NzIwIDYwSHogKi8KPj4gPiArCXN0 ZF90aW1pbmdfc2V0KCZlZGlkLT5zdGFuZGFyZF90aW1pbmdzWzFdLCAxMjgwLCA2MCwgU1REX1RJ TUlOR18xNl85KTsKPj4gPiArCS8qIDEwMjR4NzY4IDYwSHogKi8KPj4gPiArCXN0ZF90aW1pbmdf c2V0KCZlZGlkLT5zdGFuZGFyZF90aW1pbmdzWzJdLCAxMDI0LCA2MCwgU1REX1RJTUlOR180XzMp Owo+PiA+ICsJLyogODAweDYwMCA2MEh6ICovCj4+ID4gKwlzdGRfdGltaW5nX3NldCgmZWRpZC0+ c3RhbmRhcmRfdGltaW5nc1szXSwgODAwLCA2MCwgU1REX1RJTUlOR180XzMpOwo+PiA+ICsJLyog NjQweDQ4MCA2MEh6ICovCj4+ID4gKwlzdGRfdGltaW5nX3NldCgmZWRpZC0+c3RhbmRhcmRfdGlt aW5nc1s0XSwgNjQwLCA2MCwgU1REX1RJTUlOR180XzMpOwo+PiA+ICsJZm9yIChpID0gNTsgaSA8 IFNURF9USU1JTkdTX0xFTjsgaSsrKQo+PiA+ICsJCXN0ZF90aW1pbmdfdW5zZXQoJmVkaWQtPnN0 YW5kYXJkX3RpbWluZ3NbaV0pOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICsvKioKPj4gPiArICogZWRp ZF9pbml0X3dpdGhfbW9kZTogaW5pdGlhbGl6ZSBhbiBFRElEIGFuZCBzZXRzIGl0cyBwcmVmZXJy ZWQgbW9kZQo+PiA+ICsgKi8KPj4gPiArdm9pZCBlZGlkX2luaXRfd2l0aF9tb2RlKHN0cnVjdCBl ZGlkICplZGlkLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCj4+ID4gK3sKPj4gPiArCWVkaWRfaW5p dChlZGlkKTsKPj4gPiArCj4+ID4gKwkvKiBQcmVmZXJyZWQgdGltaW5nICovCj4+ID4gKwlkZXRh aWxlZF90aW1pbmdfc2V0X21vZGUoJmVkaWQtPmRldGFpbGVkX3RpbWluZ3NbMF0sIG1vZGUsCj4+ ID4gKwkJCQkgZWRpZC0+d2lkdGhfY20gKiAxMCwgZWRpZC0+aGVpZ2h0X2NtICogMTApOwo+PiA+ ICsJZGV0YWlsZWRfdGltaW5nX3NldF9tb25pdG9yX3JhbmdlX21vZGUoJmVkaWQtPmRldGFpbGVk X3RpbWluZ3NbMV0sCj4+ID4gKwkJCQkJICAgICAgIG1vZGUpOwo+PiA+ICsJZGV0YWlsZWRfdGlt aW5nX3NldF9zdHJpbmcoJmVkaWQtPmRldGFpbGVkX3RpbWluZ3NbMl0sCj4+ID4gKwkJCQkgICBF RElEX0RFVEFJTF9NT05JVE9SX05BTUUsICJJR1QiKTsKPj4gPiArfQo+PiA+ICsKPj4gPiArLyoq Cj4+ID4gKyAqIGVkaWRfZmluYWxpemU6IGZpbmFsaXplIGFuIEVESUQgYnkgY29tcHV0aW5nIGl0 cyBjaGVja3N1bQo+PiA+ICsgKi8KPj4gPiArdm9pZCBlZGlkX2ZpbmFsaXplKHN0cnVjdCBlZGlk ICplZGlkKQo+PiA+ICt7Cj4+ID4gKwlzaXplX3QgaTsKPj4gPiArCWNvbnN0IHVpbnQ4X3QgKmJ1 ZiA9IChjb25zdCB1aW50OF90ICopIGVkaWQ7Cj4+ID4gKwl1aW50OF90IHN1bSA9IDA7Cj4+ID4g Kwo+PiA+ICsJLyogY2FsY3VsYXRlIGNoZWNrc3VtICovCj4+ID4gKwlmb3IgKGkgPSAwOyBpIDwg c2l6ZW9mKHN0cnVjdCBlZGlkKSAtIDE7IGkrKykgewo+PiA+ICsJCXN1bSA9IHN1bSArIGJ1Zltp XTsKPj4gPiArCX0KPj4gPiArCj4+ID4gKwllZGlkLT5jaGVja3N1bSA9IDI1NiAtIHN1bTsKPj4g PiArfQo+PiAKPj4gSSBnZXQgd2h5IHVzaW5nIGBmaW5hbGl6ZWAgaGVyZSBtYXkgc2VlbXMgdGVt cHRpbmcsIGJ1dCBmaW5pIGFuZAo+PiBmaW5hbGl6ZSB0ZW5kIHRvIGJlIHVzZWQgZm9yIGRlc3Ry dWN0b3JzIChvciBhbmFsb2d1ZXMgaW4gR0NlZAo+PiBsYW5ndWFnZXMpLCBzbyB0aGlzIG1heSBi ZSBhIGJpdCBjb25mdXNpbmcuIEkgdGhpbmsgd2Ugc2hvdWxkIGdvIHdpdGgKPj4gZWRpZF91cGRh dGVfY2hlY2tzdW0oKSBvciBzaW1pbGFyLgo+Cj4gQWdyZWVkLCBhIG1vcmUgZXhwbGljaXQgbmFt ZSBpcyBwb2JhYmx5IG5vdCBhIGJhZCBpZGVhLgo+Cj4+IE90aGVyIHRoYW4gdGhhdCwgaXQncyBh IHNvbGlkIGltcHJvdmVtZW50IG92ZXIgd2hhdCB3ZSBoYWQsIHdoaWNoIHdpbGwKPj4gY29tZSBo YW5keSB0aGUgbW9yZSB3ZSBmaWRkbGUgd2l0aCBFRElEcy4gVGhhbmtzIQo+Cj4gOikKPgo+IFdp bGwgc2VuZCBhIHYzIHdpdGggeW91ciBjb21tZW50cyBmaXhlZC4KPgo+PiBEbyB5b3UgYWxyZWFk eSBoYXZlIHNvbWUgdGhvdWdodHMgb24gaG93IHdlIHdhbnQgdG8gc29sdmUgaGFuZGxpbmcgdGhl Cj4+IGV4dGVuc2lvbnMgYmxvY2tzPwo+Cj4gSSd2ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gd29yayBv biB0aGlzLiBJIHRoaW5rIGNhbGxlcnMgc2hvdWxkIGFsbG9jYXRlIGEKPiBsYXJnZSBlbm91Z2gg YnVmZmVyLCBlLmcuOgo+Cj4gICBjaGFyIGJ1ZltzaXplb2Yoc3RydWN0IGVkaWQpICsgMipzaXpl b2Yoc3RydWN0IGVkaWRfZXh0KV07Cj4KPiAoRXh0ZW5zaW9uIGJsb2NrcyBoYXZlIGEgZml4ZWQg c2l6ZSkKPgo+IEFuZCB0aGVuIHNob3VsZCBtYXAgYSBzdHJ1Y3QgZWRpZCB0byBpdDoKPgo+ICAg c3RydWN0IGVkaWQgKmVkaWQgPSAoc3RydWN0IGVkaWQgKikgYnVmOwo+Cj4gVGhlIGFubm95aW5n IHRoaW5nIGlzIHRoYXQgdGhlIG51bWJlciBvZiBleHRlbnNpb25zIGF0IHRoZSBlbmQgb2YgdGhl Cj4gRURJRCBibG9jayBpc24ndCBmaXhlZC4gV2UgY291bGQgYWRkIGEgbmV3IGZpZWxkIGF0IHRo ZSBlbmQgb2Ygc3RydWN0Cj4gZWRpZDoKPgo+ICAgc3RydWN0IGVkaWQgewo+ICAgICDigKYKPiAg ICAgc3RydWN0IGVkaWRfZXh0IGV4dGVuc2lvbnNbXTsKPiAgIH07Cj4KPiBTbyB0aGF0IGNhbGxl cnMgY2FuIGRvIHRoaXM6Cj4KPiAgIHN0cnVjdCBlZGlkX2V4dCAqZXh0MSA9IGVkaWQtPmV4dGVu c2lvbnNbMF07Cj4gICBzdHJ1Y3QgZWRpZF9leHQgKmV4dDIgPSBlZGlkLT5leHRlbnNpb25zWzFd Owo+Cj4gQW5vdGhlciBhbm5veWluZyB0aGluZyBpcyB0aGF0IGV4dGVuc2lvbnMgY2FuIHRoZW1z ZWx2ZXMgY29udGFpbgo+IG11bHRpcGxlIHN1Yi1ibG9ja3Mgb2YgZGlmZmVyZW50IHNpemVz4oCm IEZvciBub3cgSSd2ZSBvcHRlZCBmb3IgYSBjaGFyCj4gYnVmZmVyIHRoYXQgY2FuIGJlIGNhc3Rl ZCBpbnRvIHN1Yi1ibG9ja3MuIFRoaXMgaXNuJ3QgdGhlIGJlc3Qgc29sdXRpb24KPiBldmVyLCBi dXQgSSBoYXZlbid0IGZvdW5kIGEgYmV0dGVyIGRlc2lnbiB5ZXQuIExldCdzIGRpc2N1c3MgYWJv dXQgdGhpcwo+IGluIHRoZSBuZXh0IHBhdGNoLiA6KQoKV2hpbGUgaXQncyBlYXN5IHRvIHdyaXRl IHNvbWV0aGluZyB0aGF0J3MgYmV0dGVyIHRoYW4gd2hhdCB3ZSBjdXJyZW50bHkKaGF2ZSwgYXMg eW91IHNlZSB0aGlzIGdldHMgY29tcGxpY2F0ZWQgbW9yZSBxdWlja2x5IHRoYW4geW91J2QgbGlr ZSwKZXNwZWNpYWxseSB3b3JraW5nIGluIEMuIFdlJ3JlIG5vdCB0aGUgb25seSBvbmVzIG5lZWRp bmcgRURJRApnZW5lcmF0aW9uLCBzbyBJJ2Qgc3VnZ2VzdCBsb29raW5nIGF0IHdoYXQgb3RoZXJz IGFyZSBkb2luZyBiZWZvcmUKZW1iYXJraW5nIG9uIHdyaXRpbmcgYSBmdWxsIGJsb3duIGdlbmVy YXRvci4gU2VlIGUuZy4gWzFdLgoKQlIsCkphbmkuCgoKWzFdIGh0dHA6Ly9taWQubWFpbC1hcmNo aXZlLmNvbS8yMDE4MTEyMTEzMzYyNC5pNHZ4Z3Q3YXRudjNhZHM2QHNpcml1cy5ob21lLmtyYXhl bC5vcmcKCgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIEdyYXBoaWNzIENlbnRl cgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=