From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.2 Received: from mother.openwall.net (mother.openwall.net [195.42.179.200]) by inbox.vuxu.org (OpenSMTPD) with SMTP id 66555fd5 for ; Mon, 3 Feb 2020 00:55:14 +0000 (UTC) Received: (qmail 5914 invoked by uid 550); 3 Feb 2020 00:55:10 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 5895 invoked from network); 3 Feb 2020 00:55:08 -0000 X-Authentication-Warning: key0.esi.com.au: damianm owned process doing -bs Date: Mon, 3 Feb 2020 11:54:52 +1100 (AEDT) From: Damian McGuckin To: musl@lists.openwall.com In-Reply-To: <20200125001100.GY30412@brightrain.aerifal.cx> Message-ID: References: <20200118053759.GX30412@brightrain.aerifal.cx> <20200118094015.GE23985@port70.net> <20200124011122.GP30412@brightrain.aerifal.cx> <20200124045554.GR30412@brightrain.aerifal.cx> <20200124134402.GS30412@brightrain.aerifal.cx> <20200125001100.GY30412@brightrain.aerifal.cx> User-Agent: Alpine 2.02 (LRH 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="1421877478-702787582-1580690869=:25362" Content-ID: Subject: Re: [musl] Considering x86-64 fenv.s to C This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1421877478-702787582-1580690869=:25362 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; format=flowed Content-ID: Latest Implementation Document is attached. Comments need reviewing and clarification. Style issues will need to be addressed. This is meant for for ARM with hardware floating point, any MIPS, RISC-V, M68K, Hitachi SuperH, IBM S390x, Powerpc64, and (in theory) Sparc. The version to handle Intel i386, x32 and x86-64 will be very different. Regards - Damian Pacific Engineering Systems International, 277-279 Broadway, Glebe NSW 2037 Ph:+61-2-8571-0847 .. Fx:+61-2-9692-9623 | unsolicited email not wanted here Views & opinions here are mine and not those of any past or present employer --1421877478-702787582-1580690869=:25362 Content-Type: TEXT/plain; name=fenv-generic.c Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=fenv-generic.c LyoNCiAqIHRoZXNlIGxpbmVzIGFyZSBoZXJlIHRvIGFsbG93IHRoZSBjb21w aWxhdGlvbiBvZiB0aGlzIGZpbGUNCiAqIGluIGlzb2xhdGlvbiBhbmQgdGhl IGxpbnQnaW5nIG9mIHRoZSBzYW1lIHdpdGggJ3NwbGludCchIQ0KICovDQoj aW5jbHVkZQk8YXNzZXJ0Lmg+DQoNCiNkZWZpbmUgVEVTVA0KDQojaWZkZWYg VEVTVA0KDQojaW5jbHVkZSAiLi4vLi4vLi4vYXJjaC9wb3dlcnBjNjQvYml0 cy9mZW52LmgiDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IGZlX2Nzcl90Ow0K DQpleHRlcm4gdW5zaWduZWQgaW50IGZlX2dldF9zcigpOw0KZXh0ZXJuIHZv aWQgZmVfc2V0X3NyKHVuc2lnbmVkIGludCk7DQpleHRlcm4gdW5zaWduZWQg aW50IGZlX2dldF9jcigpOw0KZXh0ZXJuIHZvaWQgZmVfc2V0X2NyKHVuc2ln bmVkIGludCk7DQpleHRlcm4gZG91YmxlIGZlX2dldF9jc3JfZigpOw0KZXh0 ZXJuIHZvaWQgZmVfc2V0X2Nzcl9mKGRvdWJsZSk7DQpleHRlcm4gdm9pZCBm ZV9nZXRfZW52KGZlbnZfdCAqZSk7DQpleHRlcm4gdm9pZCBmZV9zZXRfZW52 KGZlbnZfdCAqZSk7DQpleHRlcm4gdm9pZCBmZV9zZXRfZW52X2J1dF9rZWVw X3JhaXNlZF9leGNlcHRzKGZlbnZfdCAqZSk7DQpleHRlcm4gdm9pZCBmZV9n ZXRfZW52X2FuZF9jbGVhcl9hbGxfZXhjZXB0cyhmZW52X3QgKmUpOw0KZXh0 ZXJuIHZvaWQgZmVzY3J1YmV4Y2VwdCh2b2lkKTsNCmV4dGVybiBmZW52X3Qg ZmVfZGZsX2VudjsNCmV4dGVybiBpbnQgRkVfUk9VTkRJTkdfVFlQRShpbnQp Ow0KDQojZW5kaWYNCgwNCi8qDQogKiBmZW52LWdlbmVyaWMuYyAodXNlICdm ZW52LXRyaXZpYWwudicgZm9yIHNvZnQtZmxvYXQgZW52aXJvbm1lbnRzKToN CiAqDQogKiBBbGwgYXJjaGl0ZWN0dXJlcyB3aGljaCBmaXQgdGhlIGdlbmVy aWMgbW91bGQgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIHN0YXR1cw0KICogcmVn aXN0ZXIgKHNyKSB3aGljaCBjb250YWlucyB0aGUgZXhjZXB0aW9uIGZsYWdz IGFyZSBzdG9yZWQgYW5kIGEgY29udHJvbA0KICogcmVnaXN0ZXIgKGNyKSB3 aGljaCBjb250YWlucyB0aGUgcm91bmRpbmcgbW9kZS4gVGhlc2UgcmVnaXN0 ZXJzIG1heSBiZSBvbmUNCiAqIGFuZCB0aGUgc2FtZSBvciB0aGV5IG1heSBi ZSBkaXN0aW5jdC4gQWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmVhdHVy ZXMNCiAqIGxpdmUgaW4gYW4gaW5kaXZpZHVhbCAnZmVudi5jJyBmaWxlIHdo aWNoIGNvbnRhaW5zIGZ1bmN0aW9uIGRlZmluaXRpb25zLA0KICogbWFpbmx5 IG9mIG9uZS1saW5lIGVtYmVkZGVkIGFzc2VtYmxlciwgZGVjbGFyYXRpb25z LCBtYWNyb3MgYW5kIHR5cGVkZWYnczoNCiAqDQogKiBhKSB0aGUgdHlwZSAn ZmVfY3NyX3QnIHdoaWNoIGNhbiBzdG9yZSBib3RoICdzcicgYW5kICdjcics DQogKiAgICAtIHRoaXMgaXMgYW4gdW5zaWduZWQgaW50IG9uIGFsbCBrbm93 biBhcmNoaXRlY3R1cmVzDQogKiBiKSByb3V0aW5lcyB0byBjb3B5ICdzcicg YW5kICdjcicgaW50byBtZW1vcnksIHJlc3BlY3RpdmVseQ0KICogICAgLSBm ZV9jc3JfIGZlX2dldF9zcigpIGFuZCBmZV9jc3JfdCBmZV9nZXRfY3IoKQ0K ICogYykgcm91dGluZXMgdG8gbG9hZCAnc3InIGFuZCAnY3InIGZyb20gbWVt b3J5LCByZXNwZWN0aXZlbHkNCiAqICAgIC0gdm9pZCBmZV9zZXRfc3IoZmVf Y3NyX3QpIGFuZCB2b2lkIGZlX3NldF9jcihmZV9jc3JfdCkgDQogKiBkKSBy b3V0aW5lcyB0byBjb3B5IGFuZCBsb2FkIGFuIGFyY2hpdGVjdHVyZSdzIGZs b2F0aW5nIHBvaW50IGVudmlyb25tZW50LCANCiAqICAgIC0gZmVfZ2V0X2Vu dihmZW52X3QgKikgYW5kIGZlX3NldF9lbnYoZmVudl90ICopIHJlc3BlY3Rp dmVseQ0KICogICAgLSAnZmVudl90JyBpcyBkZWZpbmVkIGluIGFuIGFyY2hp dGVjdHVyZXMgb3duICdmZW52LmgnIGZpbGUNCiAqIGUpIGEgcm91dGluZSB0 byByZXNldCBhbiBhcmNoaXRlY3R1cmUncyBmbG9hdGluZyBwb2ludCBlbnZp cm9ubWVudA0KICogICAgLSBsaWtlIGZlX3NldF9lbnYoZmVudl90ICopIGJ1 dCBjdXJyZW50bHkgcmFpc2VkIGV4Y2VwdGlvbnMgc3RheSByYWlzZWQNCiAq IGYpIGEgcm91dGluZSB0byBjbG9uZSBhbiBhcmNoaXRlY3R1cmUncyBmbG9h dGluZyBwb2ludCBlbnZpcm9ubWVudA0KICogICAgLSBsaWtlIGZlX2dldF9l bnYoZmVudl90ICopIGJ1dCBjdXJyZW50bHkgcmFpc2VkIGV4Y2VwdGlvbnMg Z2V0IGNsZWFyZWQNCiAqIGcpIGEgbWFjcm8geWllbGRpbmcgYSByYXRpZmll ZCBleGNlcHRpb24gbGlzdCBkdXJpbmcgYSBDTEVBUiBvcGVyYXRpb24NCiAq ICAgIC0gRkVfUkFUSUZZX0NMRUFSX0VYQ0VQVFMNCiAqIGgpIGEgbWFjcm8g eWllbGRpbmcgYSByYXRpZmllZCBleGNlcHRpb24gbGlzdCBkdXJpbmcgYSBS QUlTRSBvcGVyYXRpb24NCiAqICAgIC0gRkVfUkFUSUZZX1JBSVNFX0VYQ0VQ VFMNCiAqIGkpIG1hY3JvcyB3aGljaCBtYXBzIGZyb20gdGhlIHJvdW5kaW5n IG1vZGUgdG8gYSByb3VuZGluZyBzdHlsZQ0KICogICAgLSBGRV9ST1VORElO R19TVFlMRQ0KICogaikgYSAobWFjcm8pIGJpdC1tYXNrIG9mIGFsbCBsZWdh bCByb3VuZGluZyBtb2Rlcw0KICogICAgLSBGRV9ST1VORElOR19NQVNLDQog KiAgICAtIGl0IHJldHVybnMgdGhlIHZhbHVlIHRvIGJlIHJldHVybmVkIGJ5 IHRoZSBGTFRfUk9VTkRTIG1hY3JvDQogKiBrKSBhbiBpbml0aWFsaXphdGlv biBmb3IgdGhlIGRlZmF1bHQgZmVudl90DQogKiAgICAtIGkuZS4gc3RhdGlj IGNvbnN0IGZlbnZfdCBmZV9kZmxfZW52ID0gLi4uLi4NCiAqDQogKiAoaykg aXMgYW4gaW1wbGljaXRseSBoaWRkZW4sIElFRUUgNzU0IGRlZmF1bHQgZmxv YXRpbmcgcG9pbnQgZW52aXJvbm1lbnQgaW4NCiAqIHdoaWNoIGFsbCBleGNl cHRpb25zIGFyZSBjbGVhciwgbm9uLXN0b3AgKG9yIGNvbnRpbnVlIG9uIGV4 Y2VwdGlvbikgbW9kZSBpcw0KICogYWN0aXZlLCBhbmQgcm91bmRpbmcgdG8g bmVhcmVzdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCBhcml0aG1ldGljLg0KICoN CiAqIEZvciBtb3N0IGFyY2hpdGVjdHVyZXMsIHRoZSBtYWNyb3MgKGcpIGFu ZCAoaCkgY2FuIGJlIGFsbG93ZWQgdG8gZGVmYXVsdA0KICogdG8gdGhlIGhh bmRsaW5nIGRvbmUgYnkgdGhlIHJvdXRpbmUgJ2ZlX3JhdGlmaWVkX2V4Y2Vw dHMnLiBUaGlzIHJvdXRpbmUNCiAqIHJldmlld3MgYWxsIHRoZSBleGNlcHRp b25zIGltcGxpY2l0IGluIHRoZSBtYXNrICdleGNlcHRzJyBmZWQgdG8gYWxs IHRoZQ0KICogJ2ZlKicgcm91dGluZXMsIGRpc2NhcmRpbmcgYW55IGluYXBw cm9wcmlhdGUgYml0cy4gSW4gdGhpcyBjYXNlLCB0aGVzZQ0KICogbWFjcm9z IGFyZSBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgYXMgc2VlbiBiZWxvdy4gT25s eSBvbmUgYXJjaGl0ZWN0dXJlLA0KICogdGhlIFBvd2VyUEMsIGRvZXMgbm90 IGZpdCB0aGlzIG1vdWxkLCBhbmQgaXRzIGRlZmluaXRpb25zIGFyZSBleHBs YWluZWQNCiAqIGluIGRldGFpbCBpbiB0aGF0IGFyY2hpdGVjdHVyZSdzIG93 biAnZmVudi5jJy4NCiAqDQogKiBJZiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNp ZmljICdmZW52LmMnIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSBtYXNrIChq KSwNCiAqIGFsbCBmb3VyIElFRUUgNzU0IHJvdW5kaW5nIG1vZGVzIGFyZSBh c3N1bWVkIHRvIGV4aXN0LCBhIG1hc2sgd2hpY2ggaXMNCiAqIHRoZSBPUidk IGNvbWJpbmF0aW9ucyBvZiB0aG9zZSBtb2RlcyB3aWxsIGJlIGF1dG9tYXRp Y2FsbHkgY3JlYXRlZCwgYXMNCiAqIHdlbGwgYXMgdGhlIG1hY3JvIChpKSB3 aGljaCBtYXBzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCByb3VuZGluZyBtb2Rl IG9mDQogKiB0aGUgY29udHJvbCByZWdpc3RlciB0byB0aGUgbWFjaGluZS1p bmRlcGVuZGVudCByb3VuZGluZyBzdHlsZSB3aGljaCBpcw0KICogcHJvdmlk ZWQgYnkgRkxUX1JPVU5EUy4gIElmIGFsbCBmb3VyIG1vZGVzIGFyZSBub3Qg YXZhaWxhYmxlLCB0aGlzIG1hc2sNCiAqIGFuZCBtYWNybyBtdXN0IGJlIHBy b3ZpZGVkIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgJ2ZlbnYuYycg ZmlsZS4NCiAqIEFwYXJ0IGZyb20gYXJjaGl0ZWN0dXJlcyB3aXRoIHNvZnQg ZmxvYXRpbmcgcG9pbnQsIG9ubHkgdGhlIEhpdGFjaGkNCiAqIFN1cGVySCBS SVNDIGNoaXAgKHNoKSBuZWVkcyBzdWNoIGRlZmluaXRpb25zLg0KICoNCiAq IEFmdGVyIGFsbCB0aGVzZSBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25z LCB0aGUgYXJjaGl0ZWN0dXJlcy1zcGVjaWZpYw0KICogZmlsZSBtdXN0IHRo ZW4gYWxzbyBpbmNsdWRlIHRoaXMgZmlsZSwgaS5lLiAnZmVudi1nZW5lcmlj LGMnIGZvbGxvd2luZw0KICogY3VycmVudCBwcmFjdGljZSBhcw0KICoNCiAq CSNpbmNsdWRlCSIuLi9mZW52LWdlbmVyaWMuYyINCiAqLw0KDA0KI2lmbmRl ZglGRV9SQVRJRklFRF9SQUlTRV9FWENFUFRTDQojZGVmaW5lCUZFX1JBVElG SUVEX1JBSVNFX0VYQ0VQVFMoZSkJZmVfcmF0aWZpZWRfZXhjZXB0cyhlKQ0K I2VuZGlmDQojaWZuZGVmCUZFX1JBVElGSUVEX0NMRUFSX0VYQ0VQVFMNCiNk ZWZpbmUJRkVfUkFUSUZJRURfQ0xFQVJfRVhDRVBUUyhlKQlmZV9yYXRpZmll ZF9leGNlcHRzKGUpDQojZW5kaWYNCi8qDQogKiB0YWtlIGEgYml0IG1hc2sg d2hpY2ggc2hvdWxkIGJlIGp1c3QgYW4gT1InZCBjb21iaW5hdGlvbiBvZiBJ RUVFIDc1NA0KICogZXhjZXB0aW9ucyBhbmQgZGlzY2FyZCBhbnkgYml0IHdo aWNoIGlzIG5vdCBvbmUgb2YgdGhvc2UgZXhjZXB0aW9ucy4NCiAqLw0Kc3Rh dGljIGlubGluZSBpbnQNCmZlX3JhdGlmaWVkX2V4Y2VwdHMoaW50IGV4Y2Vw dHMpDQp7DQoJcmV0dXJuIGV4Y2VwdHMgJiBGRV9BTExfRVhDRVBUOw0KfQ0K DQojaWZuZGVmCUZFX1JPVU5ESU5HX01BU0sNCiNkZWZpbmUJRkVfUk9VTkRJ TkdfTUFTSwkoRkVfVE9XQVJEWkVST3xGRV9ET1dOV0FSRHxGRV9VUFdBUkQp DQovKg0KICogTWFwIGFuIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcm91bmRp bmcgbW9kZSB0byB0aGF0IG5lZWRlZCBieSBGTFRfUk9VTkRTLg0KICogVGhl cmUgYXJlIGJldHRlciB3YXlzIHRvIGRvIHRoaXMgYnV0IG5vbmUgb2YgdGhv c2UgcmVhZHMgYXMgd2VsbCBhcyB0aGlzLg0KICovDQpzdGF0aWMgaW5saW5l IGludA0KZmVfcm91bmRpbmdfc3R5bGUoaW50IHJvdW5kaW5nKQ0Kew0KCXJl dHVybg0KCSgNCgkJcm91bmRpbmcgPT0gRkVfRE9XTldBUkQNCgk/DQoJCTMN Cgk6DQoJCXJvdW5kaW5nID09IEZFX1VQV0FSRA0KCT8NCgkJMg0KCToNCgkJ KGludCkgKHJvdW5kaW5nID09IEZFX1RPTkVBUkVTVCkNCgkpOw0KfQ0KI2Rl ZmluZQlGRV9ST1VORElOR19TVFlMRShtKQlmZV9yb3VuZGluZ19zdHlsZSht KQ0KI2VuZGlmDQoMDQovKg0KICogbWFzayBvdXQgdGhlIGJpdHMgd2l0aCAn Yml0cycgZnJvbSAnbWFzaycgZW5zdXJpbmcgdHlwZSBjb21wYXRhYmlsaXR5 DQogKi8NCnN0YXRpYyBpbmxpbmUgZmVfY3NyX3QNCmZlX2NsZWFyX2JpdHMo ZmVfY3NyX3QgbWFzaywgaW50IGJpdHMpDQp7DQoJcmV0dXJuIG1hc2sgJiB+ KChmZV9jc3JfdCkgYml0cyk7DQp9DQovKg0KICogZ2V0IHRoZSByb3VuZGlu ZyBtYXNrDQogKi8NCmludA0KZmVnZXRyb3VuZCh2b2lkKQ0Kew0KCXJldHVy biAoaW50KSAoZmVfZ2V0X2NyKCkgJiBGRV9ST1VORElOR19NQVNLKTsNCn0N Ci8qDQogKiBpbnRlcm5hbHMgZm9yIEZMVF9ST1VORFMNCiAqLw0KaW50IF9f Zmx0X3JvdW5kcygpDQp7DQoJcmV0dXJuIEZFX1JPVU5ESU5HX1NUWUxFKGZl Z2V0cm91bmQoKSk7DQp9DQovKg0KICogc2V0IHRoZSByb3VuZGluZyBtb2Rl IC0gcmV0dXJuaW5nICgtMSkgaWYgaW5wdXQgaXMgbm90IGEgdmFsaWQgbW9k ZQ0KICovDQppbnQNCmZlc2V0cm91bmQoaW50IHJvdW5kaW5nX21vZGUpDQp7 DQoJaWYgKChyb3VuZGluZ19tb2RlICYgRkVfUk9VTkRJTkdfTUFTSykgIT0g cm91bmRpbmdfbW9kZSkNCgkJcmV0dXJuIC0xOw0KDQoJZmVfc2V0X2NyKGZl X2NsZWFyX2JpdHMoZmVfZ2V0X2NyKCksIEZFX1JPVU5ESU5HX01BU0spIHwg cm91bmRpbmdfbW9kZSk7DQoJcmV0dXJuIDA7DQp9DQoMDQovKg0KICogcmV0 dXJucyBhIHdvcmQgaW4gd2hpY2ggdGhlIGJpdHMgKHdoaWNoIHJlcHJlc2Vu dCBJRUVFIDc1NCBleGNlcHRpb25zKQ0KICogYXJlIHNldCB0aGF0IHdlcmUg YWxzbyBzZXQgaW4gdGhlIGFyZ3VtZW50ICdleGNlcHRzJyBhbmQgZm9yIHdo aWNoIHRoZQ0KICogY29ycmVzcG9uZGluZyBleGNlcHRpb24gaXMgY3VycmVu dGx5IHNldC4gVGhlIG9ubHkgbGVnYWwgYml0cyB0aGF0IGNhbg0KICogYmUg Z2l2ZW4gaW4gdGhlIGFyZ21lbnQgYXJlIHRob3NlIHdoaWNoIGNvcnJlc3Bv bmQgdG8gYW4gZXhjZXB0aW9uLg0KICovDQppbnQNCmZldGVzdGV4Y2VwdChp bnQgZXhjZXB0cykNCnsNCglyZXR1cm4gKGludCkgKGZlX2dldF9zcigpICYg ZmVfcmF0aWZpZWRfZXhjZXB0cyhleGNlcHRzKSk7DQp9DQovKg0KICogY2xl YXJzIHRoZSBzdXBwb3J0ZWQgZXhjZXB0aW9ucyByZXByZXNlbnRlZCBieSB0 aGUgYml0cyBpbiBpdHMgYXJndW1lbnQuDQogKi8NCmludA0KZmVjbGVhcmV4 Y2VwdChpbnQgZXhjZXB0cykNCnsNCglleGNlcHRzID0gRkVfUkFUSUZJRURf Q0xFQVJfRVhDRVBUUyhleGNlcHRzKTsNCglmZV9zZXRfc3IoZmVfY2xlYXJf Yml0cyhmZV9nZXRfc3IoKSwgZXhjZXB0cykpOw0KCXJldHVybiAwOw0KfQ0K LyoNCiAqIHJhaXNlcyB0aGUgc3VwcG9ydGVkIGV4Y2VwdGlvbnMgcmVwcmVz ZW50ZWQgYnkgdGhlIGJpdHMgaW4gaXRzIGFyZ3VtZW50Lg0KICovDQppbnQN CmZlcmFpc2VleGNlcHQoaW50IGV4Y2VwdHMpDQp7DQoJLyoNCgkgKiBhc3N1 bWUgc2luZ2xlIE9QIGlzIGZhc3RlciB0aGFuIGRvdWJsZSBPUA0KCSAqLw0K CWNvbnN0IGZsb2F0IHplcm8gPSAoZmxvYXQpIDA7DQoJY29uc3QgZmxvYXQg b25lID0gKGZsb2F0KSAxOw0KCWNvbnN0IGZsb2F0IGxhcmdlID0gMi4wNzY5 MTllKzM0OyAvLyAyXigrMTA4KQ0KCWNvbnN0IGZsb2F0IHNtYWxsID0gNC44 MTQ4MjZlLTM1OyAvLyAyXigtMTA4KQ0KCXZvbGF0aWxlIGZsb2F0IHg7DQoJ LyoNCgkgKiBpZiBpdCBpcyBqdXN0IGEgc2ltcGxlIGV4Y2VwdGlvbiwgYXJp dGhtZXRpYyBleHByZXNzaW9ucyBhcmUgb3B0aW1hbA0KCSAqLw0KCXN3aXRj aChleGNlcHRzKQ0KCXsNCgljYXNlIEZFX0lOVkFMSUQ6DQoJCXggPSB6ZXJv LCB4IC89IHg7DQoJCWJyZWFrOw0KCWNhc2UgRkVfRElWQllaRVJPOg0KCQl4 ID0gemVybywgeCA9IG9uZSAvIHg7DQoJCWJyZWFrOw0KCWNhc2UgRkVfSU5F WEFDVDoNCgkJeCA9IHNtYWxsLCB4ICs9IG9uZTsNCgkJYnJlYWs7DQoJY2Fz ZSBGRV9PVkVSRkxPVyB8IEZFX0lORVhBQ1Q6DQoJCXggPSBsYXJnZSwgeCAq PSB4OyANCgkJYnJlYWs7DQoJY2FzZSBGRV9VTkRFUkZMT1cgfCBGRV9JTkVY QUNUOg0KCQl4ID0gc21hbGwsIHggKj0geDsNCgkJYnJlYWs7DQoJZGVmYXVs dDoNCgkJLyoNCgkJICogaWYgbXVsdGlwbGUgZXhjZXB0aW9ucyBleGlzdCwg YSBzbGVkZ2VoYW1tZXIgaXMgdmlhYmxlDQoJCSAqLw0KCQlleGNlcHRzID0g RkVfUkFUSUZJRURfUkFJU0VfRVhDRVBUUyhleGNlcHRzKTsNCgkJZmVfc2V0 X3NyKGZlX2dldF9zcigpIHwgZXhjZXB0cyk7DQoJCWJyZWFrOw0KCX0NCgly ZXR1cm4gMDsNCn0NCgwNCi8qDQogKiBjb3B5IHRoZSBjb21wbGV0ZSBjdXJy ZW50IGV4Y2VwdGlvbiBzdGF0ZSBpbnRvICpmcA0KICovDQppbnQNCmZlZ2V0 ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKmZwLCBpbnQgZXhjZXB0cykNCnsNCgkq ZnAgPSAoZmV4Y2VwdF90KSBmZXRlc3RleGNlcHQoZXhjZXB0cyk7DQoJcmV0 dXJuIDA7DQp9DQovKg0KICogbG9hZCB0aGUgZXhjZXB0aW9uIHN0YXRlIGZy b20gKmZwLCBidXQgaW50ZWxsaWdlbnRseSBhdm9pZGluZw0KICogY2xlYXJp bmcgKHJhaXNpbmcpIGV4Y2VwdGlvbnMgd2hpY2ggYXJlIGFscmVhZHkgY2xl YXJlZCAocmFpc2VkKS4NCiAqLw0KaW50DQpmZXNldGV4Y2VwdGZsYWcoY29u c3QgZmV4Y2VwdF90ICpmcCwgaW50IGV4Y2VwdHMpDQp7DQoJY29uc3QgZmVf Y3NyX3Qgc3IgPSAgZmVfZ2V0X3NyKCk7DQoJY29uc3QgZmVfY3NyX3QgZngg PSAoZmVfY3NyX3QpICpmcDsNCgljb25zdCBpbnQgcmVxdWVzdGVkID0gZXhj ZXB0cyAmIEZFX0FMTF9FWENFUFQ7DQoJY29uc3QgaW50IGV4Y2VwdHNfb2xk ID0gKGludCkgKHNyICYgcmVxdWVzdGVkKTsNCgljb25zdCBpbnQgZXhjZXB0 c19uZXcgPSAoaW50KSAoZnggJiByZXF1ZXN0ZWQpOw0KCWNvbnN0IGludCBl c3NlbnRpYWwgPSBleGNlcHRzX29sZCBeIGV4Y2VwdHNfbmV3Ow0KCWNvbnN0 IGludCBjbGVhciA9IEZFX1JBVElGSUVEX0NMRUFSX0VYQ0VQVFMoZXhjZXB0 c19vbGQgJiBlc3NlbnRpYWwpOw0KCWNvbnN0IGludCByYWlzZSA9IEZFX1JB VElGSUVEX1JBSVNFX0VYQ0VQVFMoZXhjZXB0c19uZXcgJiBlc3NlbnRpYWwp Ow0KDQoJaWYgKChjbGVhciB8IHJhaXNlKSAhPSAwKQ0KCQlmZV9zZXRfc3Io ZmVfY2xlYXJfYml0cyhzciwgY2xlYXIpIHwgcmFpc2UpOw0KCXJldHVybiAw Ow0KfQ0KLyoNCiAqIGNvcHkgdGhlIGZsb2F0aW5nIHBvaW50IGVudmlyb25t ZW50IGludG8gbWVtb3J5DQogKi8NCmludA0KZmVnZXRlbnYoZmVudl90ICpl KQ0Kew0KCWZlX2dldF9lbnYoZSk7DQoJcmV0dXJuIDA7DQp9DQovKg0KICog bG9hZCB0aGUgZmxvYXRpbmcgcG9pbnQgZW52aXJvbm1lbnQgZnJvbSBtZW1v cnkNCiAqLw0KaW50DQpmZXNldGVudihmZW52X3QgKmUpDQp7DQoJZmVfc2V0 X2VudihlICE9IEZFX0RGTF9FTlYgPyBlIDogJmZlX2RmbF9lbnYpOw0KCXJl dHVybiAwOw0KfQ0KLyoNCiAqIGFzIGZvciBmZXNldGVudiBidXQgcmV0YWlu IHRoZSBleGNlcHRpb24gZGF0YQ0KICovDQppbnQNCmZldXBkYXRlZW52KGZl bnZfdCAqZSkNCnsNCglmZV9zZXRfZW52X2J1dF9rZWVwX3JhaXNlZF9leGNl cHRzKGUgIT0gRkVfREZMX0VOViA/IGUgOiAmZmVfZGZsX2Vudik7DQoJcmV0 dXJuIDA7DQp9DQovKg0KICogYXMgZm9yIGZlZ2V0ZW52IGJ1dCBjbGVhciB0 aGUgZXhjZXB0aW9uIHN0YXRlcw0KICovDQppbnQNCmZlaG9sZGV4Y2VwdChm ZW52X3QgKmUpDQp7DQoJZmVfZ2V0X2Vudl9hbmRfY2xlYXJfYWxsX2V4Y2Vw dHMoZSk7DQoJcmV0dXJuIDA7DQp9DQo= --1421877478-702787582-1580690869=:25362--