From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9048 invoked by alias); 15 Oct 2009 16:32:26 -0000 Received: (qmail 9025 invoked by uid 22791); 15 Oct 2009 16:32:20 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL,BAYES_05,SARE_BAYES_5x8,SARE_BAYES_6x8,SARE_BAYES_7x8 X-Spam-Check-By: sourceware.org Received: from shell4.bayarea.net (HELO shell4.bayarea.net) (209.128.82.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 15 Oct 2009 16:32:12 +0000 Received: (qmail 632 invoked from network); 15 Oct 2009 09:32:10 -0700 Received: from 209-128-106-254.bayarea.net (HELO redwood.eagercon.com) (209.128.106.254) by shell4.bayarea.net with SMTP; 15 Oct 2009 09:32:07 -0700 Message-ID: <4AD74E86.1020500@eagercon.com> Date: Thu, 15 Oct 2009 16:32:00 -0000 From: Michael Eager User-Agent: Thunderbird 2.0.0.23 (X11/20090825) MIME-Version: 1.0 To: "gdb-patches@sourceware.org" CC: Joel Brobecker Subject: [PATCH] Support for Xilinx MicroBlaze Content-Type: multipart/mixed; boundary="------------070801010100000601080200" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-10/txt/msg00336.txt.bz2 This is a multi-part message in MIME format. --------------070801010100000601080200 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1216 I've addressed most of the issues raised about the previous patch. I was not able to figure out a way to identify whether the return address in the CIE was generated correctly (pc+8) or not, so the work-around in the microblaze_unwind_pc is unchanged. If anyone has an idea, I'll be happy to look into this further. When (if) this is fixed in gcc there will need to coordinate this with a corresponding fix in gdb. 2009-10-15 Michael Eager * config/djgpp/fnchange.lst: Add translations for cpu-microblaze.c, elf32-microblaze.c, microblaze-rom.c, microblaze-linux-tdep.c, microblaze-tdep.h, microblaze-tdep.c, microblaze-opc.h, microblaze-opcm.h, microblaze-dis.c, microblaze-dis.h, sim/microblaze, microblaze.h, and microblaze.isa. * configure.tgt: Add targets microblaze*-linux-*, microblaze*-xilinx-*. * doc/gdb.texinfo: Add MicroBlaze. * Makefile.in: Build microblaze-tdep.o, microblaze-linux-tdep.o. HFILES_NO_SRCDIR: Add microblaze-tdep.h. * microblaze-linux-tdep.c: New. * microblaze-tdep.c: New. * microblaze-tdep.h: New. * NEWS: Announce Xilinx MicroBlaze support. -- Michael Eager eager@eagercon.com 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077 --------------070801010100000601080200 Content-Type: text/plain; name="mb-gdb.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="mb-gdb.patch" Content-length: 61789 ZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBI QVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9jb25m aWcvZGpncHAvZm5jaGFuZ2UubHN0IG1iLWdkYi9nZGIvY29uZmlnL2RqZ3Bw L2ZuY2hhbmdlLmxzdAotLS0gZ2RiL2dkYi9jb25maWcvZGpncHAvZm5jaGFu Z2UubHN0CTIwMDktMDktMTkgMDI6NDY6NDQuMDAwMDAwMDAwIC0wNzAwCisr KyBtYi1nZGIvZ2RiL2NvbmZpZy9kamdwcC9mbmNoYW5nZS5sc3QJMjAwOS0x MC0wNSAxNzo0NDozMC4wMDAwMDAwMDAgLTA3MDAKQEAgLTE4LDYgKzE4LDcg QEAKIEBWQC9iZmQvY3B1LWNyMTYuYyBAVkAvYmZkL2NwdWNyMTYuYwogQFZA L2JmZC9jcHUtY3IxNmMuYyBAVkAvYmZkL2NwdWNyMTZjLmMKIEBWQC9iZmQv Y3B1LWlhNjQtb3BjLmMgQFZAL2JmZC9jcHVpYTY0LW9wYy5jCitAVkAvYmZk L2NwdS1taWNyb2JsYXplLmMgQFZAL2JmZC9jcHVtYi5jCiBAVkAvYmZkL2Nw dS1tNjhoYzExLmMgQFZAL2JmZC9jbTY4aGMxMS5jCiBAVkAvYmZkL2NwdS1t NjhoYzEyLmMgQFZAL2JmZC9jbTY4aGMxMi5jCiBAVkAvYmZkL2VmaS1hcHAt aWEzMi5jIEBWQC9iZmQvZWZpaWEzMmFwcC5jCkBAIC0zNCw2ICszNSw3IEBA CiBAVkAvYmZkL2VsZjMyLWZydi5jIEBWQC9iZmQvZWxmMzJmdi5jCiBAVkAv YmZkL2VsZjMyLWkzNzAuYyBAVkAvYmZkL2UzMmkzNzAuYwogQFZAL2JmZC9l bGYzMi1pMzg2LmMgQFZAL2JmZC9lMzJpODYuYworQFZAL2JmZC9lbGYzMi1t aWNyb2JsYXplLmMgQFZAZTMybWIuYwogQFZAL2JmZC9lbGYzMi1tMzJjLmMg QFZAL2JmZC9lbTMyYy5jCiBAVkAvYmZkL2VsZjMyLW0zMnIuYyBAVkAvYmZk L2VtMzJyLmMKIEBWQC9iZmQvZWxmMzItbTY4aGMxMS5jIEBWQC9iZmQvZW02 OGhjMTEuYwpAQCAtMjc5LDYgKzI4MSwxMCBAQAogQFZAL2dkYi9tNjhrYnNk LXRkZXAuYyBAVkAvZ2RiL202OGJzZC10ZGVwLmMKIEBWQC9nZGIvbTY4a25i c2QtbmF0LmMgQFZAL2dkYi9tNm5ic2QtbmF0LmMKIEBWQC9nZGIvbTY4a25i c2QtdGRlcC5jIEBWQC9nZGIvbTZuYnNkLXRkZXAuYworQFZAL2dkYi9taWNy b2JsYXplLXJvbS5jIEBWQC9nZGIvbWItcm9tLmMKK0BWQC9nZGIvbWljcm9i bGF6ZS1saW51eC10ZGVwLmMgQFZAL2dkYi9tYmwtdGRlcC5jCitAVkAvZ2Ri L21pY3JvYmxhemUtdGRlcC5oIEBWQC9nZGIvbWItdGRlcC5oCitAVkAvZ2Ri L21pY3JvYmxhemUtdGRlcC5jIEBWQC9nZGIvbWItdGRlcC5jCiBAVkAvZ2Ri L21pcHMtbGludXgtbmF0LmMgQFZAL2dkYi9taXBzbG54bmF0LmMKIEBWQC9n ZGIvbWlwcy1saW51eC10ZGVwLmMgQFZAL2dkYi9taXBzbG54dGRlcC5jCiBA VkAvZ2RiL21pcHNuYnNkLW5hdC5jIEBWQC9nZGIvbWlwc25ibmF0LmMKQEAg LTUxMSw2ICs1MTcsMTAgQEAKIEBWQC9vcGNvZGVzL2lhNjQtb3BjLmMgQFZA L29wY29kZXMvaWE2NC1vcGMuYwogQFZAL29wY29kZXMvaXEyMDAwLWRlc2Mu YyBAVkAvb3Bjb2Rlcy9pcTIwMDBkZXNjLmMKIEBWQC9vcGNvZGVzL2lxMjAw MC1kaXMuYyBAVkAvb3Bjb2Rlcy9pcTIwMDBkaXMuYworQFZAL29wY29kZXMv bWljcm9ibGF6ZS1vcGMuaCBAVkAvb3Bjb2Rlcy9tYi1vcGMuaAorQFZAL29w Y29kZXMvbWljcm9ibGF6ZS1kaXMuYyBAVkAvb3Bjb2Rlcy9tYi1kaXMuYwor QFZAL29wY29kZXMvbWljcm9ibGF6ZS1kaXMuaCBAVkAvb3Bjb2Rlcy9tYi1k aXMuaAorQFZAL29wY29kZXMvbWljcm9ibGF6ZS1vcGNtLmggQFZAL29wY29k ZXMvbWItb3BjbS5oCiBAVkAvb3Bjb2Rlcy9tNjhoYzExLWRpcy5jIEBWQC9v cGNvZGVzL202OGhjMTFkaXMuYwogQFZAL29wY29kZXMvbTY4aGMxMS1vcGMu YyBAVkAvb3Bjb2Rlcy9tNjhoYzExb3BjLmMKIEBWQC9vcGNvZGVzL21pY3Jv YmxhemUtb3BjLmggQFZAL29wY29kZXMvbWJsLW9wYy5oCkBAIC01NDAsNiAr NTUwLDkgQEAKIEBWQC9zaW0vZnJ2L3Byb2ZpbGUtZnI1MDAuaCBAVkAvc2lt L2Zydi9mcjUwMC1wcm9maWxlLmgKIEBWQC9zaW0vZnJ2L3Byb2ZpbGUtZnI1 NTAuYyBAVkAvc2ltL2Zydi9mcjU1MC1wcm9maWxlLmMKIEBWQC9zaW0vZnJ2 L3Byb2ZpbGUtZnI1NTAuaCBAVkAvc2ltL2Zydi9mcjU1MC1wcm9maWxlLmgK K0BWQC9zaW0vbWljcm9ibGF6ZSBAVkAvc2ltL21iCitAVkAvc2ltL21pY3Jv YmxhemUvbWljcm9ibGF6ZS5oIEBWQC9zaW0vbWIvbWIuaAorQFZAL3NpbS9t aWNyb2JsYXplL21pY3JvYmxhemUuaXNhIEBWQC9zaW0vbWIvbWIuaXNhCiBA VkAvc2ltL202OGhjMTEvZHYtbTY4aGMxMWVlcHIuYyBAVkAvc2ltL202OGhj MTEvZHYtZWVwci5jCiBAVkAvc2ltL202OGhjMTEvZHYtbTY4aGMxMXNpby5j IEBWQC9zaW0vbTY4aGMxMS9kdi1zaW8uYwogQFZAL3NpbS9tNjhoYzExL2R2 LW02OGhjMTFzcGkuYyBAVkAvc2ltL202OGhjMTEvZHYtc3BpLmMKZGlmZiAt dXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0t ZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9jb25maWd1cmUu dGd0IG1iLWdkYi9nZGIvY29uZmlndXJlLnRndAotLS0gZ2RiL2dkYi9jb25m aWd1cmUudGd0CTIwMDktMDktMjcgMTM6NDY6MzUuMDAwMDAwMDAwIC0wNzAw CisrKyBtYi1nZGIvZ2RiL2NvbmZpZ3VyZS50Z3QJMjAwOS0xMC0wNSAxMDo1 Mjo0Ny4wMDAwMDAwMDAgLTA3MDAKQEAgLTMxMyw2ICszMTMsMTkgQEAgbWVw LSotKikKIAkjIE5vIHNpbSBuZWVkZWQuIFRhcmdldCB1c2VzIFNJRC4KIAk7 OwogCittaWNyb2JsYXplKi1saW51eC0qKQorCSMgVGFyZ2V0OiBYaWxpbngg TWljcm9CbGF6ZSBydW5uaW5nIExpbnV4CisJZ2RiX3RhcmdldF9vYnM9Im1p Y3JvYmxhemUtdGRlcC5vIG1pY3JvYmxhemUtbGludXgtdGRlcC5vIG1pY3Jv YmxhemUtcm9tLm8gXAorCQkJbW9uaXRvci5vIGRzcmVjLm8gc29saWIubyBz b2xpYi1zdnI0Lm8gY29yZWxvdy5vIFwKKwkJCXN5bWZpbGUtbWVtLm8iCisJ Z2RiX3NpbT0uLi9zaW0vbWljcm9ibGF6ZS9saWJzaW0uYQorCTs7CittaWNy b2JsYXplKi14aWxpbngtKikKKwkjIFRhcmdldDogWGlsaW54IE1pY3JvQmxh emUgcnVubmluZyBzdGFuZGFsb25lCisJZ2RiX3RhcmdldF9vYnM9Im1pY3Jv YmxhemUtdGRlcC5vIG1pY3JvYmxhemUtcm9tLm8gbW9uaXRvci5vIGRzcmVj Lm8iCisJZ2RiX3NpbT0uLi9zaW0vbWljcm9ibGF6ZS9saWJzaW0uYQorCTs7 CisKIG1pcHMqLXNnaS1pcml4NSopCiAJIyBUYXJnZXQ6IE1JUFMgU0dJIHJ1 bm5pbmcgSXJpeCA1CiAJZ2RiX3RhcmdldF9vYnM9Im1pcHMtdGRlcC5vIG1p cHMtaXJpeC10ZGVwLm8gc29saWIubyBzb2xpYi1pcml4Lm8iCmRpZmYgLXVy TnAgLS1leGNsdWRlICcqLnN3cCcgLS1leGNsdWRlIERFVi1QSEFTRSAtLWV4 Y2x1ZGUgLnN2biAtLWV4Y2x1ZGUgQ1ZTIGdkYi9nZGIvTUFJTlRBSU5FUlMg bWItZ2RiL2dkYi9NQUlOVEFJTkVSUwotLS0gZ2RiL2dkYi9NQUlOVEFJTkVS UwkyMDA5LTEwLTE0IDExOjE1OjUxLjAwMDAwMDAwMCAtMDcwMAorKysgbWIt Z2RiL2dkYi9NQUlOVEFJTkVSUwkyMDA5LTEwLTE0IDE5OjE1OjU2LjAwMDAw MDAwMCAtMDcwMApAQCAtMjkxLDYgKzI5MSwxMCBAQCB0aGUgbmF0aXZlIG1h aW50YWluZXIgd2hlbiByZXNvbHZpbmcgQUJJCiAJbWVwCQktLXRhcmdldD1t ZXAtZWxmICwtV2Vycm9yCiAJCQlLZXZpbiBCdWV0dG5lcgkJa2V2aW5iQHJl ZGhhdC5jb20KIAorCW1pY3JvYmxhemUJLS10YXJnZXQ9bWljcm9ibGF6ZS14 aWxpbngtZWxmICwtV2Vycm9yCisJCQktLXRhcmdldD1taWNyb2JsYXplLWxp bnV4LWdudSAsLVdlcnJvcgorCQkJTWljaGFlbCBFYWdlcgkJZWFnZXJAZWFn ZXJjb24uY29tCisKIAltaXBzCQktLXRhcmdldD1taXBzLWVsZiAsLVdlcnJv cgogCiAJbW4xMDMwMAkJLS10YXJnZXQ9bW4xMDMwMC1lbGYgYnJva2VuCmRp ZmYgLXVyTnAgLS1leGNsdWRlICcqLnN3cCcgLS1leGNsdWRlIERFVi1QSEFT RSAtLWV4Y2x1ZGUgLnN2biAtLWV4Y2x1ZGUgQ1ZTIGdkYi9nZGIvTWFrZWZp bGUuaW4gbWItZ2RiL2dkYi9NYWtlZmlsZS5pbgotLS0gZ2RiL2dkYi9NYWtl ZmlsZS5pbgkyMDA5LTA5LTE2IDE0OjU1OjU3LjAwMDAwMDAwMCAtMDcwMAor KysgbWItZ2RiL2dkYi9NYWtlZmlsZS5pbgkyMDA5LTEwLTA1IDExOjU5OjIx LjAwMDAwMDAwMCAtMDcwMApAQCAtNTAxLDYgKzUwMSw3IEBAIEFMTF9UQVJH RVRfT0JTID0gXAogCW02OGtic2QtdGRlcC5vIG02OGtsaW51eC10ZGVwLm8g bTY4ay10ZGVwLm8gXAogCW04OGstdGRlcC5vIFwKIAltZXAtdGRlcC5vIFwK KwltaWNyb2JsYXplLXRkZXAubyBtaWNyb2JsYXplLWxpbnV4LXRkZXAubyBc CiAJbWlwcy1pcml4LXRkZXAubyBtaXBzLWxpbnV4LXRkZXAubyBcCiAJbWlw c25ic2QtdGRlcC5vIG1pcHMtdGRlcC5vIFwKIAltbjEwMzAwLWxpbnV4LXRk ZXAubyBtbjEwMzAwLXRkZXAubyBcCkBAIC03NTAsNyArNzUxLDcgQEAgY29u ZmlnL3JzNjAwMC9ubS1yczYwMDAuaCB0b3AuaCBic2Qta3ZtLgogYW5ub3Rh dGUuaCBzaW0tcmVnbm8uaCBkaWN0aW9uYXJ5LmggZGZwLmggbWFpbi5oIGZy YW1lLXVud2luZC5oCVwKIHJlbW90ZS1maWxlaW8uaCBpMzg2LWxpbnV4LXRk ZXAuaCB2YXgtdGRlcC5oIG9iamMtbGFuZy5oIFwKIHNlbnRpbmVsLWZyYW1l LmggYmNhY2hlLmggc3ltZmlsZS5oIHdpbmRvd3MtdGRlcC5oIGxpbnV4LXRk ZXAuaCBcCi1nZGJfdXNsZWVwLmggaml0LmggeG1sLXN5c2NhbGwuaCBhZGEt b3BlcmF0b3IuaW5jCitnZGJfdXNsZWVwLmggaml0LmggeG1sLXN5c2NhbGwu aCBhZGEtb3BlcmF0b3IuaW5jIG1pY3JvYmxhemUtdGRlcC5oCiAKICMgSGVh ZGVyIGZpbGVzIHRoYXQgYWxyZWFkeSBoYXZlIHNyY2RpciBpbiB0aGVtLCBv ciB3aGljaCBhcmUgaW4gb2JqZGlyLgogCkBAIC0xNDM0LDYgKzE0MzUsNyBA QCBBTExERVBGSUxFUyA9IFwKIAltNjhrYnNkLW5hdC5jIG02OGtic2QtdGRl cC5jIFwKIAltNjhrbGludXgtbmF0LmMgbTY4a2xpbnV4LXRkZXAuYyBcCiAJ bTg4ay10ZGVwLmMgbTg4a2JzZC1uYXQuYyBcCisJbWljcm9ibGF6ZS10ZGVw LmMgbWljcm9ibGF6ZS1saW51eC10ZGVwLmMgXAogCW1pbmd3LWhkZXAuYyBc CiAJbWlwcy1saW51eC1uYXQuYyBtaXBzLWxpbnV4LXRkZXAuYyBcCiAJbWlw cy1pcml4LXRkZXAuYyBcCmRpZmYgLXVyTnAgLS1leGNsdWRlICcqLnN3cCcg LS1leGNsdWRlIERFVi1QSEFTRSAtLWV4Y2x1ZGUgLnN2biAtLWV4Y2x1ZGUg Q1ZTIGdkYi9nZGIvbWljcm9ibGF6ZS1saW51eC10ZGVwLmMgbWItZ2RiL2dk Yi9taWNyb2JsYXplLWxpbnV4LXRkZXAuYwotLS0gZ2RiL2dkYi9taWNyb2Js YXplLWxpbnV4LXRkZXAuYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAw MCAtMDgwMAorKysgbWItZ2RiL2dkYi9taWNyb2JsYXplLWxpbnV4LXRkZXAu YwkyMDA5LTA5LTMwIDExOjUxOjM4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCww ICsxLDE0MiBAQAorLyogVGFyZ2V0LWRlcGVuZGVudCBjb2RlIGZvciBYaWxp bnggTWljcm9CbGF6ZS4KKworICAgQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lu Y2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUg ImluZmVyaW9yLmgiCisjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVkZSAi dGFyZ2V0LmgiCisjaW5jbHVkZSAiZ2RiY29yZS5oIgorI2luY2x1ZGUgImdk YmNtZC5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIKKyNpbmNsdWRlICJvYmpm aWxlcy5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAidmFs dWUuaCIKKyNpbmNsdWRlICJvc2FiaS5oIgorI2luY2x1ZGUgInJlZ3NldC5o IgorI2luY2x1ZGUgInNvbGliLXN2cjQuaCIKKyNpbmNsdWRlICJtaWNyb2Js YXplLXRkZXAuaCIKKyNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCisjaW5jbHVk ZSAiZnJhbWUtdW53aW5kLmgiCisjaW5jbHVkZSAidHJhbXAtZnJhbWUuaCIK KworCitzdGF0aWMgaW50CittaWNyb2JsYXplX2xpbnV4X21lbW9yeV9yZW1v dmVfYnJlYWtwb2ludCAoc3RydWN0IGJwX3RhcmdldF9pbmZvICpicF90Z3Qp Cit7CisgIENPUkVfQUREUiBhZGRyID0gYnBfdGd0LT5wbGFjZWRfYWRkcmVz czsKKyAgY29uc3QgZ2RiX2J5dGUgKmJwOworICBpbnQgdmFsOworICBpbnQg YnBsZW47CisgIGdkYl9ieXRlIG9sZF9jb250ZW50c1tCUkVBS1BPSU5UX01B WF07CisKKyAgLyogRGV0ZXJtaW5lIGFwcHJvcHJpYXRlIGJyZWFrcG9pbnQg Y29udGVudHMgYW5kIHNpemUgZm9yIHRoaXMgYWRkcmVzcy4gICovCisgIGJw ID0gZ2RiYXJjaF9icmVha3BvaW50X2Zyb21fcGMgKGdkYmFyY2gsICZhZGRy LCAmYnBsZW4pOworICBpZiAoYnAgPT0gTlVMTCkKKyAgICBlcnJvciAoXygi U29mdHdhcmUgYnJlYWtwb2ludHMgbm90IGltcGxlbWVudGVkIGZvciB0aGlz IHRhcmdldC4iKSk7CisKKyAgdmFsID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChh ZGRyLCBvbGRfY29udGVudHMsIGJwbGVuKTsKKworICAvKiBJZiBvdXIgYnJl YWtwb2ludCBpcyBubyBsb25nZXIgYXQgdGhlIGFkZHJlc3MsIHRoaXMgbWVh bnMgdGhhdCB0aGUKKyAgICAgcHJvZ3JhbSBtb2RpZmllZCB0aGUgY29kZSBv biB1cywgc28gaXQgaXMgd3JvbmcgdG8gcHV0IGJhY2sgdGhlCisgICAgIG9s ZCB2YWx1ZS4gICovCisgIGlmICh2YWwgPT0gMCAmJiBtZW1jbXAgKGJwLCBv bGRfY29udGVudHMsIGJwbGVuKSA9PSAwKQorICAgIHZhbCA9IHRhcmdldF93 cml0ZV9tZW1vcnkgKGFkZHIsIGJwX3RndC0+c2hhZG93X2NvbnRlbnRzLCBi cGxlbik7CisKKyAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQKK21p Y3JvYmxhemVfbGludXhfc2lndHJhbXBfY2FjaGUgKHN0cnVjdCBmcmFtZV9p bmZvICpuZXh0X2ZyYW1lLAorCQkJCSBzdHJ1Y3QgdHJhZF9mcmFtZV9jYWNo ZSAqdGhpc19jYWNoZSwKKwkJCQkgQ09SRV9BRERSIGZ1bmMsIExPTkdFU1Qg b2Zmc2V0LAorCQkJCSBpbnQgYmlhcykKK3sKKyAgQ09SRV9BRERSIGJhc2U7 CisgIENPUkVfQUREUiBncHJlZ3M7CisgIGludCByZWdudW07CisgIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKG5leHRfZnJh bWUpOworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90 ZGVwIChnZGJhcmNoKTsKKworICBiYXNlID0gZnJhbWVfdW53aW5kX3JlZ2lz dGVyX3Vuc2lnbmVkIChuZXh0X2ZyYW1lLCBTUF9SRUdOVU0pOworICBpZiAo YmlhcyA+IDAgJiYgZnJhbWVfcGNfdW53aW5kIChuZXh0X2ZyYW1lKSAhPSBm dW5jKQorICAgIC8qIFNlZSBiZWxvdywgc29tZSBzaWduYWwgdHJhbXBvbGlu ZXMgaW5jcmVtZW50IHRoZSBzdGFjayBhcyB0aGVpcgorICAgICAgIGZpcnN0 IGluc3RydWN0aW9uLCBuZWVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoYXQuICAq LworICAgIGJhc2UgLT0gYmlhczsKKworICAvKiBGaW5kIHRoZSBhZGRyZXNz IG9mIHRoZSByZWdpc3RlciBidWZmZXIuICAqLworICBncHJlZ3MgPSBiYXNl ICsgb2Zmc2V0OworCisgIC8qIFJlZ2lzdGVycyBzYXZlZCBvbiBzdGFjay4g ICovCisgIGZvciAocmVnbnVtID0gMDsgcmVnbnVtIDwgTUlDUk9CTEFaRV9C VFJfUkVHTlVNOyByZWdudW0rKykKKyAgICB0cmFkX2ZyYW1lX3NldF9yZWdf YWRkciAodGhpc19jYWNoZSwgcmVnbnVtLCAKKwkJCSAgICAgZ3ByZWdzICsg cmVnbnVtICogTUlDUk9CTEFaRV9SRUdJU1RFUl9TSVpFKTsKKyAgdHJhZF9m cmFtZV9zZXRfaWQgKHRoaXNfY2FjaGUsIGZyYW1lX2lkX2J1aWxkIChiYXNl LCBmdW5jKSk7Cit9CisKKworc3RhdGljIHZvaWQKK21pY3JvYmxhemVfbGlu dXhfc2lnaGFuZGxlcl9jYWNoZV9pbml0IChjb25zdCBzdHJ1Y3QgdHJhbXBf ZnJhbWUgKnNlbGYsCisJCQkJCXN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2Zy YW1lLAorCQkJCQlzdHJ1Y3QgdHJhZF9mcmFtZV9jYWNoZSAqdGhpc19jYWNo ZSwKKwkJCQkJQ09SRV9BRERSIGZ1bmMpCit7CisgIG1pY3JvYmxhemVfbGlu dXhfc2lndHJhbXBfY2FjaGUgKG5leHRfZnJhbWUsIHRoaXNfY2FjaGUsIGZ1 bmMsCisJCQkJICAgMCAvKiBPZmZzZXQgdG8gdWNvbnRleHRfdC4gICovCisJ CQkJICAgKyAyNCAvKiBPZmZzZXQgdG8gLnJlZy4gICovLAorCQkJCSAgIDAp OworfQorCitzdGF0aWMgc3RydWN0IHRyYW1wX2ZyYW1lIG1pY3JvYmxhemVf bGludXhfc2lnaGFuZGxlcl90cmFtcF9mcmFtZSA9IAoreworICBTSUdUUkFN UF9GUkFNRSwKKyAgNCwKKyAgeworICAgIHsgMHgzMTgwMDA3NywgLTEgfSwg LyogYWRkaWsgUjEyLFIwLDExOS4gICovCisgICAgeyAweGI5Y2MwMDA4LCAt MSB9LCAvKiBicmtpIFIxNCw4LiAgKi8KKyAgICB7IFRSQU1QX1NFTlRJTkVM X0lOU04gfSwKKyAgfSwKKyAgbWljcm9ibGF6ZV9saW51eF9zaWdoYW5kbGVy X2NhY2hlX2luaXQKK307CisKKworc3RhdGljIHZvaWQKK21pY3JvYmxhemVf bGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywKKwkJ CSAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQoreworICBzdHJ1Y3QgZ2Ri YXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKwor ICBzZXRfZ2RiYXJjaF9tZW1vcnlfcmVtb3ZlX2JyZWFrcG9pbnQgKGdkYmFy Y2gsCisJCQkJCW1pY3JvYmxhemVfbGludXhfbWVtb3J5X3JlbW92ZV9icmVh a3BvaW50KTsKKworICAvKiBTaGFyZWQgbGlicmFyeSBoYW5kbGluZy4gICov CisgIHNldF9zb2xpYl9zdnI0X2ZldGNoX2xpbmtfbWFwX29mZnNldHMgKGdk YmFyY2gsCisJCQkJCSBzdnI0X2lscDMyX2ZldGNoX2xpbmtfbWFwX29mZnNl dHMpOworCisgIC8qIFRyYW1wb2xpbmVzLiAgKi8KKyAgdHJhbXBfZnJhbWVf cHJlcGVuZF91bndpbmRlciAoZ2RiYXJjaCwKKwkJCQkmbWljcm9ibGF6ZV9s aW51eF9zaWdoYW5kbGVyX3RyYW1wX2ZyYW1lKTsKK30KKwordm9pZAorX2lu aXRpYWxpemVfbWljcm9ibGF6ZV9saW51eF90ZGVwICh2b2lkKQoreworICBn ZGJhcmNoX3JlZ2lzdGVyX29zYWJpIChiZmRfYXJjaF9taWNyb2JsYXplLCAw LCBHREJfT1NBQklfTElOVVgsIAorCQkJICBtaWNyb2JsYXplX2xpbnV4X2lu aXRfYWJpKTsKK30KZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4 Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMg Z2RiL2dkYi9taWNyb2JsYXplLXJvbS5jIG1iLWdkYi9nZGIvbWljcm9ibGF6 ZS1yb20uYwotLS0gZ2RiL2dkYi9taWNyb2JsYXplLXJvbS5jCTE5NjktMTIt MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBtYi1nZGIvZ2RiL21p Y3JvYmxhemUtcm9tLmMJMjAwOS0xMC0xNCAxNDo0MToxMS4wMDAwMDAwMDAg LTA3MDAKQEAgLTAsMCArMSwxOTEgQEAKKy8qIFJlbW90ZSBkZWJ1Z2dpbmcg aW50ZXJmYWNlIHRvIFhpbGlueCBNaWNyb0JsYXplLgorCisgICBDb3B5cmln aHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImdk YmNvcmUuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJtb25p dG9yLmgiCisjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgorI2luY2x1ZGUgInNl cmlhbC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisKK3N0YXRpYyBjaGFy ICpwaWNvYnVnX2luaXRzW10gPQoreyJcciIsIE5VTEx9OworCitzdGF0aWMg c3RydWN0IHRhcmdldF9vcHMgcGljb2J1Z19vcHM7CitzdGF0aWMgc3RydWN0 IG1vbml0b3Jfb3BzIHBpY29idWdfY21kczsKKworLyogUGljb2J1ZyBvbmx5 IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHJlZ2lzdGVycyBmcm9tIE1Db3JlLiBJ biByZWFsaXR5LAorICAgaXQgZG9lc24ndCBzdXBwb3J0IHNzMSwgZWl0aGVy LiAgKi8KK3N0YXRpYyBjaGFyICpwaWNvYnVnX3JlZ25hbWVzW10gPSB7Cisg ICJyMCIsICAgInIxIiwgICAicjIiLCAgICJyMyIsICAgInI0IiwgICAicjUi LCAgICJyNiIsICAgInI3IiwKKyAgInI4IiwgICAicjkiLCAgICJyMTAiLCAg InIxMSIsICAicjEyIiwgICJyMTMiLCAgInIxNCIsICAicjE1IiwKKyAgMCwg ICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAg MCwgICAgICAwLAorICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAg IDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsCisgICJwc3IiLCAgInZiciIs ICAiZXBzciIsICJmcHNyIiwgImVwYyIsICAiZnBjIiwgIDAsICAgICAgInNz MSIsCisgICJzczIiLCAgInNzMyIsICAic3M0IiwgIDAsICAgICAgMCwgICAg ICAwLCAgICAgIDAsICAgICAgMCwKKyAgMCwgICAgICAwLCAgICAgIDAsICAg ICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLAorICAwLCAg ICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAw LCAgICAgIDAsCisgICJwYyIgfTsKKworCisKK3N0YXRpYyB2b2lkCitwaWNv YnVnX29wZW4gKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgbW9u aXRvcl9vcGVuIChhcmdzLCAmcGljb2J1Z19jbWRzLCBmcm9tX3R0eSk7Cit9 CisvKiBXZSBjaG9vc2UgdG8gd3JpdGUgb3VyIG93biBkdW1wcmVncyByb3V0 aW5lLCBzaW5jZSB0aGUgb3V0cHV0IG9mCisgICB0aGUgcmVnaXN0ZXIgZHVt cGluZyBpcyByYXRoZXIgZGlmZmljdWx0IHRvIGVuY2Fwc3VsYXRlIGluIGEK KyAgIHJlZ2V4cDoKKworcGljb2J1Zz4gcmQKKyAgICAgcGMgMmYwMDAzMWUg ICAgICBlcGMgMmYwMDAzMWUgICAgICBmcGMgMDAwMDAwMDAKKyAgICBwc3Ig ODAwMDAxMDEgICAgIGVwc3IgODAwMDAxMDEgICAgIGZwc3IgMDAwMDAwMDAK K3NzMC1zczQgYmFkMGJlZWYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAg MDAwMDAwMDAgICAgICB2YnIgMzAwMDVjMDAKKyAgcjAtcjcgMmYwZmZmNGMg MDAwMDAwOTAgMDAwMDAwMDEgMDAwMDAwMDIgMDAwMDAwMDMgMDAwMDAwMDQg MDAwMDAwMDUgMDAwMDAwMDYKKyByOC1yMTUgMmYwZmZmNjQgMDAwMDAwMDAg MDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAg MmYwMDAzMWUKKyovCisKK3N0YXRpYyBpbnQKK3BpY29idWdfZHVtcHJlZ3Mg KHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUpCit7CisgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsK KyAgY2hhciBidWZbMTAyNF07CisgIGludCByZXNwX2xlbjsKKyAgY2hhciAq cDsKKworICAvKiBTZW5kIHRoZSBkdW1wIHJlZ2lzdGVyIGNvbW1hbmQgdG8g dGhlIG1vbml0b3IgYW5kCisgICAgIGdldCB0aGUgcmVwbHkuICAqLworICBt b25pdG9yX3ByaW50ZiAocGljb2J1Z19jbWRzLmR1bXBfcmVnaXN0ZXJzKTsK KyAgcmVzcF9sZW4gPSBtb25pdG9yX2V4cGVjdF9wcm9tcHQgKGJ1Ziwgc2l6 ZW9mIChidWYpKTsKKworICBwID0gc3RydG9rIChidWYsICIgXHRcclxuIik7 CisgIHdoaWxlIChwKQorICAgIHsKKyAgICAgIGlmIChzdHJjaHIgKHAsICct JykpCisJeworCSAgLyogZ290IGEgcmFuZ2UuIGVpdGhlciByMC1yNywgcjgt cjE1IG9yIHNzMC1zczQuICAqLworCSAgaWYgKHN0cm5jbXAgKHAsICJyMCIs IDIpID09IDAgfHwgc3RybmNtcCAocCwgInI4IiwgMikgPT0gMCkKKwkgICAg eworCSAgICAgIGludCBybiA9IChwWzFdID09ICcwJyA/IDAgOiA4KTsKKwkg ICAgICBpbnQgaSA9IDA7CisKKwkgICAgICAvKiBHZXQgdGhlIG5leHQgOCB2 YWx1ZXMgYW5kIHJlY29yZCB0aGVtLiAgKi8KKwkgICAgICB3aGlsZSAoaSA8 IDgpCisJCXsKKwkJICBwID0gc3RydG9rIChOVUxMLCAiIFx0XHJcbiIpOwor CQkgIGlmIChwKQorCQkgICAgbW9uaXRvcl9zdXBwbHlfcmVnaXN0ZXIgKHJl Z2NhY2hlLCBybiArIGksIHApOworCQkgIGkrKzsKKwkJfQorCSAgICB9CisJ ICBlbHNlIGlmIChzdHJuY21wIChwLCAic3MiLCAyKSA9PSAwKQorCSAgICB7 CisJICAgICAgLyogZ2V0IHRoZSBuZXh0IGZpdmUgdmFsdWVzLCBpZ25vcmlu ZyB0aGUgZmlyc3QuICAqLworCSAgICAgIGludCBybjsKKwkgICAgICBwID0g c3RydG9rIChOVUxMLCAiIFx0XHJcbiIpOworCSAgICAgIGZvciAocm4gPSAz OTsgcm4gPCA0Mzsgcm4rKykKKwkJeworCQkgIHAgPSBzdHJ0b2sgKE5VTEws ICIgXHRcclxuIik7CisJCSAgaWYgKHApCisJCSAgICBtb25pdG9yX3N1cHBs eV9yZWdpc3RlciAocmVnY2FjaGUsIHJuLCBwKTsKKwkJfQorCSAgICB9CisJ ICBlbHNlCisJICAgIHsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAg ICAgIGVsc2UKKwl7CisJICAvKiBTaW1wbGUgcmVnaXN0ZXIgdHlwZSwgcGFp cmVkLiAgKi8KKwkgIGNoYXIgKm5hbWUgPSBwOworCSAgaW50IGk7CisKKwkg IC8qIEdldCBhbmQgcmVjb3JkIHZhbHVlLiAgKi8KKwkgIHAgPSBzdHJ0b2sg KE5VTEwsICIgXHRcclxuIik7CisJICBpZiAocCkKKwkgICAgeworCSAgICAg IGZvciAoaSA9IDA7IGkgPCBnZGJhcmNoX251bV9yZWdzIChnZGJhcmNoKTsg aSsrKQorCQl7CisJCSAgaWYgKHBpY29idWdfcmVnbmFtZXNbaV0KKwkJICAg ICAgJiYgc3RyY21wIChwaWNvYnVnX3JlZ25hbWVzW2ldLCBuYW1lKSA9PSAw KQorCQkgICAgYnJlYWs7CisJCX0KKworCSAgICAgIGlmIChpIDw9IGdkYmFy Y2hfbnVtX3JlZ3MgKGdkYmFyY2gpKQorCQltb25pdG9yX3N1cHBseV9yZWdp c3RlciAocmVnY2FjaGUsIGksIHApOworCSAgICB9CisJfQorICAgICAgcCA9 IHN0cnRvayAoTlVMTCwgIiBcdFxyXG4iKTsKKyAgICB9CisKKyAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3BpY29idWdfY21kcyAodm9p ZCkKK3sKKyAgcGljb2J1Z19jbWRzLmZsYWdzID0gTU9fR0VUTUVNX05FRURT X1JBTkdFIHwgTU9fQ0xSX0JSRUFLX1VTRVNfQUREUgorCQkgICAgICAgfCBN T19QUklOVF9QUk9HUkFNX09VVFBVVDsKKworICBwaWNvYnVnX2NtZHMuaW5p dCA9IHBpY29idWdfaW5pdHM7CQkvKiBJbml0IHN0cmluZ3MJCSovCisgIHBp Y29idWdfY21kcy5jb250ID0gImdcbiI7CQkJLyogY29udGludWUgY29tbWFu ZAkqLworICBwaWNvYnVnX2NtZHMuc3RlcCA9ICJzXG4iOwkJCS8qIHNpbmds ZSBzdGVwCQkqLworICBwaWNvYnVnX2NtZHMuc2V0X2JyZWFrID0gImJyICV4 XG4iOwkJLyogc2V0IGEgYnJlYWtwb2ludAkqLworICBwaWNvYnVnX2NtZHMu Y2xyX2JyZWFrID0gIm5vYnIgJXhcbiI7CQkvKiBjbGVhciBhIGJyZWFrcG9p bnQJKi8KKyAgcGljb2J1Z19jbWRzLmNscl9hbGxfYnJlYWsgPSAibm9iclxu IjsJLyogY2xlYXIgYWxsIGJyZWFrcG9pbnRzICovCisgIHBpY29idWdfY21k cy5zZXRtZW0uY21kYiA9ICJtbSAleCAleCA7YlxuIjsJLyogc2V0bWVtLmNt ZGIgKGFkZHIsIHZhbHVlKSAqLworICBwaWNvYnVnX2NtZHMuc2V0bWVtLmNt ZHcgPSAibW0gJXggJXggO2hcbiI7CS8qIHNldG1lbS5jbWR3IChhZGRyLCB2 YWx1ZSkgKi8KKyAgcGljb2J1Z19jbWRzLnNldG1lbS5jbWRsID0gIm1tICV4 ICV4IDt3XG4iOwkvKiBzZXRtZW0uY21kbCAoYWRkciwgdmFsdWUpICovCisg IHBpY29idWdfY21kcy5nZXRtZW0uY21kYiA9ICJtZCAleCAleFxuIjsJLyog Z2V0bWVtLmNtZGIgKHN0YXJ0IGFkZHIsCisJCQkJCQkgICBlbmQgYWRkcikg CQkqLworICBwaWNvYnVnX2NtZHMuZ2V0bWVtLnJlc3BfZGVsaW0gPSAiOiI7 CQkvKiBnZXRtZW0ucmVzcF9kZWxpbQkqLworICBwaWNvYnVnX2NtZHMuc2V0 cmVnLmNtZCA9ICJybSAlcyAleFxuIjsJLyogc2V0cmVnLmNtZCAobmFtZSwg dmFsdWUpICovCisgIHBpY29idWdfY21kcy5nZXRyZWcuY21kID0gInJkICVz XG4iOwkJLyogZ2V0cmVnLmNtZCAobmFtZSkJKi8KKyAgcGljb2J1Z19jbWRz LmdldHJlZy5yZXNwX2RlbGltID0gIjoiOwkJLyogZ2V0cmVnLnJlc3BfZGVs aW0JKi8KKyAgcGljb2J1Z19jbWRzLmR1bXBfcmVnaXN0ZXJzID0gInJkXG4i OwkJLyogZHVtcF9yZWdpc3RlcnMJKi8KKyAgcGljb2J1Z19jbWRzLmR1bXBy ZWdzID0gcGljb2J1Z19kdW1wcmVnczsJLyogZHVtcCByZWdpc3RlcnMgcGFy c2VyICovCisgIHBpY29idWdfY21kcy5sb2FkID0gImxvXG4iOwkJCS8qIGRv d25sb2FkIGNvbW1hbmQJKi8KKyAgcGljb2J1Z19jbWRzLnByb21wdCA9ICJw aWNvYnVnPiAiOwkJLyogbW9uaXRvciBjb21tYW5kIHByb21wdCAqLworICBw aWNvYnVnX2NtZHMubGluZV90ZXJtID0gIlxuIjsJCS8qIGVuZC1vZi1saW5l IHRlcm1pbmF0b3IgKi8KKyAgcGljb2J1Z19jbWRzLnRhcmdldCA9ICZwaWNv YnVnX29wczsJCS8qIHRhcmdldCBvcGVyYXRpb25zCSovCisgIHBpY29idWdf Y21kcy5zdG9wYml0cyA9IFNFUklBTF8xX1NUT1BCSVRTOwkvKiBudW1iZXIg b2Ygc3RvcCBiaXRzCSovCisgIHBpY29idWdfY21kcy5yZWduYW1lcyA9IHBp Y29idWdfcmVnbmFtZXM7CS8qIHJlZ2lzdGVycyBuYW1lcwkqLworICBwaWNv YnVnX2NtZHMubnVtX2JyZWFrcG9pbnRzID0gMjA7CQkvKiBudW1iZXIgb2Yg YnJlYWtwb2ludHMgKi8KKyAgcGljb2J1Z19jbWRzLm1hZ2ljID0gTU9OSVRP Ul9PUFNfTUFHSUM7CS8qIG1hZ2ljCQkqLworfQorCit2b2lkCitfaW5pdGlh bGl6ZV9waWNvYnVnX3JvbSAoKQoreworICBpbnQgaTsKKworICAvKiBJbml0 aWFsaXplIG0zMnIgUmV2QyBtb25pdG9yIHRhcmdldC4gICovCisgIGluaXRf cGljb2J1Z19jbWRzICgpOworICBpbml0X21vbml0b3Jfb3BzICgmcGljb2J1 Z19vcHMpOworICBwaWNvYnVnX29wcy50b19zaG9ydG5hbWUgPSAicGljb2J1 ZyI7CisgIHBpY29idWdfb3BzLnRvX2xvbmduYW1lID0gInBpY29idWcgbW9u aXRvciI7CisgIHBpY29idWdfb3BzLnRvX2RvYyA9ICJEZWJ1ZyB2aWEgdGhl IHBpY29idWcgbW9uaXRvci5cblwKK1NwZWNpZnkgdGhlIHNlcmlhbCBkZXZp Y2UgaXQgaXMgY29ubmVjdGVkIHRvIChlLmcuIC9kZXYvdHR5YSkuIjsKKyAg cGljb2J1Z19vcHMudG9fb3BlbiA9IHBpY29idWdfb3BlbjsKKworICBhZGRf dGFyZ2V0ICgmcGljb2J1Z19vcHMpOworfQpkaWZmIC11ck5wIC0tZXhjbHVk ZSAnKi5zd3AnIC0tZXhjbHVkZSBERVYtUEhBU0UgLS1leGNsdWRlIC5zdm4g LS1leGNsdWRlIENWUyBnZGIvZ2RiL21pY3JvYmxhemUtdGRlcC5jIG1iLWdk Yi9nZGIvbWljcm9ibGF6ZS10ZGVwLmMKLS0tIGdkYi9nZGIvbWljcm9ibGF6 ZS10ZGVwLmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAK KysrIG1iLWdkYi9nZGIvbWljcm9ibGF6ZS10ZGVwLmMJMjAwOS0xMC0xNSAw OToxNDozNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw3NTIgQEAKKy8q IFRhcmdldC1kZXBlbmRlbnQgY29kZSBmb3IgWGlsaW54IE1pY3JvQmxhemUu CisKKyAgIENvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1ZGUgImRpcy1hc20u aCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUgInRyYWQtZnJhbWUu aCIKKyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ2YWx1ZS5oIgor I2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIK KyNpbmNsdWRlICJpbmZlcmlvci5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgi CisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiZnJhbWUuaCIKKyNp bmNsdWRlICJmcmFtZS1iYXNlLmgiCisjaW5jbHVkZSAiZnJhbWUtdW53aW5k LmgiCisjaW5jbHVkZSAiZHdhcmYyLWZyYW1lLmgiCisjaW5jbHVkZSAib3Nh YmkuaCIKKworI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyNpbmNsdWRlICJn ZGJfc3RyaW5nLmgiCisjaW5jbHVkZSAidGFyZ2V0LWRlc2NyaXB0aW9ucy5o IgorI2luY2x1ZGUgIm9wY29kZXMvbWljcm9ibGF6ZS1vcGNtLmgiCisjaW5j bHVkZSAib3Bjb2Rlcy9taWNyb2JsYXplLWRpcy5oIgorI2luY2x1ZGUgIm1p Y3JvYmxhemUtdGRlcC5oIgorDAorLyogSW5zdHJ1Y3Rpb24gbWFjcm9zIHVz ZWQgZm9yIGFuYWx5emluZyB0aGUgcHJvbG9ndWUuICAqLworLyogVGhpcyBz ZXQgb2YgaW5zdHJ1Y3Rpb24gbWFjcm9zIG5lZWQgdG8gYmUgY2hhbmdlZCB3 aGVuZXZlciB0aGUKKyAgIHByb2xvZ3VlIGdlbmVyYXRlZCBieSB0aGUgY29t cGlsZXIgY291bGQgaGF2ZSBtb3JlIGluc3RydWN0aW9ucyBvcgorICAgZGlm ZmVyZW50IHR5cGUgb2YgaW5zdHJ1Y3Rpb25zLgorICAgVGhpcyBzZXQgYWxz byBuZWVkcyB0byBiZSB2ZXJpZmllZCBpZiBpdCBpcyBjb21wbGV0ZS4gICov CisjZGVmaW5lIElTX1JFVFVSTihvcCkgKG9wID09IHJ0c2QgfHwgb3AgPT0g cnRpZCkKKyNkZWZpbmUgSVNfVVBEQVRFX1NQKG9wLCByZCwgcmEpIFwKKwko KG9wID09IGFkZGlrIHx8IG9wID09IGFkZGkpICYmIHJkID09IFJFR19TUCAm JiByYSA9PSBSRUdfU1ApCisjZGVmaW5lIElTX1NQSUxMX1NQKG9wLCByZCwg cmEpIFwKKwkoKG9wID09IHN3aSB8fCBvcCA9PSBzdykgJiYgcmQgPT0gUkVH X1NQICYmIHJhID09IFJFR19TUCkKKyNkZWZpbmUgSVNfU1BJTExfUkVHKG9w LCByZCwgcmEpIFwKKwkoKG9wID09IHN3aSB8fCBvcCA9PSBzdykgJiYgcmQg IT0gUkVHX1NQICYmIHJhID09IFJFR19TUCkKKyNkZWZpbmUgSVNfQUxTT19T UElMTF9SRUcob3AsIHJkLCByYSwgcmIpIFwKKwkoKG9wID09IHN3aSB8fCBv cCA9PSBzdykgJiYgcmQgIT0gUkVHX1NQICYmIHJhID09IDAgJiYgcmIgPT0g UkVHX1NQKQorI2RlZmluZSBJU19TRVRVUF9GUChvcCwgcmEsIHJiKSBcCisJ KChvcCA9PSBhZGQgfHwgb3AgPT0gYWRkaWsgfHwgb3AgPT0gYWRkaykgJiYg cmEgPT0gUkVHX1NQICYmIHJiID09IDApCisjZGVmaW5lIElTX1NQSUxMX1JF R19GUChvcCwgcmQsIHJhLCBmcHJlZ251bSkgXAorCSgob3AgPT0gc3dpIHx8 IG9wID09IHN3KSAmJiByZCAhPSBSRUdfU1AgJiYgcmEgPT0gZnByZWdudW0g JiYgcmEgIT0gMCkKKyNkZWZpbmUgSVNfU0FWRV9ISURERU5fUFRSKG9wLCBy ZCwgcmEsIHJiKSBcCisJKChvcCA9PSBhZGQgfHwgb3AgPT0gYWRkaWspICYm IHJhID09IE1JQ1JPQkxBWkVfRklSU1RfQVJHUkVHICYmIHJiID09IDApCisK Ky8qIEFsbCByZWdpc3RlcnMgYXJlIDMyIGJpdHMuICAqLworI2RlZmluZSBN SUNST0JMQVpFX1JFR0lTVEVSX1NJWkUgNAorCisvKiBUaGUgcmVnaXN0ZXJz IG9mIHRoZSBYaWxpbnggbWljcm9ibGF6ZSBwcm9jZXNzb3IuICAqLworCitz dGF0aWMgY29uc3QgY2hhciAqbWljcm9ibGF6ZV9yZWdpc3Rlcl9uYW1lc1td ID0KK3sKKyAgInIwIiwgICAicjEiLCAgInIyIiwgICAgInIzIiwgICAicjQi LCAgICJyNSIsICAgInI2IiwgICAicjciLAorICAicjgiLCAgICJyOSIsICAi cjEwIiwgICAicjExIiwgICJyMTIiLCAgInIxMyIsICAicjE0IiwgICJyMTUi LAorICAicjE2IiwgICJyMTciLCAicjE4IiwgICAicjE5IiwgICJyMjAiLCAg InIyMSIsICAicjIyIiwgICJyMjMiLAorICAicjI0IiwgICJyMjUiLCAicjI2 IiwgICAicjI3IiwgICJyMjgiLCAgInIyOSIsICAicjMwIiwgICJyMzEiLAor ICAicnBjIiwgICJybXNyIiwgInJlYXIiLCAicmVzciIsICJyZnNyIiwgInJi dHIiLAorICAicnB2cjAiLCAicnB2cjEiLCAicnB2cjIiLCAicnB2cjMiLCAi cnB2cjQiLCAicnB2cjUiLCAicnB2cjYiLAorICAicnB2cjciLCAicnB2cjgi LCAicnB2cjkiLCAicnB2cjEwIiwgInJwdnIxMSIsCisgICJyZWRyIiwgInJw aWQiLCAicnpwciIsICJydGxieCIsICJydGxic3giLCAicnRsYmxvIiwgInJ0 bGJoaSIKK307CisKKyNkZWZpbmUgTUlDUk9CTEFaRV9OVU1fUkVHUyBBUlJB WV9TSVpFIChtaWNyb2JsYXplX3JlZ2lzdGVyX25hbWVzKQorDAorc3RhdGlj IGludCBtaWNyb2JsYXplX2RlYnVnX2ZsYWcgPSAwOworCit2b2lkCittaWNy b2JsYXplX2RlYnVnIChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sgCisgIGlm IChtaWNyb2JsYXplX2RlYnVnX2ZsYWcpCisgICAgeworICAgICAgIHZhX2xp c3QgYXJnczsKKworICAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAg ICAgIHByaW50Zl91bmZpbHRlcmVkICgiTUlDUk9CTEFaRTogIik7CisgICAg ICAgdnByaW50Zl91bmZpbHRlcmVkIChmbXQsIGFyZ3MpOworICAgICAgIHZh X2VuZCAoYXJncyk7CisgICAgfQorfQorDAorLyogUmV0dXJuIHRoZSBuYW1l IG9mIHJlZ2lzdGVyIFJFR05VTS4gICovCisKK3N0YXRpYyBjb25zdCBjaGFy ICoKK21pY3JvYmxhemVfcmVnaXN0ZXJfbmFtZSAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIGludCByZWdudW0pCit7CisgIGlmIChyZWdudW0gPj0gMCAm JiByZWdudW0gPCBNSUNST0JMQVpFX05VTV9SRUdTKQorICAgIHJldHVybiBt aWNyb2JsYXplX3JlZ2lzdGVyX25hbWVzW3JlZ251bV07CisgIHJldHVybiBO VUxMOworfQorCitzdGF0aWMgc3RydWN0IHR5cGUgKgorbWljcm9ibGF6ZV9y ZWdpc3Rlcl90eXBlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJl Z251bSkKK3sKKyAgaWYgKHJlZ251bSA9PSBNSUNST0JMQVpFX1NQX1JFR05V TSkKKyAgICByZXR1cm4gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRp bl9kYXRhX3B0cjsKKworICBpZiAocmVnbnVtID09IE1JQ1JPQkxBWkVfUENf UkVHTlVNKQorICAgIHJldHVybiBidWlsdGluX3R5cGUgKGdkYmFyY2gpLT5i dWlsdGluX2Z1bmNfcHRyOworCisgIHJldHVybiBidWlsdGluX3R5cGUgKGdk YmFyY2gpLT5idWlsdGluX2ludDsKK30KKworDAorLyogRmV0Y2ggdGhlIGlu c3RydWN0aW9uIGF0IFBDLiAgKi8KKwordW5zaWduZWQgbG9uZworbWljcm9i bGF6ZV9mZXRjaF9pbnN0cnVjdGlvbiAoQ09SRV9BRERSIHBjKQoreworICBl bnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRl ciAodGFyZ2V0X2dkYmFyY2gpOworICBnZGJfYnl0ZSBidWZbNF07CisKKyAg LyogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgaW5zdHJ1Y3Rpb24gYXQgUEMsIHJl dHVybiB6ZXJvLiAgKi8KKyAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAocGMs IGJ1Ziwgc2l6ZW9mIChidWYpKSkKKyAgICByZXR1cm4gMDsKKworICByZXR1 cm4gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChidWYsIDQsIGJ5dGVfb3Jk ZXIpOworfQorDAorCitzdGF0aWMgQ09SRV9BRERSCittaWNyb2JsYXplX3B1 c2hfZHVtbXlfY29kZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVf QUREUiBzcCwKKwkJCSAgICBDT1JFX0FERFIgZnVuY2FkZHIsCisJCQkgICAg c3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAorCQkJICAgIHN0cnVj dCB0eXBlICp2YWx1ZV90eXBlLAorCQkJICAgIENPUkVfQUREUiAqcmVhbF9w YywgQ09SRV9BRERSICpicF9hZGRyLAorCQkJICAgIHN0cnVjdCByZWdjYWNo ZSAqcmVnY2FjaGUpCit7CisgIGVycm9yIChfKCJwdXNoX2R1bW15X2NvZGUg bm90IGltcGxlbWVudGVkIikpOworICByZXR1cm4gc3A7Cit9CisKKworc3Rh dGljIENPUkVfQUREUgorbWljcm9ibGF6ZV9wdXNoX2R1bW15X2NhbGwgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgdmFsdWUgKmZ1bmN0aW9u LAorCQkJICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQURE UiBicF9hZGRyLAorCQkJICAgIGludCBuYXJncywgc3RydWN0IHZhbHVlICoq YXJncywgQ09SRV9BRERSIHNwLAorCQkJICAgIGludCBzdHJ1Y3RfcmV0dXJu LCBDT1JFX0FERFIgc3RydWN0X2FkZHIpCit7CisgIGVycm9yIChfKCJzdG9y ZV9hcmd1bWVudHMgbm90IGltcGxlbWVudGVkIikpOworICByZXR1cm4gc3A7 Cit9CisKK3N0YXRpYyBjb25zdCBnZGJfYnl0ZSAqCittaWNyb2JsYXplX2Jy ZWFrcG9pbnRfZnJvbV9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENP UkVfQUREUiAqcGMsIAorCQkJICAgICAgIGludCAqbGVuKQoreworICBzdGF0 aWMgZ2RiX2J5dGUgYnJlYWtfaW5zbltdID0gTUlDUk9CTEFaRV9CUkVBS1BP SU5UOworCisgICpsZW4gPSBzaXplb2YgKGJyZWFrX2luc24pOworICByZXR1 cm4gYnJlYWtfaW5zbjsKK30KKwwKKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFs aXplIGEgZnJhbWUgY2FjaGUuICAqLworCitzdGF0aWMgc3RydWN0IG1pY3Jv YmxhemVfZnJhbWVfY2FjaGUgKgorbWljcm9ibGF6ZV9hbGxvY19mcmFtZV9j YWNoZSAodm9pZCkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2Fj aGUgKmNhY2hlOworICBpbnQgaTsKKworICBjYWNoZSA9IEZSQU1FX09CU1RB Q0tfWkFMTE9DIChzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSk7CisK KyAgLyogQmFzZSBhZGRyZXNzLiAgKi8KKyAgY2FjaGUtPmJhc2UgPSAwOwor ICBjYWNoZS0+cGMgPSAwOworCisgIC8qIEZyYW1lbGVzcyB1bnRpbCBwcm92 ZW4gb3RoZXJ3aXNlLiAgKi8KKyAgY2FjaGUtPmZyYW1lbGVzc19wID0gMTsK KworICByZXR1cm4gY2FjaGU7Cit9CisKKy8qIFRoZSBiYXNlIG9mIHRoZSBj dXJyZW50IGZyYW1lIGlzIGFjdHVhbGx5IGluIHRoZSBzdGFjayBwb2ludGVy LgorICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgbm8gZnJhbWUgcG9p bnRlciAobWljcm9ibGF6ZSBBQkkgZG9lcyBub3QKKyAgIHJlcXVpcmUgYSBm cmFtZSBwb2ludGVyKSBvciB3aGVuIHdlJ3JlIHN0b3BwZWQgaW4gdGhlIHBy b2xvZ3VlIG9yCisgICBlcGlsb2d1ZSBpdHNlbGYuICBJbiB0aGVzZSBjYXNl cywgbWljcm9ibGF6ZV9hbmFseXplX3Byb2xvZ3VlIHdpbGwgbmVlZAorICAg dG8gdXBkYXRlIGZpLT5mcmFtZSBiZWZvcmUgcmV0dXJuaW5nIG9yIGFuYWx5 emluZyB0aGUgcmVnaXN0ZXIKKyAgIHNhdmUgaW5zdHJ1Y3Rpb25zLiAgKi8K KyNkZWZpbmUgTUlDUk9CTEFaRV9NWV9GUkFNRV9JTl9TUCAweDEKKworLyog VGhlIGJhc2Ugb2YgdGhlIGN1cnJlbnQgZnJhbWUgaXMgaW4gYSBmcmFtZSBw b2ludGVyIHJlZ2lzdGVyLgorICAgVGhpcyByZWdpc3RlciBpcyBub3RlZCBp biBmcmFtZV9leHRyYV9pbmZvLT5mcF9yZWdudW0uCisKKyAgIE5vdGUgdGhh dCB0aGUgZXhpc3RhbmNlIG9mIGFuIEZQIG1pZ2h0IGFsc28gaW5kaWNhdGUg dGhhdCB0aGUKKyAgIGZ1bmN0aW9uIGhhcyBjYWxsZWQgYWxsb2NhLiAgKi8K KyNkZWZpbmUgTUlDUk9CTEFaRV9NWV9GUkFNRV9JTl9GUCAweDIKKworLyog RnVuY3Rpb24gcHJvbG9ndWVzIG9uIHRoZSBYaWxpbnggbWljcm9ibGF6ZSBw cm9jZXNzb3JzIGNvbnNpc3Qgb2Y6CisKKyAgIC0gYWRqdXN0bWVudHMgdG8g dGhlIHN0YWNrIHBvaW50ZXIgKHIxKSAoYWRkaSByMSwgcjEsIGltbSkKKyAg IC0gbWFraW5nIGEgY29weSBvZiByMSBpbnRvIGFub3RoZXIgcmVnaXN0ZXIg KGEgImZyYW1lIiBwb2ludGVyKQorICAgICAoYWRkIHI/LCByMSwgcjApCisg ICAtIHN0b3JlIHdvcmQvbXVsdGlwbGVzIHRoYXQgdXNlIHIxIG9yIHRoZSBm cmFtZSBwb2ludGVyIGFzIHRoZQorICAgICBiYXNlIGFkZHJlc3MgKHN3aSBy PywgcjEsIGltbSBPUiBzd2kgcj8sIGZwLCBpbW0pCisKKyAgIE5vdGUgdGhh dCBtaWNyb2JsYXplIHJlYWxseSBkb2Vzbid0IGhhdmUgYSByZWFsIGZyYW1l IHBvaW50ZXIuCisgICBJbnN0ZWFkLCB0aGUgY29tcGlsZXIgbWF5IGNvcHkg dGhlIFNQIGludG8gYSByZWdpc3RlciAodXN1YWxseQorICAgcjE5KSB0byBh Y3QgYXMgYW4gYXJnIHBvaW50ZXIuICBGb3Igb3VyIHRhcmdldC1kZXBlbmRl bnQgcHVycG9zZXMsCisgICB0aGUgZnJhbWUgaW5mbydzICJmcmFtZSIgbWVt YmVyIHdpbGwgYmUgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgIGZyYW1lLiAg VGhlIFNQIGNvdWxkLCBpbiBmYWN0LCBwb2ludCBiZWxvdyB0aGlzLgorCisg ICBUaGUgcHJvbG9ndWUgZW5kcyB3aGVuIGFuIGluc3RydWN0aW9uIGZhaWxz IHRvIG1lZXQgZWl0aGVyIG9mCisgICB0aGVzZSBjcml0ZXJpYS4gICovCisK Ky8qIEFuYWx5emUgdGhlIHByb2xvZ3VlIHRvIGRldGVybWluZSB3aGVyZSBy ZWdpc3RlcnMgYXJlIHNhdmVkLAorICAgdGhlIGVuZCBvZiB0aGUgcHJvbG9n dWUsIGV0Yy4gIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgbGlu ZQorICAgb2YgInJlYWwiIGNvZGUgKGkuZS4sIHRoZSBlbmQgb2YgdGhlIHBy b2xvZ3VlKS4gKi8KKworc3RhdGljIENPUkVfQUREUgorbWljcm9ibGF6ZV9h bmFseXplX3Byb2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09S RV9BRERSIHBjLCAKKwkJCSAgICAgQ09SRV9BRERSIGN1cnJlbnRfcGMsCisJ CQkgICAgIHN0cnVjdCBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlICpjYWNoZSkK K3sKKyAgY2hhciAqbmFtZTsKKyAgQ09SRV9BRERSIGZ1bmNfYWRkciwgZnVu Y19lbmQsIGFkZHIsIHN0b3AsIHByb2xvZ3VlX2VuZF9hZGRyID0gMDsKKyAg dW5zaWduZWQgbG9uZyBpbnNuOworICBpbnQgcm4sIHJkLCByYSwgcmIsIGlt bTsKKyAgZW51bSBtaWNyb2JsYXplX2luc3RyIG9wOworICBpbnQgZmxhZ3Mg PSAwOworICBpbnQgc2F2ZV9oaWRkZW5fcG9pbnRlcl9mb3VuZCA9IDA7Cisg IGludCBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCisgIC8q IEZpbmQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb24uICovCisgIGZpbmRf cGNfcGFydGlhbF9mdW5jdGlvbiAocGMsICZuYW1lLCAmZnVuY19hZGRyLCAm ZnVuY19lbmQpOworICBpZiAoZnVuY19hZGRyIDwgcGMpCisgICAgcGMgPSBm dW5jX2FkZHI7CisKKyAgaWYgKGN1cnJlbnRfcGMgPCBwYykKKyAgICByZXR1 cm4gY3VycmVudF9wYzsKKworICAgLyogSW5pdGlhbGl6ZSBpbmZvIGFib3V0 IGZyYW1lLiAgKi8KKyAgIGNhY2hlLT5mcmFtZXNpemUgPSAwOworICAgY2Fj aGUtPmZwX3JlZ251bSA9IE1JQ1JPQkxBWkVfU1BfUkVHTlVNOworICAgY2Fj aGUtPmZyYW1lbGVzc19wID0gMTsKKworICAvKiBTdGFydCBkZWNvZGluZyB0 aGUgcHJvbG9ndWUuICBXZSBzdGFydCBieSBjaGVja2luZyB0d28gc3BlY2lh bCBjYXNlczoKKworICAgICAxLiBXZSdyZSBhYm91dCB0byByZXR1cm4KKyAg ICAgMi4gV2UncmUgYXQgdGhlIGZpcnN0IGluc24gb2YgdGhlIHByb2xvZ3Vl LgorCisgICAgIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiwgb3VyIGZyYW1l IGhhcyBhbHJlYWR5IGJlZW4gZGVhbGxvY2F0ZWQuCisgICAgIElmIHdlIGFy ZSBzdG9wcGVkIGF0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZiBhIHByb2xv Z3VlLAorICAgICB0aGVuIG91ciBmcmFtZSBoYXMgbm90IHlldCBiZWVuIHNl dCB1cC4gKi8KKworICAvKiBHZXQgdGhlIGZpcnN0IGluc24gZnJvbSBtZW1v cnkuICAqLworCisgIGluc24gPSBtaWNyb2JsYXplX2ZldGNoX2luc3RydWN0 aW9uIChwYyk7CisgIG9wID0gbWljcm9ibGF6ZV9kZWNvZGVfaW5zbiAoaW5z biwgJnJkLCAmcmEsICZyYiwgJmltbSk7CisKKyAgaWYgKElTX1JFVFVSTihv cCkpCisgICAgcmV0dXJuIHBjOworCisgIC8qIFN0YXJ0IGF0IGJlZ2lubmlu ZyBvZiBmdW5jdGlvbiBhbmQgYW5hbHl6ZSB1bnRpbCB3ZSBnZXQgdG8gdGhl CisgICAgIGN1cnJlbnQgcGMsIG9yIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9u LCB3aGljaGV2ZXIgaXMgZmlyc3QuICAqLworICBzdG9wID0gKGN1cnJlbnRf cGMgPCBmdW5jX2VuZCA/IGN1cnJlbnRfcGMgOiBmdW5jX2VuZCk7CisKKyAg bWljcm9ibGF6ZV9kZWJ1ZyAoIlNjYW5uaW5nIHByb2xvZ3VlOiBuYW1lPSVz LCBmdW5jX2FkZHI9JXMsIHN0b3A9JXNcbiIsIAorCQkgICAgbmFtZSwgcGFk ZHJlc3MgKGdkYmFyY2gsIGZ1bmNfYWRkciksIAorCQkgICAgcGFkZHJlc3Mg KGdkYmFyY2gsIHN0b3ApKTsKKworICBmb3IgKGFkZHIgPSBmdW5jX2FkZHI7 IGFkZHIgPCBzdG9wOyBhZGRyICs9IElOU1RfV09SRF9TSVpFKQorICAgIHsK KyAgICAgIGluc24gPSBtaWNyb2JsYXplX2ZldGNoX2luc3RydWN0aW9uIChh ZGRyKTsKKyAgICAgIG9wID0gbWljcm9ibGF6ZV9kZWNvZGVfaW5zbiAoaW5z biwgJnJkLCAmcmEsICZyYiwgJmltbSk7CisgICAgICBtaWNyb2JsYXplX2Rl YnVnICgiJXMgJTA4bHhcbiIsIHBhZGRyZXNzIChnZGJhcmNoLCBwYyksIGlu c24pOworCisgICAgICAvKiBUaGlzIGNvZGUgaXMgdmVyeSBzZW5zaXRpdmUg dG8gd2hhdCBmdW5jdGlvbnMgYXJlIHByZXNlbnQgaW4gdGhlCisJIHByb2xv Z3VlLiAgSXQgYXNzdW1lcyB0aGF0IHRoZSAoYWRkaSwgYWRkaWssIHN3aSwg c3cpIGNhbiBiZSB0aGUgCisJIG9ubHkgaW5zdHJ1Y3Rpb25zIGluIHRoZSBw cm9sb2d1ZS4gICovCisgICAgICBpZiAoSVNfVVBEQVRFX1NQKG9wLCByZCwg cmEpKQorCXsKKwkgIG1pY3JvYmxhemVfZGVidWcgKCJnb3QgYWRkaSByMSxy MSwlZDsgY29udG51aW5nXG4iLCBpbW0pOworCSAgaWYgKGNhY2hlLT5mcmFt ZXNpemUpCisJICAgIGJyZWFrOwkvKiBicmVhayBpZiBmcmFtZXNpemUgYWxy ZWFkeSBjb21wdXRlZC4gICovCisJICBjYWNoZS0+ZnJhbWVzaXplID0gLWlt bTsgLyogc3RhY2sgZ3Jvd3MgdG93YXJkcyBsb3cgbWVtb3J5LiAgKi8KKwkg IGNhY2hlLT5mcmFtZWxlc3NfcCA9IDA7IC8qIEZyYW1lIGZvdW5kLiAgKi8K KwkgIHNhdmVfaGlkZGVuX3BvaW50ZXJfZm91bmQgPSAwOworCSAgbm9uX3N0 YWNrX2luc3RydWN0aW9uX2ZvdW5kID0gMDsKKwkgIGNvbnRpbnVlOworCX0K KyAgICAgIGVsc2UgaWYgKElTX1NQSUxMX1NQKG9wLCByZCwgcmEpKQorCXsK KwkgIC8qIFNwaWxsIHN0YWNrIHBvaW50ZXIuICAqLworCSAgY2FjaGUtPnJl Z2lzdGVyX29mZnNldHNbcmRdID0gaW1tOyAvKiBTUCBzcGlsbGVkIGJlZm9y ZSB1cGRhdGluZy4gICovCisKKwkgIG1pY3JvYmxhemVfZGVidWcgKCJzd2kg cjEgcjEgJWQsIGNvbnRpbnVpbmdcbiIsIGltbSk7CisJICBzYXZlX2hpZGRl bl9wb2ludGVyX2ZvdW5kID0gMDsKKwkgIGlmICghY2FjaGUtPmZyYW1lc2l6 ZSkKKwkgICAgbm9uX3N0YWNrX2luc3RydWN0aW9uX2ZvdW5kID0gMDsKKwkg IGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2UgaWYgKElTX1NQSUxMX1JFRyhv cCwgcmQsIHJhKSkKKwl7CisJICAvKiBTcGlsbCByZWdpc3Rlci4gICovCisJ ICBjYWNoZS0+cmVnaXN0ZXJfb2Zmc2V0c1tyZF0gPSBpbW0gLSBjYWNoZS0+ ZnJhbWVzaXplOworCisJICBtaWNyb2JsYXplX2RlYnVnICgic3dpICVkIHIx ICVkLCBjb250aW51aW5nXG4iLCByZCwgaW1tKTsKKwkgIHNhdmVfaGlkZGVu X3BvaW50ZXJfZm91bmQgPSAwOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXpl KQorCSAgICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCSAg Y29udGludWU7CisJfQorICAgICAgZWxzZSBpZiAoSVNfQUxTT19TUElMTF9S RUcob3AsIHJkLCByYSwgcmIpKQorCXsKKwkgIC8qIFNwaWxsIHJlZ2lzdGVy LiAgKi8KKwkgIGNhY2hlLT5yZWdpc3Rlcl9vZmZzZXRzW3JkXSA9IDAgLSBj YWNoZS0+ZnJhbWVzaXplOworCisJICBtaWNyb2JsYXplX2RlYnVnICgic3cg JWQgcjAgcjEsIGNvbnRpbnVpbmdcbiIsIHJkKTsKKwkgIHNhdmVfaGlkZGVu X3BvaW50ZXJfZm91bmQgPSAwOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXpl KQorCSAgICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCSAg Y29udGludWU7CisJfQorICAgICAgZWxzZSBpZiAoSVNfU0VUVVBfRlAob3As IHJhLCByYikpCisJeworCSAgLyogV2UgaGF2ZSBhIGZyYW1lIHBvaW50ZXIu ICBOb3RlIHRoZSByZWdpc3RlciB3aGljaCBpcyAKKyAgICAgICAgICAgICBh Y3RpbmcgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovCisJICBmbGFncyB8PSBN SUNST0JMQVpFX01ZX0ZSQU1FX0lOX0ZQOworCSAgZmxhZ3MgJj0gfk1JQ1JP QkxBWkVfTVlfRlJBTUVfSU5fU1A7CisJICBjYWNoZS0+ZnBfcmVnbnVtID0g cmQ7CisJICBtaWNyb2JsYXplX2RlYnVnICgiRm91bmQgYSBmcmFtZSBwb2lu dGVyOiByJWRcbiIsIGNhY2hlLT5mcF9yZWdudW0pOworCSAgc2F2ZV9oaWRk ZW5fcG9pbnRlcl9mb3VuZCA9IDA7CisJICBpZiAoIWNhY2hlLT5mcmFtZXNp emUpCisJICAgIG5vbl9zdGFja19pbnN0cnVjdGlvbl9mb3VuZCA9IDA7CisJ ICBjb250aW51ZTsKKwl9CisgICAgICBlbHNlIGlmIChJU19TUElMTF9SRUdf RlAob3AsIHJkLCByYSwgY2FjaGUtPmZwX3JlZ251bSkpCisJeworCSAgLyog cmVnIHNwaWxsZWQgYWZ0ZXIgdXBkYXRpbmcuICAqLworCSAgY2FjaGUtPnJl Z2lzdGVyX29mZnNldHNbcmRdID0gaW1tIC0gY2FjaGUtPmZyYW1lc2l6ZTsK KworCSAgbWljcm9ibGF6ZV9kZWJ1ZyAoInN3aSAlZCAlZCAlZCwgY29udGlu dWluZ1xuIiwgcmQsIHJhLCBpbW0pOworCSAgc2F2ZV9oaWRkZW5fcG9pbnRl cl9mb3VuZCA9IDA7CisJICBpZiAoIWNhY2hlLT5mcmFtZXNpemUpCisJICAg IG5vbl9zdGFja19pbnN0cnVjdGlvbl9mb3VuZCA9IDA7CisJICBjb250aW51 ZTsKKwl9CisgICAgICBlbHNlIGlmIChJU19TQVZFX0hJRERFTl9QVFIob3As IHJkLCByYSwgcmIpKQorCXsKKwkgIC8qIElmIHRoZSBmaXJzdCBhcmd1bWVu dCBpcyBhIGhpZGRlbiBwb2ludGVyIHRvIHRoZSBhcmVhIHdoZXJlIHRoZQor CSAgICAgcmV0dXJuIHN0cnVjdHVyZSBpcyB0byBiZSBzYXZlZCwgdGhlbiBp dCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZQorCSAgICAgcHJvbG9ndWUuICAq LworCisJICBtaWNyb2JsYXplX2RlYnVnICgiYWRkICVkICVkICVkLCBjb250 aW51aW5nXG4iLCByZCwgcmEsIHJiKTsKKwkgIHNhdmVfaGlkZGVuX3BvaW50 ZXJfZm91bmQgPSAxOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXplKQorCSAg ICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCSAgY29udGlu dWU7CisJfQorCisgICAgICAvKiBBcyBhIHJlc3VsdCBvZiB0aGUgbW9kaWZp Y2F0aW9uIGluIHRoZSBuZXh0IHN0ZXAgd2hlcmUgd2UgY29udGludWUKKwkg dG8gYW5hbHl6ZSB0aGUgcHJvbG9ndWUgdGlsbCB3ZSByZWFjaCBhIGNvbnRy b2wgZmxvdyBpbnN0cnVjdGlvbiwKKwkgd2UgbmVlZCBhbm90aGVyIHZhcmlh YmxlIHRvIHN0b3JlIHdoZW4gZXhhY3RseSBhIG5vbi1zdGFjaworCSBpbnN0 cnVjdGlvbiB3YXMgZW5jb3VudGVyZWQsIHdoaWNoIGlzIHRoZSBjdXJyZW50 IGRlZmluaXRpb24KKwkgb2YgYSBwcm9sb2d1ZS4gICovCisgICAgICBpZiAo IW5vbl9zdGFja19pbnN0cnVjdGlvbl9mb3VuZCkKKwlwcm9sb2d1ZV9lbmRf YWRkciA9IGFkZHI7CisgICAgICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91 bmQgPSAxOworCisgICAgICAvKiBXaGVuIG9wdGltaXphdGlvbnMgYXJlIGVu YWJsZWQsIGl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgcHJvbG9ndWUKKwkg aW5zdHJ1Y3Rpb25zIGFyZSBub3QgbWl4ZWQgaW4gd2l0aCBvdGhlciBpbnN0 cnVjdGlvbnMgZnJvbSB0aGUKKwkgcHJvZ3JhbS4gU29tZSBwcm9ncmFtcyBz aG93IHRoaXMgYmVoYXZpb3IgYXQgLU8yLiBUaGlzIGNhbiBiZQorCSBhdm9p ZGVkIGJ5IGFkZGluZyAtZm5vLXNjaGVkdWxlLWluc25zMiBzd2l0Y2ggYXMg b2Ygbm93IChlZGsgOC4xKQorCSBJbiBzdWNoIGNhc2VzLCB3ZSBzY2FuIHRo ZSBmdW5jdGlvbiB1bnRpbCB3ZSBzZWUgdGhlIGZpcnN0IGNvbnRyb2wKKwkg aW5zdHJ1Y3Rpb24uICAqLworCisgICAgICB7CisJdW5zaWduZWQgb3AgPSAo dW5zaWduZWQpaW5zbiA+PiAyNjsKKworCS8qIGNvbnRpbnVlIGlmIG5vdCBj b250cm9sIGZsb3cgKGJyYW5jaCwgcmV0dXJuKS4gICovCisJaWYgKG9wICE9 IDB4MjYgJiYgb3AgIT0gMHgyNyAmJiBvcCAhPSAweDJkICYmIG9wICE9IDB4 MmUgJiYgb3AgIT0gMHgyZikKKwkgIGNvbnRpbnVlOworCWVsc2UgaWYgKG9w ID09IDB4MmMpCisJICBjb250aW51ZTsgICAgLyogY29udGludWUgaWYgaW1t LiAgKi8KKyAgICAgIH0KKworICAgICAgLyogVGhpcyBpcyBub3QgYSBwcm9s b2d1ZSBpbnNuLCBzbyBzdG9wIGhlcmUuICovCisgICAgICBtaWNyb2JsYXpl X2RlYnVnICgiaW5zbiBpcyBub3QgYSBwcm9sb2d1ZSBpbnNuIC0tIGVuZGlu ZyBzY2FuXG4iKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICBtaWNyb2Js YXplX2RlYnVnICgiZG9uZSBhbmFseXppbmcgcHJvbG9ndWVcbiIpOworICBt aWNyb2JsYXplX2RlYnVnICgicHJvbG9ndWUgZW5kID0gMHgleFxuIiwgKGlu dCkgYWRkcik7CisKKyAgLyogSWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gd2Fz IGFuIGFkZCByZCwgcjUsIHIwIHRoZW4gZG9uJ3QgY291bnQgaXQgYXMKKyAg ICAgcGFydCBvZiB0aGUgcHJvbG9ndWUuICAqLworICBpZiAoc2F2ZV9oaWRk ZW5fcG9pbnRlcl9mb3VuZCkKKyAgICBwcm9sb2d1ZV9lbmRfYWRkciAtPSBJ TlNUX1dPUkRfU0laRTsKKworICByZXR1cm4gcHJvbG9ndWVfZW5kX2FkZHI7 Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK21pY3JvYmxhemVfdW53aW5kX3Bj IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZyYW1lX2luZm8g Km5leHRfZnJhbWUpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsKKyAgQ09SRV9B RERSIHBjOworCisgIGZyYW1lX3Vud2luZF9yZWdpc3RlciAobmV4dF9mcmFt ZSwgTUlDUk9CTEFaRV9QQ19SRUdOVU0sIGJ1Zik7CisgIHBjID0gZXh0cmFj dF90eXBlZF9hZGRyZXNzIChidWYsIGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCkt PmJ1aWx0aW5fZnVuY19wdHIpOworICAvKiBGb3Igc2VudGluZWwgZnJhbWUs IHJldHVybiBhZGRyZXNzIGlzIGFjdHVhbCBQQy4gIEZvciBvdGhlciBmcmFt ZXMsCisgICAgIHJldHVybiBhZGRyZXNzIGlzIHBjKzguICBUaGlzIGlzIGEg d29ya2Fyb3VuZCBiZWNhdXNlIGdjYyBkb2VzIG5vdAorICAgICBnZW5lcmF0 ZSBjb3JyZWN0IHJldHVybiBhZGRyZXNzIGluIENJRS4gICovCisgIGlmIChm cmFtZV9yZWxhdGl2ZV9sZXZlbCAobmV4dF9mcmFtZSkgPj0gMCkKKyAgICBw YyArPSA4OworICByZXR1cm4gcGM7Cit9CisKKy8qIFJldHVybiBQQyBvZiBm aXJzdCByZWFsIGluc3RydWN0aW9uIG9mIHRoZSBmdW5jdGlvbiBzdGFydGlu ZyBhdAorICAgU1RBUlRfUEMuICAqLworCitDT1JFX0FERFIKK21pY3JvYmxh emVfc2tpcF9wcm9sb2d1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENP UkVfQUREUiBzdGFydF9wYykKK3sKKyAgc3RydWN0IHN5bXRhYl9hbmRfbGlu ZSBzYWw7CisgIENPUkVfQUREUiBmdW5jX3N0YXJ0LCBmdW5jX2VuZCwgb3N0 YXJ0X3BjOworICBzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSBjYWNo ZTsKKworICAvKiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kLCBmaW5k IHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlIGJ5CisgICAgIHVzaW5nIHRoZSBk ZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBEZWJ1Z2dpbmcgaW5mbyBkb2VzIG5v dCBhbHdheXMKKyAgICAgZ2l2ZSB0aGUgcmlnaHQgYW5zd2VyIHNpbmNlIHBh cmFtZXRlcnMgYXJlIHN0b3JlZCBvbiBzdGFjayBhZnRlciB0aGlzLgorICAg ICBBbHdheXMgYW5hbHl6ZSB0aGUgcHJvbG9ndWUuICAqLworICBpZiAoZmlu ZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChzdGFydF9wYywgTlVMTCwgJmZ1bmNf c3RhcnQsICZmdW5jX2VuZCkpCisgICAgeworICAgICAgc2FsID0gZmluZF9w Y19saW5lIChmdW5jX3N0YXJ0LCAwKTsKKworICAgICAgaWYgKHNhbC5lbmQg PCBmdW5jX2VuZAorCSAgJiYgc3RhcnRfcGMgPD0gc2FsLmVuZCkKKwlzdGFy dF9wYyA9IHNhbC5lbmQ7CisgICAgfQorCisgIG9zdGFydF9wYyA9IG1pY3Jv YmxhemVfYW5hbHl6ZV9wcm9sb2d1ZSAoZ2RiYXJjaCwgZnVuY19zdGFydCwg MHhmZmZmZmZmZlVMLCAKKwkJCQkJICAgJmNhY2hlKTsKKworICBpZiAob3N0 YXJ0X3BjID4gc3RhcnRfcGMpCisgICAgcmV0dXJuIG9zdGFydF9wYzsKKyAg cmV0dXJuIHN0YXJ0X3BjOworfQorCisvKiBOb3JtYWwgZnJhbWVzLiAgKi8K Kworc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUgKgorbWljcm9ibGF6 ZV9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUs IHZvaWQgKip0aGlzX2NhY2hlKQoreworICBzdHJ1Y3QgbWljcm9ibGF6ZV9m cmFtZV9jYWNoZSAqY2FjaGU7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNo ID0gZ2V0X2ZyYW1lX2FyY2ggKG5leHRfZnJhbWUpOworICBDT1JFX0FERFIg ZnVuYywgcGMsIGZwOworICBpbnQgcm47CisKKyAgaWYgKCp0aGlzX2NhY2hl KQorICAgIHJldHVybiAqdGhpc19jYWNoZTsKKworICBjYWNoZSA9IG1pY3Jv YmxhemVfYWxsb2NfZnJhbWVfY2FjaGUgKCk7CisgICp0aGlzX2NhY2hlID0g Y2FjaGU7CisgIGNhY2hlLT5zYXZlZF9yZWdzID0gdHJhZF9mcmFtZV9hbGxv Y19zYXZlZF9yZWdzIChuZXh0X2ZyYW1lKTsKKworICAvKiBDbGVhciBvZmZz ZXRzIHRvIHNhdmVkIHJlZ3MgaW4gZnJhbWUuICAqLworICBmb3IgKHJuID0g MDsgcm4gPCBnZGJhcmNoX251bV9yZWdzIChnZGJhcmNoKTsgcm4rKykKKyAg ICBjYWNoZS0+cmVnaXN0ZXJfb2Zmc2V0c1tybl0gPSAtMTsKKworICBmdW5j ID0gZ2V0X2ZyYW1lX2Z1bmMgKG5leHRfZnJhbWUpOworCisgIGNhY2hlLT5w YyA9IGdldF9mcmFtZV9hZGRyZXNzX2luX2Jsb2NrIChuZXh0X2ZyYW1lKTsK KworICByZXR1cm4gY2FjaGU7Cit9CisKK3N0YXRpYyB2b2lkCittaWNyb2Js YXplX2ZyYW1lX3RoaXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2Zy YW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKwkJICAgICAgIHN0cnVjdCBmcmFt ZV9pZCAqdGhpc19pZCkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVf Y2FjaGUgKmNhY2hlID0KKyAgICBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlIChu ZXh0X2ZyYW1lLCB0aGlzX2NhY2hlKTsKKworICAvKiBUaGlzIG1hcmtzIHRo ZSBvdXRlcm1vc3QgZnJhbWUuICAqLworICBpZiAoY2FjaGUtPmJhc2UgPT0g MCkKKyAgICByZXR1cm47CisKKyAgKCp0aGlzX2lkKSA9IGZyYW1lX2lkX2J1 aWxkIChjYWNoZS0+YmFzZSwgY2FjaGUtPnBjKTsKK30KKworc3RhdGljIHN0 cnVjdCB2YWx1ZSAqCittaWNyb2JsYXplX2ZyYW1lX3ByZXZfcmVnaXN0ZXIg KHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorCQkJCSB2b2lkICoq dGhpc19jYWNoZSwgaW50IHJlZ251bSkKK3sKKyAgc3RydWN0IG1pY3JvYmxh emVfZnJhbWVfY2FjaGUgKmNhY2hlID0KKyAgICBtaWNyb2JsYXplX2ZyYW1l X2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKworICBpZiAoY2Fj aGUtPmZyYW1lbGVzc19wKQorICAgIHsKKyAgICAgIGlmIChyZWdudW0gPT0g TUlDUk9CTEFaRV9QQ19SRUdOVU0pCisgICAgICAgIHJlZ251bSA9IDE1Owor ICAgICAgaWYgKHJlZ251bSA9PSBNSUNST0JMQVpFX1NQX1JFR05VTSkKKyAg ICAgICAgcmVnbnVtID0gMTsKKyAgICAgIHJldHVybiB0cmFkX2ZyYW1lX2dl dF9wcmV2X3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCBjYWNoZS0+c2F2ZWRfcmVn cywgcmVnbnVtKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gdHJhZF9m cmFtZV9nZXRfcHJldl9yZWdpc3RlciAodGhpc19mcmFtZSwgY2FjaGUtPnNh dmVkX3JlZ3MsCisJCQkJCSByZWdudW0pOworCit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZnJhbWVfdW53aW5kIG1pY3JvYmxhemVfZnJhbWVfdW53aW5k ID0KK3sKKyAgTk9STUFMX0ZSQU1FLAorICBtaWNyb2JsYXplX2ZyYW1lX3Ro aXNfaWQsCisgIG1pY3JvYmxhemVfZnJhbWVfcHJldl9yZWdpc3RlciwKKyAg TlVMTCwKKyAgZGVmYXVsdF9mcmFtZV9zbmlmZmVyCit9OworDAorc3RhdGlj IENPUkVfQUREUgorbWljcm9ibGF6ZV9mcmFtZV9iYXNlX2FkZHJlc3MgKHN0 cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoqdGhpc19jYWNo ZSkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUgKmNhY2hl ID0KKyAgICBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlIChuZXh0X2ZyYW1lLCB0 aGlzX2NhY2hlKTsKKworICByZXR1cm4gY2FjaGUtPmJhc2U7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfYmFzZSBtaWNyb2JsYXplX2ZyYW1l X2Jhc2UgPQoreworICAmbWljcm9ibGF6ZV9mcmFtZV91bndpbmQsCisgIG1p Y3JvYmxhemVfZnJhbWVfYmFzZV9hZGRyZXNzLAorICBtaWNyb2JsYXplX2Zy YW1lX2Jhc2VfYWRkcmVzcywKKyAgbWljcm9ibGF6ZV9mcmFtZV9iYXNlX2Fk ZHJlc3MKK307CisMCisvKiBFeHRyYWN0IGZyb20gYW4gYXJyYXkgUkVHQlVG IGNvbnRhaW5pbmcgdGhlIChyYXcpIHJlZ2lzdGVyIHN0YXRlLCBhCisgICBm dW5jdGlvbiByZXR1cm4gdmFsdWUgb2YgVFlQRSwgYW5kIGNvcHkgdGhhdCBp bnRvIFZBTEJVRi4gICovCitzdGF0aWMgdm9pZAorbWljcm9ibGF6ZV9leHRy YWN0X3JldHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKnR5cGUsIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsCisJCQkJIGdkYl9ieXRlICp2YWxidWYpCit7 CisgIGdkYl9ieXRlIGJ1Zls4XTsKKworICAvKiBDb3B5IHRoZSByZXR1cm4g dmFsdWUgKHN0YXJ0aW5nKSBpbiBSRVRWQUxfUkVHTlVNIHRvIFZBTEJVRi4g ICovCisgIHN3aXRjaCAoVFlQRV9MRU5HVEggKHR5cGUpKQorICAgIHsKKyAg ICAgIGNhc2UgMToJLyogcmV0dXJuIGxhc3QgYnl0ZSBpbiB0aGUgcmVnaXN0 ZXIuICAqLworCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgTUlD Uk9CTEFaRV9SRVRWQUxfUkVHTlVNLCBidWYpOworCW1lbWNweSh2YWxidWYs IGJ1ZiArIE1JQ1JPQkxBWkVfUkVHSVNURVJfU0laRSAtIDEsIDEpOworCXJl dHVybjsKKyAgICAgIGNhc2UgMjoJLyogcmV0dXJuIGxhc3QgMiBieXRlcyBp biByZWdpc3Rlci4gICovCisJbWVtY3B5KHZhbGJ1ZiwgYnVmICsgTUlDUk9C TEFaRV9SRUdJU1RFUl9TSVpFIC0gMiwgMik7CisJcmV0dXJuOworICAgICAg Y2FzZSA0OgkvKiBmb3Igc2l6ZXMgNCBvciA4LCBjb3B5IHRoZSByZXF1aXJl ZCBsZW5ndGguICAqLworICAgICAgY2FzZSA4OgorCXJlZ2NhY2hlX2Nvb2tl ZF9yZWFkIChyZWdjYWNoZSwgTUlDUk9CTEFaRV9SRVRWQUxfUkVHTlVNLCBi dWYpOworCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgTUlDUk9C TEFaRV9SRVRWQUxfUkVHTlVNKzEsIGJ1Zis0KTsKKwltZW1jcHkgKHZhbGJ1 ZiwgYnVmLCBUWVBFX0xFTkdUSCAodHlwZSkpOworCXJldHVybjsKKyAgICAg IGRlZmF1bHQ6CisJaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVf XywgCisJCQlfKCJVbnN1cHBvcnRlZCByZXR1cm4gdmFsdWUgc2l6ZSByZXF1 ZXN0ZWQiKSk7CisgICAgfQorfQorCisvKiBTdG9yZSB0aGUgcmV0dXJuIHZh bHVlIGluIFZBTEJVRiAob2YgdHlwZSBUWVBFKSB3aGVyZSB0aGUgY2FsbGVy CisgICBleHBlY3RzIHRvIHNlZSBpdC4KKworICAgSW50ZWdlcnMgdXAgdG8g Zm91ciBieXRlcyBhcmUgc3RvcmVkIGluIHIzLgorCisgICBMb25ncyBhcmUg c3RvcmVkIGluIHIzIChtb3N0IHNpZ25pZmljYW50IHdvcmQpIGFuZCByNCAo bGVhc3QKKyAgIHNpZ25pZmljYW50IHdvcmQpLgorCisgICBTbWFsbCBzdHJ1 Y3R1cmVzIGFyZSBhbHdheXMgcmV0dXJuZWQgb24gc3RhY2suCisqLworCitz dGF0aWMgdm9pZAorbWljcm9ibGF6ZV9zdG9yZV9yZXR1cm5fdmFsdWUgKHN0 cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAor CQkJICAgICAgIGNvbnN0IGdkYl9ieXRlICp2YWxidWYpCit7CisgIGludCBs ZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisgIGdkYl9ieXRlIGJ1Zls4XTsK KworICBtZW1zZXQgKGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisgIC8qIElu dGVncmFsIGFuZCBwb2ludGVyIHJldHVybiB2YWx1ZXMuICAqLworCisgIGlm IChsZW4gPiA0KQorICAgIHsKKyAgICAgICBnZGJfYXNzZXJ0IChsZW4gPT0g OCk7CisgICAgICAgbWVtY3B5IChidWYsIHZhbGJ1ZiwgOCk7CisgICAgICAg cmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgTUlDUk9CTEFaRV9S RVRWQUxfUkVHTlVNKzEsIGJ1ZiArIDQpOworICAgIH0KKyAgZWxzZQorICAg IC8qID8/PyBEbyB3ZSBuZWVkIHRvIGRvIGFueSBzaWduLWV4dGVuc2lvbiBo ZXJlPyAgKi8KKyAgICBtZW1jcHkgKGJ1ZiArIDQgLSBsZW4sIHZhbGJ1Ziwg bGVuKTsKKworICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2NhY2hlLCBN SUNST0JMQVpFX1JFVFZBTF9SRUdOVU0sIGJ1Zik7Cit9CisKK3N0YXRpYyBl bnVtIHJldHVybl92YWx1ZV9jb252ZW50aW9uCittaWNyb2JsYXplX3JldHVy bl92YWx1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0eXBl ICpmdW5jX3R5cGUsCisJCQkgc3RydWN0IHR5cGUgKnR5cGUsIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsCisJCQkgZ2RiX2J5dGUgKnJlYWRidWYsIGNv bnN0IGdkYl9ieXRlICp3cml0ZWJ1ZikKK3sKKyAgaWYgKHJlYWRidWYpCisg ICAgbWljcm9ibGF6ZV9leHRyYWN0X3JldHVybl92YWx1ZSAodHlwZSwgcmVn Y2FjaGUsIHJlYWRidWYpOworICBpZiAod3JpdGVidWYpCisgICAgbWljcm9i bGF6ZV9zdG9yZV9yZXR1cm5fdmFsdWUgKHR5cGUsIHJlZ2NhY2hlLCB3cml0 ZWJ1Zik7CisKKyAgcmV0dXJuIFJFVFVSTl9WQUxVRV9SRUdJU1RFUl9DT05W RU5USU9OOworfQorCitzdGF0aWMgaW50CittaWNyb2JsYXplX3N0YWJzX2Fy Z3VtZW50X2hhc19hZGRyIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3Ry dWN0IHR5cGUgKnR5cGUpCit7CisgIHJldHVybiAoVFlQRV9MRU5HVEggKHR5 cGUpID09IDE2KTsKK30KKworc3RhdGljIHZvaWQKK21pY3JvYmxhemVfd3Jp dGVfcGMgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBw YykKK3sKKyAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVkIChyZWdj YWNoZSwgTUlDUk9CTEFaRV9QQ19SRUdOVU0sIHBjKTsKK30KKwwKK3N0YXRp YyBpbnQgZHdhcmYyX3RvX3JlZ19tYXBbNzhdID0KK3sgMCAgLyogcjAgICov LCAgIDEgIC8qIHIxICAqLywgICAyICAvKiByMiAgKi8sICAgMyAgLyogcjMg ICovLCAgLyogIDAtIDMgKi8KKyAgNCAgLyogcjQgICovLCAgIDUgIC8qIHI1 ICAqLywgICA2ICAvKiByNiAgKi8sICAgNyAgLyogcjcgICovLCAgLyogIDQt IDcgKi8KKyAgOCAgLyogcjggICovLCAgIDkgIC8qIHI5ICAqLywgIDEwICAv KiByMTAgKi8sICAxMSAgLyogcjExICovLCAgLyogIDgtMTEgKi8KKyAgMTIg LyogcjEyICovLCAgMTMgIC8qIHIxMyAqLywgIDE0ICAvKiByMTQgKi8sICAx NSAgLyogcjE1ICovLCAgLyogMTItMTUgKi8KKyAgMTYgLyogcjE2ICovLCAg MTcgIC8qIHIxNyAqLywgIDE4ICAvKiByMTggKi8sICAxOSAgLyogcjE5ICov LCAgLyogMTYtMTkgKi8KKyAgMjAgLyogcjIwICovLCAgMjEgIC8qIHIyMSAq LywgIDIyICAvKiByMjIgKi8sICAyMyAgLyogcjIzICovLCAgLyogMjAtMjMg Ki8KKyAgMjQgLyogcjI0ICovLCAgMjUgIC8qIHIyNSAqLywgIDI2ICAvKiBy MjYgKi8sICAyNyAgLyogcjI3ICovLCAgLyogMjQtMjUgKi8KKyAgMjggLyog cjI4ICovLCAgMjkgIC8qIHIyOSAqLywgIDMwICAvKiByMzAgKi8sICAzMSAg LyogcjMxICovLCAgLyogMjgtMzEgKi8KKyAgLTEgLyogJGYwICovLCAgLTEg IC8qICRmMSAqLywgIC0xICAvKiAkZjIgKi8sICAtMSAgLyogJGYzICovLCAg LyogMzItMzUgKi8KKyAgLTEgLyogJGY0ICovLCAgLTEgIC8qICRmNSAqLywg IC0xICAvKiAkZjYgKi8sICAtMSAgLyogJGY3ICovLCAgLyogMzYtMzkgKi8K KyAgLTEgLyogJGY4ICovLCAgLTEgIC8qICRmOSAqLywgIC0xICAvKiAkZjEw ICovLCAtMSAgLyogJGYxMSAqLywgLyogNDAtNDMgKi8KKyAgLTEgLyogJGYx MiAqLywgLTEgIC8qICRmMTMgKi8sIC0xICAvKiAkZjE0ICovLCAtMSAgLyog JGYxNSAqLywgLyogNDQtNDcgKi8KKyAgLTEgLyogJGYxNiAqLywgLTEgIC8q ICRmMTcgKi8sIC0xICAvKiAkZjE4ICovLCAtMSAgLyogJGYxOSAqLywgLyog NDgtNTEgKi8KKyAgLTEgLyogJGYyMCAqLywgLTEgIC8qICRmMjEgKi8sIC0x ICAvKiAkZjIyICovLCAtMSAgLyogJGYyMyAqLywgLyogNTItNTUgKi8KKyAg LTEgLyogJGYyNCAqLywgLTEgIC8qICRmMjUgKi8sIC0xICAvKiAkZjI2ICov LCAtMSAgLyogJGYyNyAqLywgLyogNTYtNTkgKi8KKyAgLTEgLyogJGYyOCAq LywgLTEgIC8qICRmMjkgKi8sIC0xICAvKiAkZjMwICovLCAtMSAgLyogJGYz MSAqLywgLyogNjAtNjMgKi8KKyAgLTEgLyogaGkgICAqLywgLTEgIC8qIGxv ICAgKi8sIC0xICAvKiBhY2N1bSovLCAzMyAgLyogcm1zciAqLywgLyogNjQt NjcgKi8KKyAgLTEgLyogJGZjYzEqLywgLTEgIC8qICRmY2MyKi8sIC0xICAv KiAkZmNjMyovLCAtMSAgLyogJGZjYzQqLywgLyogNjgtNzEgKi8KKyAgLTEg LyogJGZjYzUqLywgLTEgIC8qICRmY2M2Ki8sIC0xICAvKiAkZmNjNyovLCAt MSAgLyogJGFwICAqLywgLyogNzItNzUgKi8KKyAgLTEgLyogJHJhcCAqLywg LTEgIC8qICRmcnAgKi8JCQkJCSAvKiA3Ni03NyAqLworfTsKKworc3RhdGlj IGludAorbWljcm9ibGF6ZV9kd2FyZjJfcmVnX3RvX3JlZ251bSAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWcpCit7CisgIGdkYl9hc3NlcnQg KHJlZyA8IHNpemVvZiAoZHdhcmYyX3RvX3JlZ19tYXApKTsKKyAgcmV0dXJu IGR3YXJmMl90b19yZWdfbWFwW3JlZ107Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg Z2RiYXJjaCAqCittaWNyb2JsYXplX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdk YmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMp Cit7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisgIHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoOworCisgIC8qIElmIHRoZXJlIGlzIGFscmVhZHkg YSBjYW5kaWRhdGUsIHVzZSBpdC4gICovCisgIGFyY2hlcyA9IGdkYmFyY2hf bGlzdF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7CisgIGlmIChh cmNoZXMgIT0gTlVMTCkKKyAgICByZXR1cm4gYXJjaGVzLT5nZGJhcmNoOwor CisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbmV3IGFyY2hpdGVjdHVy ZS4gICovCisgIHRkZXAgPSBYTUFMTE9DIChzdHJ1Y3QgZ2RiYXJjaF90ZGVw KTsKKyAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsK KworICBzZXRfZ2RiYXJjaF9sb25nX2RvdWJsZV9iaXQgKGdkYmFyY2gsIDEy OCk7CisKKyAgc2V0X2dkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gsIE1JQ1JP QkxBWkVfTlVNX1JFR1MpOworICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9uYW1l IChnZGJhcmNoLCBtaWNyb2JsYXplX3JlZ2lzdGVyX25hbWUpOworICBzZXRf Z2RiYXJjaF9yZWdpc3Rlcl90eXBlIChnZGJhcmNoLCBtaWNyb2JsYXplX3Jl Z2lzdGVyX3R5cGUpOworCisgIC8qIFJlZ2lzdGVyIG51bWJlcnMgb2YgdmFy aW91cyBpbXBvcnRhbnQgcmVnaXN0ZXJzLiAgKi8KKyAgc2V0X2dkYmFyY2hf c3BfcmVnbnVtIChnZGJhcmNoLCBNSUNST0JMQVpFX1NQX1JFR05VTSk7IAor ICBzZXRfZ2RiYXJjaF9wY19yZWdudW0gKGdkYmFyY2gsIE1JQ1JPQkxBWkVf UENfUkVHTlVNKTsgCisKKyAgLyogTWFwIER3YXJmMiByZWdpc3RlcnMgdG8g R0RCIHJlZ2lzdGVycy4gICovCisgIHNldF9nZGJhcmNoX2R3YXJmMl9yZWdf dG9fcmVnbnVtIChnZGJhcmNoLCBtaWNyb2JsYXplX2R3YXJmMl9yZWdfdG9f cmVnbnVtKTsKKworICAvKiBDYWxsIGR1bW15IGNvZGUuICAqLworICBzZXRf Z2RiYXJjaF9jYWxsX2R1bW15X2xvY2F0aW9uIChnZGJhcmNoLCBPTl9TVEFD Syk7CisgIHNldF9nZGJhcmNoX3B1c2hfZHVtbXlfY29kZSAoZ2RiYXJjaCwg bWljcm9ibGF6ZV9wdXNoX2R1bW15X2NvZGUpOworICBzZXRfZ2RiYXJjaF9w dXNoX2R1bW15X2NhbGwgKGdkYmFyY2gsIG1pY3JvYmxhemVfcHVzaF9kdW1t eV9jYWxsKTsKKworICBzZXRfZ2RiYXJjaF9yZXR1cm5fdmFsdWUgKGdkYmFy Y2gsIG1pY3JvYmxhemVfcmV0dXJuX3ZhbHVlKTsKKyAgc2V0X2dkYmFyY2hf c3RhYnNfYXJndW1lbnRfaGFzX2FkZHIKKyAgICAoZ2RiYXJjaCwgbWljcm9i bGF6ZV9zdGFic19hcmd1bWVudF9oYXNfYWRkcik7CisKKyAgc2V0X2dkYmFy Y2hfc2tpcF9wcm9sb2d1ZSAoZ2RiYXJjaCwgbWljcm9ibGF6ZV9za2lwX3By b2xvZ3VlKTsKKworICAvKiBTdGFjayBncm93cyBkb3dud2FyZC4gICovCisg IHNldF9nZGJhcmNoX2lubmVyX3RoYW4gKGdkYmFyY2gsIGNvcmVfYWRkcl9s ZXNzdGhhbik7CisKKyAgc2V0X2dkYmFyY2hfYnJlYWtwb2ludF9mcm9tX3Bj IChnZGJhcmNoLCBtaWNyb2JsYXplX2JyZWFrcG9pbnRfZnJvbV9wYyk7CisK KyAgc2V0X2dkYmFyY2hfZnJhbWVfYXJnc19za2lwIChnZGJhcmNoLCA4KTsK KworICBzZXRfZ2RiYXJjaF9wcmludF9pbnNuIChnZGJhcmNoLCBwcmludF9p bnNuX21pY3JvYmxhemUpOworCisgIHNldF9nZGJhcmNoX3dyaXRlX3BjIChn ZGJhcmNoLCBtaWNyb2JsYXplX3dyaXRlX3BjKTsKKworICBzZXRfZ2RiYXJj aF91bndpbmRfcGMgKGdkYmFyY2gsIG1pY3JvYmxhemVfdW53aW5kX3BjKTsK KworICBmcmFtZV9iYXNlX3NldF9kZWZhdWx0IChnZGJhcmNoLCAmbWljcm9i bGF6ZV9mcmFtZV9iYXNlKTsKKworICAvKiBIb29rIGluIEFCSS1zcGVjaWZp YyBvdmVycmlkZXMsIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuICAq LworICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOworCisg IC8qIFVud2luZCB0aGUgZnJhbWUuICovCisgIGR3YXJmMl9hcHBlbmRfdW53 aW5kZXJzIChnZGJhcmNoKTsKKyAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndp bmRlciAoZ2RiYXJjaCwgJm1pY3JvYmxhemVfZnJhbWVfdW53aW5kKTsKKyAg ZnJhbWVfYmFzZV9hcHBlbmRfc25pZmZlciAoZ2RiYXJjaCwgZHdhcmYyX2Zy YW1lX2Jhc2Vfc25pZmZlcik7CisKKyAgcmV0dXJuIGdkYmFyY2g7Cit9CisK Ky8qIFByb3ZpZGUgYSBwcm90b3R5cGUgdG8gc2lsZW5jZSAtV21pc3Npbmct cHJvdG90eXBlcy4gICovCit2b2lkIF9pbml0aWFsaXplX21pY3JvYmxhemVf dGRlcCAodm9pZCk7CisKK3ZvaWQKK19pbml0aWFsaXplX21pY3JvYmxhemVf dGRlcCAodm9pZCkKK3sKKyAgcmVnaXN0ZXJfZ2RiYXJjaF9pbml0IChiZmRf YXJjaF9taWNyb2JsYXplLCBtaWNyb2JsYXplX2dkYmFyY2hfaW5pdCk7CisK KyAgLyogRGVidWcgdGhpcyBmaWxlcyBpbnRlcm5hbHMuICAqLworICBhZGRf c2V0c2hvd196aW50ZWdlcl9jbWQgKCJtaWNyb2JsYXplIiwgY2xhc3NfbWFp bnRlbmFuY2UsCisJCQkgICAgJm1pY3JvYmxhemVfZGVidWdfZmxhZywgXygi XAorU2V0IG1pY3JvYmxhemUgZGVidWdnaW5nLiIpLCBfKCJcCitTaG93IG1p Y3JvYmxhemUgZGVidWdnaW5nLiIpLCBfKCJcCitXaGVuIG5vbi16ZXJvLCBt aWNyb2JsYXplIHNwZWNpZmljIGRlYnVnZ2luZyBpcyBlbmFibGVkLiIpLAor CQkJICAgIE5VTEwsCisJCQkgICAgTlVMTCwgCisJCQkgICAgJnNldGRlYnVn bGlzdCwgJnNob3dkZWJ1Z2xpc3QpOworCit9CmRpZmYgLXVyTnAgLS1leGNs dWRlICcqLnN3cCcgLS1leGNsdWRlIERFVi1QSEFTRSAtLWV4Y2x1ZGUgLnN2 biAtLWV4Y2x1ZGUgQ1ZTIGdkYi9nZGIvbWljcm9ibGF6ZS10ZGVwLmggbWIt Z2RiL2dkYi9taWNyb2JsYXplLXRkZXAuaAotLS0gZ2RiL2dkYi9taWNyb2Js YXplLXRkZXAuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgw MAorKysgbWItZ2RiL2dkYi9taWNyb2JsYXplLXRkZXAuaAkyMDA5LTEwLTE0 IDE0OjQxOjA2LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDExNyBAQAor LyogVGFyZ2V0LWRlcGVuZGVudCBjb2RlIGZvciBYaWxpbnggTWljcm9CbGF6 ZS4KKworICAgQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBNSUNST0JM QVpFX1RERVBfSAorI2RlZmluZSBNSUNST0JMQVpFX1RERVBfSCAxCisKKwor LyogTWljcm9ibGF6ZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW5mb3JtYXRp b24uICAqLworc3RydWN0IGdkYmFyY2hfdGRlcAoreworfTsKKworc3RydWN0 IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUKK3sKKyAgLyogQmFzZSBhZGRyZXNz LiAgKi8KKyAgQ09SRV9BRERSIGJhc2U7CisgIENPUkVfQUREUiBwYzsKKwor ICAvKiBEbyB3ZSBoYXZlIGEgZnJhbWU/ICAqLworICBpbnQgZnJhbWVsZXNz X3A7CisKKyAgLyogRnJhbWUgc2l6ZS4gICovCisgIGludCBmcmFtZXNpemU7 CisKKyAgLyogRnJhbWUgcmVnaXN0ZXIuICAqLworICBpbnQgZnBfcmVnbnVt OworCisgIC8qIE9mZnNldHMgdG8gc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKyAg aW50IHJlZ2lzdGVyX29mZnNldHNbNTddOwkvKiBNdXN0IG1hdGNoIE1JQ1JP QkxBWkVfTlVNX1JFR1MuICAqLworCisgIC8qIFRhYmxlIG9mIHNhdmVkIHJl Z2lzdGVycy4gICovCisgIHN0cnVjdCB0cmFkX2ZyYW1lX3NhdmVkX3JlZyAq c2F2ZWRfcmVnczsKK307CisKKy8qIFJlZ2lzdGVyIG51bWJlcnMuICAqLwor ZW51bSBtaWNyb2JsYXplX3JlZ251bSAKK3sKKyAgTUlDUk9CTEFaRV9SMF9S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUjFfUkVHTlVNLCBNSUNST0JMQVpFX1NQ X1JFR05VTSA9IE1JQ1JPQkxBWkVfUjFfUkVHTlVNLAorICBNSUNST0JMQVpF X1IyX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SM19SRUdOVU0sIE1JQ1JPQkxB WkVfUkVUVkFMX1JFR05VTSA9IE1JQ1JPQkxBWkVfUjNfUkVHTlVNLAorICBN SUNST0JMQVpFX1I0X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SNV9SRUdOVU0s IE1JQ1JPQkxBWkVfRklSU1RfQVJHUkVHID0gTUlDUk9CTEFaRV9SNV9SRUdO VU0sCisgIE1JQ1JPQkxBWkVfUjZfUkVHTlVNLAorICBNSUNST0JMQVpFX1I3 X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SOF9SRUdOVU0sCisgIE1JQ1JPQkxB WkVfUjlfUkVHTlVNLAorICBNSUNST0JMQVpFX1IxMF9SRUdOVU0sIE1JQ1JP QkxBWkVfTEFTVF9BUkdSRUcgPSBNSUNST0JMQVpFX1IxMF9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfUjExX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMTJfUkVH TlVNLAorICBNSUNST0JMQVpFX1IxM19SRUdOVU0sCisgIE1JQ1JPQkxBWkVf UjE0X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMTVfUkVHTlVNLAorICBNSUNS T0JMQVpFX1IxNl9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjE3X1JFR05VTSwK KyAgTUlDUk9CTEFaRV9SMThfUkVHTlVNLAorICBNSUNST0JMQVpFX1IxOV9S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUjIwX1JFR05VTSwKKyAgTUlDUk9CTEFa RV9SMjFfUkVHTlVNLAorICBNSUNST0JMQVpFX1IyMl9SRUdOVU0sCisgIE1J Q1JPQkxBWkVfUjIzX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMjRfUkVHTlVN LAorICBNSUNST0JMQVpFX1IyNV9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjI2 X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMjdfUkVHTlVNLAorICBNSUNST0JM QVpFX1IyOF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjI5X1JFR05VTSwKKyAg TUlDUk9CTEFaRV9SMzBfUkVHTlVNLAorICBNSUNST0JMQVpFX1IzMV9SRUdO VU0sCisgIE1JQ1JPQkxBWkVfUENfUkVHTlVNLAorICBNSUNST0JMQVpFX01T Ul9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfRUFSX1JFR05VTSwKKyAgTUlDUk9C TEFaRV9FU1JfUkVHTlVNLAorICBNSUNST0JMQVpFX0ZTUl9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfQlRSX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9QVlIwX1JF R05VTSwKKyAgTUlDUk9CTEFaRV9QVlIxX1JFR05VTSwKKyAgTUlDUk9CTEFa RV9QVlIyX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9QVlIzX1JFR05VTSwKKyAg TUlDUk9CTEFaRV9QVlI0X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9QVlI1X1JF R05VTSwKKyAgTUlDUk9CTEFaRV9QVlI2X1JFR05VTSwKKyAgTUlDUk9CTEFa RV9QVlI3X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9QVlI4X1JFR05VTSwKKyAg TUlDUk9CTEFaRV9QVlI5X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9QVlIxMF9S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSMTFfUkVHTlVNLAorICBNSUNST0JM QVpFX1JFRFJfUkVHTlVNLAorICBNSUNST0JMQVpFX1JQSURfUkVHTlVNLAor ICBNSUNST0JMQVpFX1JaUFJfUkVHTlVNLAorICBNSUNST0JMQVpFX1JUTEJY X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SVExCU1hfUkVHTlVNLAorICBNSUNS T0JMQVpFX1JUTEJMT19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUlRMQkhJX1JF R05VTQorfTsKKworLyogTUlDUk9CTEFaRV9CUkVBS1BPSU5UIGRlZmluZXMg dGhlIGJyZWFrcG9pbnQgdGhhdCBzaG91bGQgYmUgdXNlZC4KKyAgIE9ubHkg dXNlZCBmb3IgbmF0aXZlIGRlYnVnZ2luZy4gICovCisjZGVmaW5lIE1JQ1JP QkxBWkVfQlJFQUtQT0lOVCB7MHhiOSwgMHhjYywgMHgwMCwgMHg2MH0KKwor I2VuZGlmIC8qIG1pY3JvYmxhemUtdGRlcC5oICovCmRpZmYgLXVyTnAgLS1l eGNsdWRlICcqLnN3cCcgLS1leGNsdWRlIERFVi1QSEFTRSAtLWV4Y2x1ZGUg LnN2biAtLWV4Y2x1ZGUgQ1ZTIGdkYi9nZGIvTkVXUyBtYi1nZGIvZ2RiL05F V1MKLS0tIGdkYi9nZGIvTkVXUwkyMDA5LTEwLTE0IDExOjE1OjUxLjAwMDAw MDAwMCAtMDcwMAorKysgbWItZ2RiL2dkYi9ORVdTCTIwMDktMTAtMTQgMTk6 MTU6NTcuMDAwMDAwMDAwIC0wNzAwCkBAIC00ODQsNiArNDg0LDExIEBAIExh dHRpY2UgTWljbzMyICAgICAgICAgICAgICAgICAgbG0zMi0qCiB4ODYgRElD T1MJCQlpWzM0NTY3XTg2LSotZGljb3MqCiB4ODZfNjQgRElDT1MJCSAgICAg ICAgeDg2XzY0LSotZGljb3MqCiBTK2NvcmUgMwkJCXNjb3JlLSotKgorWGls aW54IE1pY3JvQmxhemUJCW1pY3JvYmxhemUtKi0qCisKKyogTmV3IFNpbXVs YXRvcnMKKworWGlsaW54IE1pY3JvQmxhemUJCW1pY3JvYmxhemUKIAogKiBU aGUgR0RCIHJlbW90ZSBzdHViLCBnZGJzZXJ2ZXIsIG5vdyBzdXBwb3J0cyB4 ODYgV2luZG93cyBDRQogICAobWluZ3czMmNlKSBkZWJ1Z2dpbmcuCg== --------------070801010100000601080200--