From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id B342889160 for ; Wed, 24 Apr 2019 20:05:35 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id g6so17064399edc.8 for ; Wed, 24 Apr 2019 13:05:35 -0700 (PDT) Date: Wed, 24 Apr 2019 22:05:28 +0200 From: Daniel Vetter Message-ID: <20190424200528.GV9857@phenom.ffwll.local> References: <1554495245-27955-1-git-send-email-kevin.strasser@intel.com> <1554495245-27955-2-git-send-email-kevin.strasser@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1554495245-27955-2-git-send-email-kevin.strasser@intel.com> Subject: Re: [igt-dev] [PATCH 1/3] lib: Add halffloat implementation 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: Kevin Strasser Cc: igt-dev@lists.freedesktop.org List-ID: T24gRnJpLCBBcHIgMDUsIDIwMTkgYXQgMDE6MTQ6MDNQTSAtMDcwMCwgS2V2aW4gU3RyYXNzZXIg d3JvdGU6Cj4gUHJvYmUgZm9yIGFuZCBtYWtlIGFuIEFQSSBhdmFpbGFibGUgZm9yIHRlc3RzIHRv IHVzZSBmMTZjIGludHJpbnNpY3MgdG8KPiBnZW5lcmF0ZSBuZWVkZWQgZnAxNiBwaXhlbCBkYXRh Lgo+IAo+IEFsc28gaW1wb3J0IGEgcHVyZSBjIGZwMzIgPC0+IGZwMTYgY29udmVyc2lvbiBpbXBs ZW1lbnRhdGlvbiBmcm9tIE1lc2EKPiAxOC4zLjQsIHdoaWNoIHdpbGwgYWN0IGFzIGEgZmFsbGJh Y2sgd2hlbiBmMTZjIGlzIHVuYXZhaWxhYmxlLgo+IAo+IHJmYzI6Cj4gLSBDaGFuZ2UgQVBJIHRv IHJlZHVjZSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMgKE1hYXJ0ZW4pCj4gCj4gdjE6Cj4gLSBN b3ZlIHByYWdtYSBzbyBBVlggY29kZSBpc24ndCBlbWl0dGVkIGZvciBmYWxsYmFja3MgKFZpbGxl KQo+IC0gQ2hhbmdlIGVkeCB0byBlY3ggKFZpbGxlKQo+IAo+IFNpZ25lZC1vZmYtYnk6IEtldmlu IFN0cmFzc2VyIDxrZXZpbi5zdHJhc3NlckBpbnRlbC5jb20+Cj4gUmV2aWV3ZWQtYnk6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+CgpidHcgdGhpcyBicm9r ZSB0aGUgYnVpbGQsIGFuZCBzb21lb25lIGVsc2UgZ290IHRvIGZpeCBpdCB1cCBmb3IgeW91OgoK Y29tbWl0IDExZTEwYmM1NzU1MTZjNTY5Nzg2NDBmY2M2OTdjMjdmMjc3YzY2MGEKQXV0aG9yOiBT aW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+CkRhdGU6ICAgV2VkIEFwciAyNCAxMDowMToy OSAyMDE5ICswMzAwCgogICAgbGliL2lndF9oYWxmZmxvYXQ6IGZpeCBjb21waWxhdGlvbiB3aXRo IENsYW5nCgpDaGVlcnMsIERhbmllbAo+IC0tLQo+ICBDT1BZSU5HICAgICAgICAgICAgICB8ICAy MiArKysrKwo+ICBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCj4gIGxpYi9pZ3RfaGFsZmZs b2F0LmMgIHwgMjM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICBsaWIvaWd0X2hhbGZmbG9hdC5oICB8ICAyNyArKysrKysKPiAgbGliL2lndF94 ODYuYyAgICAgICAgfCAgIDkgKysKPiAgbGliL2lndF94ODYuaCAgICAgICAgfCAgIDEgKwo+ICBs aWIvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCj4gIDcgZmlsZXMgY2hhbmdlZCwgMjk2IGluc2Vy dGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfaGFsZmZsb2F0LmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfaGFsZmZsb2F0LmgKPiAKPiBkaWZmIC0tZ2l0IGEvQ09Q WUlORyBiL0NPUFlJTkcKPiBpbmRleCAyOWUwMjM4Li4wZmU2NTg0IDEwMDY0NAo+IC0tLSBhL0NP UFlJTkcKPiArKysgYi9DT1BZSU5HCj4gQEAgLTEyNiwzICsxMjYsMjUgQEAgU1BFQ0lBTCwgRElS RUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCj4g IFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywg V0hFVEhFUiBJTiBBTgo+ICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgo+ICBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgo+ICsKPiArQ29weXJpZ2h0 IChDKSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICtDb3B5 cmlnaHQgMjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgo+ICtDb3B5cmln aHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKwo+ICtQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICtjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICt0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gK3RoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ICthbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArCj4gK1RoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk Cj4gK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl Lgo+ICsKPiArVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKPiArT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gK0ZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAo+ICtUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ICtPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4g K09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiBkaWZmIC0tZ2l0IGEvbGliL01ha2Vm aWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGUwMDM0N2YuLjg0ZDE0 YzkgMTAwNjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZp bGUuc291cmNlcwo+IEBAIC0zMiw2ICszMiw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAo+ICAJ aWd0X2d0LmgJCVwKPiAgCWlndF9ndnQuYwkJXAo+ICAJaWd0X2d2dC5oCQlcCj4gKwlpZ3RfaGFs ZmZsb2F0LmMJCVwKPiArCWlndF9oYWxmZmxvYXQuaAkJXAo+ICAJaWd0X21hdHJpeC5jCQlcCj4g IAlpZ3RfbWF0cml4LmgJCVwKPiAgCWlndF9wcmltZXMuYwkJXAo+IGRpZmYgLS1naXQgYS9saWIv aWd0X2hhbGZmbG9hdC5jIGIvbGliL2lndF9oYWxmZmxvYXQuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uMjYzYjI4Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIv aWd0X2hhbGZmbG9hdC5jCj4gQEAgLTAsMCArMSwyMzQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChDKSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKiBD b3B5cmlnaHQgMjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgo+ICsgKiBD b3B5cmlnaHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAo+ICsgKiBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MKPiArICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAq IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 YXNzZXJ0Lmg+Cj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaWd0X2hhbGZm bG9hdC5oIgo+ICsjaW5jbHVkZSAiaWd0X3g4Ni5oIgo+ICsKPiArdHlwZWRlZiB1bmlvbiB7IGZs b2F0IGY7IGludDMyX3QgaTsgdWludDMyX3QgdTsgfSBmaV90eXBlOwo+ICsKPiArLyoqCj4gKyAq IENvbnZlcnQgYSA0LWJ5dGUgZmxvYXQgdG8gYSAyLWJ5dGUgaGFsZiBmbG9hdC4KPiArICoKPiAr ICogTm90IGFsbCBmbG9hdDMyIHZhbHVlcyBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBh IGZsb2F0MTYgdmFsdWUuIFdlCj4gKyAqIHJvdW5kIHN1Y2ggaW50ZXJtZWRpYXRlIGZsb2F0MzIg dmFsdWVzIHRvIHRoZSBuZWFyZXN0IGZsb2F0MTYuIFdoZW4gdGhlCj4gKyAqIGZsb2F0MzIgbGll cyBleGFjdGx5IGJldHdlZW4gdG8gZmxvYXQxNiB2YWx1ZXMsIHdlIHJvdW5kIHRvIHRoZSBvbmUg d2l0aAo+ICsgKiBhbiBldmVuIG1hbnRpc3NhLgo+ICsgKgo+ICsgKiBUaGlzIHJvdW5kaW5nIGJl aGF2aW9yIGhhcyBzZXZlcmFsIGJlbmVmaXRzOgo+ICsgKiAgIC0gSXQgaGFzIG5vIHNpZ24gYmlh cy4KPiArICoKPiArICogICAtIEl0IHJlcHJvZHVjZXMgdGhlIGJlaGF2aW9yIG9mIHJlYWwgaGFy ZHdhcmU6IG9wY29kZSBGMzJUTzE2IGluIEludGVsJ3MKPiArICogICAgIEdQVSBJU0EuCj4gKyAq Cj4gKyAqICAgLSBCeSByZXByb2R1Y2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIEdQVSAoYXQgbGVh c3Qgb24gSW50ZWwgaGFyZHdhcmUpLAo+ICsgKiAgICAgY29tcGlsZS10aW1lIGV2YWx1YXRpb24g b2YgY29uc3RhbnQgcGFja0hhbGYyeDE2IEdMU0wgZXhwcmVzc2lvbnMgd2lsbAo+ICsgKiAgICAg cmVzdWx0IGluIHRoZSBzYW1lIHZhbHVlIGFzIGlmIHRoZSBleHByZXNzaW9uIHdlcmUgZXhlY3V0 ZWQgb24gdGhlIEdQVS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgX2Zsb2F0X3Rv X2hhbGYoZmxvYXQgdmFsKQo+ICt7Cj4gKwljb25zdCBmaV90eXBlIGZpID0ge3ZhbH07Cj4gKwlj b25zdCBpbnQgZmx0X20gPSBmaS5pICYgMHg3ZmZmZmY7Cj4gKwljb25zdCBpbnQgZmx0X2UgPSAo ZmkuaSA+PiAyMykgJiAweGZmOwo+ICsJY29uc3QgaW50IGZsdF9zID0gKGZpLmkgPj4gMzEpICYg MHgxOwo+ICsJaW50IHMsIGUsIG0gPSAwOwo+ICsJdWludDE2X3QgcmVzdWx0Owo+ICsKPiArCS8q IHNpZ24gYml0ICovCj4gKwlzID0gZmx0X3M7Cj4gKwo+ICsJLyogaGFuZGxlIHNwZWNpYWwgY2Fz ZXMgKi8KPiArCWlmICgoZmx0X2UgPT0gMCkgJiYgKGZsdF9tID09IDApKSB7Cj4gKwkJLyogemVy byAqLwo+ICsJCS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0ICovCj4gKwkJZSA9IDA7Cj4gKwl9IGVs c2UgaWYgKChmbHRfZSA9PSAwKSAmJiAoZmx0X20gIT0gMCkpIHsKPiArCQkvKiBkZW5vcm0gLS0g ZGVub3JtIGZsb2F0IG1hcHMgdG8gMCBoYWxmICovCj4gKwkJLyogbSA9IDA7IC0gYWxyZWFkeSBz ZXQgKi8KPiArCQllID0gMDsKPiArCX0gZWxzZSBpZiAoKGZsdF9lID09IDB4ZmYpICYmIChmbHRf bSA9PSAwKSkgewo+ICsJCS8qIGluZmluaXR5ICovCj4gKwkJLyogbSA9IDA7IC0gYWxyZWFkeSBz ZXQgKi8KPiArCQllID0gMzE7Cj4gKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAweGZmKSAmJiAoZmx0 X20gIT0gMCkpIHsKPiArCQkvKiBOYU4gKi8KPiArCQltID0gMTsKPiArCQllID0gMzE7Cj4gKwl9 IGVsc2Ugewo+ICsJCS8qIHJlZ3VsYXIgbnVtYmVyICovCj4gKwkJY29uc3QgaW50IG5ld19leHAg PSBmbHRfZSAtIDEyNzsKPiArCQlpZiAobmV3X2V4cCA8IC0xNCkgewo+ICsJCQkvKiBUaGUgZmxv YXQzMiBsaWVzIGluIHRoZSByYW5nZSAoMC4wLCBtaW5fbm9ybWFsMTYpIGFuZAo+ICsJCQkgKiBp cyByb3VuZGVkIHRvIGEgbmVhcmJ5IGZsb2F0MTYgdmFsdWUuIFRoZSByZXN1bHQgd2lsbAo+ICsJ CQkgKiBiZSBlaXRoZXIgemVybywgc3Vibm9ybWFsLCBvciBub3JtYWwuCj4gKwkJCSAqLwo+ICsJ CQllID0gMDsKPiArCQkJbSA9IGxyaW50ZigoMSA8PCAyNCkgKiBmYWJzZihmaS5mKSk7Cj4gKwkJ fSBlbHNlIGlmIChuZXdfZXhwID4gMTUpIHsKPiArCQkJLyogbWFwIHRoaXMgdmFsdWUgdG8gaW5m aW5pdHkgKi8KPiArCQkJLyogbSA9IDA7IC0gYWxyZWFkeSBzZXQgKi8KPiArCQkJZSA9IDMxOwo+ ICsJCX0gZWxzZSB7Cj4gKwkJCS8qIFRoZSBmbG9hdDMyIGxpZXMgaW4gdGhlIHJhbmdlCj4gKwkJ CSAqICAgW21pbl9ub3JtYWwxNiwgbWF4X25vcm1hbDE2ICsgbWF4X3N0ZXAxNikKPiArCQkJICog YW5kIGlzIHJvdW5kZWQgdG8gYSBuZWFyYnkgZmxvYXQxNiB2YWx1ZS4gVGhlIHJlc3VsdAo+ICsJ CQkgKiB3aWxsIGJlIGVpdGhlciBub3JtYWwgb3IgaW5maW5pdGUuCj4gKwkJCSAqLwo+ICsJCQll ID0gbmV3X2V4cCArIDE1Owo+ICsJCQltID0gbHJpbnRmKGZsdF9tIC8gKGZsb2F0KSgxIDw8IDEz KSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWFzc2VydCgwIDw9IG0gJiYgbSA8PSAxMDI0KTsKPiAr CWlmIChtID09IDEwMjQpIHsKPiArCQkvKiBUaGUgZmxvYXQzMiB3YXMgcm91bmRlZCB1cHdhcmRz IGludG8gdGhlIHJhbmdlIG9mIHRoZSBuZXh0Cj4gKwkJICogZXhwb25lbnQsIHNvIGJ1bXAgdGhl IGV4cG9uZW50LiBUaGlzIGNvcnJlY3RseSBoYW5kbGVzIHRoZQo+ICsJCSAqIGNhc2Ugd2hlcmUg ZjMyIHNob3VsZCBiZSByb3VuZGVkIHVwIHRvIGZsb2F0MTYgaW5maW5pdHkuCj4gKwkJICovCj4g KwkJKytlOwo+ICsJCW0gPSAwOwo+ICsJfQo+ICsKPiArCXJlc3VsdCA9IChzIDw8IDE1KSB8IChl IDw8IDEwKSB8IG07Cj4gKwlyZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogQ29u dmVydCBhIDItYnl0ZSBoYWxmIGZsb2F0IHRvIGEgNC1ieXRlIGZsb2F0Lgo+ICsgKiBCYXNlZCBv biBjb2RlIGZyb206Cj4gKyAqIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9kaXNjdXNzaW9uX2JvYXJk cy91YmIvRm9ydW0zL0hUTUwvMDA4Nzg2Lmh0bWwKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgZmxv YXQgX2hhbGZfdG9fZmxvYXQodWludDE2X3QgdmFsKQo+ICt7Cj4gKwkvKiBYWFggY291bGQgYWxz byB1c2UgYSA2NEstZW50cnkgbG9va3VwIHRhYmxlICovCj4gKwljb25zdCBpbnQgbSA9IHZhbCAm IDB4M2ZmOwo+ICsJY29uc3QgaW50IGUgPSAodmFsID4+IDEwKSAmIDB4MWY7Cj4gKwljb25zdCBp bnQgcyA9ICh2YWwgPj4gMTUpICYgMHgxOwo+ICsJaW50IGZsdF9tLCBmbHRfZSwgZmx0X3M7Cj4g KwlmaV90eXBlIGZpOwo+ICsKPiArCS8qIHNpZ24gYml0ICovCj4gKwlmbHRfcyA9IHM7Cj4gKwo+ ICsJLyogaGFuZGxlIHNwZWNpYWwgY2FzZXMgKi8KPiArCWlmICgoZSA9PSAwKSAmJiAobSA9PSAw KSkgewo+ICsJCS8qIHplcm8gKi8KPiArCQlmbHRfbSA9IDA7Cj4gKwkJZmx0X2UgPSAwOwo+ICsJ fSBlbHNlIGlmICgoZSA9PSAwKSAmJiAobSAhPSAwKSkgewo+ICsJCS8qIGRlbm9ybSAtLSBkZW5v cm0gaGFsZiB3aWxsIGZpdCBpbiBub24tZGVub3JtIHNpbmdsZSAqLwo+ICsJCWNvbnN0IGZsb2F0 IGhhbGZfZGVub3JtID0gMS4wZiAvIDE2Mzg0LjBmOyAvKiAyXi0xNCAqLwo+ICsJCWZsb2F0IG1h bnRpc3NhID0gKChmbG9hdCkgKG0pKSAvIDEwMjQuMGY7Cj4gKwkJZmxvYXQgc2lnbiA9IHMgPyAt MS4wZiA6IDEuMGY7Cj4gKwkJcmV0dXJuIHNpZ24gKiBtYW50aXNzYSAqIGhhbGZfZGVub3JtOwo+ ICsJfSBlbHNlIGlmICgoZSA9PSAzMSkgJiYgKG0gPT0gMCkpIHsKPiArCQkvKiBpbmZpbml0eSAq Lwo+ICsJCWZsdF9lID0gMHhmZjsKPiArCQlmbHRfbSA9IDA7Cj4gKwl9IGVsc2UgaWYgKChlID09 IDMxKSAmJiAobSAhPSAwKSkgewo+ICsJCS8qIE5hTiAqLwo+ICsJCWZsdF9lID0gMHhmZjsKPiAr CQlmbHRfbSA9IDE7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIHJlZ3VsYXIgKi8KPiArCQlmbHRfZSA9 IGUgKyAxMTI7Cj4gKwkJZmx0X20gPSBtIDw8IDEzOwo+ICsJfQo+ICsKPiArCWZpLmkgPSAoZmx0 X3MgPDwgMzEpIHwgKGZsdF9lIDw8IDIzKSB8IGZsdF9tOwo+ICsJcmV0dXJuIGZpLmY7Cj4gK30K PiArCj4gKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykKPiAr I3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCj4gKyNwcmFnbWEgR0NDIHRhcmdldCgiZjE2YyIpCj4g Kwo+ICsjaW5jbHVkZSA8aW1taW50cmluLmg+Cj4gKwo+ICtzdGF0aWMgdm9pZCBmbG9hdF90b19o YWxmX2YxNmMoY29uc3QgZmxvYXQgKmYsIHVpbnQxNl90ICpoLCB1bnNpZ25lZCBpbnQgbnVtKQo+ ICt7Cj4gKwlmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQo+ICsJCWhbaV0gPSBfY3Z0c3Nf c2goZltpXSwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhhbGZfdG9fZmxvYXRfZjE2Yyhj b25zdCB1aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pCj4gK3sKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspCj4gKwkJZltpXSA9IF9jdnRzaF9zcyhoW2ldKTsK PiArfQo+ICsKPiArI3ByYWdtYSBHQ0MgcG9wX29wdGlvbnMKPiArCj4gK3N0YXRpYyB2b2lkIGZs b2F0X3RvX2hhbGYoY29uc3QgZmxvYXQgKmYsIHVpbnQxNl90ICpoLCB1bnNpZ25lZCBpbnQgbnVt KQo+ICt7Cj4gKwlmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQo+ICsJCWhbaV0gPSBfZmxv YXRfdG9faGFsZihmW2ldKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGFsZl90b19mbG9hdChj b25zdCB1aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pCj4gK3sKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspCj4gKwkJZltpXSA9IF9oYWxmX3RvX2Zsb2F0KGhb aV0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAoKnJlc29sdmVfZmxvYXRfdG9faGFsZih2b2lk KSkoY29uc3QgZmxvYXQgKmYsIHVpbnQxNl90ICpoLCB1bnNpZ25lZCBpbnQgbnVtKQo+ICt7Cj4g KwlpZiAoaWd0X3g4Nl9mZWF0dXJlcygpICYgRjE2QykKPiArCQlyZXR1cm4gZmxvYXRfdG9faGFs Zl9mMTZjOwo+ICsKPiArCXJldHVybiBmbG9hdF90b19oYWxmOwo+ICt9Cj4gKwo+ICt2b2lkIGln dF9mbG9hdF90b19oYWxmKGNvbnN0IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWduZWQgaW50 IG51bSkKPiArCV9fYXR0cmlidXRlX18oKGlmdW5jKCJyZXNvbHZlX2Zsb2F0X3RvX2hhbGYiKSkp Owo+ICsKPiArc3RhdGljIHZvaWQgKCpyZXNvbHZlX2hhbGZfdG9fZmxvYXQodm9pZCkpKGNvbnN0 IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQgaW50IG51bSkKPiArewo+ICsJaWYgKGln dF94ODZfZmVhdHVyZXMoKSAmIEYxNkMpCj4gKwkJcmV0dXJuIGhhbGZfdG9fZmxvYXRfZjE2YzsK PiArCj4gKwlyZXR1cm4gaGFsZl90b19mbG9hdDsKPiArfQo+ICsKPiArdm9pZCBpZ3RfaGFsZl90 b19mbG9hdChjb25zdCB1aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pCj4g KwlfX2F0dHJpYnV0ZV9fKChpZnVuYygicmVzb2x2ZV9oYWxmX3RvX2Zsb2F0IikpKTsKPiArCj4g KyNlbHNlCj4gKwo+ICt2b2lkIGlndF9mbG9hdF90b19oYWxmKGNvbnN0IGZsb2F0ICpmLCB1aW50 MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKPiArewo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBu dW07IGkrKykKPiArCQloW2ldID0gX2Zsb2F0X3RvX2hhbGYoZltpXSk7Cj4gK30KPiArCj4gK2Zs b2F0IGlndF9oYWxmX3RvX2Zsb2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWdu ZWQgaW50IG51bSkKPiArewo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKPiArCQlm W2ldID0gX2hhbGZfdG9fZmxvYXQoaFtpXSk7Cj4gK30KPiArCj4gKyNlbmRpZgo+ICsKPiBkaWZm IC0tZ2l0IGEvbGliL2lndF9oYWxmZmxvYXQuaCBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjhkYjQ0OGEKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvbGliL2lndF9oYWxmZmxvYXQuaAo+IEBAIC0wLDAgKzEsMjcgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2Vy dmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKPiArICog aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4g KyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCj4gKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKPiArICogT1RIRVIgTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gKyAq IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUgo+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsKPiArdm9pZCBpZ3RfZmxvYXRfdG9faGFs Zihjb25zdCBmbG9hdCAqZiwgdWludDE2X3QgKmgsIHVuc2lnbmVkIGludCBudW0pOwo+ICt2b2lk IGlndF9oYWxmX3RvX2Zsb2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQg aW50IG51bSk7Cj4gKwo+IGRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5jIGIvbGliL2lndF94ODYu Ywo+IGluZGV4IDg4ZTUxNGQuLjZhYzcwMGQgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF94ODYuYwo+ ICsrKyBiL2xpYi9pZ3RfeDg2LmMKPiBAQCAtODgsNiArODgsMTAgQEAKPiAgI2RlZmluZSBiaXRf QVZYCQkoMSA8PCAyOCkKPiAgI2VuZGlmCj4gIAo+ICsjaWZuZGVmIGJpdF9GMTZDCj4gKyNkZWZp bmUgYml0X0YxNkMJKDEgPDwgMjkpCj4gKyNlbmRpZgo+ICsKPiAgI2lmbmRlZiBiaXRfQVZYMgo+ ICAjZGVmaW5lIGJpdF9BVlgyCSgxPDw1KQo+ICAjZW5kaWYKPiBAQCAtMTM4LDYgKzE0Miw5IEBA IHVuc2lnbmVkIGlndF94ODZfZmVhdHVyZXModm9pZCkKPiAgCj4gIAkJaWYgKGVkeCAmIGJpdF9T U0UyKQo+ICAJCQlmZWF0dXJlcyB8PSBTU0UyOwo+ICsKPiArCQlpZiAoZWN4ICYgYml0X0YxNkMp Cj4gKwkJCWZlYXR1cmVzIHw9IEYxNkM7Cj4gIAl9Cj4gIAo+ICAJaWYgKG1heCA+PSA3KSB7Cj4g QEAgLTE3NCw2ICsxODEsOCBAQCBjaGFyICppZ3RfeDg2X2ZlYXR1cmVzX3RvX3N0cmluZyh1bnNp Z25lZCBmZWF0dXJlcywgY2hhciAqbGluZSkKPiAgCQlsaW5lICs9IHNwcmludGYobGluZSwgIiwg YXZ4Iik7Cj4gIAlpZiAoZmVhdHVyZXMgJiBBVlgyKQo+ICAJCWxpbmUgKz0gc3ByaW50ZihsaW5l LCAiLCBhdngyIik7Cj4gKwlpZiAoZmVhdHVyZXMgJiBGMTZDKQo+ICsJCWxpbmUgKz0gc3ByaW50 ZihsaW5lLCAiLCBmMTZjIik7Cj4gIAo+ICAJKHZvaWQpbGluZTsKPiAgCj4gZGlmZiAtLWdpdCBh L2xpYi9pZ3RfeDg2LmggYi9saWIvaWd0X3g4Ni5oCj4gaW5kZXggZDRmOGMzNC4uYzdiODRkZSAx MDA2NDQKPiAtLS0gYS9saWIvaWd0X3g4Ni5oCj4gKysrIGIvbGliL2lndF94ODYuaAo+IEBAIC0z OSw2ICszOSw3IEBACj4gICNkZWZpbmUgU1NFNF8yCTB4NDAKPiAgI2RlZmluZSBBVlgJMHg4MAo+ ICAjZGVmaW5lIEFWWDIJMHgxMDAKPiArI2RlZmluZSBGMTZDCTB4MjAwCj4gIAo+ICAjaWYgZGVm aW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKQo+ICB1bnNpZ25lZCBpZ3RfeDg2 X2ZlYXR1cmVzKHZvaWQpOwo+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVz b24uYnVpbGQKPiBpbmRleCA4OWRlMDZlLi5hMTJhOGY5IDEwMDY0NAo+IC0tLSBhL2xpYi9tZXNv bi5idWlsZAo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZAo+IEBAIC0xMiw2ICsxMiw3IEBAIGxpYl9z b3VyY2VzID0gWwo+ICAJJ2lndF9ncHVfcG93ZXIuYycsCj4gIAknaWd0X2d0LmMnLAo+ICAJJ2ln dF9ndnQuYycsCj4gKwknaWd0X2hhbGZmbG9hdC5jJywKPiAgCSdpZ3RfbWF0cml4LmMnLAo+ICAJ J2lndF9wZXJmLmMnLAo+ICAJJ2lndF9wcmltZXMuYycsCj4gLS0gCj4gMi43LjQKPiAKPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGlndC1kZXYgbWFp bGluZyBsaXN0Cj4gaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3Qt ZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=