From owner-freebsd-arm@FreeBSD.ORG Mon Dec 21 11:06:51 2009 Return-Path: Delivered-To: freebsd-arm@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B0E8D1065711 for ; Mon, 21 Dec 2009 11:06:51 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 9F2CE8FC1E for ; Mon, 21 Dec 2009 11:06:51 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id nBLB6pqI004026 for ; Mon, 21 Dec 2009 11:06:51 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id nBLB6pVk004024 for freebsd-arm@FreeBSD.org; Mon, 21 Dec 2009 11:06:51 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 21 Dec 2009 11:06:51 GMT Message-Id: <200912211106.nBLB6pVk004024@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-arm@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-arm@FreeBSD.org X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Dec 2009 11:06:51 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o arm/134368 arm [patch] nslu2_led driver for the LEDs on the NSLU2 o arm/134338 arm [patch] Lock GPIO accesses on ixp425 o arm/134092 arm [patch] NSLU.hints contains wrong hints for on board n 3 problems total. From owner-freebsd-arm@FreeBSD.ORG Mon Dec 21 18:33:17 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4E851065693 for ; Mon, 21 Dec 2009 18:33:17 +0000 (UTC) (envelope-from michael@fuckner.net) Received: from dedihh.fuckner.net (dedihh.fuckner.net [81.209.183.161]) by mx1.freebsd.org (Postfix) with ESMTP id 44F518FC1F for ; Mon, 21 Dec 2009 18:33:17 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by dedihh.fuckner.net (Postfix) with ESMTP id E9BEDBCE2; Mon, 21 Dec 2009 19:17:41 +0100 (CET) X-Virus-Scanned: amavisd-new at example.com Received: from dedihh.fuckner.net ([127.0.0.1]) by localhost (dedihh.fuckner.net [127.0.0.1]) (amavisd-new, port 10024) with SMTP id r+kYUJ2WAn6a; Mon, 21 Dec 2009 19:17:37 +0100 (CET) Received: from c64.rebootking.de (e176137004.adsl.alicedsl.de [85.176.137.4]) by dedihh.fuckner.net (Postfix) with ESMTPA id E9E40BCC6; Mon, 21 Dec 2009 19:17:36 +0100 (CET) Message-ID: <4B2FC984.10708@fuckner.net> Date: Mon, 21 Dec 2009 19:16:20 +0000 From: Michael Fuckner User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.1.5) Gecko/20091219 Thunderbird/3.0 MIME-Version: 1.0 To: SAITOU Toshihide References: <1284BB72-0FAC-49E4-86FB-D44D9FD630B0@semihalf.com> <26843206.post@talk.nabble.com> <26846376.post@talk.nabble.com> <20091219.163055.193684234.toshi@ruby.ocn.ne.jp> In-Reply-To: <20091219.163055.193684234.toshi@ruby.ocn.ne.jp> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-arm@freebsd.org Subject: Re: fetch data corruption on local fs [SOLVED] X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Dec 2009 18:33:17 -0000 On 12/19/09 07:30, SAITOU Toshihide wrote: > It seems the patches are already mainlined. > http://www.plugcomputer.org/plugwiki/index.php/Das_U-boot_plug_support > > So, Has anyone success to build the Open U-Boot with > CONFIG_API and booting ubldr? I could just compile it (debian lenny in virtualbox with codesourcery-toolchain) If anyone is interested, you can find the binary here: http://dedi2.fuckner.net/~molli123/temp/u-boot.kwb My current problem is that I don't know how to use openocd on FreeBSD-8. Do I have to config with libftdi or without. USB on 8 still is a little bit strange to me :( Regards, Michael! From owner-freebsd-arm@FreeBSD.ORG Mon Dec 21 22:44:06 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A51781065672 for ; Mon, 21 Dec 2009 22:44:06 +0000 (UTC) (envelope-from xcllnt@mac.com) Received: from asmtpout025.mac.com (asmtpout025.mac.com [17.148.16.100]) by mx1.freebsd.org (Postfix) with ESMTP id 938F18FC0A for ; Mon, 21 Dec 2009 22:44:06 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; charset=us-ascii Received: from macbook-pro.jnpr.net (natint3.juniper.net [66.129.224.36]) by asmtp025.mac.com (Sun Java(tm) System Messaging Server 6.3-8.01 (built Dec 16 2008; 32bit)) with ESMTPSA id <0KV0007XWXT8HM50@asmtp025.mac.com> for freebsd-arm@freebsd.org; Mon, 21 Dec 2009 14:43:57 -0800 (PST) From: Marcel Moolenaar Date: Mon, 21 Dec 2009 14:43:55 -0800 Message-id: <1FE6A0BF-4A65-4C0C-BA0D-2ADEB9A8AF06@mac.com> To: freebsd-arm@freebsd.org X-Mailer: Apple Mail (2.1077) Cc: Subject: panic: _mtx_lock_sleep: recursed on non-recursive mutex pmap @ /nfs/freebsd/base/head/sys/arm/arm/pmap.c:1916 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Dec 2009 22:44:06 -0000 All, I'm trying to run lmbench on a MV78100, but the kernel panics when lmbench tries to detect the amount of physical memory (see below). Does anyone know if I can bypass that check (short-term) and if there are patches floating around to fix the kernel (long-term)? Probing system for available memory: pid 2515 (memsize), uid 0, was killed: out of swap space panic: _mtx_lock_sleep: recursed on non-recursive mutex pmap @ /nfs/freebsd/base/head/sys/arm/arm/pmap.c:1916 KDB: enter: panic [thread pid 2514 tid 100075 ] Stopped at kdb_enter+0x48: ldrb r15, [r15, r15, ror r15]! db> bt Tracing pid 2514 tid 100075 td 0xc3a44480 kdb_enter() at kdb_enter+0x14 scp=0xc0a01758 rlv=0xc09d4a84 (panic+0xa0) rsp=0xd1cb1b48 rfp=0xd1cb1b5c r5=0xc0b9762c r4=0x00000100 panic() at panic+0x1c scp=0xc09d4a00 rlv=0xc09c68cc (_mtx_lock_sleep+0x130) rsp=0xd1cb1b70 rfp=0xd1cb1b88 _mtx_lock_sleep() at _mtx_lock_sleep+0x10 scp=0xc09c67ac rlv=0xc09c69ac (_mtx_lock_flags+0xd4) rsp=0xd1cb1b8c rfp=0xd1cb1bb4 r6=0x00000000 r5=0xc3a35594 r4=0x00000000 _mtx_lock_flags() at _mtx_lock_flags+0x10 scp=0xc09c68e8 rlv=0xc0b51aac (pmap_fault_fixup+0x48) rsp=0xd1cb1bb8 rfp=0xd1cb1bec r10=0x00000001 r8=0xd1cb1c94 r7=0xc3a44480 r6=0x00018000 r5=0xc3a35594 r4=0x00000000 pmap_fault_fixup() at pmap_fault_fixup+0x10 scp=0xc0b51a74 rlv=0xc0b5aca0 (data_abort_handler+0x16c) rsp=0xd1cb1bf0 rfp=0xd1cb1c90 r10=0x00000001 r9=0xd1cb1ef8 r8=0xd1cb1c94 r7=0xc3a44480 r6=0x00018000 r5=0xffff1004 r4=0x00000007 data_abort_handler() at data_abort_handler+0x10 scp=0xc0b5ab44 rlv=0xc0b4c9b4 (address_exception_entry+0x50) rsp=0xd1cb1c94 rfp=0xd1cb1d20 r10=0xc3a35594 r9=0x00019000 r8=0x00002000 r7=0x00018000 r6=0x00001000 r5=0xffff1004 r4=0x00017000 pmap_protect() at pmap_protect+0x10 scp=0xc0b54438 rlv=0xc0b33020 (vmspace_fork+0x420) rsp=0xd1cb1d24 rfp=0xd1cb1d60 r10=0xc3a354e4 r9=0x00008000 r8=0xc3a364e4 r7=0x00000001 r6=0xc3957d80 r5=0xc0eab5e8 r4=0x00000000 vmspace_fork() at vmspace_fork+0x10 scp=0xc0b32c10 rlv=0xc09afb9c (fork1+0x100) rsp=0xd1cb1d64 rfp=0xd1cb1dbc r10=0xc3a9aaf0 r9=0xc3a44480 r8=0x00000014 r7=0xc0c0abf4 r6=0xc3a9c000 r5=0x00000002 r4=0x00000000 fork1() at fork1+0x10 scp=0xc09afaac rlv=0xc09b0d18 (fork+0x24) rsp=0xd1cb1dc0 rfp=0xd1cb1dd8 r10=0xd1cb1eac r9=0x00000000 r8=0xc3a9aaf0 r7=0xc0c0abf4 r6=0x00000002 r5=0xc3a44480 r4=0xc3a44480 fork() at fork+0x10 scp=0xc09b0d04 rlv=0xc0b5b164 (swi_handler+0x128) rsp=0xd1cb1ddc rfp=0xd1cb1ea8 r4=0x00000000 swi_handler() at swi_handler+0x10 scp=0xc0b5b04c rlv=0xc0b4c78c (swi_entry+0x40) rsp=0xd1cb1eac rfp=0xbfffeca0 r10=0x2004da58 r9=0x00000000 r8=0x00000000 r7=0x40000000 r6=0x00000002 r5=0x20000000 r4=0x20000000 db> -- Marcel Moolenaar xcllnt@mac.com From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 08:40:14 2009 Return-Path: Delivered-To: freebsd-arm@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3A594106566B for ; Tue, 22 Dec 2009 08:40:14 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id F41168FC1C for ; Tue, 22 Dec 2009 08:40:13 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id nBM8eDkP026034 for ; Tue, 22 Dec 2009 08:40:13 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id nBM8eDst026033; Tue, 22 Dec 2009 08:40:13 GMT (envelope-from gnats) Resent-Date: Tue, 22 Dec 2009 08:40:13 GMT Resent-Message-Id: <200912220840.nBM8eDst026033@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-arm@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, lukxhzyx Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0A2CC106568B for ; Tue, 22 Dec 2009 08:38:50 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id D5B718FC14 for ; Tue, 22 Dec 2009 08:38:49 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id nBM8cnhP021122 for ; Tue, 22 Dec 2009 08:38:49 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id nBM8cnWa021115; Tue, 22 Dec 2009 08:38:49 GMT (envelope-from nobody) Message-Id: <200912220838.nBM8cnWa021115@www.freebsd.org> Date: Tue, 22 Dec 2009 08:38:49 GMT From: lukxhzyx To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: arm/141874: lukxhzyx X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 08:40:14 -0000 >Number: 141874 >Category: arm >Synopsis: lukxhzyx >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-arm >State: open >Quarter: >Keywords: >Date-Required: >Class: doc-bug >Submitter-Id: current-users >Arrival-Date: Tue Dec 22 08:40:13 UTC 2009 >Closed-Date: >Last-Modified: >Originator: lukxhzyx >Release: lukxhzyx >Organization: lukxhzyx >Environment: lukxhzyx >Description: ugusrkhy http://rhppknvp.com lqikaelp uprxnvgl >How-To-Repeat: lukxhzyx >Fix: lukxhzyx >Release-Note: >Audit-Trail: >Unformatted: From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 09:17:34 2009 Return-Path: Delivered-To: freebsd-arm@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 65AEA106568F; Tue, 22 Dec 2009 09:17:34 +0000 (UTC) (envelope-from brucec@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 3E3238FC0A; Tue, 22 Dec 2009 09:17:34 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id nBM9HYMU062118; Tue, 22 Dec 2009 09:17:34 GMT (envelope-from brucec@freefall.freebsd.org) Received: (from brucec@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id nBM9HYdQ062114; Tue, 22 Dec 2009 09:17:34 GMT (envelope-from brucec) Date: Tue, 22 Dec 2009 09:17:34 GMT Message-Id: <200912220917.nBM9HYdQ062114@freefall.freebsd.org> To: zqvuwxbq@kwoqzhji.com, brucec@FreeBSD.org, freebsd-arm@FreeBSD.org From: brucec@FreeBSD.org Cc: Subject: Re: junk /141874: lukxhzyx X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 09:17:34 -0000 Synopsis: lukxhzyx State-Changed-From-To: open->closed State-Changed-By: brucec State-Changed-When: Tue Dec 22 09:17:16 UTC 2009 State-Changed-Why: spam http://www.freebsd.org/cgi/query-pr.cgi?pr=141874 From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 09:56:37 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7BA3B1065694 for ; Tue, 22 Dec 2009 09:56:37 +0000 (UTC) (envelope-from bounces@nabble.com) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by mx1.freebsd.org (Postfix) with ESMTP id 60C838FC1B for ; Tue, 22 Dec 2009 09:56:37 +0000 (UTC) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1NN1To-0004Hj-VF for freebsd-arm@freebsd.org; Tue, 22 Dec 2009 01:56:36 -0800 Message-ID: <26886004.post@talk.nabble.com> Date: Tue, 22 Dec 2009 01:56:36 -0800 (PST) From: RuiDC To: freebsd-arm@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: ruidc@yahoo.com Subject: Samba Illegal instruction: 4 (core dumped) when running testparm & [sn]mbd with default config X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 09:56:37 -0000 I've posted this to the Samba ML, but given the lack of precedent on i386/amd64 platforms, think this may be FreeBSD & ARM related. I've also posted on FreeBSD forums (Web & Network Services) but no replies as yet. I'm running FreeBSD 8 on a Sheevaplug (ARM5 processor) I compiled and installed Samba 3.3.9 from ports using defaults and defaults for dependencies. I left the smb.conf file untouched, ran testparm and immediately received the coredump. The same happens running smbd and nmbd. Can anyone help me resolve? http://old.nabble.com/file/p26879957/testparm.core.gz testparm.core.gz -- View this message in context: http://old.nabble.com/Samba-Illegal-instruction%3A-4-%28core-dumped%29-when-running-testparm----sn-mbd-with-default-config-tp26886004p26886004.html Sent from the freebsd-arm mailing list archive at Nabble.com. From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 10:58:21 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F2D851065676 for ; Tue, 22 Dec 2009 10:58:21 +0000 (UTC) (envelope-from toshi@ruby.ocn.ne.jp) Received: from smtp.ruby.ocn.ne.jp (ruby.ocn.ne.jp [61.207.12.164]) by mx1.freebsd.org (Postfix) with ESMTP id A19748FC18 for ; Tue, 22 Dec 2009 10:58:21 +0000 (UTC) Received: from localhost (p6194-ipadfx01sizuokaden.shizuoka.ocn.ne.jp [219.160.179.194]) by smtp.ruby.ocn.ne.jp (Postfix) with ESMTP id C241426AA; Tue, 22 Dec 2009 19:58:19 +0900 (JST) Date: Tue, 22 Dec 2009 19:58:05 +0900 (JST) Message-Id: <20091222.195805.92587043.toshi@ruby.ocn.ne.jp> To: michael@fuckner.net From: SAITOU Toshihide In-Reply-To: <4B2FC984.10708@fuckner.net> References: <26846376.post@talk.nabble.com> <20091219.163055.193684234.toshi@ruby.ocn.ne.jp> <4B2FC984.10708@fuckner.net> X-GPG-fingerprint: 34B3 0B6A 8520 F5B0 EBC7 69F6 C055 9F8A 0D49 F8FC X-Mailer: Mew version 6.2.51 on Emacs 22.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: freebsd-arm@freebsd.org Subject: Re: fetch data corruption on local fs [SOLVED] X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 10:58:22 -0000 From: Michael Fuckner Subject: Re: fetch data corruption on local fs [SOLVED] Date: Mon, 21 Dec 2009 19:16:20 +0000 > On 12/19/09 07:30, SAITOU Toshihide wrote: >> It seems the patches are already mainlined. >> http://www.plugcomputer.org/plugwiki/index.php/Das_U-boot_plug_support >> >> So, Has anyone success to build the Open U-Boot with >> CONFIG_API and booting ubldr? > > I could just compile it (debian lenny in virtualbox with > codesourcery-toolchain) > > If anyone is interested, you can find the binary here: > http://dedi2.fuckner.net/~molli123/temp/u-boot.kwb > > My current problem is that I don't know how to use openocd > on FreeBSD-8. Do I have to config with libftdi or > without. USB on 8 still is a little bit strange to me :( I used JTAGkey and OpenOCD 0.1.0 [1] with port devel/libftdi with these configuration. #interface interface ft2232 ft2232_device_desc "Amontec JTAGkey" ft2232_layout jtagkey ft2232_vid_pid 0x0403 0xCFF8 But I know SheevaPlug implements a FT2232 chip in it for JTAG port and latest OpenOCD 0.3.0 has sheevaplug.cfg, so if you can prepare 0.3.0 (possibly need devel/libusb?), maybe you can use as mentioned [2]: % openocd -f /somewhere/sheevaplug.cfg prepare another terminal then: % telnet localhost 4444 haltsheevaplug_init load_image resume 0x00600000 I don't have SheevaPlug and I'm sorry if this is not helpful. [1] http://bsddev.blogspot.com/2009/04/jtag-openocd-freebsd.html [2] http://www.openplug.org/plugwiki/index.php/Das_U-boot_plug_support > Regards, > Michael! SAITOU Toshihide From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 16:39:35 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2630310656A4 for ; Tue, 22 Dec 2009 16:39:35 +0000 (UTC) (envelope-from bounces@nabble.com) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by mx1.freebsd.org (Postfix) with ESMTP id 091568FC14 for ; Tue, 22 Dec 2009 16:39:34 +0000 (UTC) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1NN7lm-0001g0-I3 for freebsd-arm@freebsd.org; Tue, 22 Dec 2009 08:39:34 -0800 Message-ID: <26890903.post@talk.nabble.com> Date: Tue, 22 Dec 2009 08:39:34 -0800 (PST) From: RuiDC To: freebsd-arm@freebsd.org In-Reply-To: <26886004.post@talk.nabble.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: ruidc@yahoo.com References: <26886004.post@talk.nabble.com> Subject: Re: Samba Illegal instruction: 4 (core dumped) when running testparm & [sn]mbd with default config X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 16:39:35 -0000 more reason to suspect ARM issue: http://lists.samba.org/archive/samba/2009-December/152664.html although from googling for the warning, this is perhaps lack of portability in the code, eg: http://embdev.net/topic/129244 and http://www.embeddedrelated.com/usenet/embedded/show/35703-1.php Can anyone more knowledgeable comment? -- View this message in context: http://old.nabble.com/Samba-Illegal-instruction%3A-4-%28core-dumped%29-when-running-testparm----sn-mbd-with-default-config-tp26886004p26890903.html Sent from the freebsd-arm mailing list archive at Nabble.com. From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 21:10:09 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D1A5A1065692 for ; Tue, 22 Dec 2009 21:10:09 +0000 (UTC) (envelope-from embedpro@gmail.com) Received: from mail-yw0-f172.google.com (mail-yw0-f172.google.com [209.85.211.172]) by mx1.freebsd.org (Postfix) with ESMTP id 913928FC0A for ; Tue, 22 Dec 2009 21:10:09 +0000 (UTC) Received: by ywh2 with SMTP id 2so6844065ywh.27 for ; Tue, 22 Dec 2009 13:10:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=AtscL8BtpKsTRU3b3fsn8TEtMH7733ZNU/6l8EA+5EE=; b=bU1TYleVzz45EXmFaduqicSDvfiKLpo0drReSbURrq5/wDHvm3rFI8A7YVCckSbUG0 9+yP/7ohWUA42VBTyLbEMIzgS0aRVU9tG8WS5n6UlAdra11Xf0/tMVzVFe1pKMxes/bI mSrsgJtHnpt7lDKaeni9a22ckSFti8QWYTtHk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=VuI4AE6Jz3hUjGyg1xrE+xorwnw2Z/VrifiQZ6asZa5cMmQ1LHy95itbNXaQU7xrRS cwuERqjGuuIuWnmCF0WSEsV50vHyr4I5sJzTtCBJPsquinUt00CsKXn1HDy1nFzeO7Sh P8+8ZaIaNI3UnNyv0zd2jRxIstR/zlNjm1Uyg= MIME-Version: 1.0 Received: by 10.150.142.13 with SMTP id p13mr13989812ybd.25.1261514545207; Tue, 22 Dec 2009 12:42:25 -0800 (PST) In-Reply-To: <26886004.post@talk.nabble.com> References: <26886004.post@talk.nabble.com> Date: Tue, 22 Dec 2009 15:42:25 -0500 Message-ID: From: L D To: RuiDC Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-arm@freebsd.org Subject: Re: Samba Illegal instruction: 4 (core dumped) when running testparm & [sn]mbd with default config X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 21:10:09 -0000 On Tue, Dec 22, 2009 at 4:56 AM, RuiDC wrote: > > I've posted this to the Samba ML, but given the lack of precedent on > i386/amd64 platforms, think this may be FreeBSD & ARM related. I've also > posted on FreeBSD forums (Web & Network Services) but no replies as yet. > > I'm running FreeBSD 8 on a Sheevaplug (ARM5 processor) > I compiled and installed Samba 3.3.9 from ports using defaults and defaults > for dependencies. > I left the smb.conf file untouched, ran testparm and immediately received > the coredump. > The same happens running smbd and nmbd. I remember seeing this a long time ago on version 3.0.x. on NetBSD for all arm machines I tried (Orion, IXP425, PXA270, PXA255, Strongarm). I did not spend much time on it - just tested it on different machines - and never got it to work. From owner-freebsd-arm@FreeBSD.ORG Tue Dec 22 21:29:44 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D011A106568F for ; Tue, 22 Dec 2009 21:29:44 +0000 (UTC) (envelope-from bounces@nabble.com) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by mx1.freebsd.org (Postfix) with ESMTP id B224E8FC22 for ; Tue, 22 Dec 2009 21:29:44 +0000 (UTC) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1NNCIa-0007ET-8D for freebsd-arm@freebsd.org; Tue, 22 Dec 2009 13:29:44 -0800 Message-ID: <26894643.post@talk.nabble.com> Date: Tue, 22 Dec 2009 13:29:44 -0800 (PST) From: RuiDC To: freebsd-arm@freebsd.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: ruidc@yahoo.com References: <26886004.post@talk.nabble.com> Subject: Re: Samba Illegal instruction: 4 (core dumped) when running testparm & [sn]mbd with default config X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Dec 2009 21:29:44 -0000 L D-2 wrote: > > I remember seeing this a long time ago on version 3.0.x. on NetBSD for > all arm machines I tried (Orion, IXP425, PXA270, PXA255, Strongarm). I > did not spend much time on it - just tested it on different machines - > and never got it to work. > ...shame, given that piece of information, and that Samba developers may not have access to ARM hardware http://lists.samba.org/archive/samba/2009-December/152672.html then that may be the end of my FreeBSD on ARM adventures. -- View this message in context: http://old.nabble.com/Samba-Illegal-instruction%3A-4-%28core-dumped%29-when-running-testparm----sn-mbd-with-default-config-tp26886004p26894643.html Sent from the freebsd-arm mailing list archive at Nabble.com. From owner-freebsd-arm@FreeBSD.ORG Wed Dec 23 00:45:08 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 270BD106566B for ; Wed, 23 Dec 2009 00:45:08 +0000 (UTC) (envelope-from embedpro@gmail.com) Received: from mail-yx0-f171.google.com (mail-yx0-f171.google.com [209.85.210.171]) by mx1.freebsd.org (Postfix) with ESMTP id D83AA8FC0C for ; Wed, 23 Dec 2009 00:45:07 +0000 (UTC) Received: by yxe1 with SMTP id 1so6454548yxe.3 for ; Tue, 22 Dec 2009 16:45:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=aDJqdVA6niJ+MTAs3vtwhdLHqQ8RWRukIZvw5wuq2fc=; b=iSXjovuA/naD6Jvd6H0vVP9gJLN3Hj4JXiswzGsEkX1c4MBz1v1s9Ai3nYRsFCkDtm 9kdnoOo7F/YOZv+soYsGqX5xcR8zMVH4dkaq7Pv3FYDajbawANMSr1WKzcLXGFKvCPjI GpdKMEQRe1WFvMmoEEyaCdBJHIX3/hmB1oW68= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=Pc/HSB7D+7Jcxp8OGWCnna1TUVVoNxcQveDj8irzc5jVN28vqdB0L44kfg/4Da9Z9s hEog/G/xfLKayZxAGjfcMdM60HyDVI4x5tFsR7BSM3Duj33xGgLQb+9JZpKgSUn5cRxx cRBDDo72Mvp0z3FibF6pqtcufwfqDNn5IBTNo= MIME-Version: 1.0 Received: by 10.150.19.21 with SMTP id 21mr14287817ybs.291.1261529094640; Tue, 22 Dec 2009 16:44:54 -0800 (PST) In-Reply-To: <26894643.post@talk.nabble.com> References: <26886004.post@talk.nabble.com> <26894643.post@talk.nabble.com> Date: Tue, 22 Dec 2009 19:44:54 -0500 Message-ID: From: L D To: RuiDC Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-arm@freebsd.org Subject: Re: Samba Illegal instruction: 4 (core dumped) when running testparm & [sn]mbd with default config X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Dec 2009 00:45:08 -0000 On Tue, Dec 22, 2009 at 4:29 PM, RuiDC wrote: > > > L D-2 wrote: >> >> I remember seeing this a long time ago on version 3.0.x. on NetBSD for >> all arm machines I tried (Orion, IXP425, PXA270, PXA255, Strongarm). I >> did not spend much time on it - just tested it on different machines - >> and never got it to work. >> > ...shame, given that piece of information, and that Samba developers may not > have access to ARM hardware I think the Debian ARM project has hardware access for developers. See http://www.debian.org/ports/arm. Maybe you could ask about Samba on their mailing lists. If it works on Debian ARM you could try to rebuild their tree on your box ... or your tree on a Debian ARM box. From owner-freebsd-arm@FreeBSD.ORG Wed Dec 23 11:12:09 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2F28A106568B for ; Wed, 23 Dec 2009 11:12:09 +0000 (UTC) (envelope-from bounces@nabble.com) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by mx1.freebsd.org (Postfix) with ESMTP id 102008FC14 for ; Wed, 23 Dec 2009 11:12:08 +0000 (UTC) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1NNP8S-0003Cv-E7 for freebsd-arm@freebsd.org; Wed, 23 Dec 2009 03:12:08 -0800 Message-ID: <26897662.post@talk.nabble.com> Date: Wed, 23 Dec 2009 03:12:08 -0800 (PST) From: RuiDC To: freebsd-arm@freebsd.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: ruidc@yahoo.com References: <26886004.post@talk.nabble.com> <26894643.post@talk.nabble.com> Subject: Re: Samba Illegal instruction: 4 (core dumped) when running testparm & [sn]mbd with default config X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Dec 2009 11:12:09 -0000 the samba core developer - Volker Lendecke has managed to get the testparm executable to work by changing the LDFLAGS to remove -pie I've tried the following: make rmconfig make config CONFIGURE_ARGS+= --enable-pie=no make CONFIGURE_ARGS+= --enable-pie=no but this does not seem to pass down to config and make, extract from output: ... checking for -pie and -fPIE... yes ... Using FLAGS = -I/usr/ports/net/samba33/work/samba-3.3.9/source/iniparser/src -Iinclude ... PICFLAG = -fPIC -DPIC LIBS = -lcrypt -lexecinfo -liconv LDFLAGS = -pie -Wl,-z,relro -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib -L./bin Does anybody know how to pass the enable-pie=no option through ports for this one port? -- View this message in context: http://old.nabble.com/Samba-Illegal-instruction%3A-4-%28core-dumped%29-when-running-testparm----sn-mbd-with-default-config-tp26886004p26897662.html Sent from the freebsd-arm mailing list archive at Nabble.com. From owner-freebsd-arm@FreeBSD.ORG Fri Dec 25 17:48:38 2009 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 321C81065670 for ; Fri, 25 Dec 2009 17:48:38 +0000 (UTC) (envelope-from yohanes@gmail.com) Received: from mail-pw0-f44.google.com (mail-pw0-f44.google.com [209.85.160.44]) by mx1.freebsd.org (Postfix) with ESMTP id E7DD68FC15 for ; Fri, 25 Dec 2009 17:48:37 +0000 (UTC) Received: by pwi15 with SMTP id 15so5920175pwi.3 for ; Fri, 25 Dec 2009 09:48:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :from:date:message-id:subject:to:content-type; bh=3stUmjiEnr0x/f3xZsapA+VSJAoo30cTeepX426ChQ4=; b=ThYlNKuJAsFWdaZuM86V2d5+jnSVCuR/D43IYwgrHd5l25VcBSxRuuT2OYclix9mYU UYV1NkLTK24Ym1Dl92I+N/jmCVP/SRmPq11qVdpbLwCQLIiJWJqlSMXmvntG20xzBALO VRrHp0OnA4u8czzG7qGrJjZRr12uVgBOVpj68= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; b=gcfGQQ4Yg68MCKN/XxIIZfpPQizwQn1vVySe5d7kezABXBmSiAV29aA5KqlJHLPV6u j01h2Zl9BiuxexNpMMXyHZjN/aG7N5vLv65gHRHnhUeg0AftC0F6XaIGxFe3AMg0QMXe WCoB/tsmuOdsOL6jFa1D0kAazqIxB10c2fQlk= MIME-Version: 1.0 Received: by 10.114.18.23 with SMTP id 23mr8647225war.171.1261763317144; Fri, 25 Dec 2009 09:48:37 -0800 (PST) In-Reply-To: <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com> References: <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com> From: Yohanes Nugroho Date: Sat, 26 Dec 2009 00:48:17 +0700 Message-ID: <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com> To: freebsd-arm@freebsd.org Content-Type: multipart/mixed; boundary=001636b2adb14f1efd047b912a10 Subject: Re: CNS11XX FreeBSD port completed X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Dec 2009 17:48:38 -0000 --001636b2adb14f1efd047b912a10 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, To make it easy for others to read the changes I have made, attached is the diff version against SVN head. There is one change that may be should not be commited. In vfs_mount.c, I added pause("WAIT", hz * 10); That line can be removed if the patch from this: http://lists.freebsd.org/pipermail/freebsd-current/2009-October/012361.html is applied --=20 Regards Yohanes http://yohan.es/ On Fri, Dec 11, 2009 at 9:27 PM, Yohanes Nugroho wrote: > Hi, > > Today I have "completed" the CNS11XX (Cavium Econa ARM formerly known > as StarSemi STR9104) FreeBSD ARM Port. By "complete" I mean I have > written all the drivers (usb, network, and flash). I haven't checked > the correctness of the implementation. The device is a network > attached storage, Emprex NSD-100, sent to me by Bruce Simpson. > > This is my first FreeBSD port, so I think there will be mistakes on my > code. So I am requesting anyone who have time to have a look at the > code, or if you have the same device, may be you can try it. You will > need to solder a serial port to the device to try it. > > From the usability point of view, the port is usable. I can put the > FreeBSD kernel to the flash, and boot it from there with the root > filesystem on a USB disk (the boot loader also supports booting from > tftp, and during the development I boot using tftp). The device can > enter multi user mode, and I can ssh/ftp to the device, and compile > some things on the device itself. > > The only problem left (at least what is visible from user space) is > the slow network speed (2 megabyte per second, while the linux version > is around 3.8 megabyte per second). Pyun YongHyeon have helped me a > lot with the network driver (I am currently asking him to have a final > look at the driver). I have tried following all of his suggestions to > make a better (more correct driver), and I suspect the problem is not > on the network driver itself. > > I am suspecting that the problem is in pmap. There has been several > pmap related problems lately (see > http://lists.freebsd.org/pipermail/freebsd-arm/2009-October/002030.html). > It is also possible that the pmap code is now fine, and I have made > errors when porting the NetBSD CPU code for FA526 to FreeBSD. > > If I compile my current code with the latest code from HEAD, and > activated WITNESS and DIAGNOSTIC i will get the error at err-1.txt, > and =C2=A0If I activated WITNESS, DIAGNOSTIC and INVARIANT i got this the > message in err-2.txt. With the same options I didn't get this error > several months ago . > > My code is available at > > http://p4db.freebsd.org/depotTreeBrowser.cgi?FSPC=3D//depot/projects/str9= 1xx/src/sys/arm/econa&HIDEDEL=3DNO > > plus additional code from to support FA526 CPU adapted from NetBSD: > > http://p4db.freebsd.org/fileLogView.cgi?FSPC=3D//depot/projects/str91xx/s= rc/sys/arm/arm/cpufunc_asm_fa526.S > http://p4db.freebsd.org/fileViewer.cgi?FSPC=3D//depot/projects/str91xx/sr= c/sys/arm/arm/cpufunc.c > > Instruction to compile, and write to flash using dd to cfi0 is available = at: > > http://tinyhack.com/2009/09/28/cnx11xxstr91xx-freebsd-progress/ > http://tinyhack.com/2009/12/11/cns11xx-freebsd-port-completed/ > > -- > Regards > Yohanes > http://yohan.es/ > --001636b2adb14f1efd047b912a10 Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx.diff" Content-Disposition: attachment; filename="cns11xx.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g3n98p8t2 SW5kZXg6IHN5cy9hcm0vYXJtL2VsZl90cmFtcG9saW5lLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Fy bS9hcm0vZWxmX3RyYW1wb2xpbmUuYwkocmV2aXNpb24gMjAwOTg4KQorKysgc3lzL2FybS9hcm0v ZWxmX3RyYW1wb2xpbmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmlu ZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVk KENQVV9BUk05KQogI2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3di aW52X2FsbAorI2VsaWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3di aW52X2FsbAlmYTUyNl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUp CiAjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2Fs bAogI2VsaWYgZGVmaW5lZChDUFVfQVJNMTApCkluZGV4OiBzeXMvYXJtL2FybS9jcHVmdW5jLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc3lzL2FybS9hcm0vY3B1ZnVuYy5jCShyZXZpc2lvbiAyMDA5ODgpCisr KyBzeXMvYXJtL2FybS9jcHVmdW5jLmMJKHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMg QEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBjcHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9Y U0NBTEVfODEzNDIgKi8KKworCisjaWYgZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1 bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisJCisJLmNm X2lkCQkJPSBjcHVmdW5jX2lkLAorCS5jZl9jcHdhaXQJCT0gY3B1ZnVuY19udWxsb3AsCisKKwkv KiBNTVUgZnVuY3Rpb25zICovCisKKwkuY2ZfY29udHJvbAkJPSBjcHVmdW5jX2NvbnRyb2wsCisJ LmNmX2RvbWFpbnMJCT0gY3B1ZnVuY19kb21haW5zLAorCS5jZl9zZXR0dGIJCT0gZmE1MjZfc2V0 dHRiLAorCS5jZl9mYXVsdHN0YXR1cwkJPSBjcHVmdW5jX2ZhdWx0c3RhdHVzLAorCS5jZl9mYXVs dGFkZHJlc3MJPSBjcHVmdW5jX2ZhdWx0YWRkcmVzcywKKworCS8qIFRMQiBmdW5jdGlvbnMgKi8K KworCS5jZl90bGJfZmx1c2hJRAkJPSBhcm12NF90bGJfZmx1c2hJRCwKKwkuY2ZfdGxiX2ZsdXNo SURfU0UJPSBmYTUyNl90bGJfZmx1c2hJRF9TRSwKKwkuY2ZfdGxiX2ZsdXNoSQkJPSBhcm12NF90 bGJfZmx1c2hJLAorCS5jZl90bGJfZmx1c2hJX1NFCT0gZmE1MjZfdGxiX2ZsdXNoSV9TRSwKKwku Y2ZfdGxiX2ZsdXNoRAkJPSBhcm12NF90bGJfZmx1c2hELAorCS5jZl90bGJfZmx1c2hEX1NFCT0g YXJtdjRfdGxiX2ZsdXNoRF9TRSwKKworCS8qIENhY2hlIG9wZXJhdGlvbnMgKi8KKworCS5jZl9p Y2FjaGVfc3luY19hbGwJPSBmYTUyNl9pY2FjaGVfc3luY19hbGwsCisJLmNmX2ljYWNoZV9zeW5j X3JhbmdlCT0gZmE1MjZfaWNhY2hlX3N5bmNfcmFuZ2UsCisKKwkuY2ZfZGNhY2hlX3diaW52X2Fs bAk9IGZhNTI2X2RjYWNoZV93Ymludl9hbGwsCisJLmNmX2RjYWNoZV93Ymludl9yYW5nZQk9IGZh NTI2X2RjYWNoZV93Ymludl9yYW5nZSwKKwkuY2ZfZGNhY2hlX2ludl9yYW5nZQk9IGZhNTI2X2Rj YWNoZV9pbnZfcmFuZ2UsCisJLmNmX2RjYWNoZV93Yl9yYW5nZQk9IGZhNTI2X2RjYWNoZV93Yl9y YW5nZSwKKworCS5jZl9pZGNhY2hlX3diaW52X2FsbAk9IGZhNTI2X2lkY2FjaGVfd2JpbnZfYWxs LAorCS5jZl9pZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfaWRjYWNoZV93Ymludl9yYW5nZSwK KworCisJLmNmX2wyY2FjaGVfd2JpbnZfYWxsID0gY3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2Fj aGVfd2JpbnZfcmFuZ2UgPSAodm9pZCAqKWNwdWZ1bmNfbnVsbG9wLAorCS5jZl9sMmNhY2hlX2lu dl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfd2JfcmFuZ2Ug PSAodm9pZCAqKWNwdWZ1bmNfbnVsbG9wLAorCisKKwkvKiBPdGhlciBmdW5jdGlvbnMgKi8KKwor CS5jZl9mbHVzaF9wcmVmZXRjaGJ1Zgk9IGZhNTI2X2ZsdXNoX3ByZWZldGNoYnVmLAorCS5jZl9k cmFpbl93cml0ZWJ1Zgk9IGFybXY0X2RyYWluX3dyaXRlYnVmLAorCS5jZl9mbHVzaF9icm5jaHRn dF9DCT0gY3B1ZnVuY19udWxsb3AsCisJLmNmX2ZsdXNoX2JybmNodGd0X0UJPSBmYTUyNl9mbHVz aF9icm5jaHRndF9FLAorCisJLmNmX3NsZWVwCQk9IGZhNTI2X2NwdV9zbGVlcCwKKworCS8qIFNv ZnQgZnVuY3Rpb25zICovCisKKwkuY2ZfZGF0YWFidF9maXh1cAk9IGNwdWZ1bmNfbnVsbF9maXh1 cCwKKwkuY2ZfcHJlZmV0Y2hhYnRfZml4dXAJPSBjcHVmdW5jX251bGxfZml4dXAsCisKKwkuY2Zf Y29udGV4dF9zd2l0Y2gJPSBmYTUyNl9jb250ZXh0X3N3aXRjaCwKKworCS5jZl9zZXR1cAkJPSBm YTUyNl9zZXR1cAorfTsgICAgICAgICAgCisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogLyoK ICAqIEdsb2JhbCBjb25zdGFudHMgYWxzbyB1c2VkIGJ5IGxvY29yZS5zCiAgKi8KQEAgLTc5Myw2 ICs4NjAsNyBAQAogICBkZWZpbmVkIChDUFVfQVJNOUUpIHx8IGRlZmluZWQgKENQVV9BUk0xMCkg fHwJCQkgICAgICAgXAogICBkZWZpbmVkKENQVV9YU0NBTEVfODAyMDApIHx8IGRlZmluZWQoQ1BV X1hTQ0FMRV84MDMyMSkgfHwJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxFX1BYQTJYMCkg fHwgZGVmaW5lZChDUFVfWFNDQUxFX0lYUDQyNSkgfHwJICAgICAgIFwKKyAgZGVmaW5lZChDUFVf RkE1MjYpIHx8CQkJCQkgICAgICAgXAogICBkZWZpbmVkKENQVV9YU0NBTEVfODAyMTkpIHx8IGRl ZmluZWQoQ1BVX1hTQ0FMRV84MTM0MikKIAogc3RhdGljIHZvaWQgZ2V0X2NhY2hldHlwZV9jcDE1 KHZvaWQpOwpAQCAtMTA3Myw2ICsxMTQxLDE5IEBACiAJCWdvdG8gb3V0OwogCX0KICNlbmRpZgkv KiBDUFVfU0ExMTEwICovCisjaWZkZWYgQ1BVX0ZBNTI2CisJaWYgKGNwdXR5cGUgPT0gQ1BVX0lE X0ZBNTI2KSB7CisJCWNwdWZ1bmNzID0gZmE1MjZfY3B1ZnVuY3M7CisJCWNwdV9yZXNldF9uZWVk c192NF9NTVVfZGlzYWJsZSA9IDE7CS8qIFNBIG5lZWRzIGl0CSovCisJCWdldF9jYWNoZXR5cGVf Y3AxNSgpOworCQlwbWFwX3B0ZV9pbml0X2dlbmVyaWMoKTsKKworCQkvKiBVc2UgcG93ZXJzYXZl IG9uIHRoaXMgQ1BVLiAqLworCQljcHVfZG9fcG93ZXJzYXZlID0gMTsKKworCQlnb3RvIG91dDsK Kwl9CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCiAjaWZkZWYgQ1BVX0lYUDEyWDAKICAgICAgICAg aWYgKGNwdXR5cGUgPT0gQ1BVX0lEX0lYUDEyMDApIHsKICAgICAgICAgICAgICAgICBjcHVmdW5j cyA9IGl4cDEyeDBfY3B1ZnVuY3M7CkBAIC0xNTQ3LDcgKzE2MjgsOCBAQAogICBkZWZpbmVkKENQ VV9YU0NBTEVfODAyMDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV84MDMyMSkgfHwJCVwKICAgZGVm aW5lZChDUFVfWFNDQUxFX1BYQTJYMCkgfHwgZGVmaW5lZChDUFVfWFNDQUxFX0lYUDQyNSkgfHwJ CVwKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEz NDIpIHx8IFwKLSAgZGVmaW5lZChDUFVfQVJNMTApIHx8ICBkZWZpbmVkKENQVV9BUk0xMSkKKyAg ZGVmaW5lZChDUFVfQVJNMTApIHx8ICBkZWZpbmVkKENQVV9BUk0xMSkgfHwgXAorICBkZWZpbmVk KENQVV9GQTUyNikKIAogI2RlZmluZSBJR04JMAogI2RlZmluZSBPUgkxCkBAIC0yMDEzLDYgKzIw OTUsNjAgQEAKIH0KICNlbmRpZgkvKiBDUFVfU0ExMTAwIHx8IENQVV9TQTExMTAgKi8KIAorI2lm IGRlZmluZWQoQ1BVX0ZBNTI2KQorc3RydWN0IGNwdV9vcHRpb24gZmE1MjZfb3B0aW9uc1tdID0g eworI2lmZGVmIENPTVBBVF8xMgorCXsgIm5vY2FjaGUiLAkJSUdOLCBCSUMsIChDUFVfQ09OVFJP TF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAibm93cml0ZWJ1ZiIs CQlJR04sIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKyNlbmRpZgkvKiBDT01QQVRf MTIgKi8KKwl7ICJjcHUuY2FjaGUiLAkJQklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUg fCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1Lm5vY2FjaGUiLAlPUiwgIEJJQywg KENQVV9DT05UUk9MX0lDX0VOQUJMRSB8IENQVV9DT05UUk9MX0RDX0VOQUJMRSkgfSwKKwl7ICJj cHUud3JpdGVidWYiLAlCSUMsIE9SLCAgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7ICJj cHUubm93cml0ZWJ1ZiIsCU9SLCAgQklDLCBDUFVfQ09OVFJPTF9XQlVGX0VOQUJMRSB9LAorCXsg TlVMTCwJCQlJR04sIElHTiwgMCB9Cit9OworCit2b2lkCitmYTUyNl9zZXR1cChjaGFyICphcmdz KQoreworCWludCBjcHVjdHJsLCBjcHVjdHJsbWFzazsKKworCWNwdWN0cmwgPSBDUFVfQ09OVFJP TF9NTVVfRU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xf MzJCRF9FTkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9J Q19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9F TkFCTEUgfCBDUFVfQ09OVFJPTF9MQUJUX0VOQUJMRTsKKwljcHVjdHJsbWFzayA9IENQVV9DT05U Uk9MX01NVV9FTkFCTEUgfCBDUFVfQ09OVFJPTF8zMkJQX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJP TF8zMkJEX0VOQUJMRSB8IENQVV9DT05UUk9MX1NZU1RfRU5BQkxFCisJCSB8IENQVV9DT05UUk9M X0lDX0VOQUJMRSB8IENQVV9DT05UUk9MX0RDX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9XQlVG X0VOQUJMRSB8IENQVV9DT05UUk9MX1JPTV9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfQkVORF9F TkFCTEUgfCBDUFVfQ09OVFJPTF9BRkxUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9MQUJUX0VO QUJMRSB8IENQVV9DT05UUk9MX0JQUkRfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0NQQ0xLIHwg Q1BVX0NPTlRST0xfVkVDUkVMT0M7CisKKyNpZm5kZWYgQVJNMzJfRElTQUJMRV9BTElHTk1FTlRf RkFVTFRTCisJY3B1Y3RybCB8PSBDUFVfQ09OVFJPTF9BRkxUX0VOQUJMRTsKKyNlbmRpZgorCisJ Y3B1Y3RybCA9IHBhcnNlX2NwdV9vcHRpb25zKGFyZ3MsIGZhNTI2X29wdGlvbnMsIGNwdWN0cmwp OworCisjaWZkZWYgX19BUk1FQl9fCisJY3B1Y3RybCB8PSBDUFVfQ09OVFJPTF9CRU5EX0VOQUJM RTsKKyNlbmRpZgorCisJaWYgKHZlY3Rvcl9wYWdlID09IEFSTV9WRUNUT1JTX0hJR0gpCisJCWNw dWN0cmwgfD0gQ1BVX0NPTlRST0xfVkVDUkVMT0M7CisKKwkvKiBDbGVhciBvdXQgdGhlIGNhY2hl ICovCisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBTZXQgdGhlIGNvbnRyb2wgcmVn aXN0ZXIgKi8gICAgCisJLy9jdXJjcHUoKS0+Y2lfY3RybCA9IGNwdWN0cmw7CisJY3RybCA9IGNw dWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9CisjZW5kaWYJLyog Q1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBzdHJ1Y3QgY3B1X29w dGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJQklDLCBPUiwgIChD UFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCkluZGV4OiBz eXMvYXJtL2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJt L2NwdWZ1bmNfYXNtX2ZhNTI2LlMJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2FybS9jcHVmdW5j X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOSBAQAorLyoJJE5ldEJTRDog Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQJ Ki8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5j LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBm cm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkg TWF0dCBUaG9tYXMgPG1hdHRAM2FtLXNvZnR3YXJlLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQg Q09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5E QVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq LworCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjZGVmaW5lCUNBQ0hFTElORV9TSVpF CTE2CisKK0VOVFJZKGZhNTI2X3NldHR0YikKKwltb3YJcjEsICMwCisJbWNyCXAxNSwgMCwgcjEs IGM3LCBjMTQsIDAJLyogY2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCBy MSwgYzcsIGM1LCAwCS8qIGludmFsaWRhdGUgSSQgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGM1 LCA2CS8qIGludmFsaWRhdGUgQlRCICovCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJLyog ZHJhaW4gd3JpdGUgYW5kIGZpbGwgYnVmZmVyICovCisKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMw LCAwCS8qIFdyaXRlIHRoZSBUVEIgKi8gCisKKwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRU QiB3ZSBtdXN0IGZsdXNoIHRoZSBUTEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCS8q IGludmFsaWRhdGUgSStEIFRMQiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxpbmUgaXMg ZW1wdGllZCAqLworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgorCisvKgor ICogVExCIGZ1bmN0aW9ucworICovCitFTlRSWShmYTUyNl90bGJfZmx1c2hJRF9TRSkKKwltY3IJ cDE1LCAwLCByMCwgYzgsIGM3LCAxCS8qIGZsdXNoIFV0bGIgc2luZ2xlIGVudHJ5ICovCisJbW92 CXBjLCBscgorCisvKgorICogVExCIGZ1bmN0aW9ucworICovCitFTlRSWShmYTUyNl90bGJfZmx1 c2hJX1NFKQorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzUsIDEJLyogZmx1c2ggSXRsYiBzaW5nbGUg ZW50cnkgKi8KKwltb3YJcGMsIGxyCisKK0VOVFJZKGZhNTI2X2NwdV9zbGVlcCkKKwltb3YJcjAs ICMwCisvKglub3AKKwlub3AqLworCS8vbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNQkvLyBFbnRl ciBzbGVlcCBtb2RlID8gaW52YWxpZGF0ZSBpc2NyYXRjcGFkIHJhbSovCisJbWNyCXAxNSwgMCwg cjAsIGM3LCBjMCwgNAkJLyogV2FpdCBmb3IgaW50ZXJydXB0IChJRExFIG1vZGUpCSovCisJbW92 CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1ZikKKwltb3YJcjAsICMwCisJ bWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkvKiBQcmUtZmV0Y2ggZmx1c2ggKi8KKwltb3YJcGMs IGxyCisKKy8qCisgKiBDYWNoZSBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfaWRjYWNoZV93 Ymludl9hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCS8qIGNs ZWFuIGFuZCBpbnZhbGlkYXRlIEQkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkvKiBp bnZhbGlkYXRlIEkkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJhaW4gd3Jp dGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9pY2FjaGVfc3luY19hbGwp CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJ JCAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX3diaW52X2FsbCkKKwltb3YJ cjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJLyogY2xlYW4gYW5kIGludmFsaWRh dGUgRCQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZm ZXIgKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBTb2Z0IGZ1bmN0aW9ucworICovCitFTlRSWShm YTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0MDAwCisJYmhzCV9DX0xBQkVM KGZhNTI2X2RjYWNoZV93Ymludl9hbGwpCisKKwlhbmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpF LTEpCisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENBQ0hFTElORV9TSVpFLTEpCisK KzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCS8qIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQk IGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9TSVpFCisJc3VicwlyMSwgcjEsICND QUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyog ZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9kY2FjaGVf d2JfcmFuZ2UpCisJY21wCXIxLCAjMHg0MDAwCisJYmxzCTFmCisKKwltb3YJcjAsICMwCisJbWNy CXAxNSwgMCwgcjAsIGM3LCBjMTAsIDAJLyogY2xlYW4gZW50aXJlIEQkICovCisJYgkzZgorCisx OglhbmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpFLTEpCisJYWRkCXIxLCByMSwgcjIKKwliaWMJ cjAsIHIwLCAjKENBQ0hFTElORV9TSVpFLTEpCisKKzI6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEw LCAxCS8qIGNsZWFuIEQkIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9TSVpFCisJ c3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkyYgorCiszOgltY3IJcDE1LCAwLCBy MCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKK0VO VFJZKGZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UpCisJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0la RS0xKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwgIyhDQUNIRUxJTkVfU0laRS0xKQor CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCS8qIGludmFsaWRhdGUgRCQgc2luZ2xlIGVu dHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9TSVpFCisJc3VicwlyMSwgcjEsICNDQUNI RUxJTkVfU0laRQorCWJoaQkxYgorCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9pZGNhY2hl X3diaW52X3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJocwlfQ19MQUJFTChmYTUyNl9pZGNh Y2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJ cjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKworMToJbWNyCXAx NSwgMCwgcjAsIGM3LCBjMTQsIDEJLyogY2xlYW4gYW5kIGludmFsaWRhdGUgRCQgZW50cnkgKi8K KwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCS8qIGludmFsaWRhdGUgSSQgZW50cnkgKi8KKwlh ZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpF CisJYmhpCTFiCisKKzI6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRl IGJ1ZmZlciAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfaWNhY2hlX3N5bmNfcmFuZ2Up CisJY21wCXIxLCAjMHg0MDAwCisJYmhzCV9DX0xBQkVMKGZhNTI2X2ljYWNoZV9zeW5jX2FsbCkK KworCWFuZAlyMiwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJcjEsIHIxLCByMgorCWJp YwlyMCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKworMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBj MTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCS8q IGludmFsaWRhdGUgSSQgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlz dWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTFiCisKKzI6CW1jcglwMTUsIDAsIHIw LCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIKKworRU5U UlkoZmE1MjZfZmx1c2hfYnJuY2h0Z3RfRSkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAs IGM3LCBjNSwgNgkvKiBpbnZhbGlkYXRlIEJUQiBjYWNoZSAqLworCW1vdglwYywgbHIKKworRU5U UlkoZmE1MjZfY29udGV4dF9zd2l0Y2gpCisJLyoKKwkgKiBDRl9DQUNIRV9QVVJHRV9JRCB3aWxs ICpBTFdBWVMqIGJlIGNhbGxlZCBwcmlvciB0byB0aGlzLgorCSAqIFRodXMgdGhlIGRhdGEgY2Fj aGUgd2lsbCBjb250YWluIG9ubHkga2VybmVsIGRhdGEgYW5kIHRoZQorCSAqIGluc3RydWN0aW9u IGNhY2hlIHdpbGwgY29udGFpbiBvbmx5IGtlcm5lbCBjb2RlLCBhbmQgYWxsCisJICoga2VybmVs IG1hcHBpbmdzIGFyZSBzaGFyZWQgYnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKworCW1jcglwMTUs IDAsIHIwLCBjMiwgYzAsIDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1 cGRhdGVkIHRoZSBUVEIgd2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbW92CXIwLCAjMAorCW1j cglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdGhlIEkrRCB0bGIgKi8KKworCS8qIE1h a2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVtcHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIw LCByMAorCW1vdglwYywgbHIKKwpJbmRleDogc3lzL2FybS9pbmNsdWRlL2NwdWNvbmYuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBzeXMvYXJtL2luY2x1ZGUvY3B1Y29uZi5oCShyZXZpc2lvbiAyMDA5ODgpCisr KyBzeXMvYXJtL2luY2x1ZGUvY3B1Y29uZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3 IEBACiAJCQkgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSArCQkJXAogCQkJIGRlZmluZWQoQ1BV X1hTQ0FMRV84MDMyMSkgKwkJCVwKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfUFhBMlgwKSArCQkJ XAorCQkJIGRlZmluZWQoQ1BVX0ZBNTI2KSArCQkJCVwKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVf SVhQNDI1KSkKIAogLyoKQEAgLTY4LDcgKzY5LDcgQEAKICAqLwogI2lmIChkZWZpbmVkKENQVV9B Uk03VERNSSkgfHwgZGVmaW5lZChDUFVfQVJNOCkgfHwgZGVmaW5lZChDUFVfQVJNOSkgfHwJXAog ICAgICBkZWZpbmVkKENQVV9TQTExMCkgfHwgZGVmaW5lZChDUFVfU0ExMTAwKSB8fCBkZWZpbmVk KENQVV9TQTExMTApIHx8IFwKLSAgICBkZWZpbmVkKENQVV9JWFAxMlgwKSB8fCBkZWZpbmVkKENQ VV9YU0NBTEVfSVhQNDI1KSkKKyAgICAgZGVmaW5lZChDUFVfSVhQMTJYMCkgfHwgZGVmaW5lZChD UFVfWFNDQUxFX0lYUDQyNSkgfHwgZGVmaW5lZChDUFVfRkE1MjYpKQogI2RlZmluZQlBUk1fQVJD SF80CTEKICNlbHNlCiAjZGVmaW5lCUFSTV9BUkNIXzQJMApAQCAtMTI1LDcgKzEyNiw3IEBACiAK ICNpZiAoZGVmaW5lZChDUFVfQVJNNikgfHwgZGVmaW5lZChDUFVfQVJNNykgfHwgZGVmaW5lZChD UFVfQVJNN1RETUkpIHx8CVwKICAgICAgZGVmaW5lZChDUFVfQVJNOCkgfHwgZGVmaW5lZChDUFVf QVJNOSkgfHwgZGVmaW5lZChDUFVfQVJNOUUpIHx8CVwKLSAgICAgZGVmaW5lZChDUFVfQVJNMTAp IHx8IGRlZmluZWQoQ1BVX0FSTTExKSkKKyAgICAgZGVmaW5lZChDUFVfQVJNMTApIHx8IGRlZmlu ZWQoQ1BVX0FSTTExKSB8fCBkZWZpbmVkKENQVV9GQTUyNikpCiAjZGVmaW5lCUFSTV9NTVVfR0VO RVJJQwkJMQogI2Vsc2UKICNkZWZpbmUJQVJNX01NVV9HRU5FUklDCQkwCkluZGV4OiBzeXMvYXJt L2luY2x1ZGUvY3B1ZnVuYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vaW5jbHVkZS9jcHVmdW5j LmgJKHJldmlzaW9uIDIwMDk4OCkKKysrIHN5cy9hcm0vaW5jbHVkZS9jcHVmdW5jLmgJKHdvcmtp bmcgY29weSkKQEAgLTI4Myw2ICsyODMsMjggQEAKIHVfaW50CWFybThfY2xvY2tfY29uZmlnCSh1 X2ludCwgdV9pbnQpOwogI2VuZGlmCiAKKworI2lmZGVmIENQVV9GQTUyNgordm9pZAlmYTUyNl9z ZXR1cAkJKGNoYXIgKmFyZyk7Cit2b2lkCWZhNTI2X3NldHR0YgkJKHVfaW50IHR0Yik7Cit2b2lk CWZhNTI2X2NvbnRleHRfc3dpdGNoCSh2b2lkKTsKK3ZvaWQJZmE1MjZfY3B1X3NsZWVwCQkoaW50 KTsKK3ZvaWQJZmE1MjZfdGxiX2ZsdXNoSV9TRQkodV9pbnQpOwordm9pZAlmYTUyNl90bGJfZmx1 c2hJRF9TRQkodV9pbnQpOwordm9pZAlmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1Zgkodm9pZCk7Cit2 b2lkCWZhNTI2X2ZsdXNoX2JybmNodGd0X0UJKHVfaW50KTsKKwordm9pZAlmYTUyNl9pY2FjaGVf c3luY19hbGwJKHZvaWQpOwordm9pZAlmYTUyNl9pY2FjaGVfc3luY19yYW5nZSh2bV9vZmZzZXRf dCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Ymludl9hbGwJKHZv aWQpOwordm9pZAlmYTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2Uodm1fb2Zmc2V0X3Qgc3RhcnQsIHZt X3NpemVfdCBlbmQpOwordm9pZAlmYTUyNl9kY2FjaGVfaW52X3JhbmdlCSh2bV9vZmZzZXRfdCBz dGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Yl9yYW5nZQkodm1fb2Zm c2V0X3Qgc3RhcnQsIHZtX3NpemVfdCBlbmQpOwordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X2Fs bCh2b2lkKTsKK3ZvaWQJZmE1MjZfaWRjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZzZXRfdCBzdGFy dCwgdm1fc2l6ZV90IGVuZCk7CisjZW5kaWYKKworCiAjaWZkZWYgQ1BVX1NBMTEwCiB2b2lkCXNh MTEwX3NldHVwCQkoY2hhciAqc3RyaW5nKTsKIHZvaWQJc2ExMTBfY29udGV4dF9zd2l0Y2gJKHZv aWQpOwpAQCAtNDQ1LDYgKzQ2Nyw3IEBACiAjaWYgZGVmaW5lZChDUFVfQVJNOSkgfHwgZGVmaW5l ZChDUFVfQVJNOUUpIHx8IGRlZmluZWQoQ1BVX0FSTTEwKSB8fCBcCiAgIGRlZmluZWQoQ1BVX1NB MTEwKSB8fCBkZWZpbmVkKENQVV9TQTExMDApIHx8IGRlZmluZWQoQ1BVX1NBMTExMCkgfHwgXAog ICBkZWZpbmVkKENQVV9YU0NBTEVfODAyMDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV84MDMyMSkg fHwJICAgICBcCisgICAgZGVmaW5lZChDUFVfRkE1MjYpIHx8IFwKICAgZGVmaW5lZChDUFVfWFND QUxFX1BYQTJYMCkgfHwgZGVmaW5lZChDUFVfWFNDQUxFX0lYUDQyNSkgfHwJICAgICBcCiAgIGRl ZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwgZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKQogICAK SW5kZXg6IHN5cy9hcm0vZWNvbmEvZWNvbmFfdmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9l Y29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEvZWNvbmFfdmFy LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAy MDA5IFlvaGFuZXMgTnVncm9obyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVJNX0VDT05B X1ZBUl9ICisjZGVmaW5lIF9BUk1fRUNPTkFfVkFSX0gKKworZXh0ZXJuIGJ1c19zcGFjZV90YWdf dCBvYmlvX3RhZzsKKworc3RydWN0IGVjb25hX3NvZnRjIHsKKwlkZXZpY2VfdCBkZXY7CisJYnVz X3NwYWNlX3RhZ190IHNjX3N0OworCWJ1c19zcGFjZV9oYW5kbGVfdCBzY19zaDsKKwlidXNfc3Bh Y2VfaGFuZGxlX3Qgc2Nfc3lzX3NoOworCXN0cnVjdCBybWFuIHNjX2lycV9ybWFuOworCXN0cnVj dCBybWFuIHNjX21lbV9ybWFuOworfTsKKworc3RydWN0IGVjb25hX2l2YXIgeworCXN0cnVjdCBy ZXNvdXJjZV9saXN0IHJlc291cmNlczsKK307CisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9lY29u YS9maWxlcy5lY29uYQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShy ZXZpc2lvbiAwKQorKysgc3lzL2FybS9lY29uYS9maWxlcy5lY29uYQkocmV2aXNpb24gMCkKQEAg LTAsMCArMSwxNCBAQAorIyAkRnJlZUJTRCAkCithcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMJ c3RhbmRhcmQKK2FybS9lY29uYS9lY29uYV9tYWNoZGVwLmMJCXN0YW5kYXJkCithcm0vZWNvbmEv ZWNvbmEuYwkJCXN0YW5kYXJkCithcm0vZWNvbmEvdGltZXIuYwkJCXN0YW5kYXJkCithcm0vZWNv bmEvdWFydF9idXNfZWMuYwkJb3B0aW9uYWwJdWFydAorYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJ CW9wdGlvbmFsCXVhcnQKK2Rldi91YXJ0L3VhcnRfZGV2X25zODI1MC5jCW9wdGlvbmFsCXVhcnQK K2FybS9hcm0vaXJxX2Rpc3BhdGNoLlMJCXN0YW5kYXJkCithcm0vYXJtL2J1c19zcGFjZV9nZW5l cmljLmMJCXN0YW5kYXJkCithcm0vZWNvbmEvZWhjaV9lYnVzLmMJc3RhbmRhcmQJZWhjaQorYXJt L2Vjb25hL29oY2lfZWMuYwlzdGFuZGFyZAlvaGNpCithcm0vZWNvbmEvaWZfZWNlLmMJCXN0YW5k YXJkCithcm0vZWNvbmEvY2ZpX2J1c19lY29uYS5jCQlvcHRpb25hbAljZmkKSW5kZXg6IHN5cy9h cm0vZWNvbmEvZWNvbmFfbWFjaGRlcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vZWNvbmEvZWNv bmFfbWFjaGRlcC5jCShyZXZpc2lvbiAwKQorKysgc3lzL2FybS9lY29uYS9lY29uYV9tYWNoZGVw LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAwOSBZb2hhbmVzIE51Z3JvaG8KKyAqIENvcHlyaWdodCAoYykgMTk5NC0xOTk4IE1hcmsgQnJp bmljb21iZS4KKyAqIENvcHlyaWdodCAoYykgMTk5NCBCcmluaS4KKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSB3cml0dGVu IGZvciBCcmluaSBieSBNYXJrIEJyaW5pY29tYmUKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2Fy ZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICog ICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEJyaW5pLgor ICogNC4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Ig bWF5IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBCUklOSSBg YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgQlJJTkkgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgIm9wdF9t c2didWYuaCIKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIp OworCisjZGVmaW5lIF9BUk0zMl9CVVNfRE1BX1BSSVZBVEUKKyNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4KKyNp bmNsdWRlIDxzeXMvc2lnbmFsdmFyLmg+CisjaW5jbHVkZSA8c3lzL2ltZ2FjdC5oPgorI2luY2x1 ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8c3lzL2xp bmtlci5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgor I2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8 c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL2NvbnMu aD4KKyNpbmNsdWRlIDxzeXMvYmlvLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg PHN5cy9idWYuaD4KKyNpbmNsdWRlIDxzeXMvZXhlYy5oPgorI2luY2x1ZGUgPHN5cy9rZGIuaD4K KyNpbmNsdWRlIDxzeXMvbXNnYnVmLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZWcuaD4KKyNpbmNs dWRlIDxtYWNoaW5lL2NwdS5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS9w bWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fb2JqZWN0Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5o PgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2VyLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5j bHVkZSA8dm0vdm5vZGVfcGFnZXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BtYXAuaD4KKyNpbmNs dWRlIDxtYWNoaW5lL3ZtcGFyYW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BjYi5oPgorI2luY2x1 ZGUgPG1hY2hpbmUvdW5kZWZpbmVkLmg+CisjaW5jbHVkZSA8bWFjaGluZS9tYWNoZGVwLmg+Cisj aW5jbHVkZSA8bWFjaGluZS9tZXRhZGF0YS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXJtcmVnLmg+ CisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxzeXMvcmVib290Lmg+CisjaW5j bHVkZSAiZWNvbmFfcmVnLmgiCisKKyNkZWZpbmUgS0VSTkVMX1BUX1NZUwkJMAkvKiBQYWdlIHRh YmxlIGZvciBtYXBwaW5nIHByb2MwIHplcm8gcGFnZSAqLworI2RlZmluZSBLRVJORUxfUFRfS0VS TgkJMQorI2RlZmluZSBLRVJORUxfUFRfS0VSTl9OVU0JMjIKKyNkZWZpbmUgS0VSTkVMX1BUX0FG S0VSTkVMCUtFUk5FTF9QVF9LRVJOICsgS0VSTkVMX1BUX0tFUk5fTlVNCS8qIEwyIHRhYmxlIGZv ciBtYXBwaW5nIGFmdGVyIGtlcm5lbCAqLworI2RlZmluZQlLRVJORUxfUFRfQUZLRVJORUxfTlVN CTUKKworLyogdGhpcyBzaG91bGQgYmUgZXZlbmx5IGRpdmlzYWJsZSBieSBQQUdFX1NJWkUgLyBM Ml9UQUJMRV9TSVpFX1JFQUwgKG9yIDQpICovCisjZGVmaW5lIE5VTV9LRVJORUxfUFRTCQkoS0VS TkVMX1BUX0FGS0VSTkVMICsgS0VSTkVMX1BUX0FGS0VSTkVMX05VTSkKKworLyogRGVmaW5lIHZh cmlvdXMgc3RhY2sgc2l6ZXMgaW4gcGFnZXMgKi8KKyNkZWZpbmUgSVJRX1NUQUNLX1NJWkUJMQor I2RlZmluZSBBQlRfU1RBQ0tfU0laRQkxCisjZGVmaW5lIFVORF9TVEFDS19TSVpFCTEKKworZXh0 ZXJuIHVfaW50IGRhdGFfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIHVfaW50IHByZWZl dGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzczsKK2V4dGVybiB1X2ludCB1bmRlZmluZWRfaGFuZGxl cl9hZGRyZXNzOworCitzdHJ1Y3QgcHZfYWRkciBrZXJuZWxfcHRfdGFibGVbTlVNX0tFUk5FTF9Q VFNdOworCitleHRlcm4gdm9pZCAqX2VuZDsKKworZXh0ZXJuIGludCAqZW5kOworCitzdHJ1Y3Qg cGNwdSBfX3BjcHU7CitzdHJ1Y3QgcGNwdSAqcGNwdXAgPSAmX19wY3B1OworCisvKiBQaHlzaWNh bCBhbmQgdmlydHVhbCBhZGRyZXNzZXMgZm9yIHNvbWUgZ2xvYmFsIHBhZ2VzICovCisKK3ZtX3Bh ZGRyX3QgcGh5c19hdmFpbFsxMF07Cit2bV9wYWRkcl90IGR1bXBfYXZhaWxbNF07Cit2bV9vZmZz ZXRfdCBwaHlzaWNhbF9wYWdlczsKKworc3RydWN0IHB2X2FkZHIgc3lzdGVtcGFnZTsKK3N0cnVj dCBwdl9hZGRyIG1zZ2J1ZnB2Oworc3RydWN0IHB2X2FkZHIgaXJxc3RhY2s7CitzdHJ1Y3QgcHZf YWRkciB1bmRzdGFjazsKK3N0cnVjdCBwdl9hZGRyIGFidHN0YWNrOworc3RydWN0IHB2X2FkZHIg a2VybmVsc3RhY2s7CisKK3N0YXRpYyB2b2lkICpib290X2FyZzE7CitzdGF0aWMgdm9pZCAqYm9v dF9hcmcyOworCitzdGF0aWMgc3RydWN0IHRyYXBmcmFtZSBwcm9jMF90ZjsKKworLyogU3RhdGlj IGRldmljZSBtYXBwaW5ncy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1hcF9kZXZtYXAgZWNv bmFfZGV2bWFwW10gPSB7CisJeworCQkvKgorCQkgKiBUaGlzIG1hcHMgRERSIFNEUkFNCisJCSAq LworCQkweDQwMDAwMDAwLCAvKnZpcnR1YWwqLworCQkweDQwMDAwMDAwLCAvKnBoeXNpY2FsKi8K KwkJMHgxMDAwMDAwLCAvKnNpemUqLworCQlWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwKKwkJ UFRFX05PQ0FDSEUsCisJfSwKKwkvKgorCSAqIE1hcCB0aGUgb24tYm9hcmQgZGV2aWNlcyBWQSA9 PSBQQSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlbQorCSAqIHdpdGggdGhlIE1NVSBvbiBvciBv ZmYuCisJICovCisJeworCQkvKgorCQkgKiBUaGlzIG1hcHMgdGhlIGludGVycnVwdCBjb250cm9s bGVyLCB0aGUgVUFSVAorCQkgKiBhbmQgdGhlIHRpbWVyLgorCQkgKi8KKwkJMHg3MDAwMDAwMCwg Lyp2aXJ0dWFsKi8KKwkJMHg3MDAwMDAwMCwgLypwaHlzaWNhbCovCisJCTB4RTAwMDAwMCwgLypz aXplKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0s CisJeworCQkvKgorCQkgKiBPSENJICsgRUhDSQorCQkgKi8KKwkJRUNPTkFfT0hDSV9WQkFTRSwg Lyp2aXJ0dWFsKi8KKwkJRUNPTkFfT0hDSV9QQkFTRSwgLypwaHlzaWNhbCovCisJCUVDT05BX1VT Ql9TSVpFLCAvKnNpemUqLworCQlWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05P Q0FDSEUsCisJfSwKKwl7CisJCS8qCisJCSAqIE5FVAorCQkgKi8KKwkJRUNPTkFfTkVUX1ZCQVNF LCAvKnZpcnR1YWwqLworCQlFQ09OQV9ORVRfUEJBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9O RVRfU0laRSwgLypzaXplIDE2TSovCisJCVZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLAorCQlQ VEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJLyoKKwkJICogQ0ZJCisJCSAqLworCQlFQ09OQV9DRklf VkJBU0UsIC8qdmlydHVhbCovCisJCUVDT05BX0NGSV9QQkFTRSwgLypwaHlzaWNhbCovCisJCUVD T05BX0NGSV9TSVpFLCAvKnNpemUgMTZNKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUs CisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAor CX0KK307CisKKwordm9pZCAqCitpbml0YXJtKHZvaWQgKmFyZywgdm9pZCAqYXJnMikKK3sKKwlz dHJ1Y3QgcHZfYWRkciAga2VybmVsX2wxcHQ7CisJaW50IGxvb3AsIGk7CisJdV9pbnQgbDFwYWdl dGFibGU7CisJdm1fb2Zmc2V0X3QgZnJlZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBhZnRlcmtlcm47 CisJdWludDMyX3QgbWVtc2l6ZTsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl2b2xhdGlsZSB1 aW50MzJfdCAqIGRkciA9ICh1aW50MzJfdCAqKTB4NDAwMDAwMEM7CisKKwlib290X2FyZzEgPSBh cmc7CisJYm9vdF9hcmcyID0gYXJnMjsKKwlib290aG93dG8gPSBSQl9WRVJCT1NFOworCWJvb3Ro b3d0byB8PSAgUkJfU0lOR0xFOworCisJc2V0X2NwdWZ1bmNzKCk7CisJbGFzdGFkZHIgPSBmYWtl X3ByZWxvYWRfbWV0YWRhdGEoKTsKKwlwY3B1X2luaXQocGNwdXAsIDAsIHNpemVvZihzdHJ1Y3Qg cGNwdSkpOworCVBDUFVfU0VUKGN1cnRocmVhZCwgJnRocmVhZDApOworCisKKwlmcmVlbWVtcG9z ID0gKGxhc3RhZGRyICsgUEFHRV9NQVNLKSAmIH5QQUdFX01BU0s7CisJLyogRGVmaW5lIGEgbWFj cm8gdG8gc2ltcGxpZnkgbWVtb3J5IGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgdmFsbG9jX3BhZ2Vz KHZhciwgbnApICAgICAgICAgICAgICAgICAgIFwKKwlhbGxvY19wYWdlcygodmFyKS5wdl92YSwg KG5wKSk7ICAgICAgICAgXAorCSh2YXIpLnB2X3BhID0gKHZhcikucHZfdmEgKyAoS0VSTlBIWVNB RERSIC0gS0VSTlZJUlRBRERSKTsKKworI2RlZmluZSBhbGxvY19wYWdlcyh2YXIsIG5wKQkJCVwK KwkodmFyKSA9IGZyZWVtZW1wb3M7CQlcCisJZnJlZW1lbXBvcyArPSAobnAgKiBQQUdFX1NJWkUp OwkJXAorCW1lbXNldCgoY2hhciAqKSh2YXIpLCAwLCAoKG5wKSAqIFBBR0VfU0laRSkpOworCisJ d2hpbGUgKCgoZnJlZW1lbXBvcyAtIEwxX1RBQkxFX1NJWkUpICYgKEwxX1RBQkxFX1NJWkUgLSAx KSkgIT0gMCkKKwkJZnJlZW1lbXBvcyArPSBQQUdFX1NJWkU7CisJdmFsbG9jX3BhZ2VzKGtlcm5l bF9sMXB0LCBMMV9UQUJMRV9TSVpFIC8gUEFHRV9TSVpFKTsKKwlmb3IgKGxvb3AgPSAwOyBsb29w IDwgTlVNX0tFUk5FTF9QVFM7ICsrbG9vcCkgeworCQlpZiAoIShsb29wICUgKFBBR0VfU0laRSAv IEwyX1RBQkxFX1NJWkVfUkVBTCkpKSB7CisJCQl2YWxsb2NfcGFnZXMoa2VybmVsX3B0X3RhYmxl W2xvb3BdLAorCQkJICAgIEwyX1RBQkxFX1NJWkUgLyBQQUdFX1NJWkUpOworCQl9IGVsc2Ugewor CQkJa2VybmVsX3B0X3RhYmxlW2xvb3BdLnB2X3ZhID0gZnJlZW1lbXBvcyAtCisJCQkgICAgKGxv b3AgJSAoUEFHRV9TSVpFIC8gTDJfVEFCTEVfU0laRV9SRUFMKSkgKgorCQkJICAgIEwyX1RBQkxF X1NJWkVfUkVBTDsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSA9CisJCQkgICAga2Vy bmVsX3B0X3RhYmxlW2xvb3BdLnB2X3ZhIC0gS0VSTlZJUlRBRERSICsKKwkJCSAgICBLRVJOUEhZ U0FERFI7CisJCX0KKwkJaSsrOworCX0KKworCisJLyoKKwkgKiBBbGxvY2F0ZSBhIHBhZ2UgZm9y IHRoZSBzeXN0ZW0gcGFnZSBtYXBwZWQgdG8gVjB4MDAwMDAwMDAKKwkgKiBUaGlzIHBhZ2Ugd2ls bCBqdXN0IGNvbnRhaW4gdGhlIHN5c3RlbSB2ZWN0b3JzIGFuZCBjYW4gYmUKKwkgKiBzaGFyZWQg YnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKwl2YWxsb2NfcGFnZXMoc3lzdGVtcGFnZSwgMSk7CisK KwkvKiBBbGxvY2F0ZSBzdGFja3MgZm9yIGFsbCBtb2RlcyAqLworCXZhbGxvY19wYWdlcyhpcnFz dGFjaywgSVJRX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhhYnRzdGFjaywgQUJUX1NUQUNL X1NJWkUpOworCXZhbGxvY19wYWdlcyh1bmRzdGFjaywgVU5EX1NUQUNLX1NJWkUpOworCXZhbGxv Y19wYWdlcyhrZXJuZWxzdGFjaywgS1NUQUNLX1BBR0VTKTsKKwl2YWxsb2NfcGFnZXMobXNnYnVm cHYsIHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpIC8gUEFHRV9TSVpFKTsKKworCS8qCisJICogTm93 IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEgcGFnZSB0YWJsZQorCSAqIFdlIHN0YXJ0 IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGludG8gdGhlIEwxLgorCSAqIFRoaXMgbWVh bnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5ncyBsYXRlciBvbiBpZiBuZWNlc3NhcnkK KwkgKi8KKwlsMXBhZ2V0YWJsZSA9IGtlcm5lbF9sMXB0LnB2X3ZhOworCisJLyogTWFwIHRoZSBM MiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8KKwlwbWFwX2xpbmtfbDJwdChs MXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwKKwkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJO RUxfUFRfU1lTXSk7CisJZm9yIChpID0gMDsgaSA8IEtFUk5FTF9QVF9LRVJOX05VTTsgaSsrKQor CQlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgS0VSTkJBU0UgKyBpICogTDFfU19TSVpFLAor CQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfS0VSTiArIGldKTsKKwlwbWFwX21hcF9j aHVuayhsMXBhZ2V0YWJsZSwgS0VSTkJBU0UsIFBIWVNBRERSLAorCSAgICgoKHVpbnQzMl90KWxh c3RhZGRyIC0gS0VSTkJBU0UpICsgUEFHRV9TSVpFKSAmIH4oUEFHRV9TSVpFIC0gMSksCisJICAg IFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCWFmdGVya2VybiA9IHJv dW5kX3BhZ2UoKGxhc3RhZGRyICsgTDFfU19TSVpFKSAmIH4oTDFfU19TSVpFIC0gMSkpOworCWZv ciAoaSA9IDA7IGkgPCBLRVJORUxfUFRfQUZLRVJORUxfTlVNOyBpKyspIHsKKwkJcG1hcF9saW5r X2wycHQobDFwYWdldGFibGUsIGFmdGVya2VybiArIGkgKiBMMV9TX1NJWkUsCisJCSAgICAma2Vy bmVsX3B0X3RhYmxlW0tFUk5FTF9QVF9BRktFUk5FTCArIGldKTsKKwl9CisKKwkvKiBNYXAgdGhl IHZlY3RvciBwYWdlLiAqLworCXBtYXBfbWFwX2VudHJ5KGwxcGFnZXRhYmxlLCBBUk1fVkVDVE9S U19ISUdILCBzeXN0ZW1wYWdlLnB2X3BhLAorCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklU RSwgUFRFX0NBQ0hFKTsKKworCisJLyogTWFwIHRoZSBzdGFjayBwYWdlcyAqLworCXBtYXBfbWFw X2NodW5rKGwxcGFnZXRhYmxlLCBpcnFzdGFjay5wdl92YSwgaXJxc3RhY2sucHZfcGEsCisJICAg IElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwg UFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgYWJ0c3RhY2sucHZfdmEs IGFidHN0YWNrLnB2X3BhLAorCSAgICBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1fUFJP VF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdl dGFibGUsIHVuZHN0YWNrLnB2X3ZhLCB1bmRzdGFjay5wdl9wYSwKKwkgICAgVU5EX1NUQUNLX1NJ WkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOwor CXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxzdGFjay5wdl92YSwga2VybmVsc3Rh Y2sucHZfcGEsCisJICAgIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZN X1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwg a2VybmVsX2wxcHQucHZfdmEsIGtlcm5lbF9sMXB0LnB2X3BhLAorCSAgICBMMV9UQUJMRV9TSVpF LCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VUQUJMRSk7CisJcG1hcF9tYXBf Y2h1bmsobDFwYWdldGFibGUsIG1zZ2J1ZnB2LnB2X3ZhLCBtc2didWZwdi5wdl9wYSwKKwkgICAg TVNHQlVGX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCisJ Zm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJcG1hcF9t YXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSwKKwkJICAg IGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSwgTDJfVEFCTEVfU0laRSwKKwkJICAgIFZNX1BS T1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsKKwl9CisKKworCXBtYXBfZGV2 bWFwX2Jvb3RzdHJhcChsMXBhZ2V0YWJsZSwgZWNvbmFfZGV2bWFwKTsKKworCWNwdV9kb21haW5z KChET01BSU5fQ0xJRU5UIDw8IChQTUFQX0RPTUFJTl9LRVJORUwqMikpIHwgRE9NQUlOX0NMSUVO VCk7CisKKwlzZXR0dGIoa2VybmVsX2wxcHQucHZfcGEpOworCisJY3B1X3RsYl9mbHVzaElEKCk7 CisKKwljcHVfZG9tYWlucyhET01BSU5fQ0xJRU5UIDw8IChQTUFQX0RPTUFJTl9LRVJORUwqMikp OworCisJY25pbml0KCk7CisKKwltZW1zaXplID0gMzIqMTAyNCoxMDI0OworCisJc3dpdGNoICgo KCpkZHIpID4+IDQpICYgMHgzKSB7CisJY2FzZSAwOgorCQltZW1zaXplID0gOCoxMDI0KjEwMjQ7 CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWVtc2l6ZSA9IDE2KjEwMjQqMTAyNDsKKwkJYnJlYWs7 CisJY2FzZSAyOgorCQltZW1zaXplID0gMzIqMTAyNCoxMDI0OworCQlicmVhazsKKwljYXNlIDM6 CisJCW1lbXNpemUgPSA2NCoxMDI0KjEwMjQ7CisJCWJyZWFrOworCX0KKworCisJcGh5c21lbSA9 IG1lbXNpemUgLyBQQUdFX1NJWkU7CisKKwkvKgorCSAqIFBhZ2VzIHdlcmUgYWxsb2NhdGVkIGR1 cmluZyB0aGUgc2Vjb25kYXJ5IGJvb3RzdHJhcCBmb3IgdGhlCisJICogc3RhY2tzIGZvciBkaWZm ZXJlbnQgQ1BVIG1vZGVzLgorCSAqIFdlIG11c3Qgbm93IHNldCB0aGUgcjEzIHJlZ2lzdGVycyBp biB0aGUgZGlmZmVyZW50IENQVSBtb2RlcyB0bworCSAqIHBvaW50IHRvIHRoZXNlIHN0YWNrcy4K KwkgKiBTaW5jZSB0aGUgQVJNIHN0YWNrcyB1c2UgU1RNRkQgZXRjLiB3ZSBtdXN0IHNldCByMTMg dG8gdGhlIHRvcCBlbmQKKwkgKiBvZiB0aGUgc3RhY2sgbWVtb3J5LgorCSAqLworCWNwdV9jb250 cm9sKENQVV9DT05UUk9MX01NVV9FTkFCTEUsIENQVV9DT05UUk9MX01NVV9FTkFCTEUpOworCisJ c2V0X3N0YWNrcHRyKFBTUl9JUlEzMl9NT0RFLAorCSAgICBpcnFzdGFjay5wdl92YSArIElSUV9T VEFDS19TSVpFICogUEFHRV9TSVpFKTsKKwlzZXRfc3RhY2twdHIoUFNSX0FCVDMyX01PREUsCisJ ICAgIGFidHN0YWNrLnB2X3ZhICsgQUJUX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUpOworCXNldF9z dGFja3B0cihQU1JfVU5EMzJfTU9ERSwKKwkgICAgdW5kc3RhY2sucHZfdmEgKyBVTkRfU1RBQ0tf U0laRSAqIFBBR0VfU0laRSk7CisKKwkvKgorCSAqIFdlIG11c3Qgbm93IGNsZWFuIHRoZSBjYWNo ZSBhZ2Fpbi4uLi4KKwkgKiBDbGVhbmluZyBtYXkgYmUgZG9uZSBieSByZWFkaW5nIG5ldyBkYXRh IHRvIGRpc3BsYWNlIGFueQorCSAqIGRpcnR5IGRhdGEgaW4gdGhlIGNhY2hlLiBUaGlzIHdpbGwg aGF2ZSBoYXBwZW5lZCBpbiBzZXR0dGIoKQorCSAqIGJ1dCBzaW5jZSB3ZSBhcmUgYm9vdCBzdHJh cHBpbmcgdGhlIGFkZHJlc3NlcyB1c2VkIGZvciB0aGUgcmVhZAorCSAqIG1heSBoYXZlIGp1c3Qg YmVlbiByZW1hcHBlZCBhbmQgdGh1cyB0aGUgY2FjaGUgY291bGQgYmUgb3V0CisJICogb2Ygc3lu Yy4gQSByZS1jbGVhbiBhZnRlciB0aGUgc3dpdGNoIHdpbGwgY3VyZSB0aGlzLgorCSAqIEFmdGVy IGJvb3RpbmcgdGhlcmUgYXJlIG5vIGdyb3NzIHJlbG9jYXRpb25zIG9mIHRoZSBrZXJuZWwgdGh1 cworCSAqIHRoaXMgcHJvYmxlbSB3aWxsIG5vdCBvY2N1ciBhZnRlciBpbml0YXJtKCkuCisJICov CisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBTZXQgc3RhY2sgZm9yIGV4Y2VwdGlv biBoYW5kbGVycyAqLworCisJZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpZGF0 YV9hYm9ydF9oYW5kbGVyOworCXByZWZldGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2lu dClwcmVmZXRjaF9hYm9ydF9oYW5kbGVyOworCXVuZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3MgPSAo dV9pbnQpdW5kZWZpbmVkaW5zdHJ1Y3Rpb25fYm91bmNlOworCXVuZGVmaW5lZF9pbml0KCk7CisK Kwlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFkMCk7CisJdGhyZWFkMC50ZF9rc3RhY2sgPSBr ZXJuZWxzdGFjay5wdl92YTsKKwl0aHJlYWQwLnRkX3BjYiA9IChzdHJ1Y3QgcGNiICopCisJCSh0 aHJlYWQwLnRkX2tzdGFjayArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSkgLSAxOworCXRocmVh ZDAudGRfcGNiLT5wY2JfZmxhZ3MgPSAwOworCXRocmVhZDAudGRfZnJhbWUgPSAmcHJvYzBfdGY7 CisJcGNwdXAtPnBjX2N1cnBjYiA9IHRocmVhZDAudGRfcGNiOworCisKKwlhcm1fdmVjdG9yX2lu aXQoQVJNX1ZFQ1RPUlNfSElHSCwgQVJNX1ZFQ19BTEwpOworCisJcG1hcF9jdXJtYXhrdmFkZHIg PSBhZnRlcmtlcm4gKyBMMV9TX1NJWkUgKiAoS0VSTkVMX1BUX0tFUk5fTlVNIC0gMSk7CisKKwkv KgorCSAqIEFSTV9VU0VfU01BTExfQUxMT0MgdXNlcyBkdW1wX2F2YWlsLCBzbyBpdCBtdXN0IGJl IGZpbGxlZCBiZWZvcmUKKwkgKiBjYWxsaW5nIHBtYXBfYm9vdHN0cmFwLgorCSAqLworCWR1bXBf YXZhaWxbMF0gPSBQSFlTQUREUjsKKwlkdW1wX2F2YWlsWzFdID0gUEhZU0FERFIgKyBtZW1zaXpl OworCWR1bXBfYXZhaWxbMl0gPSAwOworCWR1bXBfYXZhaWxbM10gPSAwOworCisJcG1hcF9ib290 c3RyYXAoZnJlZW1lbXBvcywKKwkgICAgS0VSTlZJUlRBRERSICsgMyAqIG1lbXNpemUsCisJICAg ICZrZXJuZWxfbDFwdCk7CisKKwltc2didWZwID0gKHZvaWQqKW1zZ2J1ZnB2LnB2X3ZhOworCW1z Z2J1ZmluaXQobXNnYnVmcCwgTVNHQlVGX1NJWkUpOworCisJbXV0ZXhfaW5pdCgpOworCisJaSA9 IDA7CisjaWYgUEhZU0FERFIgIT0gS0VSTlBIWVNBRERSCisJcGh5c19hdmFpbFtpKytdID0gUEhZ U0FERFI7CisJcGh5c19hdmFpbFtpKytdID0gS0VSTlBIWVNBRERSOworI2VuZGlmCisJcGh5c19h dmFpbFtpKytdID0gdmlydHVhbF9hdmFpbCAtIEtFUk5WSVJUQUREUiArIEtFUk5QSFlTQUREUjsK KworCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsKKwlwaHlzX2F2YWlsW2kr K10gPSAwOworCXBoeXNfYXZhaWxbaSsrXSA9IDA7CisJLyogRG8gYmFzaWMgdHVuaW5nLCBoeiBl dGMgKi8KKwlpbml0X3BhcmFtMSgpOworCWluaXRfcGFyYW0yKHBoeXNtZW0pOworCWtkYl9pbml0 KCk7CisKKwlyZXR1cm4gKCh2b2lkICopKGtlcm5lbHN0YWNrLnB2X3ZhICsgVVNQQUNFX1NWQ19T VEFDS19UT1AgLQorCSAgICBzaXplb2Yoc3RydWN0IHBjYikpKTsKK30KSW5kZXg6IHN5cy9hcm0v ZWNvbmEvaWZfZWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9pZl9lY2UuYwkocmV2 aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEvaWZfZWNlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg KzEsMjA2MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENP TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2lu Y2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2FybS9lY29u YS9pZl9lY2UuYyQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9z eXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+Cisj aW5jbHVkZSA8c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8 c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgorI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Cisj aW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNp bmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxu ZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21l ZGlhLmg+CisjaW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5f dmFyLmg+CisKKyNpZmRlZiBJTkVUCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUg PG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1 ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1 ZGUgPG5ldC9icGZkZXNjLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUg PGRldi9taWkvbWlpdmFyLmg+CisjaW5jbHVkZSA8YXJtL2Vjb25hL2lmX2VjZXJlZy5oPgorI2lu Y2x1ZGUgPGFybS9lY29uYS9pZl9lY2V2YXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4K KworI2luY2x1ZGUgIm1paWJ1c19pZi5oIgorCitzdGF0aWMgdWludDhfdCBteV92bGFuMF9tYWNb RVRIRVJfQUREUl9MRU5dID0geyAweDAwLCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweDE5IH07 CisKKworLypib290IGxvYWRlciBleHBlY3RzIHRoZSBoYXJkd2FyZSBzdGF0ZSB0byBiZSB0aGUg c2FtZSovCitpbnQgaW5pdGlhbF9zd2l0Y2hfY29uZmlnOworaW50IGluaXRpYWxfY3B1X2NvbmZp ZzsKK2ludCBpbml0aWFsX3BvcnQwX2NvbmZpZzsKK2ludCBpbml0aWFsX3BvcnQxX2NvbmZpZzsK KworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitSRDQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGJ1 c19zaXplX3Qgb2ZmKQoreworCXJldHVybiBidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBvZmYpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1dSNChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgYnVzX3Np emVfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlidXNfd3JpdGVfNChzYy0+bWVtX3Jlcywgb2Zm LCB2YWwpOworfQorCisjZGVmaW5lIEVDRV9MT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2Nf bXR4KQorI2RlZmluZQlFQ0VfVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5zY19tdHgp CisjZGVmaW5lIEVDRV9MT0NLX0lOSVQoX3NjKSBcCisJbXR4X2luaXQoJl9zYy0+c2NfbXR4LCBk ZXZpY2VfZ2V0X25hbWV1bml0KF9zYy0+ZGV2KSwgXAorCSAgICBNVFhfTkVUV09SS19MT0NLLCBN VFhfREVGKQorCisKKyNkZWZpbmUgRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNj X210eF90eCkKKyNkZWZpbmUJRUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5z Y19tdHhfdHgpCisjZGVmaW5lIEVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3Nj LT5zY19tdHhfdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLCBcCisJICAgICJFQ0Ug VFggTG9jayIsIE1UWF9ERUYpCisKKworI2RlZmluZSBFQ0VfQ0xFQU5VUExPQ0soX3NjKQkJbXR4 X2xvY2soJihfc2MpLT5zY19tdHhfY2xlYW51cCkKKyNkZWZpbmUJRUNFX0NMRUFOVVBVTkxPQ0so X3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9jbGVhbnVwKQorI2RlZmluZSBFQ0VfQ0xF QU5VUExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2 aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksIFwKKwkgICAgIkVDRSBjbGVhbnVwIExvY2siLCBN VFhfREVGKQorCisKKyNkZWZpbmUgRUNFX1JYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNj X210eF9yeCkKKyNkZWZpbmUJRUNFX1JYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5z Y19tdHhfcngpCisjZGVmaW5lIEVDRV9SWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3Nj LT5zY19tdHhfcngsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLCBcCisJICAgICJFQ0Ug UlggTG9jayIsIE1UWF9ERUYpCisKKyNkZWZpbmUgRUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9k ZXN0cm95KCZfc2MtPnNjX210eCk7CisjZGVmaW5lIEVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10 eF9kZXN0cm95KCZfc2MtPnNjX210eF90eCk7CisjZGVmaW5lIEVDRV9SWExPQ0tfREVTVFJPWShf c2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9yeCk7CisjZGVmaW5lIEVDRV9DTEVBTlVQTE9D S19ERVNUUk9ZKF9zYykJbXR4X2Rlc3Ryb3koJl9zYy0+c2NfbXR4X2NsZWFudXApOworCisjZGVm aW5lIEVDRV9BU1NFUlRfTE9DS0VEKF9zYykJbXR4X2Fzc2VydCgmX3NjLT5zY19tdHgsIE1BX09X TkVEKTsKKyNkZWZpbmUgRUNFX0FTU0VSVF9VTkxPQ0tFRChfc2MpIG10eF9hc3NlcnQoJl9zYy0+ c2NfbXR4LCBNQV9OT1RPV05FRCk7CisKKworc3RhdGljIGRldmNsYXNzX3QgZWNlX2RldmNsYXNz OworCisvKiBpZm5ldCBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIHZvaWQgZWNlaW5pdF9sb2Nr ZWQodm9pZCAqKTsKK3N0YXRpYyB2b2lkIGVjZXN0YXJ0X2xvY2tlZChzdHJ1Y3QgaWZuZXQgKik7 CisKK3N0YXRpYyB2b2lkIGVjZWluaXQodm9pZCAqKTsKK3N0YXRpYyB2b2lkIGVjZXN0YXJ0KHN0 cnVjdCBpZm5ldCAqKTsKK3N0YXRpYyB2b2lkIGVjZXN0b3Aoc3RydWN0IGVjZV9zb2Z0YyAqKTsK K3N0YXRpYyBpbnQgZWNlaW9jdGwoc3RydWN0IGlmbmV0ICogaWZwLCB1X2xvbmcsIGNhZGRyX3Qp OworCisvKiBidXMgZW50cnkgcG9pbnRzICovCisKK3N0YXRpYyBpbnQgZWNlX3Byb2JlKGRldmlj ZV90IGRldik7CitzdGF0aWMgaW50IGVjZV9hdHRhY2goZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBp bnQgZWNlX2RldGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIHZvaWQgZWNlX2ludHIodm9pZCAq KTsKK3N0YXRpYyB2b2lkIGVjZV9pbnRyX3FmKHZvaWQgKik7CitzdGF0aWMgdm9pZCBlY2VfaW50 cl9zdGF0dXModm9pZCAqeHNjKTsKKworCisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBp bnQgZWNlX2FjdGl2YXRlKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBlY2VfZGVhY3RpdmF0 ZShkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBlY2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0 ICppZnApOworc3RhdGljIHZvaWQgZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBz dHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcik7CitzdGF0aWMgaW50IGVjZV9nZXRfbWFjKHN0cnVjdCBl Y2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkIGVjZV9zZXRfbWFjKHN0 cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkIHBvd2Vyb24o dm9pZCk7CitzdGF0aWMgaW50IGNvbmZpZ3VyZV9jcHVfcG9ydChzdHJ1Y3QgZWNlX3NvZnRjICpz Yyk7CitzdGF0aWMgaW50IGNvbmZpZ3VyZV9sYW5fcG9ydChzdHJ1Y3QgZWNlX3NvZnRjICpzYywg aW50IHBoeV90eXBlKTsKK3N0YXRpYyB2b2lkIHNldF9wdmlkKHN0cnVjdCBlY2Vfc29mdGMgKnNj LCBpbnQgcG9ydDAsIGludCBwb3J0MSwgaW50IGNwdSk7CitzdGF0aWMgdm9pZCBzZXRfdmxhbl92 aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKTsKK3N0YXRpYyB2b2lkIHNldF92bGFu X21lbWJlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOworc3RhdGljIHZvaWQgc2V0 X3ZsYW5fdGFnKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbik7CitzdGF0aWMgaW50IGhh cmR3YXJlX2luaXQoc3RydWN0IGVjZV9zb2Z0YyAqc2MpOworc3RhdGljIHZvaWQgZWNlX2ludHJf cnhfbG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgY291bnQpOworCitzdGF0aWMgdm9p ZCBlY2VfZnJlZV9kZXNjX2RtYV90eChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CitzdGF0aWMgdm9p ZCBlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CisKK3N0YXRpYyB2 b2lkIGVjZV9pbnRyX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCk7CitzdGF0 aWMgdm9pZCBlY2VfdHhfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2VkKTsKK3N0 YXRpYyB2b2lkIGVjZV9jbGVhbnVwX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNl ZCk7CisKK3N0YXRpYyBpbnQgZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7 CisKK3N0YXRpYyB2b2lkIGVjZV9pbnRyX3R4KHZvaWQgKnhzYyk7CisKK3N0YXRpYyB2b2lkIGNs ZWFyX21hY19lbnRyaWVzKHN0cnVjdCBlY2Vfc29mdGMgKmVjLCBpbnQgaW5jbHVkZV90aGlzX21h Yyk7CisKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMg KmVjLAorCQkJICAgICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisJCQkgICAgICAgaW50IGZpcnN0 KTsKKworCisvKlBIWSByZWxhdGVkIGZ1bmN0aW9ucyovCisKK3N0YXRpYyBpbmxpbmUgaW50Citw aHlfcmVhZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHBoeSwgaW50IHJlZykKK3sKKwlpbnQg dmFsOworCWludCBpaTsKKwlpbnQgc3RhdHVzOworCisJV1I0KHNjLCBQSFlfQ09OVFJPTCwgMSA8 PCAxNSk7CisJV1I0KHNjLCBQSFlfQ09OVFJPTCwgKChwaHkgJiAweDEpIHwKKwkJCSAgICAgICgo cmVnICYgMHgxRikgPDwgOCkgfCAoMHgxIDw8IDE0KSkpOworCisJZm9yIChpaSA9IDA7IGlpIDwg MHgxMDAwOyBpaSsrKSB7CisJCXN0YXR1cyA9IFJENChzYywgUEhZX0NPTlRST0wpOworCQlpZiAo c3RhdHVzICYgKDB4MSA8PCAxNSkpIHsKKwkJCS8qIGNsZWFyIHRoZSByd19vayBzdGF0dXMsIGFu ZCBjbGVhciBvdGhlciBiaXRzIHZhbHVlICovCisJCQlXUjQoc2MsIFBIWV9DT05UUk9MLCAoMHgx IDw8IDE1KSk7CisJCQl2YWwgPSAgKChzdGF0dXMgPj4gMTYpICYgMHhGRkZGKTsKKwkJCXJldHVy biB2YWw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitw aHlfd3JpdGUoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwaHksIGludCByZWcsIGludCBkYXRh KQoreworCWludCBpaTsKKworCVdSNChzYywgUEhZX0NPTlRST0wsIDEgPDwgMTUpOworCVdSNChz YywgUEhZX0NPTlRST0wsCisJICAgICgocGh5ICYgMHgxKSB8ICAoKHJlZyAmIDB4MUYpIDw8IDgp IHwKKwkgICAgICgweDEgPDwgMTMpIHwgKChkYXRhICYgMHhGRkZGKSA8PCAxNikpKTsKKwlmb3Ig KGlpID0gMDsgaWkgPCAweDEwMDA7IGlpKyspIHsKKwkJaWYgKFJENChzYywgUEhZX0NPTlRST0wp ICYgKDB4MSA8PCAxNSkpIHsKKwkJCS8qIGNsZWFyIHRoZSByd19vayBzdGF0dXMsIGFuZCBjbGVh ciBvdGhlciBiaXRzIHZhbHVlICovCisJCQlXUjQoc2MsIFBIWV9DT05UUk9MLCAoMHgxIDw8IDE1 KSk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKworLypjdXJyZW50bHkgb25seSBpY19wbHVz IHBoeSBpcyBzdXBwb3J0ZWQqLworc3RhdGljIGludCBnZXRfcGh5X3R5cGUoc3RydWN0IGVjZV9z b2Z0YyAqc2MpCit7CisJdWludDE2X3QgcGh5MF9pZCA9IDAsIHBoeTFfaWQgPSAwOworCisJLyoK KwkgKiBVc2UgU01JIChNREMvTURJTykgdG8gcmVhZCBMaW5rIFBhcnRuZXIncyBQSFkgSWRlbnRp ZmllciBSZWdpc3RlciAxCisJICovCisJcGh5MF9pZCA9IHBoeV9yZWFkKHNjLCAwLCAweDIpOwor CXBoeTFfaWQgPSBwaHlfcmVhZChzYywgMSwgMHgyKTsKKworCWlmICgocGh5MF9pZCA9PSAweEZG RkYpICYmIChwaHkxX2lkID09IDB4MDAwRikpIHsKKwkJcmV0dXJuIEFTSVhfR0lHQV9QSFk7CisJ fSBlbHNlIGlmICgocGh5MF9pZCA9PSAweDAyNDMpICYmIChwaHkxX2lkID09IDB4MDI0MykpIHsK KwkJcmV0dXJuIFRXT19TSU5HTEVfUEhZOworCX0gZWxzZSBpZiAoKHBoeTBfaWQgPT0gMHhGRkZG KSAmJiAocGh5MV9pZCA9PSAweDAwMDcpKSB7CisJCXJldHVybiBWU0M4NjAxX0dJR0FfUEhZOwor CX0gZWxzZSBpZiAoKHBoeTFfaWQgPT0gMHhGRkZGKSAmJiAocGh5MF9pZCA9PSAweDAyNDMpKSB7 CisJCXJldHVybiBJQ19QTFVTX1BIWTsKKwl9CisJcmV0dXJuIE5PVF9GT1VORF9QSFk7Cit9CisK K3N0YXRpYyBpbnQKK2VjZV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9kZXNj KGRldiwgIkVjb25hIEV0aGVybmV0IENvbnRyb2xsZXIiKTsKKwlyZXR1cm4gKDApOworfQorCisv Km1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgbm90IHBvd2VyZWQgb2ZmKi8KK3N0YXRp YyB2b2lkCitwb3dlcm9uKHZvaWQpCit7CisJaW50IGlpOworCXVpbnQzMl90IGNmZ19yZWc7CisJ LypUT0RPOiBoYW5kbGUgcG93ZXIgbWFuYWdlbWVudCBwcm9wZXJseSovCisJdm9sYXRpbGUgdWlu dDMyX3QgKiBwb3dlciA9ICh1aW50MzJfdCAqKTB4NzcwMDAwMDQ7CisKKwljZmdfcmVnID0gKihw b3dlcik7CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8KKwljZmdfcmVnIHw9 IDB4MTA7CisJKCpwb3dlcikgPSBjZmdfcmVnOworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlp ID0gMDsgaWkgPCAweEZGRjsgaWkrKykKKwlERUxBWSgxMDApOwkJOworCS8qIHNldCByZXNldCBi aXQgdG8gTE9XIGFjdGl2ZTsgKi8KKwljZmdfcmVnICY9IH4weDEwOworCSgqcG93ZXIpID0gY2Zn X3JlZzsKKwkvKnB1bHNlIGRlbGF5ICovCisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKysp CisJCURFTEFZKDEwMCk7CQk7CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8K KwljZmdfcmVnIHw9IDB4MTA7CisJKCpwb3dlcikgPSBjZmdfcmVnOworCit9CisKKworc3RhdGlj IGludAorZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2Mg PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOworCXN0 cnVjdCBzeXNjdGxfY3R4X2xpc3QgKnNjdHg7CisJc3RydWN0IHN5c2N0bF9vaWQgKnNvaWQ7CisJ aW50IGVyciA9IDA7CisJdV9jaGFyIGVhZGRyW0VUSEVSX0FERFJfTEVOXTsKKwl1aW50MzJfdCBy bmQ7CisJaW50IGksIHJpZDsKKworCXBvd2Vyb24oKTsKKworCXNjLT5kZXYgPSBkZXY7CisKKwly aWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19S RVNfTUVNT1JZLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCisJaWYgKHNjLT5tZW1fcmVzID09 IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlkID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSBi dXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCisJICAgIFJGX0FD VElWRSk7CisJaWYgKHNjLT5pcnFfcmVzX3N0YXR1cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKwor CXJpZCA9IDE7IC8qVFNUQzogRm0tU3dpdGNoLVR4LUNvbXBsZXRlKi8KKwlzYy0+aXJxX3Jlc190 eCA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAg UkZfQUNUSVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfdHggPT0gTlVMTCkKKwkJZ290byBvdXQ7CisK KwlyaWQgPSAyOyAvKkZTUkM6IEZtLVN3aXRjaC1SeC1Db21wbGV0ZSovCisJc2MtPmlycV9yZXNf cmVjID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAg ICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXJxX3Jlc19yZWMgPT0gTlVMTCkKKwkJZ290byBvdXQ7 CisKKwlyaWQgPSA0OyAvKkZTUUY6IEZtLVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jl c19xZiA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkg ICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfcWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7 CisKKwllcnIgPSBlY2VfYWN0aXZhdGUoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwor CXNjLT51c2Vfcm1paSA9IChSRDQoc2MsIEVUSF9DRkcpICYgRVRIX0NGR19STUlJKSA9PSBFVEhf Q0ZHX1JNSUk7CisKKwkvKiBTeXNjdGxzICovCisJc2N0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0 eChkZXYpOworCXNvaWQgPSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJU1lTQ1RMX0FE RF9VSU5UKHNjdHgsIFNZU0NUTF9DSElMRFJFTihzb2lkKSwgT0lEX0FVVE8sICJybWlpIiwKKwkg ICAgQ1RMRkxBR19SRCwgJnNjLT51c2Vfcm1paSwgMCwgInJtaWkgaW4gdXNlIik7CisKKwlFQ0Vf TE9DS19JTklUKHNjKTsKKworCWNhbGxvdXRfaW5pdF9tdHgoJnNjLT50aWNrX2NoLCAmc2MtPnNj X210eCwgMCk7CisKKwlpZiAoKGVyciA9IGVjZV9nZXRfbWFjKHNjLCBlYWRkcikpICE9IDApIHsK KwkJLyoKKwkJICogTm8gTUFDIGFkZHJlc3MgY29uZmlndXJlZC4gR2VuZXJhdGUgdGhlIHJhbmRv bSBvbmUuCisJCSAqLworCQlpZiAgKGJvb3R2ZXJib3NlKQorCQkJZGV2aWNlX3ByaW50ZihkZXYs CisJCQkgICAgIkdlbmVyYXRpbmcgcmFuZG9tIGV0aGVybmV0IGFkZHJlc3MuXG4iKTsKKwkJcm5k ID0gYXJjNHJhbmRvbSgpOworCisJCS8qZnJvbSBpZl9hZS5jL2lmX2F0ZS5jKi8KKwkJLyoKKwkJ ICogU2V0IE9VSSB0byBjb252ZW5pZW50IGxvY2FsbHkgYXNzaWduZWQgYWRkcmVzcy4gICdiJwor CQkgKiBpcyAweDYyLCB3aGljaCBoYXMgdGhlIGxvY2FsbHkgYXNzaWduZWQgYml0IHNldCwgYW5k CisJCSAqIHRoZSBicm9hZGNhc3QvbXVsdGljYXN0IGJpdCBjbGVhci4KKwkJICovCisJCWVhZGRy WzBdID0gJ2InOworCQllYWRkclsxXSA9ICdzJzsKKwkJZWFkZHJbMl0gPSAnZCc7CisJCWVhZGRy WzNdID0gKHJuZCA+PiAxNikgJiAweGZmOworCQllYWRkcls0XSA9IChybmQgPj4gOCkgJiAweGZm OworCQllYWRkcls1XSA9IHJuZCAmIDB4ZmY7CisKKwkJZm9yIChpPTA7IGk8RVRIRVJfQUREUl9M RU47IGkrKykgeworCQkJZWFkZHJbaV0gPSBteV92bGFuMF9tYWNbaV07CisJCX0KKworCX0KKwll Y2Vfc2V0X21hYyhzYywgZWFkZHIpOworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRI RVIpOworCWlmIChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5taWlidXMsIGVjZV9pZm1lZGlhX3Vw ZCwgZWNlX2lmbWVkaWFfc3RzKSkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNhbm5vdCBmaW5k IG15IFBIWS5cbiIpOworCQllcnIgPSBFTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWlmcC0+aWZf c29mdGMgPSBzYzsKKwlpZl9pbml0bmFtZShpZnAsIGRldmljZV9nZXRfbmFtZShkZXYpLCBkZXZp Y2VfZ2V0X3VuaXQoZGV2KSk7CisJaWZwLT5pZl9mbGFncyA9IElGRl9CUk9BRENBU1QgfCBJRkZf U0lNUExFWCB8IElGRl9NVUxUSUNBU1Q7CisKKwlpZnAtPmlmX2NhcGFiaWxpdGllcyA9IElGQ0FQ X0hXQ1NVTTsKKworCWlmcC0+aWZfaHdhc3Npc3QgPSAoQ1NVTV9JUCB8IENTVU1fVENQIHwgQ1NV TV9VRFApOworCWlmcC0+aWZfY2FwZW5hYmxlID0gaWZwLT5pZl9jYXBhYmlsaXRpZXM7IC8qICAq LworCWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAtPmlmX2lvY3RsID0gZWNlaW9jdGw7 CisJaWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlmX3NuZC5pZnFfZHJ2X21heGxlbiA9 IEVDRV9NQVhfVFhfQlVGRkVSUy0xOworCUlGUV9TRVRfTUFYTEVOKCZpZnAtPmlmX3NuZCwgRUNF X01BWF9UWF9CVUZGRVJTLTEpOworCUlGUV9TRVRfUkVBRFkoJmlmcC0+aWZfc25kKTsKKworCisJ LyogQ3JlYXRlIGxvY2FsIHRhc2txLiAqLworCisJVEFTS19JTklUKCZzYy0+c2NfaW50cl90YXNr LCAwLCBlY2VfaW50cl90YXNrLCBzYyk7CisJVEFTS19JTklUKCZzYy0+c2NfdHhfdGFzaywgMSwg ZWNlX3R4X3Rhc2ssIGlmcCk7CisJVEFTS19JTklUKCZzYy0+c2NfY2xlYW51cF90YXNrLCAyLCBl Y2VfY2xlYW51cF90YXNrLCBzYyk7CisJc2MtPnNjX3RxID0gdGFza3F1ZXVlX2NyZWF0ZV9mYXN0 KCJlY2VfdGFza3EiLCBNX1dBSVRPSywKKwkgICAgdGFza3F1ZXVlX3RocmVhZF9lbnF1ZXVlLCAm c2MtPnNjX3RxKTsKKwlpZiAoc2MtPnNjX3RxID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50Zihz Yy0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSB0YXNrcXVldWVcbiIpOworCQlnb3RvIG91dDsKKwor CX0KKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgZWFkZHIpOworCisJLyoKKwkgKiBBY3RpdmF0ZSBp bnRlcnJ1cHRzCisJICovCisJZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19y ZWMsIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkJCSAgICAgTlVMTCwgZWNlX2ludHIs IHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7 CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNf c2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0YXR1cywgSU5UUl9UWVBFX05FVCB8IElOVFJf TVBTQUZFLAorCQkJICAgICBOVUxMLCBlY2VfaW50cl9zdGF0dXMsIHNjLCAmc2MtPmludHJoYW5k X3N0YXR1cyk7CisJaWYgKGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0VfTE9D S19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gYnVzX3NldHVwX2ludHIo ZGV2LCBzYy0+aXJxX3Jlc19xZiwgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAgICBO VUxMLGVjZV9pbnRyX3FmLCAgc2MsICZzYy0+aW50cmhhbmRfcWYpOworCisJaWYgKGVycikgewor CQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBv dXQ7CisJfQorCisJZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jlc190eCwgSU5U Ul9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLGVjZV9pbnRyX3R4LCAgc2MsICZz Yy0+aW50cmhhbmRfdHgpOworCisJaWYgKGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOwor CQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwlFQ0VfVFhMT0NL X0lOSVQoc2MpOworCUVDRV9SWExPQ0tfSU5JVChzYyk7CisJRUNFX0NMRUFOVVBMT0NLX0lOSVQo c2MpOworCisJLyplbmFibGUgYWxsIGludGVycnVwdCBzb3VyY2VzKi8KKwlXUjQoc2MsIElOVEVS UlVQVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qZW5hYmxlIHBvcnQgMCovCisJV1I0KHNjLCBQ T1JUXzBfQ09ORklHLCBSRDQoc2MsIFBPUlRfMF9DT05GSUcpICYgfigoMHgxIDw8IDE4KSkpOwor CisJdGFza3F1ZXVlX3N0YXJ0X3RocmVhZHMoJnNjLT5zY190cSwgMSwgUElfTkVULCAiJXMgdGFz a3EiLAorCSAgICBkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5kZXYpKTsKKworb3V0OjsKKwlpZiAo ZXJyKQorCQllY2VfZGVhY3RpdmF0ZShkZXYpOworCWlmIChlcnIgJiYgaWZwKQorCQlpZl9mcmVl KGlmcCk7CisJcmV0dXJuIChlcnIpOworfQorCitzdGF0aWMgaW50CitlY2VfZGV0YWNoKGRldmlj ZV90IGRldikKK3sKKwkvKlRPRE86IHJlbGVhc2UgcmVzb3VyY2VzKi8KKworCXN0cnVjdCBlY2Vf c29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAqaWZwID0g c2MtPmlmcDsKKworCWVjZXN0b3Aoc2MpOworCWlmIChpZnAgIT0gTlVMTCkgeworCQlldGhlcl9p ZmRldGFjaChpZnApOworCQlpZl9mcmVlKGlmcCk7CisJfQorCisJZWNlX2RlYWN0aXZhdGUoZGV2 KTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZ2V0YWRkcih2b2lkICph cmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwl1 X2ludDMyX3QgKnBhZGRyOworCUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJ3cm9uZyBudW1iZXIgb2Yg c2VnbWVudHMsIHNob3VsZCBiZSAxIikpOworCXBhZGRyID0gYXJnOworCSpwYWRkciA9IHNlZ3Mt PmRzX2FkZHI7Cit9CisKKworc3RhdGljIGludAorZWNlX2FsbG9jX2Rlc2NfZG1hX3R4KHN0cnVj dCBlY2Vfc29mdGMgKnNjKQoreworCisJaW50IGk7CisJaW50IGVycm9yOworCisJLyogQWxsb2Nh dGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBtZW1vcnkgZm9yIFRYL1JYIGRlc2NyaXB0b3Jz LiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRfdGFnLAkvKiBw YXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAg QlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCQkvKiBsb3dhZGRyICovCisJICAgIEJVU19TUEFDRV9N QVhBRERSLAkJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGZpbHRmdW5j LCBmaWx0ZnVuY2FyZyAqLworCSAgICBzaXplb2YoZXRoX3R4X2Rlc2NfdCkqRUNFX01BWF9UWF9C VUZGRVJTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIHNpemVvZihldGhfdHhf ZGVzY190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsIDAsCQkvKiBtYXhzZWdzeiwgZmxhZ3MgKi8KKwkg ICAgTlVMTCwgTlVMTCwJCQkJLyogbG9ja2Z1bmMsIGxvY2tmdW5jYXJnICovCisJICAgICZzYy0+ ZG1hdGFnX2RhdGFfdHgpOwkJLyogZG1hdCAqLworCisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9y IHR4IHJpbmcgKi8KKwllcnJvciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmRtYXRhZ19kYXRhX3R4 LAorCQkJCSAodm9pZCoqKSYoc2MtPmRlc2NfdHgpLAorCQkJCSBCVVNfRE1BX05PV0FJVCB8IEJV U19ETUFfWkVSTyB8IEJVU19ETUFfQ09IRVJFTlQsCisJCQkJICYoc2MtPmRtYW1hcF9yaW5nX3R4 KSk7CisKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gYWxs b2NhdGUgRE1BIG1lbW9yeVxuIik7CisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmRtYXRhZ19k YXRhX3R4KTsKKwkJc2MtPmRtYXRhZ19kYXRhX3R4ID0gMDsKKwkJcmV0dXJuIChFTlhJTyk7CisJ fQorCisJLyogbG9hZCByaW5nIGRtYSAqLworCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5k bWF0YWdfZGF0YV90eCwgc2MtPmRtYW1hcF9yaW5nX3R4LAorCQkJCXNjLT5kZXNjX3R4LCBzaXpl b2YoZXRoX3R4X2Rlc2NfdCkqRUNFX01BWF9UWF9CVUZGRVJTLCBlY2VfZ2V0YWRkciwKKwkJCQkm KHNjLT5yaW5nX3BhZGRyX3R4KSwgQlVTX0RNQV9OT1dBSVQpOworCisJaWYgKGVycm9yKSB7CisJ CWlmX3ByaW50ZihzYy0+aWZwLCAiY2FuJ3QgbG9hZCBkZXNjcmlwdG9yXG4iKTsKKwkJYnVzX2Rt YW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwgc2MtPmRlc2NfdHgsCisJCQkJc2MtPmRtYW1h cF9yaW5nX3R4KTsKKwkJc2MtPmRlc2NfdHggPSBOVUxMOworCQlidXNfZG1hX3RhZ19kZXN0cm95 KHNjLT5kbWF0YWdfZGF0YV90eCk7CisJCXNjLT5kbWF0YWdfZGF0YV90eCA9IDA7CisJCXJldHVy biAoRU5YSU8pOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuIEFs aWdubWVudCBpcyAyIGJ5dGVzICovCisJZXJyb3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNj X3BhcmVudF90YWcsCS8qIHBhcmVudCAqLworCSAgICAxLCAwLAkJCQkvKiBhbGlnbm1lbnQsIGJv dW5kYXJ5ICovCisJICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkJLyogbG93YWRkciAqLwor CSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJCQkvKiBoaWdoYWRkciAqLworCSAgICBOVUxMLCBOVUxM LAkJCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgTUNMQllURVMqTUFYX0ZSQUdN RU5ULCBNQVhfRlJBR01FTlQsCQkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIE1DTEJZ VEVTLCAwLAkJCS8qIG1heHNlZ3N6LCBmbGFncyAqLworCSAgICBOVUxMLCBOVUxMLAkJCQkvKiBs b2NrZnVuYywgbG9ja2Z1bmNhcmcgKi8KKwkgICAgJnNjLT5kbWF0YWdfcmluZ190eCk7CQkJLyog ZG1hdCAqLworCisKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQg dG8gY3JlYXRlIGJ1c2RtYSB0YWcgZm9yIG1idWZzXG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJ fQorCisJZm9yIChpPTA7IGk8RUNFX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKKwkJLyogY3JlYXRl IGRtYSBtYXAgZm9yIGVhY2ggZGVzY3JpcHRvciAqLworCQllcnJvciA9IGJ1c19kbWFtYXBfY3Jl YXRlKHNjLT5kbWF0YWdfcmluZ190eCwgMCwKKwkJCQkJICAmKHNjLT50eF9kZXNjW2ldLmRtYW1h cCkpOworCQlpZiAoZXJyb3IpIHsKKwkJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNy ZWF0ZSBtYXAgZm9yIG1idWZcbiIpOworCQkJcmV0dXJuIChFTlhJTyk7CisJCX0KKwl9CisJcmV0 dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK2VjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBl Y2Vfc29mdGMgKnNjKQoreworCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNFX01BWF9U WF9CVUZGRVJTOyBpKyspIHsKKwkJaWYgKHNjLT50eF9kZXNjW2ldLmJ1ZmYpIHsKKwkJCW1fZnJl ZW0oc2MtPnR4X2Rlc2NbaV0uYnVmZik7CisJCQlzYy0+dHhfZGVzY1tpXS5idWZmPSAwOworCQl9 CisJfQorCisJaWYgKHNjLT5kbWFtYXBfcmluZ190eCkgeworCQlidXNfZG1hbWFwX3VubG9hZChz Yy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCWlmIChzYy0+ZGVzY190 eCkgeworCQkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwKKwkJCQkJc2MtPmRl c2NfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCX0KKwkJc2MtPmRtYW1hcF9yaW5nX3R4ID0g MDsKKwl9CisKKwlpZiAoc2MtPmRtYXRhZ19kYXRhX3R4KSB7CisJCWJ1c19kbWFfdGFnX2Rlc3Ry b3koc2MtPmRtYXRhZ19kYXRhX3R4KTsKKwkJc2MtPmRtYXRhZ19kYXRhX3R4ID0gMDsKKwl9CisK KwlpZiAoc2MtPmRtYXRhZ19yaW5nX3R4KSB7CisJCWZvciAoaSA9IDA7IGk8RUNFX01BWF9UWF9C VUZGRVJTOyBpKyspIHsKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfdHgs CisJCQkJCSAgIHNjLT50eF9kZXNjW2ldLmRtYW1hcCk7CisJCQlzYy0+dHhfZGVzY1tpXS5kbWFt YXAgPSAwOworCQl9CisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmRtYXRhZ19yaW5nX3R4KTsK KwkJc2MtPmRtYXRhZ19yaW5nX3R4ID0gMDsKKwl9Cit9CisKKworc3RhdGljIGludAorZWNlX2Fs bG9jX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWludCBlcnJvcjsKKwor CisJLyogQWxsb2NhdGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBtZW1vcnkgZm9yIFJYIGRl c2NyaXB0b3JzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRf dGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkg Ki8KKwkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCQkvKiBsb3dhZGRyICovCisJICAgIEJV U19TUEFDRV9NQVhBRERSLAkJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8q IGZpbHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgICBzaXplb2YoZXRoX3J4X2Rlc2NfdCkqRUNF X01BWF9SWF9CVUZGRVJTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIHNpemVv ZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMsIDAsCQkvKiBtYXhzZWdzeiwgZmxh Z3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJCQkJLyogbG9ja2Z1bmMsIGxvY2tmdW5jYXJnICovCisJ ICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkJLyogZG1hdCAqLworCisJLyphbGxvY2F0ZSByaW5n Ki8KKwllcnJvciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmRtYXRhZ19kYXRhX3J4LAorCQkJCSAo dm9pZCoqKSYoc2MtPmRlc2NfcngpLAorCQkJCSBCVVNfRE1BX05PV0FJVCB8IEJVU19ETUFfWkVS TyB8IEJVU19ETUFfQ09IRVJFTlQsCisJCQkJICYoc2MtPmRtYW1hcF9yaW5nX3J4KSk7CisKKwlp ZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1B IG1lbW9yeVxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIGxvYWQgZG1hbWFwICov CisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmRtYXRhZ19kYXRhX3J4LCBzYy0+ZG1hbWFw X3JpbmdfcngsCisJCQkJc2MtPmRlc2NfcngsCisJCQkJc2l6ZW9mKGV0aF9yeF9kZXNjX3QpKkVD RV9NQVhfUlhfQlVGRkVSUywKKwkJCQllY2VfZ2V0YWRkciwKKwkJCQkmKHNjLT5yaW5nX3BhZGRy X3J4KSwgQlVTX0RNQV9OT1dBSVQpOworCisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+ aWZwLCAiY2FuJ3QgbG9hZCBkZXNjcmlwdG9yXG4iKTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5k bWF0YWdfZGF0YV9yeCwgc2MtPmRlc2NfcngsCisJCQkJc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJ YnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfcngpOworCQlzYy0+ZGVzY19yeCA9 IE5VTEw7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2Rt YSB0YWcgZm9yIG1idWZzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19w YXJlbnRfdGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91 bmRhcnkgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCQkvKiBsb3dhZGRyICovCisJ ICAgIEJVU19TUEFDRV9NQVhBRERSLAkJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEws CQkJCS8qIGZpbHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgICBNQ0xCWVRFUywgMSwJCQkvKiBt YXhzaXplLCBuc2VnbWVudHMgKi8KKwkgICAgTUNMQllURVMsIDAsCQkJLyogbWF4c2Vnc3osIGZs YWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGxvY2tmdW5jLCBsb2NrZnVuY2FyZyAqLwor CSAgICAmc2MtPmRtYXRhZ19yaW5nX3J4KTsJCQkvKiBkbWF0ICovCisKKworCWlmIChlcnJvcikg eworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUgYnVzZG1hIHRhZyBmb3Ig bWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKworCWZvciAoaW50IGkgPTA7IGk8 RUNFX01BWF9SWF9CVUZGRVJTOyBpKyspIHsKKwkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShz Yy0+ZG1hdGFnX3JpbmdfcngsIDAsICZzYy0+cnhfZGVzY1tpXS5kbWFtYXApOworCQlpZiAoZXJy b3IpIHsKKwkJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNyZWF0ZSBtYXAgZm9yIG1i dWZcbiIpOworCQkJcmV0dXJuIChFTlhJTyk7CisJCX0KKwl9CisKKwllcnJvciA9IGJ1c19kbWFt YXBfY3JlYXRlKHNjLT5kbWF0YWdfcmluZ19yeCwgMCwgJnNjLT5yeF9zcGFyZW1hcCk7CisJaWYg KGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNyZWF0ZSBzcGFyZSBt YXBcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCisKK3N0 YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykgewor CQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+cnhfZGVzY1tpXS5i dWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisKKwlpZiAoc2MtPmRt YXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfZGF0YV9yeCwg c2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV9y eCwgc2MtPmRlc2NfcngsCisJCQlzYy0+ZG1hbWFwX3JpbmdfcngpOworCQlidXNfZG1hX3RhZ19k ZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5kbWF0YWdfZGF0YV9yeCA9IDA7CisJ CXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNjX3J4ID0gMDsKKwl9CisKKwlpZiAo c2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7IGk8RUNFX01BWF9SWF9CVUZGRVJT OyBpKyspIHsKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfcngsIHNjLT5y eF9kZXNjW2ldLmRtYW1hcCk7CisJCX0KKwkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0YWdf cmluZ19yeCwgc2MtPnJ4X3NwYXJlbWFwKTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1h dGFnX3JpbmdfcngpOworCQlzYy0+ZG1hdGFnX3JpbmdfcnggPSAwOworCX0KKworfQorCisKK3N0 YXRpYyBpbnQKK2VjZV9uZXdfcnhidWYoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIHN0cnVjdCByeF9k ZXNjX2luZm8qIGRlc2NpbmZvKQoreworCXN0cnVjdCBtYnVmICpuZXdfbWJ1ZjsKKwlidXNfZG1h X3NlZ21lbnRfdCBzZWdbMV07CisJYnVzX2RtYW1hcF90IG1hcDsKKwlpbnQgZXJyb3I7CisJaW50 IG5zZWdzOworCWJ1c19kbWFfdGFnX3QgdGFnOworCisJdGFnID0gc2MtPmRtYXRhZ19yaW5nX3J4 OworCisKKwluZXdfbWJ1ZiA9IG1fZ2V0Y2woTV9ET05UV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIp OworCisJaWYgKG5ld19tYnVmID09IE5VTEwpCisJCXJldHVybiAoRU5PQlVGUyk7CisKKwluZXdf bWJ1Zi0+bV9sZW4gPSBuZXdfbWJ1Zi0+bV9wa3RoZHIubGVuID0gTUNMQllURVM7CisKKworCWVy cm9yID0gYnVzX2RtYW1hcF9sb2FkX21idWZfc2codGFnLCBzYy0+cnhfc3BhcmVtYXAsIG5ld19t YnVmLCBzZWcsICZuc2VncywKKwkgICAgQlVTX0RNQV9OT1dBSVQpOworCisJS0FTU0VSVChuc2Vn cyA9PSAxLCAoIlRvbyBtYW55IHNlZ21lbnRzIHJldHVybmVkISIpKTsKKworCWlmIChuc2VncyAh PSAxIHx8IGVycm9yKSB7CisJCW1fZnJlZShuZXdfbWJ1Zik7CisJCXJldHVybiAoRU5PQlVGUyk7 CisJfQorCisJaWYgKGRlc2NpbmZvLT5idWZmICE9IE5VTEwpIHsKKwkJYnVzX2RtYW1hcF9zeW5j KHRhZywgZGVzY2luZm8tPmRtYW1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOworCQlidXNfZG1h bWFwX3VubG9hZCh0YWcsIGRlc2NpbmZvLT5kbWFtYXApOworCX0KKworCW1hcCA9IGRlc2NpbmZv LT5kbWFtYXA7CisJZGVzY2luZm8tPmRtYW1hcCA9IHNjLT5yeF9zcGFyZW1hcDsKKwlzYy0+cnhf c3BhcmVtYXAgPSBtYXA7CisKKwlidXNfZG1hbWFwX3N5bmModGFnLCBkZXNjaW5mby0+ZG1hbWFw LCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKworCWRlc2NpbmZvLT5idWZmID0gbmV3X21idWY7CisJ ZGVzY2luZm8tPmRlc2MtPmRhdGFfcHRyID0gc2VnLT5kc19hZGRyOworCWRlc2NpbmZvLT5kZXNj LT5sZW5ndGggPSBzZWctPmRzX2xlbi0yOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu dAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVz Y190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4OworCWludCBpOworCWludCBlcnJv cjsKKworCS8qY3JlYXRlIHBhcmVudCB0YWcgZm9yIHR4IGFuZCByeCovCisJZXJyb3IgPSBidXNf ZG1hX3RhZ19jcmVhdGUoCisJICAgIGJ1c19nZXRfZG1hX3RhZyhzYy0+ZGV2KSwJLyogcGFyZW50 ICovCisJICAgIDEsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgQlVTX1NQ QUNFX01BWEFERFIsCQkJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJCQkv KiBoaWdoYWRkciAqLworCSAgICBOVUxMLCBOVUxMLAkJCQkvKiBmaWx0ZXIsIGZpbHRlcmFyZyAq LworCSAgICBCVVNfU1BBQ0VfTUFYU0laRV8zMkJJVCwgMCwJCS8qIG1heHNpemUsIG5zZWdtZW50 cyAqLworCSAgICBCVVNfU1BBQ0VfTUFYU0laRV8zMkJJVCwJCS8qIG1heHNlZ3NpemUgKi8KKwkg ICAgMCwJCQkJCS8qIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGxvY2tmdW5jLCBs b2NrYXJnICovCisJICAgICZzYy0+c2NfcGFyZW50X3RhZyk7CisKKwllY2VfYWxsb2NfZGVzY19k bWFfdHgoc2MpOworCisJZm9yIChpID0gMDsgaSA8IEVDRV9NQVhfVFhfQlVGRkVSUzsgaSsrKSB7 CisJCWRlc2N0eCA9IChldGhfdHhfZGVzY190ICopKCZzYy0+ZGVzY190eFtpXSk7CisJCW1lbXNl dChkZXNjdHgsIDAsIHNpemVvZihldGhfdHhfZGVzY190KSk7CisJCWRlc2N0eC0+bGVuZ3RoID0g TUFYX1BBQ0tFVF9MRU47CisJCWRlc2N0eC0+Y293biA9IDE7CisJCWlmIChpPT1FQ0VfTUFYX1RY X0JVRkZFUlMtMSkgeworCQkJZGVzY3R4LT5lb3IgPSAxOworCQl9CisJfQorCisJZWNlX2FsbG9j X2Rlc2NfZG1hX3J4KHNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7 IGkrKykgeworCQlkZXNjcnggPSAmKHNjLT5kZXNjX3J4W2ldKTsKKwkJbWVtc2V0KGRlc2NyeCwg MCwgc2l6ZW9mKGV0aF9yeF9kZXNjX3QpKTsKKwkJc2MtPnJ4X2Rlc2NbaV0uZGVzYyA9IGRlc2Ny eDsKKwkJc2MtPnJ4X2Rlc2NbaV0uYnVmZiA9IDA7CisJCWVjZV9uZXdfcnhidWYoc2MsICYoc2Mt PnJ4X2Rlc2NbaV0pKTsKKworCQlpZiAoaT09RUNFX01BWF9SWF9CVUZGRVJTLTEpIHsKKwkJCWRl c2NyeC0+ZW9yID0gMTsKKwkJfQorCX0KKwlzYy0+dHhfcHJvZCA9IDA7CisJc2MtPnR4X2NvbnMg PSAwOworCXNjLT5sYXN0X3J4ID0gMDsKKwlzYy0+ZGVzY19jdXJyX3R4ID0gMDsKKworCXJldHVy biAoMCk7Cit9CisKKworCitzdGF0aWMgaW50CitlY2VfYWN0aXZhdGUoZGV2aWNlX3QgZGV2KQor eworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCWludCBlcnI7CisJdWludDMyX3QgbWFjX3BvcnRf Y29uZmlnOworI2lmIDAKKwlpbnQgaTsKKwlpbnQgdGFibGVfZW5kOworCWNoYXIgbWFjW0VUSEVS X0FERFJfTEVOXTsKKyNlbmRpZgorCisJc3RydWN0IGlmbmV0ICppZnA7CisKKwlzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKKwlpZnAgPSBzYy0+aWZwOworCisJaW5pdGlhbF9zd2l0Y2hfY29u ZmlnID0gUkQ0KHNjLCBTV0lUQ0hfQ09ORklHKTsKKwlpbml0aWFsX2NwdV9jb25maWcgPSBSRDQo c2MsIENQVV9QT1JUX0NPTkZJRyk7CisJaW5pdGlhbF9wb3J0MF9jb25maWcgPSBSRDQoc2MsIE1B Q19QT1JUXzBfQ09ORklHKTsKKwlpbml0aWFsX3BvcnQxX2NvbmZpZyA9IFJENChzYywgTUFDX1BP UlRfMV9DT05GSUcpOworCisjaWYgMAorCXByaW50ZigiaW5pdGlhbF9zd2l0Y2hfY29uZmlnICUw OHhcbiIsIGluaXRpYWxfc3dpdGNoX2NvbmZpZyk7CisJcHJpbnRmKCJpbml0aWFsX2NwdV9jb25m aWcgJTA4eFxuIiwgCWluaXRpYWxfY3B1X2NvbmZpZyk7CisJcHJpbnRmKCJpbml0aWFsX3BvcnQw X2NvbmZpZyAlMDh4XG4iLCAJaW5pdGlhbF9wb3J0MF9jb25maWcpOworCXByaW50ZigiaW5pdGlh bF9wb3J0MV9jb25maWcgJTA4eFxuIiwgCWluaXRpYWxfcG9ydDFfY29uZmlnKTsKKworCVdSNChz YywgU1dJVENIX0NPTkZJRywgMHgzYWE3MzApOworCVdSNChzYywgQ1BVX1BPUlRfQ09ORklHLCAw eDgwNGMwMDAwKTsKKwlXUjQoc2MsIE1BQ19QT1JUXzBfQ09ORklHLCAweGU2NDYzZDk0KTsKKwlX UjQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCAweDQ2M2Q5Nik7CisKKwl0YWJsZV9lbmQgPSByZWFk X21hY19lbnRyeShzYywgbWFjLCAxKTsKKwl3aGlsZSAoIXRhYmxlX2VuZCkgeworCQlmb3IgKGkg PSAwOyBpPEVUSEVSX0FERFJfTEVOOyBpKyspIHsKKwkJCXByaW50ZigiJTAyeCAiLCBtYWNbaV0p OworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJdGFibGVfZW5kID0gcmVhZF9tYWNfZW50cnkoc2Ms IG1hYywgMCk7CisJfQorCisjZW5kaWYKKwkvKkRpc2FibGUgUG9ydCAwICovCisJbWFjX3BvcnRf Y29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmlnIHw9 ICgoMHgxIDw8IDE4KSk7CisJV1I0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29u ZmlnKTsKKworCS8qRGlzYWJsZSBQb3J0IDEgKi8KKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2Ms IE1BQ19QT1JUXzFfQ09ORklHKTsKKwltYWNfcG9ydF9jb25maWcgfD0gKCgweDEgPDwgMTgpKTsK KwlXUjQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisKKwllcnIg PSBlY2VfYWxsb2NhdGVfZG1hKHNjKTsKKwlpZiAoZXJyKSB7CisJCWlmX3ByaW50ZihzYy0+aWZw LCAiZmFpbGVkIGFsbG9jYXRpbmcgZG1hXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwlXUjQo c2MsIFRTX0RFU0NSSVBUT1JfUE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfdHgpOworCVdSNChzYywg VFNfREVTQ1JJUFRPUl9CQVNFX0FERFIsIHNjLT5yaW5nX3BhZGRyX3R4KTsKKworCVdSNChzYywg RlNfREVTQ1JJUFRPUl9QT0lOVEVSLCBzYy0+cmluZ19wYWRkcl9yeCk7CisJV1I0KHNjLCBGU19E RVNDUklQVE9SX0JBU0VfQUREUiwgc2MtPnJpbmdfcGFkZHJfcngpOworCisKKwlXUjQoc2MsIEZT X0RNQV9DT05UUk9MLCAxKTsKKworCXJldHVybiAoMCk7CitvdXQ6CisJcmV0dXJuIChFTlhJTyk7 CisKK30KKworc3RhdGljIHZvaWQKK2VjZV9kZWFjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlz dHJ1Y3QgZWNlX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJ aWYgKHNjLT5pbnRyaGFuZCkKKwkJYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19y ZWMsIHNjLT5pbnRyaGFuZCk7CisKKwlzYy0+aW50cmhhbmQgPSAwOworCisJaWYgKHNjLT5pbnRy aGFuZF9xZikKKwkJYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19xZiwgc2MtPmlu dHJoYW5kX3FmKTsKKworCXNjLT5pbnRyaGFuZF9xZiA9IDA7CisKKwlidXNfZ2VuZXJpY19kZXRh Y2goc2MtPmRldik7CisJaWYgKHNjLT5taWlidXMpCisJCWRldmljZV9kZWxldGVfY2hpbGQoc2Mt PmRldiwgc2MtPm1paWJ1cyk7CisJaWYgKHNjLT5tZW1fcmVzKQorCQlidXNfcmVsZWFzZV9yZXNv dXJjZShkZXYsIFNZU19SRVNfSU9QT1JULAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5tZW1fcmVz KSwgc2MtPm1lbV9yZXMpOworCXNjLT5tZW1fcmVzID0gMDsKKwlpZiAoc2MtPmlycV9yZXNfcmVj KQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLAorCQkgICAgcm1hbl9n ZXRfcmlkKHNjLT5pcnFfcmVzX3JlYyksIHNjLT5pcnFfcmVzX3JlYyk7CisKKwlpZiAoc2MtPmly cV9yZXNfcWYpCisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsCisJCSAg ICBybWFuX2dldF9yaWQoc2MtPmlycV9yZXNfcWYpLCBzYy0+aXJxX3Jlc19xZik7CisKKwlpZiAo c2MtPmlycV9yZXNfcWYpCisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEs CisJCSAgICBybWFuX2dldF9yaWQoc2MtPmlycV9yZXNfc3RhdHVzKSwgc2MtPmlycV9yZXNfc3Rh dHVzKTsKKworCXNjLT5pcnFfcmVzX3JlYyA9IDA7CisJc2MtPmlycV9yZXNfcWYgPSAwOworCXNj LT5pcnFfcmVzX3N0YXR1cyA9IDA7CisJRUNFX1RYTE9DS19ERVNUUk9ZKHNjKTsKKwlFQ0VfUlhM T0NLX0RFU1RST1koc2MpOworCisJZWNlX2ZyZWVfZGVzY19kbWFfdHgoc2MpOworCWVjZV9mcmVl X2Rlc2NfZG1hX3J4KHNjKTsKKworCisJcmV0dXJuOworfQorCisvKgorICogQ2hhbmdlIG1lZGlh IGFjY29yZGluZyB0byByZXF1ZXN0LgorICovCitzdGF0aWMgaW50CitlY2VfaWZtZWRpYV91cGQo c3RydWN0IGlmbmV0ICppZnApCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3Nv ZnRjOworCXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCWludAllcnJvcjsKKworCW1paSA9IGRldmlj ZV9nZXRfc29mdGMoc2MtPm1paWJ1cyk7CisJRUNFX0xPQ0soc2MpOworCWVycm9yID0gbWlpX21l ZGlhY2hnKG1paSk7CisJRUNFX1VOTE9DSyhzYyk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8q CisgKiBOb3RpZnkgdGhlIHdvcmxkIHdoaWNoIG1lZGlhIHdlJ3JlIHVzaW5nLgorICovCitzdGF0 aWMgdm9pZAorZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRp YXJlcSAqaWZtcikKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJ c3RydWN0IG1paV9kYXRhICptaWk7CisKKwltaWkgPSBkZXZpY2VfZ2V0X3NvZnRjKHNjLT5taWli dXMpOworCUVDRV9MT0NLKHNjKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwlpZm1yLT5pZm1fYWN0 aXZlID0gbWlpLT5taWlfbWVkaWFfYWN0aXZlOworCWlmbXItPmlmbV9zdGF0dXMgPSBtaWktPm1p aV9tZWRpYV9zdGF0dXM7CisJRUNFX1VOTE9DSyhzYyk7Cit9CisKKworc3RhdGljIHZvaWQKK2Vj ZV90aWNrKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1 Y3QgbWlpX2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0 YyhzYy0+bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJbWlpX3Rp Y2sobWlpKTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0IG9uZSBzZWNvbmQg ZnJvbSBub3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGlj aywgc2MpOworfQorCisKK3N0YXRpYyB1aW50MzJfdCByZWFkX21hY19lbnRyeShzdHJ1Y3QgZWNl X3NvZnRjICplYywKKwkJCSAgICAgICB1aW50OF90ICptYWNfcmVzdWx0LAorCWludCBmaXJzdCkK K3sKKwl1aW50MzJfdCAgaWk7CisJc3RydWN0IGFybF90YWJsZV9lbnRyeV90IGVudHJ5OworCXVp bnQzMl90ICplbnRyeV92YWw7CisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwg MCk7CisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgMCk7CisJV1I0KGVjLCBB UkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMiwgMCk7CisJaWYgKGZpcnN0KQorCQlXUjQoZWMsIEFS TF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8wLCAweDEpOworCWVsc2UKKwkJV1I0KGVjLCBBUkxfVEFC TEVfQUNDRVNTX0NPTlRST0xfMCwgMHgyKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsg aWkrKykgeworCQlpZiAoUkQ0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSkgJiAoMHgx KSkKKwkJCWJyZWFrOworCX0KKwllbnRyeV92YWwgPSAodWludDMyX3QqKSAoJmVudHJ5KTsKKwll bnRyeV92YWxbMF0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xKTsKKwllbnRy eV92YWxbMV0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yKTsKKworCWlmICht YWNfcmVzdWx0KQorCQltZW1jcHkobWFjX3Jlc3VsdCwgZW50cnkubWFjX2FkZHIsIEVUSEVSX0FE RFJfTEVOKTsKKworCisJcmV0dXJuIGVudHJ5LnRhYmxlX2VuZDsKK30KKworCitzdGF0aWMgdWlu dDMyX3Qgd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorCQkJCSAg ICAgIHVpbnQzMl90IGZpbHRlciwKKwkJCQkgICAgICB1aW50MzJfdCB2bGFuX21hYywKKwkJCQkg ICAgICB1aW50MzJfdCB2bGFuX2dpZCwKKwkJCQkgICAgICB1aW50MzJfdCBhZ2VfZmllbGQsCisJ CQkJICAgICAgdWludDMyX3QgcG9ydF9tYXAsCisJCQkJICAgICAgY29uc3QgdWludDhfdCAqbWFj X2FkZHIpCit7CisJdWludDMyX3QgIGlpOworCXVpbnQzMl90ICplbnRyeV92YWw7CisJc3RydWN0 IGFybF90YWJsZV9lbnRyeV90IGVudHJ5OworCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVu dHJ5KSk7CisKKwllbnRyeS5maWx0ZXIgPSBmaWx0ZXI7CisJZW50cnkudmxhbl9tYWMgPSB2bGFu X21hYzsKKwllbnRyeS52bGFuX2dpZCA9IHZsYW5fZ2lkOworCWVudHJ5LmFnZV9maWVsZCA9IGFn ZV9maWVsZDsKKwllbnRyeS5wb3J0X21hcCA9IHBvcnRfbWFwOworCW1lbWNweShlbnRyeS5tYWNf YWRkciwgbWFjX2FkZHIsIEVUSEVSX0FERFJfTEVOKTsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJf dCopICgmZW50cnkpOworCisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMCk7 CisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgMCk7CisJV1I0KGVjLCBBUkxf VEFCTEVfQUNDRVNTX0NPTlRST0xfMiwgMCk7CisKKwlXUjQoZWMsIEFSTF9UQUJMRV9BQ0NFU1Nf Q09OVFJPTF8xLCBlbnRyeV92YWxbMF0pOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05U Uk9MXzIsIGVudHJ5X3ZhbFsxXSk7CisKKwkvKiBpc3N1ZSB0aGUgd3JpdGUgY29tbWFuZCAqLwor CVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsICgweDEgPDwgMykpOworCisJZm9y IChpaSA9IDA7IGlpIDwgMHgxMDAwOyBpaSsrKSB7CisJCWlmIChSRDQoZWMsIEFSTF9UQUJMRV9B Q0NFU1NfQ09OVFJPTF8xKSAmICgweDEpKQorCQkJcmV0dXJuIDE7IC8qd3JpdGUgb2sqLworCX0K KwkvKiB3cml0ZSBmYWlsZWQqLworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHJlbW92 ZV9tYWNfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqc2MsCisJCQkJIHVpbnQ4X3QgKm1hYykKK3sK KwkvKiBpbnZhbGlkIGFnZV9maWVsZCBtZWFuIGVyYXNlIHRoaXMgZW50cnkqLworCXdyaXRlX2Fy bF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCQkgICAgICBJTlZBTElE X0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkJCSAgICAgIG1hYyk7CisKK30KKworCitzdGF0aWMgdm9p ZCBhZGRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAorCQkJICB1aW50OF90ICptYWMp Cit7CisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkJ CSAgICAgIE5FV19FTlRSWSwgVkxBTjBfR1JPVVAsCisJCQkgICAgICBtYWMpOworfQorCisvKioK KyAqIFRoZSBiZWhhdmlvciBvZiBBUkwgdGFibGUgcmVhZGluZyBhbmQgZGVsZXRpb24gaXMgbm90 IHdlbGwgZGVmaW5lZAorICogaW4gdGhlIGRvY3VtZW50YXRpb24uIFRvIGJlIHNhZmUsIGFsbCBt YWMgYWRkcmVzc2VzIGFyZSBwdXQgdG8gYQorICogbGlzdCwgdGhlbiBkZWxldGVkLgorICoKKyAq Lworc3RhdGljIHZvaWQgY2xlYXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMsIGlu dCBpbmNsdWRlX3RoaXNfbWFjKQoreworCWludCB0YWJsZV9lbmQ7CisJc3RydWN0IG1hY19saXN0 ICogdGVtcDsKKwlzdHJ1Y3QgbWFjX2xpc3QgKiBtYWNfbGlzdF9oZWFkZXI7CisJc3RydWN0IG1h Y19saXN0ICogY3VycmVudDsKKwljaGFyIG1hY1tFVEhFUl9BRERSX0xFTl07CisKKwljdXJyZW50 ID0gMDsKKwltYWNfbGlzdF9oZWFkZXIgPSAwOworCisJdGFibGVfZW5kID0gcmVhZF9tYWNfZW50 cnkoZWMsIG1hYywgMSk7CisJd2hpbGUgKCF0YWJsZV9lbmQpIHsKKwkJaWYgKCFpbmNsdWRlX3Ro aXNfbWFjICYmCisJCSAgICBtZW1jbXAobWFjLCBteV92bGFuMF9tYWMsIEVUSEVSX0FERFJfTEVO KT09MCkgeworCQkJLyogcmVhZCBuZXh0IGVudHJ5ICovCisJCQl0YWJsZV9lbmQgPSByZWFkX21h Y19lbnRyeShlYywgbWFjLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGVtcCA9IChzdHJ1 Y3QgbWFjX2xpc3QqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG1hY19saXN0KSxNX0RFVkJVRiwgTV9O T1dBSVQgfCBNX1pFUk8pOworCQltZW1jcHkodGVtcC0+bWFjX2FkZHIsIG1hYywgRVRIRVJfQURE Ul9MRU4pOworCQl0ZW1wLT5uZXh0ID0gMDsKKwkJaWYgKG1hY19saXN0X2hlYWRlcikgeworCQkJ Y3VycmVudC0+bmV4dCA9IHRlbXA7CisJCQljdXJyZW50ID0gdGVtcDsKKwkJfSBlbHNlIHsKKwkJ CW1hY19saXN0X2hlYWRlciA9IHRlbXA7CisJCQljdXJyZW50ID0gdGVtcDsKKwkJfQorCQkvKnJl YWQgbmV4dCAqLworCQl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRyeShlYywgbWFjLCAwKTsKKwl9 CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVhZGVyOworCisJd2hpbGUgKGN1cnJlbnQpIHsKKwkJ cmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVudC0+bWFjX2FkZHIpOworCQl0ZW1wID0gY3VycmVu dDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCWZyZWUodGVtcCwgTV9ERVZCVUYpOwor CX0KK30KKworCisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2xhbl9wb3J0KHN0cnVjdCBlY2Vfc29m dGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWludDMyX3Qgc3dfY29uZmlnOworCXVpbnQzMl90 IG1hY19wb3J0X2NvbmZpZzsKKworCisJLyoKKwkgKiBDb25maWd1cmUKKwkgKi8KKwlzd19jb25m aWcgPSBSRDQoc2MsIFNXSVRDSF9DT05GSUcpOworCS8qIGVuYWJsZSBmYXN0IGFnaW5nICovCisJ c3dfY29uZmlnIHw9ICgweEYpOworCS8qIENSQyBzdHJpcHBpbmcgKi8KKwkvL3N3X2NvbmZpZyB8 PSAoMHgxIDw8IDIxKTsKKwkvKiBJVkwgbGVhcm5pbmcgKi8KKwlzd19jb25maWcgfD0gKDB4MSA8 PCAyMik7CisJLyogSE5BVCBkaXNhYmxlICovCisJc3dfY29uZmlnICY9IH4oMHgxIDw8IDIzKTsK KworCXN3X2NvbmZpZyB8PSAoMSA8PCAyOSB8IDEgPDwgMzAgfCAxIDw8IDI4KTsKKworCVdSNChz YywgU1dJVENIX0NPTkZJRywgc3dfY29uZmlnKTsKKworCXN3X2NvbmZpZyA9IFJENChzYywgU1dJ VENIX0NPTkZJRyk7CisKKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09O RklHKTsKKworCWlmICghKG1hY19wb3J0X2NvbmZpZyAmIDB4MSkgfHwgKG1hY19wb3J0X2NvbmZp ZyAmIDB4MikpCisJCWlmX3ByaW50ZihzYy0+aWZwLCAiU1RSOTEwNDogTGluayBEb3duLCAweCUw OHghXG4iLAorCQkgICAgICAgbWFjX3BvcnRfY29uZmlnKTsKKwllbHNlIHsKKwkJV1I0KHNjLCBN QUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHNldF9wdmlkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcG9ydDAsIGlu dCBwb3J0MSwgaW50IGNwdSkKK3sKKwl1aW50MzJfdCB2YWw7CisJdmFsID0gUkQ0KHNjLCBWTEFO X1BPUlRfUFZJRCkgJiAofigweDcgPDwgMCkpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZh bCk7CisJdmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKHBvcnQwKSAmIDB4MDcpOwor CVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisJdmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRf UFZJRCkgJiAofigweDcgPDwgNCkpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisJ dmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKChwb3J0MSkgJiAweDA3KSA8PCA0KTsK KwlXUjQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCisJdmFsID0gUkQ0KHNjLCBWTEFOX1BP UlRfUFZJRCkgJiAofigweDcgPDwgOCkpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7 CisJdmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKChjcHUpICYgMHgwNykgPDwgOCk7 CisJV1I0KHNjLCBWTEFOX1BPUlRfUFZJRCwgdmFsKTsKKworfQorCisKKy8qIFZMQU4gcmVsYXRl ZCBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgc2V0X3ZsYW5fdmlkKHN0cnVjdCBlY2Vfc29m dGMgKnNjLCBpbnQgdmxhbikKK3sKKwljb25zdCB1aW50MzJfdCByZWdzW10gPSB7CisJCVZMQU5f VklEXzBfMSwKKwkJVkxBTl9WSURfMF8xLAorCQlWTEFOX1ZJRF8yXzMsCisJCVZMQU5fVklEXzJf MywKKwkJVkxBTl9WSURfNF81LAorCQlWTEFOX1ZJRF80XzUsCisJCVZMQU5fVklEXzZfNywKKwkJ VkxBTl9WSURfNl83CisJfTsKKworCWNvbnN0IGludCB2aWRzW10gPSB7CisJCVZMQU4wX1ZJRCwK KwkJVkxBTjFfVklELAorCQlWTEFOMl9WSUQsCisJCVZMQU4zX1ZJRCwKKwkJVkxBTjRfVklELAor CQlWTEFONV9WSUQsCisJCVZMQU42X1ZJRCwKKwkJVkxBTjdfVklECisJfTsKKworCXVpbnQzMl90 IHZhbDsKKwl1aW50MzJfdCByZWc7CisJaW50IHZpZDsKKworCXJlZyA9IHJlZ3Nbdmxhbl07CisJ dmlkID0gdmlkc1t2bGFuXTsKKworCWlmICh2bGFuICYgMSkgeworCQl2YWwgPSBSRDQoc2MsIHJl Zyk7CisJCVdSNChzYywgcmVnLCB2YWwgJiAofigweEZGRiA8PCAwKSkpOworCQl2YWwgPSBSRDQo c2MsIHJlZyk7CisJCVdSNChzYywgcmVnLCB2YWx8KCh2aWQgJiAweEZGRikgPDwgMCkpOworCX0g ZWxzZSB7CisJCXZhbCA9IFJENChzYywgcmVnKTsKKwkJV1I0KHNjLCByZWcsIHZhbCAmICh+KDB4 RkZGIDw8IDEyKSkpOworCQl2YWwgPSBSRDQoc2MsIHJlZyk7CisJCVdSNChzYywgcmVnLCB2YWx8 KCh2aWQgJiAweEZGRikgPDwgMTIpKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3ZsYW5f bWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbikKK3sKKwl1bnNpZ25lZCBjaGFy IHNoaWZ0OworCXVpbnQzMl90IHZhbDsKKwlpbnQgZ3JvdXA7CisJY29uc3QgaW50IGdyb3Vwc1td ID0geworCQlWTEFOMF9HUk9VUCwKKwkJVkxBTjFfR1JPVVAsCisJCVZMQU4yX0dST1VQLAorCQlW TEFOM19HUk9VUCwKKwkJVkxBTjRfR1JPVVAsCisJCVZMQU41X0dST1VQLAorCQlWTEFONl9HUk9V UCwKKwkJVkxBTjdfR1JPVVAKKwl9OworCisJZ3JvdXAgPSBncm91cHNbdmxhbl07CisKKwlzaGlm dCA9IHZsYW4qMzsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fTUVNQkVSX1BPUlRfTUFQKSAmICAofigw eDcgPDwgc2hpZnQpKTsKKwlXUjQoc2MsIFZMQU5fTUVNQkVSX1BPUlRfTUFQLCB2YWwpOworCXZh bCA9IFJENChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVApOworCVdSNChzYywgVkxBTl9NRU1CRVJf UE9SVF9NQVAsIHZhbCB8ICgoZ3JvdXAgJiAweDcpIDw8IHNoaWZ0KSk7Cit9CisKKworc3RhdGlj IHZvaWQgc2V0X3ZsYW5fdGFnKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbikKK3sKKwl1 bnNpZ25lZCBjaGFyIHNoaWZ0OworCXVpbnQzMl90IHZhbDsKKworCWludCB0YWcgPSAwOyAvKiBW TEFOMF9WTEFOX1RBRyAuLiBWTEFON19WTEFOX1RBRyovCisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2 YWwgPSBSRDQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQKSAmICAofigweDcgPDwgc2hpZnQpKTsKKwlX UjQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwpOworCXZhbCA9IFJENChzYywgVkxBTl9UQUdf UE9SVF9NQVApOworCVdSNChzYywgVkxBTl9UQUdfUE9SVF9NQVAsIHZhbCB8ICgodGFnICYgMHg3 KSA8PCBzaGlmdCkpOworfQorCisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2NwdV9wb3J0KHN0cnVj dCBlY2Vfc29mdGMgKnNjKQoreworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZpZzsKKwlpbnQgaTsK KworCWNwdV9wb3J0X2NvbmZpZyA9IFJENChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwkvKlNBIGxl YXJuaW5nIERpc2FibGUgKi8KKwljcHVfcG9ydF9jb25maWcgfD0gKDB4MSA8PCAxOSk7CisJLypv ZmZzZXQgNGJ5dGUgKzIgKi8KKwljcHVfcG9ydF9jb25maWcgJj0gfigxIDw8IDMxKTsKKworCisJ V1I0KHNjLCBDUFVfUE9SVF9DT05GSUcsIGNwdV9wb3J0X2NvbmZpZyk7CisKKwlpZiAoIXdyaXRl X2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCQkJICAgU1RBVElD X0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkJCQkgICBteV92bGFuMF9tYWMpKSB7CisJCXJldHVybiAx OworCX0KKworCXNldF9wdmlkKHNjLCAgUE9SVDBfUFZJRCwgUE9SVDFfUFZJRCwgQ1BVX1BPUlRf UFZJRCk7CisKKwlmb3IgKGk9MDsgaTw4OyBpKyspIHsKKwkJc2V0X3ZsYW5fdmlkKHNjLCBpKTsK KwkJc2V0X3ZsYW5fbWVtYmVyKHNjLCBpKTsKKwkJc2V0X3ZsYW5fdGFnKHNjLCBpKTsKKwl9CisK KwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHQgc3RhdHVzIHNvdXJjZXMgKi8KKwlXUjQoc2MsIElO VEVSUlVQVF9NQVNLLCAweGZmZmYxZmZmKTsKKworCS8qIGNsZWFyIHByZXZpb3VzIGludGVycnVw dCBzb3VyY2VzICovCisJV1I0KHNjLCBJTlRFUlJVUFRfU1RBVFVTLCAweDAwMDAxRkZGKTsKKwor CVdSNChzYywgVFNfRE1BX0NPTlRST0wsIDApOworCVdSNChzYywgRlNfRE1BX0NPTlRST0wsIDAp OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNl X3NvZnRjICpzYykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdGF0aWMgaW50IGd3X3BoeV90eXBl OworCisJZ3dfcGh5X3R5cGUgPSBnZXRfcGh5X3R5cGUoc2MpOworCWlmIChnd19waHlfdHlwZSAh PSBJQ19QTFVTX1BIWSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJQSFkgdHlwZSBpcyBu b3QgcmVjb2duaXplZCAoJWQpXG4iLAorCQkgICAgICAgZ3dfcGh5X3R5cGUpOworCQlyZXR1cm4g LTE7CisJfQorCXN0YXR1cyA9IGNvbmZpZ3VyZV9sYW5fcG9ydChzYywgZ3dfcGh5X3R5cGUpOwor CWNvbmZpZ3VyZV9jcHVfcG9ydChzYyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQg c2V0X21hY19hZGRyZXNzKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBjb25zdCBjaGFyICptYWMsIGlu dCBtYWNfbGVuKQoreworCS8qIGludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhpcyBlbnRy eSovCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkJ CSAgICAgIElOVkFMSURfRU5UUlksIFZMQU4wX0dST1VQLAorCQkJICAgICAgbWFjKTsKKwltZW1j cHkobXlfdmxhbjBfbWFjLCBtYWMsIEVUSEVSX0FERFJfTEVOKTsKKworCXdyaXRlX2FybF90YWJs ZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCQkgICAgICBTVEFUSUNfRU5UUlks IFZMQU4wX0dST1VQLAorCQkJICAgICAgbWFjKTsKK30KKworCitzdGF0aWMgdm9pZAorZWNlX3Nl dF9tYWMoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIHVfY2hhciAqZWFkZHIpCit7CisJbWVtY3B5KG15 X3ZsYW4wX21hYywgZWFkZHIsIEVUSEVSX0FERFJfTEVOKTsKKwlzZXRfbWFjX2FkZHJlc3Moc2Ms IGVhZGRyLCBFVEhFUl9BRERSX0xFTik7Cit9CisKKy8qIFRPRE86IHRoZSBkZXZpY2UgZG9lc24n dCBoYXZlIE1BQywKKyAqIHNob3VsZCByZWFkIHRoZSBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiBG TEFTSAorICovCitzdGF0aWMgaW50CitlY2VfZ2V0X21hYyhzdHJ1Y3QgZWNlX3NvZnRjICpzYywg dV9jaGFyICplYWRkcikKK3sKKwlyZXR1cm4gKEVOWElPKTsKK30KKworLyp2ZXJzaW9uIGZvciBv bmUgc2VnbWVudCBvbmx5Ki8KK3N0YXRpYyB2b2lkCitlY2VfaW50cl9yeF9sb2NrZWQoc3RydWN0 IGVjZV9zb2Z0YyAqc2MsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5p ZnA7CisJc3RydWN0IHJ4X2Rlc2NfaW5mbyAqcnhkZXNjOworCisJdWludDMyX3Qgc3RhdHVzOwor CisJaW50IGZzc2RfY3VycjsKKwlpbnQgZnNzZDsKKwlpbnQgcnhjb3VudDsKKwlpbnQgaTsKKwlp bnQgaWR4OworCXN0cnVjdCBtYnVmICptYjsKKwlldGhfcnhfZGVzY190ICpkZXNjOworCisJZnNz ZF9jdXJyID0gUkQ0KHNjLCBGU19ERVNDUklQVE9SX1BPSU5URVIpOworCisJZnNzZCA9IChmc3Nk X2N1cnIgLSAodWludDMyX3Qpc2MtPnJpbmdfcGFkZHJfcngpPj40OworCisJZGVzYyA9IHNjLT5y eF9kZXNjW3NjLT5sYXN0X3J4XS5kZXNjOworCisJLypwcmVwYXJlIHRvIHJlYWQgdGhlIGRhdGEg aW4gdGhlIHJpbmcqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfcngsCisJICAg IHNjLT5kbWFtYXBfcmluZ19yeCwKKwkgICAgQlVTX0RNQVNZTkNfUE9TVFJFQUQgfCBCVVNfRE1B U1lOQ19QT1NUV1JJVEUpOworCisKKwlpZiAoZnNzZCA+IHNjLT5sYXN0X3J4KSB7CisJCXJ4Y291 bnQgPSBmc3NkIC0gc2MtPmxhc3Rfcng7CisJfSBlbHNlIGlmIChmc3NkIDwgc2MtPmxhc3Rfcngp IHsKKwkJcnhjb3VudCA9IChFQ0VfTUFYX1JYX0JVRkZFUlMgLSBzYy0+bGFzdF9yeCkgKyBmc3Nk OworCX0gZWxzZSB7CisKKwkJaWYgKGRlc2MtPmNvd24gPT0gMCkgeworCQkJcmV0dXJuOworCQl9 IGVsc2UgeworCQkJcnhjb3VudCA9IEVDRV9NQVhfUlhfQlVGRkVSUzsKKwkJfQorCX0KKworCisJ Zm9yIChpPSAwOyBpPHJ4Y291bnQ7IGkrKykgeworCQkvKiBHZXQgc3RhdHVzICovCisJCXN0YXR1 cyA9IGRlc2MtPmNvd247CisJCWlmICghc3RhdHVzKSB7CisJCQlicmVhazsKKwkJfQorCisJCWlk eCA9IHNjLT5sYXN0X3J4OworCQlyeGRlc2MgPSAmc2MtPnJ4X2Rlc2NbaWR4XTsKKwkJbWIgPSBy eGRlc2MtPmJ1ZmY7CisKKwkJaWYgKGRlc2MtPmxlbmd0aCA8IEVUSEVSX01JTl9MRU4gLSBFVEhF Ul9DUkNfTEVOIHx8CisJCSAgICBkZXNjLT5sZW5ndGggPiBFVEhFUl9NQVhfTEVOIC0gRVRIRVJf Q1JDX0xFTiArIEVUSEVSX1ZMQU5fRU5DQVBfTEVOKSB7CisJCQlpZnAtPmlmX2llcnJvcnMrKzsK KwkJCWRlc2MtPmNvd24gPSAwOworCQkJZGVzYy0+bGVuZ3RoID0gTUNMQllURVMgLSAyOworCQkJ Lypwcm9jZXNzIG5leHQgcGFja2V0Ki8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGVjZV9u ZXdfcnhidWYoc2MsIHJ4ZGVzYykhPTApIHsKKwkJCWlmcC0+aWZfaXFkcm9wcysrOworCQkJZGVz Yy0+Y293biA9IDA7CisJCQlkZXNjLT5sZW5ndGggPSBNQ0xCWVRFUyAtIDI7CisJCQlicmVhazsK KwkJfQorCisJCS8qKgorCQkgKiB0aGUgZGV2aWNlIHdpbGwgd3JpdGUgdG8gWCsyIFNvIHdlIG5l ZWQgdG8gYWRqdXN0CisJCSAqIHRoaXMgYWZ0ZXIgdGhlIHBhY2tldCBpcyByZWNlaXZlZC4KKwkJ ICovCisKKwkJbWItPm1fZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3RoZHIubGVu ID0gZGVzYy0+bGVuZ3RoOworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQltYi0+bV9w a3RoZHIucmN2aWYgPSBpZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9SWENT VU0pICE9IDApIHsKKwkJCS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlmICggKCFk ZXNjLT5sNGYpICAmJiAoZGVzYy0+cHJvdCE9MykpIHsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9m bGFncyB8PSBDU1VNX0lQX0NIRUNLRUQ7CisJCQkJbWItPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0g Q1NVTV9JUF9WQUxJRDsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMHhmZmZmOworCQkJ fQorCQl9CisJCUVDRV9SWFVOTE9DSyhzYyk7CisJCSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBtYik7 CisJCUVDRV9SWExPQ0soc2MpOworCisKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2MtPmxlbmd0 aCA9IE1DTEJZVEVTLTI7CisKKwkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwK KwkJCQlzYy0+ZG1hbWFwX3JpbmdfcngsCisJCQkJQlVTX0RNQVNZTkNfUFJFUkVBRCB8IEJVU19E TUFTWU5DX1BSRVdSSVRFKTsKKworCQlpZiAoc2MtPmxhc3Rfcng9PUVDRV9NQVhfUlhfQlVGRkVS Uy0xKSB7CisJCQlzYy0+bGFzdF9yeCA9IDA7CisJCX0gZWxzZSB7CisJCQlzYy0+bGFzdF9yeCsr OworCQl9CisJCWRlc2MgPSBzYy0+cnhfZGVzY1tzYy0+bGFzdF9yeF0uZGVzYzsKKwl9CisKKwkv KiBzeW5jIHVwZGF0ZWQgZmxhZ3MgKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5n X3J4LAorCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIEJVU19ETUFTWU5DX1BSRVJFQUQg fCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQK K2VjZV9pbnRyX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1 Y3QgZWNlX3NvZnRjICpzYyA9IGFyZzsKKwlFQ0VfUlhMT0NLKHNjKTsKKwllY2VfaW50cl9yeF9s b2NrZWQoc2MsIC0xKTsKKwlFQ0VfUlhVTkxPQ0soc2MpOworfQorCisKK3N0YXRpYyB2b2lkCitl Y2VfaW50cih2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3Ry dWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElG Rl9EUlZfUlVOTklORykgPT0gMCkgeworCQlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJ cmV0dXJuOworCX0KKworCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19pbnRy X3Rhc2spOworCisJaWYgKCFJRlFfRFJWX0lTX0VNUFRZKCZpZnAtPmlmX3NuZCkpCisJCXRhc2tx dWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY190eF90YXNrKTsKK30KKworc3RhdGljIHZv aWQKK2VjZV9pbnRyX3N0YXR1cyh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2Mg PSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWludCBzdGF0OworCisJc3Rh dCA9IFJENChzYywgSU5URVJSVVBUX1NUQVRVUyk7CisKKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFU VVMsIHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykg IT0gMCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9NQVNLKSE9MCkKKwkJCWlmcC0+aWZfaXFkcm9w cysrOworCX0KK30KKworc3RhdGljIHZvaWQKK2VjZV9jbGVhbnVwX2xvY2tlZChzdHJ1Y3QgZWNl X3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVzY190ICpkZXNjOworCisJaWYgKHNjLT50eF9jb25z PT1zYy0+dHhfcHJvZCkgcmV0dXJuOworCisJLypwcmVwYXJlIHRvIHJlYWQgdGhlIHJpbmcgKG93 bmVyIGJpdCkqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfdHgsCisJICAgIHNj LT5kbWFtYXBfcmluZ190eCwKKwkgICAgQlVTX0RNQVNZTkNfUE9TVFJFQUQgfCBCVVNfRE1BU1lO Q19QT1NUV1JJVEUpOworCisJd2hpbGUgKHNjLT50eF9jb25zIT1zYy0+dHhfcHJvZCkgeworCQlk ZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNdLmRlc2M7CisJCWlmIChkZXNjLT5jb3duICE9 IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8gKnRkID0gJihzYy0+dHhfZGVzY1tzYy0+dHhf Y29uc10pOworCQkJLyp3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGlzIGRlc2NyaXB0b3IqLworCQkJ LypzeW5jKi8KKwkJCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX2RhdGFfdHgsIHRkLT5kbWFt YXAsCisJCQkJCUJVU19ETUFTWU5DX1BPU1RXUklURSk7CisJCQkvKmFuZCB1bmxvYWQsIHNvIHdl IGNhbiByZXVzZSAqLworCQkJYnVzX2RtYW1hcF91bmxvYWQoc2MtPmRtYXRhZ19kYXRhX3R4LCB0 ZC0+ZG1hbWFwKTsKKwkJCW1fZnJlZW0odGQtPmJ1ZmYpOworCQkJdGQtPmJ1ZmYgPSAwOworCQkJ c2MtPnR4X2NvbnMgPSAoc2MtPnR4X2NvbnMgKyAxKSAlIEVDRV9NQVhfVFhfQlVGRkVSUzsKKwkJ fSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitlY2VfY2xl YW51cF90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRpbmcgX191bnVzZWQpCit7CisJc3RydWN0IGVj ZV9zb2Z0YyAqc2MgPSBhcmc7CisJRUNFX0NMRUFOVVBMT0NLKHNjKTsKKwllY2VfY2xlYW51cF9s b2NrZWQoc2MpOworCUVDRV9DTEVBTlVQVU5MT0NLKHNjKTsKK30KKworCitzdGF0aWMgdm9pZAor ZWNlX2ludHJfdHgodm9pZCAqeHNjKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOwor CXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYg SUZGX0RSVl9SVU5OSU5HKSA9PSAwKSB7CisJCS8qdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc3Rv cCBETUEqLworCQlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0 YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfY2xlYW51cF90YXNrKTsKK30KKwor CitzdGF0aWMgdm9pZAorZWNlX2ludHJfcWYodm9pZCAqeHNjKQoreworCXN0cnVjdCBlY2Vfc29m dGMgKnNjID0geHNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKwlpZiAoKGlmcC0+ aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwKSB7CisJCS8qdGhpcyBzaG91bGQg bm90IGhhcHBlbiwgc3RvcCBETUEqLworCQlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJ cmV0dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfaW50cl90 YXNrKTsKKwlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKK30KKworLyoKKyAqIFJlc2V0IGFu ZCBpbml0aWFsaXplIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitlY2Vpbml0X2xvY2tlZCh2 b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0 ICppZnAgPSBzYy0+aWZwOworIAlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKwl1aW50MzJfdCBjZmdf cmVnOworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZpZzsKKwl1aW50MzJfdCBtYWNfcG9ydF9jb25m aWc7CisKKwl3aGlsZSAoMSkgeworCQljZmdfcmVnID0gUkQ0KHNjLCBCSVNUX1JFU1VMVF9URVNU XzApOworCQlpZiAoKGNmZ19yZWcgJiAoMTw8MTcpKSkKKwkJCWJyZWFrOworCQlERUxBWSgxMDAp OworCX0KKwkvKiBzZXQgdG8gZGVmYXVsdCB2YWx1ZXMgKi8KKwlXUjQoc2MsIFNXSVRDSF9DT05G SUcsIDB4MDA3QUE3QTEpOworCVdSNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIDB4MDA0MjNEMDAp OworCVdSNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIDB4MDA0MjNEODApOworCVdSNChzYywgQ1BV X1BPUlRfQ09ORklHLCAweDAwNEMwMDAwKTsKKworCisJaGFyZHdhcmVfaW5pdChzYyk7CisKKwlt YWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsKKwltYWNfcG9ydF9j b25maWcgJj0gKH4oMHgxIDw8IDE4KSk7CS8qIEVuYWJsZSBQb3J0IDAgKi8KKwlXUjQoc2MsIE1B Q19QT1JUXzBfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisKKwljcHVfcG9ydF9jb25maWcg PSBSRDQoc2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLyogZW5hYmxlIENQVSAqLworCWNwdV9wb3J0 X2NvbmZpZyAmPSB+KDB4MSA8PCAxOCk7CisJV1I0KHNjLCBDUFVfUE9SVF9DT05GSUcsIGNwdV9w b3J0X2NvbmZpZyk7CisKKworCS8qCisJICogU2V0ICdydW5uaW5nJyBmbGFnLCBhbmQgY2xlYXIg b3V0cHV0IGFjdGl2ZSBmbGFnCisJICogYW5kIGF0dGVtcHQgdG8gc3RhcnQgdGhlIG91dHB1dAor CSAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfUlVOTklORzsKKwlpZnAtPmlmX2Ry dl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0Yyhz Yy0+bWlpYnVzKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwkvKiBlbmFibGUgZG1hICovCisJV1I0 KHNjLCBGU19ETUFfQ09OVFJPTCwgMSk7CisKKwljYWxsb3V0X3Jlc2V0KCZzYy0+dGlja19jaCwg aHosIGVjZV90aWNrLCBzYyk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQKK2VjZV9lbmNhcChz dHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0wKQoreworCXN0cnVjdCBpZm5ldCAq aWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFYX0ZSQUdNRU5UXTsKKwlidXNfZG1hbWFw X3QgbWFwcDsKKwlpbnQgZXJyb3I7CisJaW50IHNlZzsKKwlpbnQgbnNlZ3M7CisJaW50IGRlc2Nf bm87CisJZXRoX3R4X2Rlc2NfdCAqZGVzYyA9IDA7CisKKwlpbnQgY3N1bV9mbGFnczsKKworCWlm cCA9IHNjLT5pZnA7CisKKwkvKiBGZXRjaCB1bnVzZWQgbWFwICovCisJbWFwcCA9IHNjLT50eF9k ZXNjW3NjLT50eF9wcm9kXS5kbWFtYXA7CisKKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVm X3NnKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCwgbTAsIHNlZ3MsICZuc2VncywKKwkgICAgQlVT X0RNQV9OT1dBSVQpOworCisJaWYgKGVycm9yICE9IDApIHsKKwkJYnVzX2RtYW1hcF91bmxvYWQo c2MtPmRtYXRhZ19yaW5nX3R4LCBtYXBwKTsKKwkJcmV0dXJuICgoZXJyb3IgIT0gMCkgPyBlcnJv ciA6IC0xKTsKKwl9CisKKworCWRlc2MgPSAmKHNjLT5kZXNjX3R4W3NjLT5kZXNjX2N1cnJfdHhd KTsKKwlzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uZGVzYyA9IGRlc2M7CisJc2MtPnR4X2Rlc2Nb c2MtPnR4X3Byb2RdLmJ1ZmYgPSBtMDsKKwlkZXNjX25vID0gc2MtPmRlc2NfY3Vycl90eDsKKwor CWZvciAoc2VnID0gMDsgc2VnIDwgbnNlZ3M7IHNlZysrKSB7CisKKwkJaWYgKGRlc2MtPmNvd24g PT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJPUjogZGVzY3JpcHRvciBpcyBzdGlsbCB1 c2VkXG4iKTsKKwkJfQorCisJCWRlc2MtPmxlbmd0aCA9IHNlZ3Nbc2VnXS5kc19sZW47CisJCWRl c2MtPmRhdGFfcHRyID0gc2Vnc1tzZWddLmRzX2FkZHI7CisKKwkJaWYgKHNlZyA9PSAwKSB7CisJ CQlkZXNjLT5mcyA9IDE7CisJCX0gZWxzZSB7CisJCQlkZXNjLT5mcyA9IDA7CisJCX0KKwkJaWYg KHNlZz09bnNlZ3MtMSkgeworCQkJZGVzYy0+bHMgPSAxOworCQl9IGVsc2UgeworCQkJZGVzYy0+ bHMgPSAwOworCQl9CisKKwkJY3N1bV9mbGFncyA9IG0wLT5tX3BrdGhkci5jc3VtX2ZsYWdzOwor CisJCWRlc2MtPmZyID0gIDE7CisJCWRlc2MtPnBtYXAgPSAgMTsKKwkJZGVzYy0+aW5zdiA9ICAw OworCQlkZXNjLT5pY28gPSAwOworCQlkZXNjLT50Y28gPSAwOworCQlkZXNjLT51Y28gPSAwOwor CQlkZXNjLT5pbnRlcnJ1cHQgPSAxOworCisJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9JUCkgewor CQkJZGVzYy0+aWNvID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9UQ1ApCisJCQkJZGVz Yy0+dGNvID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9VRFApCisJCQkJZGVzYy0+dWNv ID0gMTsKKwkJfQorCisJCWRlc2MrKzsKKwkJc2MtPmRlc2NfY3Vycl90eCA9IChzYy0+ZGVzY19j dXJyX3R4KzEpICUgRUNFX01BWF9UWF9CVUZGRVJTOworCQlpZiAoc2MtPmRlc2NfY3Vycl90eD09 MCkgeworCQkJZGVzYyA9IChldGhfdHhfZGVzY190ICopJihzYy0+ZGVzY190eFswXSk7CisJCX0K Kwl9CisKKwlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X3Byb2RdLmRlc2M7CisKKwlzYy0+dHhf cHJvZCA9IChzYy0+dHhfcHJvZCsxKSAlIEVDRV9NQVhfVFhfQlVGRkVSUzsKKworCS8qYWZ0ZXIg YWxsIGRlc2NyaXB0b3JzIGFyZSBzZXQsIHdlIHNldCB0aGUgZmxhZyB0byBzdGFydCB0aGUgc2Vu ZGluZyBwcm9jZXNzICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJ ZGVzYy0+Y293biA9IDA7CisJCWRlc2MrKzsKKwkJZGVzY19ubyA9IChkZXNjX25vKzEpICUgRUNF X01BWF9UWF9CVUZGRVJTOworCQlpZiAoZGVzY19ubz09MCkgeworCQkJZGVzYyA9IChldGhfdHhf ZGVzY190ICopJihzYy0+ZGVzY190eFswXSk7CisJCX0KKworCX0KKworCWJ1c19kbWFtYXBfc3lu YyhzYy0+ZG1hdGFnX2RhdGFfdHgsIG1hcHAsICAgIEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKwor CXJldHVybiAoMCk7Cit9CisKKworCisKKy8qCisgKiBkZXF1ZXUgcGFja2V0cyBhbmQgdHJhbnNt aXQKKyAqLworc3RhdGljIHZvaWQKK2VjZXN0YXJ0X2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCkK K3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzdHJ1Y3QgbWJ1ZiAqbTA7CisjaWYgMAorCXN0 cnVjdCBtYnVmICptZGVmOworI2VuZGlmCisJdWludDMyX3QgcXVldWVkID0gMDsKKworCXNjID0g aWZwLT5pZl9zb2Z0YzsKKwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgKElGRl9EUlZfUlVOTklO RyB8IElGRl9EUlZfT0FDVElWRSkpICE9CisJICAgIElGRl9EUlZfUlVOTklORykKKwkJcmV0dXJu OworCisJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ190eCwKKwkgICAgc2MtPmRtYW1h cF9yaW5nX3R4LAorCSAgICBCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RX UklURSk7CisKKwlmb3IgKDs7KSB7CisJCS8qIEdldCBwYWNrZXQgZnJvbSB0aGUgcXVldWUgKi8K KwkJSUZfREVRVUVVRSgmaWZwLT5pZl9zbmQsIG0wKTsKKwkJaWYgKG0wID09IE5VTEwpCisJCQli cmVhazsKKyNpZiAwCisJCWlmIChtMC0+bV9uZXh0ICE9IE5VTEwpIHsKKwkJCW1kZWYgPSBtX2Rl ZnJhZyhtMCwgTV9ET05UV0FJVCk7CisJCQlpZiAobWRlZikgeworCQkJCW0wID0gbWRlZjsKKwkJ CX0KKwkJfQorI2VuZGlmCisJCWlmIChlY2VfZW5jYXAoc2MsIG0wKSkgeworCQkJSUZfUFJFUEVO RCgmaWZwLT5pZl9zbmQsIG0wKTsKKwkJCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfT0FD VElWRTsKKwkJCWJyZWFrOworCQl9CisJCXF1ZXVlZCsrOworCQlCUEZfTVRBUChpZnAsIG0wKTsK Kwl9CisJaWYgKHF1ZXVlZCkgeworCQkvKnN5bmMgdGhlIHJpbmcqLworCQlidXNfZG1hbWFwX3N5 bmMoc2MtPmRtYXRhZ19yaW5nX3R4LCBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJCQkJQlVTX0RNQVNZ TkNfUFJFUkVBRHxCVVNfRE1BU1lOQ19QUkVXUklURSk7CisJCVdSNChzYywgVFNfRE1BX0NPTlRS T0wsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2VjZWluaXQodm9pZCAqeHNjKQoreworCXN0 cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOworCUVDRV9MT0NLKHNjKTsKKwllY2Vpbml0X2xvY2tl ZChzYyk7CisJRUNFX1VOTE9DSyhzYyk7Cit9CisKKworc3RhdGljIHZvaWQKK2VjZV90eF90YXNr KHZvaWQgKmFyZywgaW50IHBlbmRpbmcgX191bnVzZWQpCit7CisJc3RydWN0IGlmbmV0ICppZnA7 CisJaWZwID0gKHN0cnVjdCBpZm5ldCAqKWFyZzsKKwllY2VzdGFydChpZnApOworfQorCisKK3N0 YXRpYyB2b2lkCitlY2VzdGFydChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3Nv ZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJRUNFX1RYTE9DSyhzYyk7CisJZWNlc3RhcnRfbG9j a2VkKGlmcCk7CisJRUNFX1RYVU5MT0NLKHNjKTsKK30KKworLyoKKyAqIFR1cm4gb2ZmIGludGVy cnVwdHMsIGFuZCBzdG9wIHRoZSBuaWMuICBDYW4gYmUgY2FsbGVkIHdpdGggc2MtPmlmcCBOVUxM CisgKiBzbyBiZSBjYXJlZnVsLgorICovCitzdGF0aWMgdm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNl X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJdWludDMyX3Qg bWFjX3BvcnRfY29uZmlnOworCisKKwlXUjQoc2MsIFRTX0RNQV9DT05UUk9MLCAwKTsKKwlXUjQo c2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKworCWlmIChpZnApIHsKKwkJaWZwLT5pZl9kcnZfZmxh Z3MgJj0gfihJRkZfRFJWX1JVTk5JTkcgfCBJRkZfRFJWX09BQ1RJVkUpOworCX0KKworCWNhbGxv dXRfc3RvcCgmc2MtPnRpY2tfY2gpOworCisJLypEaXNhYmxlIFBvcnQgMCAqLworCW1hY19wb3J0 X2NvbmZpZyA9IFJENChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8 PSAoKDB4MSA8PCAxOCkpOworCVdSNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIG1hY19wb3J0X2Nv bmZpZyk7CisKKwkvKkRpc2FibGUgUG9ydCAxICovCisJbWFjX3BvcnRfY29uZmlnID0gUkQ0KHNj LCBNQUNfUE9SVF8xX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmlnIHw9ICgoMHgxIDw8IDE4KSk7 CisJV1I0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qIGRp c2FibGUgYWxsIGludGVycnVwdCBzdGF0dXMgc291cmNlcyAqLworCVdSNChzYywgSU5URVJSVVBU X01BU0ssIDB4MDAwMDFGRkYpOworCisJLyogY2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJj ZXMgKi8KKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFUVVMsIDB4MDAwMDFGRkYpOworCisJV1I0KHNj LCBTV0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25maWcpOworCVdSNChzYywgQ1BVX1BP UlRfQ09ORklHLCBpbml0aWFsX2NwdV9jb25maWcpOworCVdSNChzYywgTUFDX1BPUlRfMF9DT05G SUcsIGluaXRpYWxfcG9ydDBfY29uZmlnKTsKKwlXUjQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBp bml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVhcl9tYWNfZW50cmllcyhzYywgMSk7CisKKwor fQorCitzdGF0aWMgdm9pZAorZWNlX3Jlc3RhcnQoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJ c3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCisJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZG X0RSVl9SVU5OSU5HOworCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisJ LyplbmFibGUgcG9ydCAwKi8KKwlXUjQoc2MsIFBPUlRfMF9DT05GSUcsCisJICAgIFJENChzYywg UE9SVF8wX0NPTkZJRykgJiB+KCgweDEgPDwgMTgpKSk7CisJV1I0KHNjLCBJTlRFUlJVUFRfTUFT SywgMHgwMDAwMDAwMCk7CisJV1I0KHNjLCBGU19ETUFfQ09OVFJPTCwgMSk7CisJY2FsbG91dF9y ZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywgc2MpOworfQorCisKKworc3RhdGljIHZv aWQKK3NldF9maWx0ZXIoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0CQkq aWZwOworCXN0cnVjdCBpZm11bHRpYWRkcgkqaWZtYTsKKwl1aW50MzJfdCBtYWNfcG9ydF9jb25m aWc7CisKKwlpZnAgPSBzYy0+aWZwOworCisJY2xlYXJfbWFjX2VudHJpZXMoc2MsIDApOworCWlm IChpZnAtPmlmX2ZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IGlmcC0+aWZfZmxhZ3MgJiBJRkZfUFJP TUlTQykgeworCQltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsK KwkJbWFjX3BvcnRfY29uZmlnICY9ICh+KDB4MSA8PCAyNykpOworCQltYWNfcG9ydF9jb25maWcg Jj0gKH4oMHgxIDw8IDI2KSk7CisJCVdSNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIG1hY19wb3J0 X2NvbmZpZyk7CisJCXJldHVybjsKKwl9CisJaWZfbWFkZHJfcmxvY2soaWZwKTsKKwlUQUlMUV9G T1JFQUNIKGlmbWEsICZpZnAtPmlmX211bHRpYWRkcnMsIGlmbWFfbGluaykgeworCQlpZiAoaWZt YS0+aWZtYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfTElOSykKKwkJCWNvbnRpbnVlOworCQlhZGRf bWFjX2VudHJ5KHNjLCBMTEFERFIoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKWlmbWEtPmlmbWFfYWRk cikpOworCX0KKwlpZl9tYWRkcl9ydW5sb2NrKGlmcCk7Cit9CisKK3N0YXRpYyBpbnQKK2VjZWlv Y3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpCit7CisJc3Ry dWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworIAlzdHJ1Y3QgbWlpX2RhdGEgKm1p aTsKKyAJc3RydWN0IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICopZGF0YTsKKwlpbnQgbWFz aywgZXJyb3IgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJ RUNFX0xPQ0soc2MpOworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApID09IDAgJiYKKwkJ ICAgIGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSB7CisJCQlpZnAtPmlmX2Ry dl9mbGFncyAmPSB+SUZGX0RSVl9SVU5OSU5HOworCQkJZWNlc3RvcChzYyk7CisJCX0gZWxzZSB7 CisJCQkvKiByZWluaXRpYWxpemUgY2FyZCBvbiBhbnkgcGFyYW1ldGVyIGNoYW5nZSAqLworCQkJ aWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSAmJgorCQkJICAgICEoaWZwLT5pZl9kcnZfZmxh Z3MgJiBJRkZfRFJWX1JVTk5JTkcpCisJCQkgICApeworCQkJCWVjZV9yZXN0YXJ0KHNjKTsKKwkJ CX0KKwkJfQorCQlFQ0VfVU5MT0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NBRERNVUxU SToKKwljYXNlIFNJT0NERUxNVUxUSToKKwkJRUNFX0xPQ0soc2MpOworCQlzZXRfZmlsdGVyKHNj KTsKKwkJRUNFX1VOTE9DSyhzYyk7CisJCWJyZWFrOworCisgIAljYXNlIFNJT0NTSUZNRURJQToK KyAgCWNhc2UgU0lPQ0dJRk1FRElBOgorIAkJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlp YnVzKTsKKyAJCWVycm9yID0gaWZtZWRpYV9pb2N0bChpZnAsIGlmciwgJm1paS0+bWlpX21lZGlh LCBjbWQpOworICAJCWJyZWFrOworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJbWFzayA9IGlmcC0+aWZf Y2FwZW5hYmxlIF4gaWZyLT5pZnJfcmVxY2FwOworCQlpZiAobWFzayAmIElGQ0FQX1ZMQU5fTVRV KSB7CisJCQlFQ0VfTE9DSyhzYyk7CisJCQlFQ0VfVU5MT0NLKHNjKTsKKwkJfQorCWRlZmF1bHQ6 CisJCWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjbWQsIGRhdGEpOworCQlicmVhazsKKwl9CisJ cmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfY2hpbGRfZGV0YWNoZWQoZGV2 aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwor CXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmIChjaGlsZCA9PSBzYy0+bWlpYnVzKQor CQlzYy0+bWlpYnVzID0gTlVMTDsKK30KKworLyoKKyAqIE1JSSBidXMgc3VwcG9ydCByb3V0aW5l cy4KKyAqLworc3RhdGljIGludAorZWNlX21paWJ1c19yZWFkcmVnKGRldmljZV90IGRldiwgaW50 IHBoeSwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwkvKm9ubHkgb25lIHBo eSovCisJaWYgKHBoeT4wKSByZXR1cm4gMDsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK KwlyZXR1cm4gcGh5X3JlYWQoc2MsIHBoeSwgcmVnKTsKK30KKworc3RhdGljIGludAorZWNlX21p aWJ1c193cml0ZXJlZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcsIGludCBkYXRhKQor eworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwor CXBoeV93cml0ZShzYywgcGh5LCByZWcsIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMg ZGV2aWNlX21ldGhvZF90IGVjZV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAq LworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQllY2VfcHJvYmUpLAorCURFVk1FVEhPRChkZXZp Y2VfYXR0YWNoLAllY2VfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZWNlX2Rl dGFjaCksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19jaGlsZF9kZXRh Y2hlZCwJZWNlX2NoaWxkX2RldGFjaGVkKSwKKworCS8qIE1JSSBpbnRlcmZhY2UgKi8KKwlERVZN RVRIT0QobWlpYnVzX3JlYWRyZWcsCWVjZV9taWlidXNfcmVhZHJlZyksCisJREVWTUVUSE9EKG1p aWJ1c193cml0ZXJlZywJZWNlX21paWJ1c193cml0ZXJlZyksCisKKwl7IDAsIDAgfQorfTsKKwor c3RhdGljIGRyaXZlcl90IGVjZV9kcml2ZXIgPSB7CisJImVjZSIsCisJZWNlX21ldGhvZHMsCisJ c2l6ZW9mKHN0cnVjdCBlY2Vfc29mdGMpLAorfTsKKworRFJJVkVSX01PRFVMRShlY2UsIGVjb25h YXJtLCBlY2VfZHJpdmVyLCBlY2VfZGV2Y2xhc3MsIDAsIDApOworRFJJVkVSX01PRFVMRShtaWli dXMsIGVjZSwgbWlpYnVzX2RyaXZlciwgbWlpYnVzX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9E RVBFTkQoZWNlLCBtaWlidXMsIDEsIDEsIDEpOworTU9EVUxFX0RFUEVORChlY2UsIGV0aGVyLCAx LCAxLCAxKTsKSW5kZXg6IHN5cy9hcm0vZWNvbmEvaWZfZWNlcmVnLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g c3lzL2FybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEv aWZfZWNlcmVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKi0KKyAqIENvcHly aWdodCAoYykgMjAwOSwgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMv c3lzL2Rldi9qbWUvaWZfam1lcmVnLmgsdiAxLjYgMjAwOC8xMi8wNCAwMjoxNjo1MyB5b25nYXJp IEV4cCAkCisgKi8KKworI2lmbmRlZglfSUZfRUNFUkVHX0gKKyNkZWZpbmUJX0lGX0VDRVJFR19I CisKKyNkZWZpbmUgRVRIX0NGRyAweDA4CisjZGVmaW5lIEVUSF9DRkdfUk1JSSAoMSA8PCAxNSkK KyNkZWZpbmUgUEhZX0NPTlRST0wgMHgwMAorI2RlZmluZSBQT1JUXzBfQ09ORklHIDB4MDgKKwor I2RlZmluZSBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCAweDA1MAorI2RlZmluZSBBUkxfVEFC TEVfQUNDRVNTX0NPTlRST0xfMSAweDA1NAorI2RlZmluZSBBUkxfVEFCTEVfQUNDRVNTX0NPTlRS T0xfMiAweDA1OAorCisKKyNkZWZpbmUgUE9SVDAgICAgICAgICAgICAgICAoMSA8PCAwKSAgICAv KiBiaXQgbWFwIDogYml0IDAgKi8KKyNkZWZpbmUgUE9SVDEgICAgICAgICAgICAgICAoMSA8PCAx KSAgICAvKiBiaXQgbWFwIDogYml0IDEgKi8KKyNkZWZpbmUgQ1BVX1BPUlQgICAgICAgICAgICAo MSA8PCAyKSAgICAvKiBiaXQgbWFwIDogYml0IDIgKi8KKworCisjZGVmaW5lIFZMQU4wX0dST1VQ X0lEICAgICAgKDApCisjZGVmaW5lIFZMQU4xX0dST1VQX0lEICAgICAgKDEpCisjZGVmaW5lIFZM QU4yX0dST1VQX0lEICAgICAgKDIpCisjZGVmaW5lIFZMQU4zX0dST1VQX0lEICAgICAgKDMpCisj ZGVmaW5lIFZMQU40X0dST1VQX0lEICAgICAgKDQpCisjZGVmaW5lIFZMQU41X0dST1VQX0lEICAg ICAgKDUpCisjZGVmaW5lIFZMQU42X0dST1VQX0lEICAgICAgKDYpCisjZGVmaW5lIFZMQU43X0dS T1VQX0lEICAgICAgKDcpCisKKyNkZWZpbmUgUE9SVDBfUFZJRCAgICAgICAgICAoVkxBTjFfR1JP VVBfSUQpCisjZGVmaW5lIFBPUlQxX1BWSUQgICAgICAgICAgKFZMQU4yX0dST1VQX0lEKQorI2Rl ZmluZSBDUFVfUE9SVF9QVklEICAgICAgIChWTEFOMF9HUk9VUF9JRCkKKworI2RlZmluZSBWTEFO MF9WSUQgICAgICAgICAgICgweDExMSkKKyNkZWZpbmUgVkxBTjFfVklEICAgICAgICAgICAoMHgy MjIpCisjZGVmaW5lIFZMQU4yX1ZJRCAgICAgICAgICAgKDB4MzMzKQorI2RlZmluZSBWTEFOM19W SUQgICAgICAgICAgICgweDQ0NCkKKyNkZWZpbmUgVkxBTjRfVklEICAgICAgICAgICAoMHg1NTUp CisjZGVmaW5lIFZMQU41X1ZJRCAgICAgICAgICAgKDB4NjY2KQorI2RlZmluZSBWTEFONl9WSUQg ICAgICAgICAgICgweDc3NykKKyNkZWZpbmUgVkxBTjdfVklEICAgICAgICAgICAoMHg4ODgpCisK KyNkZWZpbmUgVkxBTjBfR1JPVVAgICAgICAgICAoUE9SVDAgfCBQT1JUMSB8IENQVV9QT1JUKQor I2RlZmluZSBWTEFOMV9HUk9VUCAgICAgICAgIChQT1JUMCB8IENQVV9QT1JUKQorI2RlZmluZSBW TEFOMl9HUk9VUCAgICAgICAgIChQT1JUMSB8IENQVV9QT1JUKQorI2RlZmluZSBWTEFOM19HUk9V UCAgICAgICAgICgwKQorI2RlZmluZSBWTEFONF9HUk9VUCAgICAgICAgICgwKQorI2RlZmluZSBW TEFONV9HUk9VUCAgICAgICAgICgwKQorI2RlZmluZSBWTEFONl9HUk9VUCAgICAgICAgICgwKQor I2RlZmluZSBWTEFON19HUk9VUCAgICAgICAgICgwKQorCisKKworI2RlZmluZSBWTEFOMF9WTEFO X1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFOMV9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBW TEFOMl9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFOM19WTEFOX1RBRyAgICAgICgwKQor I2RlZmluZSBWTEFONF9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFONV9WTEFOX1RBRyAg ICAgICgwKQorI2RlZmluZSBWTEFONl9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFON19W TEFOX1RBRyAgICAgICgwKQorCisjZGVmaW5lIFNXSVRDSF9DT05GSUcgMHgwMDQKKyNkZWZpbmUg TUFDX1BPUlRfMF9DT05GSUcgMHgwMDgKKyNkZWZpbmUgTUFDX1BPUlRfMV9DT05GSUcgMHgwMEMK KyNkZWZpbmUgQ1BVX1BPUlRfQ09ORklHIDB4MDEwCisjZGVmaW5lIEJJU1RfUkVTVUxUX1RFU1Rf MCAweDA5NAorCisjZGVmaW5lIEZTX0RNQV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MTA0Cisj ZGVmaW5lIFRTX0RNQV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MTAwCisKKyNkZWZpbmUgSU5U RVJSVVBUX01BU0sgMHgwOEMKKyNkZWZpbmUgSU5URVJSVVBUX1NUQVRVUyAweDA4OAorCisjZGVm aW5lIFRTX0RFU0NSSVBUT1JfUE9JTlRFUiAgICAgMHgxMDgKKyNkZWZpbmUgVFNfREVTQ1JJUFRP Ul9CQVNFX0FERFIgICAweDExMAorI2RlZmluZSBGU19ERVNDUklQVE9SX1BPSU5URVIgICAgIDB4 MTBDCisjZGVmaW5lIEZTX0RFU0NSSVBUT1JfQkFTRV9BRERSICAgMHgxMTQKKworCisjZGVmaW5l IFZMQU5fVklEXzBfMSAgICAgIDB4MDYwCisjZGVmaW5lIFZMQU5fVklEXzJfMyAgICAgIDB4MDY0 CisjZGVmaW5lIFZMQU5fVklEXzRfNSAgICAgIDB4MDY4CisjZGVmaW5lIFZMQU5fVklEXzZfNyAg ICAgIDB4MDZDCisKKyNkZWZpbmUgVkxBTl9QT1JUX1BWSUQgICAgICAgMHgwNUMKKyNkZWZpbmUg VkxBTl9NRU1CRVJfUE9SVF9NQVAgMHgwNzAKKyNkZWZpbmUgVkxBTl9UQUdfUE9SVF9NQVAgICAg MHgwNzQKKworCisjZGVmaW5lIEFTSVhfR0lHQV9QSFkgICAxCisjZGVmaW5lIFRXT19TSU5HTEVf UEhZICAyCisjZGVmaW5lIEFHRVJFX0dJR0FfUEhZIDMKKyNkZWZpbmUgVlNDODYwMV9HSUdBX1BI WSA0CisjZGVmaW5lIElDX1BMVVNfUEhZCTUKKyNkZWZpbmUgTk9UX0ZPVU5EX1BIWSAtMQorCisj ZGVmaW5lIE1BWF9QQUNLRVRfTEVOICAgICAgICAgICAoMTUzNikKKworI2RlZmluZSBJTlZBTElE X0VOVFJZIDAKKyNkZWZpbmUgTkVXX0VOVFJZIDB4MQorI2RlZmluZSBTVEFUSUNfRU5UUlkgMHg3 CisKKy8qbWFzayBzdGF0dXMgZXhjZXB0IGZvciBsaW5rIGNoYW5nZSovCisjZGVmaW5lIEVSUk9S X01BU0sgMHhGRkZGRkY3RgorCisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9lY29uYS9jZmlfYnVz X2Vjb25hLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9jZmlfYnVzX2Vjb25hLmMJKHJl dmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNpb24gMCkK QEAgLTAsMCArMSw2NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdy b2hvCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxz eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+ CisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVk ZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv cm1hbi5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVz Lmg+CisKKyNpbmNsdWRlIDxkZXYvY2ZpL2NmaV92YXIuaD4KKworI2luY2x1ZGUgPGFybS9lY29u YS9lY29uYV9yZWcuaD4KKyNpbmNsdWRlIDxhcm0vZWNvbmEvZWNvbmFfdmFyLmg+CisKK3N0YXRp YyBpbnQKK2NmaV9lY29uYV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJcmV0dXJuIGNmaV9wcm9i ZShkZXYpOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGNmaV9lY29uYV9tZXRob2RzW10g PSB7CisJLyogZGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlj ZmlfZWNvbmFfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAljZmlfYXR0YWNoKSwK KwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJY2ZpX2RldGFjaCksCisKKwl7MCwgMH0KK307CisK K3N0YXRpYyBkcml2ZXJfdCBjZmlfZWNvbmFfZHJpdmVyID0geworCWNmaV9kcml2ZXJfbmFtZSwK KwljZmlfZWNvbmFfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGNmaV9zb2Z0YyksCit9OworRFJJ VkVSX01PRFVMRShjZmksIGVjb25hYXJtLCBjZmlfZWNvbmFfZHJpdmVyLCBjZmlfZGV2Y2xhc3Ms IDAsIDApOwpJbmRleDogc3lzL2FybS9lY29uYS90aW1lci5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9h cm0vZWNvbmEvdGltZXIuYwkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEvdGltZXIuYwko cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MzIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5 IFlvaGFuZXMgTnVncm9oby4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+ CitfX0ZCU0RJRCgiJEZyZWVCU0QgJCIpOworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1 ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2Vy bmVsLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4K KyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5cy90aW1ldGMuaD4KKyNpbmNsdWRl IDxzeXMvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1h Y2hpbmUvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9mcmFtZS5oPgorI2luY2x1ZGUgPG1hY2hp bmUvaW50ci5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgiCisjaW5jbHVkZSAiZWNvbmFfdmFy LmgiCisKKyNkZWZpbmUgSU5JVElBTF9USU1FQ09VTlRFUgkoMHhmZmZmZmZmZikKKworc3RhdGlj IGludCB0aW1lcnNfaW5pdGlhbGl6ZWQgPSAwOworCisjZGVmaW5lIEhaIDEwMAorCit1bnNpZ25l ZCBpbnQgQ1BVX2Nsb2NrID0gMjAwMDAwMDAwOwordW5zaWduZWQgaW50IEFIQl9jbG9jazsKK3Vu c2lnbmVkIGludCBBUEJfY2xvY2s7CisKK3Vuc2lnbmVkIGludCBnZXRfdGNsayh2b2lkKTsKKwor c3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfY291bnRlciA9IDAsIHN5c19jbG9jayA9IDEwMDAw MDAwMDsKKworc3RydWN0IGVjX3RpbWVyX3NvZnRjIHsKKwlzdHJ1Y3QgcmVzb3VyY2UJKgl0aW1l cl9yZXNbM107CisJYnVzX3NwYWNlX3RhZ190CQl0aW1lcl9ic3Q7CisJYnVzX3NwYWNlX2hhbmRs ZV90CXRpbWVyX2JzaDsKKwlzdHJ1Y3QgbXR4CQl0aW1lcl9tdHg7Cit9OworCisKK3N0YXRpYyBz dHJ1Y3QgcmVzb3VyY2Vfc3BlYyBlY190aW1lcl9zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9S WSwJMCwJUkZfQUNUSVZFIH0sCisJeyBTWVNfUkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsg U1lTX1JFU19JUlEsCQkxLAlSRl9BQ1RJVkUgfSwKKwl7IC0xLCAwIH0KK307CisKKworc3RhdGlj IHVuc2lnbmVkIGVjX3RpbWVyX2dldF90aW1lY291bnQoc3RydWN0IHRpbWVjb3VudGVyICopOwor CitzdGF0aWMgc3RydWN0IHRpbWVjb3VudGVyIGVjX3RpbWVjb3VudGVyID0geworCS50Y19nZXRf dGltZWNvdW50ID0gZWNfdGltZXJfZ2V0X3RpbWVjb3VudCwKKwkudGNfbmFtZSA9ICJDUFUgVGlt ZXIiLAorCS50Y19mcmVxdWVuY3kgPSAwLAkvKiBUaGlzIGlzIGFzc2lnbmVkIG9uIHRoZSBmbHkg aW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KKwkudGNfY291bnRlcl9tYXNrID0gfjB1LAorCS50Y19x dWFsaXR5ID0gMTAwMCwKK307CisKKworc3RhdGljIHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqdGlt ZXJfc29mdGMgPSBOVUxMOworCitzdGF0aWMgaW5saW5lCit2b2lkIFdSNCh1bnNpZ25lZCBpbnQg dmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlidXNfc3BhY2Vfd3JpdGVfNCh0aW1lcl9zb2Z0 Yy0+dGltZXJfYnN0LAorCQkJICB0aW1lcl9zb2Z0Yy0+dGltZXJfYnNoLCBhZGRyLCB2YWwpOwor Cit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGludCBSRDQodW5zaWduZWQgaW50IGFkZHIp Cit7CisJcmV0dXJuIGJ1c19zcGFjZV9yZWFkXzQodGltZXJfc29mdGMtPnRpbWVyX2JzdCwKKwkg ICAgdGltZXJfc29mdGMtPnRpbWVyX2JzaCwgYWRkcik7Cit9CisKKworCisjZGVmaW5lIHVTRUNT X1BFUl9USUNLCSgxMDAwMDAwIC8gQVBCX2Nsb2NrKQorI2RlZmluZSBUSUNLUzJVU0VDUyh4KSAg KCh4KSAqIHVTRUNTX1BFUl9USUNLKQorCisKK3N0YXRpYyB1bnNpZ25lZAorcmVhZF90aW1lcl9j b3VudGVyX25vaW50KHZvaWQpCit7CisJYXJtX21hc2tfaXJxKDApOworCXVuc2lnbmVkIGludCB2 ID0gUkQ0KFRJTUVSX1RNMV9DT1VOVEVSX1JFR19PRkZTRVQpOworCWFybV91bm1hc2tfaXJxKDAp OworCXJldHVybiB2OworfQorCit2b2lkCitERUxBWShpbnQgdXNlYykKK3sKKwl1aW50MzJfdCB2 YWwsIHZhbF90ZW1wOworCWludCBudGlja3M7CisKKwlpZiAoIXRpbWVyc19pbml0aWFsaXplZCkg eworCQlmb3IgKDsgdXNlYyA+IDA7IHVzZWMtLSkKKwkJCWZvciAodmFsID0gMTAwOyB2YWwgPiAw OyB2YWwtLSkKKwkJCQk7CisJCXJldHVybjsKKwl9CisKKwl2YWwgPSByZWFkX3RpbWVyX2NvdW50 ZXJfbm9pbnQoKTsKKwludGlja3MgPSAoKChBUEJfY2xvY2svMTAwMCkgKiB1c2VjKSAvIDEwMDAp KzEwMDsKKworCXdoaWxlIChudGlja3MgPiAwKSB7CisJCXZhbF90ZW1wID0gcmVhZF90aW1lcl9j b3VudGVyX25vaW50KCk7CisJCWlmICh2YWwgPiB2YWxfdGVtcCkKKwkJCW50aWNrcyAtPSAodmFs IC0gdmFsX3RlbXApOworCQllbHNlCisJCQludGlja3MgLT0gKHZhbCArICh0aW1lcl9jb3VudGVy IC0gdmFsX3RlbXApKTsKKworCisJCXZhbCA9IHZhbF90ZW1wOworCX0KKworfQorCisvKgorICog U2V0dXAgdGltZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzZXR1cF90aW1lcih1bnNpZ25l ZCBpbnQgY291bnRlcl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbF92YWx1ZTsKKwl1 bnNpZ25lZCBpbnQgbWFza192YWx1ZTsKKworCWNvbnRyb2xfdmFsdWUgPSBSRDQoVElNRVJfVE1f Q1JfUkVHX09GRlNFVCk7CisKKwltYXNrX3ZhbHVlID0gUkQ0KFRJTUVSX1RNX0lOVFJfTUFTS19S RUdfT0ZGU0VUKTsKKwlXUjQoY291bnRlcl92YWx1ZSwgVElNRVJfVE0xX0NPVU5URVJfUkVHX09G RlNFVCk7CisJV1I0KGNvdW50ZXJfdmFsdWUsIFRJTUVSX1RNMV9MT0FEX1JFR19PRkZTRVQpOwor CVdSNCgwLCBUSU1FUl9UTTFfTUFUQ0gxX1JFR19PRkZTRVQpOworCVdSNCgwLFRJTUVSX1RNMV9N QVRDSDJfUkVHX09GRlNFVCk7CisKKwljb250cm9sX3ZhbHVlICY9IH4oVElNRVIxX0NMT0NLX1NP VVJDRSk7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjFfVVBfRE9XTl9DT1VOVDsKKworCVdSNCgw LCBUSU1FUl9UTTJfQ09VTlRFUl9SRUdfT0ZGU0VUKTsKKwlXUjQoMCwgVElNRVJfVE0yX0xPQURf UkVHX09GRlNFVCk7CisJV1I0KH4wdSwgVElNRVJfVE0yX01BVENIMV9SRUdfT0ZGU0VUKTsKKwlX UjQofjB1LFRJTUVSX1RNMl9NQVRDSDJfUkVHX09GRlNFVCk7CisKKwljb250cm9sX3ZhbHVlICY9 IH4oVElNRVIyX0NMT0NLX1NPVVJDRSk7CisJY29udHJvbF92YWx1ZSAmPSB+KFRJTUVSMl9VUF9E T1dOX0NPVU5UKTsKKworCW1hc2tfdmFsdWUgJj0gfig2Myk7CisKKwlXUjQoY29udHJvbF92YWx1 ZSwgVElNRVJfVE1fQ1JfUkVHX09GRlNFVCk7CisJV1I0KG1hc2tfdmFsdWUsIFRJTUVSX1RNX0lO VFJfTUFTS19SRUdfT0ZGU0VUKTsKK30KKworLyoKKyAqIEVuYWJsZSB0aW1lcgorICovCitzdGF0 aWMgaW5saW5lIHZvaWQKK3RpbWVyX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjb250 cm9sX3ZhbHVlOworCisJY29udHJvbF92YWx1ZSA9IFJENChUSU1FUl9UTV9DUl9SRUdfT0ZGU0VU KTsKKworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIxX09WRVJGTE9XX0VOQUJMRTsKKwljb250cm9s X3ZhbHVlIHw9IFRJTUVSMV9FTkFCTEU7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjJfT1ZFUkZM T1dfRU5BQkxFOworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIyX0VOQUJMRTsKKworCVdSNChjb250 cm9sX3ZhbHVlLCAgVElNRVJfVE1fQ1JfUkVHX09GRlNFVCk7Cit9CisKKworc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQKK3JlYWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKwlyZXR1 cm4gUkQ0KFRJTUVSX1RNMl9DT1VOVEVSX1JFR19PRkZTRVQpOworfQorCisKKy8qCisgKiBHZXQg dGltZXIgaW50ZXJydXB0IHN0YXR1cworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAor cmVhZF90aW1lcl9pbnRlcnJ1cHRfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIFJENChUSU1FUl9U TV9JTlRSX1NUQVRVU19SRUdfT0ZGU0VUKTsKK30KKworLyoKKyAqIENsZWFyIHRpbWVyIGludGVy cnVwdCBzdGF0dXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl90aW1lcl9pbnRlcnJ1 cHRfc3RhdHVzKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9z dGF0dXM7CisKKwlpbnRlcnJ1cHRfc3RhdHVzID0gICBSRDQoVElNRVJfVE1fSU5UUl9TVEFUVVNf UkVHX09GRlNFVCk7CisJaWYgKGlycT09MCkgeworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChU SU1FUjFfTUFUQ0gxX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMV9NQVRD SDFfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMV9NQVRDSDJfSU5UUikp CisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIxX01BVENIMl9JTlRSKTsKKwkJaWYgKGlu dGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX09WRVJGTE9XX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0 YXR1cyAmPSB+KFRJTUVSMV9PVkVSRkxPV19JTlRSKTsKKwl9CisJaWYgKGlycT09MSkgeworCisJ CWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMl9NQVRDSDFfSU5UUikpCisJCQlpbnRlcnJ1 cHRfc3RhdHVzICY9IH4oVElNRVIyX01BVENIMV9JTlRSKTsKKwkJaWYgKGludGVycnVwdF9zdGF0 dXMgJiAoVElNRVIyX01BVENIMl9JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1F UjJfTUFUQ0gyX0lOVFIpOworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChUSU1FUjJfT1ZFUkZM T1dfSU5UUikpCisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIyX09WRVJGTE9XX0lOVFIp OworCX0KKworCVdSNChpbnRlcnJ1cHRfc3RhdHVzLCBUSU1FUl9UTV9JTlRSX1NUQVRVU19SRUdf T0ZGU0VUKTsKK30KKworc3RhdGljIHVuc2lnbmVkCitlY190aW1lcl9nZXRfdGltZWNvdW50KHN0 cnVjdCB0aW1lY291bnRlciAqYSkKK3sKKwl1bnNpZ25lZCBpbnQgdGlja3MxOworCWFybV9tYXNr X2lycSgxKTsKKwl0aWNrczEgPSByZWFkX3NlY29uZF90aW1lcl9jb3VudGVyKCk7CisJYXJtX3Vu bWFza19pcnEoMSk7CisJcmV0dXJuIHRpY2tzMTsKK30KKworLyoKKyAgKiAgR2V0IFNUUjkxMDAg U3lzdGVtIENsb2NrCisqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK2dldF9zeXN0ZW1fY2xvY2so dm9pZCkKK3sKKwlzeXNfY2xvY2sgPSAxMDAwMDAwMDA7CisKKwlzd2l0Y2ggKCgoKih1bnNpZ25l ZCBpbnQgKilTWVNURU1fQ0xPQ0tfSU5GTykgPj4gNikgJiAweDMpIHsKKwljYXNlIDA6CisJCXN5 c19jbG9jayA9IDg3NTAwMDAwOworCQlDUFVfY2xvY2sgPSAxNzUwMDAwMDA7CisJCWJyZWFrOwor CWNhc2UgMToKKwkJc3lzX2Nsb2NrID0gMTAwMDAwMDAwOworCQlDUFVfY2xvY2sgPSAyMDAwMDAw MDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3lzX2Nsb2NrID0gMTEyNTAwMDAwOworCQlDUFVf Y2xvY2sgPSAyMjUwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3lzX2Nsb2NrID0gMTI1 MDAwMDAwOworCQlDUFVfY2xvY2sgPSAyNTAwMDAwMDA7CisJCWJyZWFrOworCX0KKwlBSEJfY2xv Y2sgPSBDUFVfY2xvY2sgPj4gMTsKKwlBUEJfY2xvY2sgPSBBSEJfY2xvY2sgPj4gMTsKKwlyZXR1 cm4gc3lzX2Nsb2NrOworfQorCit1bnNpZ25lZCBpbnQKK2dldF90Y2xrKHZvaWQpCit7CisJcmV0 dXJuIENQVV9jbG9jazsKK30KKworLyoKKyAqIFNldHVwIHRpbWVyCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZCAKK2RvX3NldHVwX3RpbWVyKHZvaWQpCit7CisJZ2V0X3N5c3RlbV9jbG9jaygpOwor CXRpbWVyX2NvdW50ZXIgPSBBUEJfY2xvY2svSFo7CisJLyoKKwkgKiBzZXR1cCB0aW1lci1yZWxh dGVkIHZhbHVlcworCSAqLworCXNldHVwX3RpbWVyKHRpbWVyX2NvdW50ZXIpOworfQorCit2b2lk CitjcHVfaW5pdGNsb2Nrcyh2b2lkKQoreworCWVjX3RpbWVjb3VudGVyLnRjX2ZyZXF1ZW5jeSA9 IEFQQl9jbG9jazsKKwl0Y19pbml0KCZlY190aW1lY291bnRlcik7CisJdGltZXJfZW5hYmxlKCk7 CisJdGltZXJzX2luaXRpYWxpemVkID0gMTsKK30KKwordm9pZAorY3B1X3N0YXJ0cHJvZmNsb2Nr KHZvaWQpCit7CisKK30KKwordm9pZAorY3B1X3N0b3Bwcm9mY2xvY2sodm9pZCkKK3sKKworfQor Cit2b2lkCitjcHVfcmVzZXQodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKiBjb250 cm9sID0gKHVuc2lnbmVkIGludCAqIClDUFVfUkVTRVRfUkVHSVNURVI7CisJKmNvbnRyb2wgfD0g KDEgPDwgMCk7CisJKmNvbnRyb2wgJj0gKH4oMSA8PCAwKSk7CisJd2hpbGUgKDEpOworfQorCitz dGF0aWMgaW50CitlY190aW1lcl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9k ZXNjKGRldiwgIkVjb25hIENQVSBUaW1lciIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBp bnQKK2VjX3Jlc2V0KHZvaWQgKmFyZykKK3sKKwlhcm1fbWFza19pcnEoMSk7CisJY2xlYXJfdGlt ZXJfaW50ZXJydXB0X3N0YXR1cygxKTsKKwlhcm1fdW5tYXNrX2lycSgxKTsKKwlyZXR1cm4gKEZJ TFRFUl9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAorZWNfaGFyZGNsb2NrKHZvaWQgKmFyZykK K3sKKwlzdHJ1Y3QJdHJhcGZyYW1lICpmcmFtZTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCS8qY2xl YXIgdGltZXIgaW50ZXJydXB0IHN0YXR1cyovCisKKwlhcm1fbWFza19pcnEoMCk7CisKKwl2YWwg PSBSRDQoVElNRVJfSU5URVJSVVBUX1NUQVRVU19SRUcpOworCXZhbCAmPSB+KFRJTUVSMV9PVkVS RkxPV19JTlRFUlJVUFQpOworCVdSNCh2YWwsIFRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHKTsK KworCWZyYW1lID0gKHN0cnVjdCB0cmFwZnJhbWUgKilhcmc7CisJICBoYXJkY2xvY2soVFJBUEZf VVNFUk1PREUoZnJhbWUpLCBUUkFQRl9QQyhmcmFtZSkpOworCisJYXJtX3VubWFza19pcnEoMCk7 CisKKwlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKK30KKworCitzdGF0aWMgaW50CitlY190aW1l cl9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCWludAllcnJvcjsKKwl2b2lkCSppaGw7CisJc3Ry dWN0CWVjX3RpbWVyX3NvZnRjICpzYzsKKworCWlmICh0aW1lcl9zb2Z0YyAhPSBOVUxMKQorCQly ZXR1cm4gKEVOWElPKTsKKworCXNjID0gKHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqKWRldmljZV9n ZXRfc29mdGMoZGV2KTsKKworCXRpbWVyX3NvZnRjID0gc2M7CisKKwllcnJvciA9IGJ1c19hbGxv Y19yZXNvdXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwlpZiAoZXJy b3IpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2Vz XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPnRpbWVyX2JzdCA9IHJtYW5fZ2V0 X2J1c3RhZyhzYy0+dGltZXJfcmVzWzBdKTsKKwlzYy0+dGltZXJfYnNoID0gcm1hbl9nZXRfYnVz aGFuZGxlKHNjLT50aW1lcl9yZXNbMF0pOworCisJZG9fc2V0dXBfdGltZXIoKTsKKworCWlmIChi dXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNbMV0sIElOVFJfVFlQRV9DTEssCisJICAg IGVjX2hhcmRjbG9jaywgTlVMTCwgTlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9y ZXNvdXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3By aW50ZihkZXYsICJjb3VsZCBub3Qgc2V0dXAgaGFyZGNsb2NrIGludGVycnVwdFxuIik7CisJCXJl dHVybiAoRU5YSU8pOworCX0KKworCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9y ZXNbMl0sIElOVFJfVFlQRV9DTEssCisJICAgIGVjX3Jlc2V0LCBOVUxMLCBOVUxMLCAmaWhsKSAh PSAwKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIGVjX3RpbWVyX3NwZWMsIHNjLT50 aW1lcl9yZXMpOworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCB0aW1lciBp bnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQor CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZWNfdGltZXJfbWV0aG9kc1tdID0geworCURFVk1F VEhPRChkZXZpY2VfcHJvYmUsIGVjX3RpbWVyX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0 dGFjaCwgZWNfdGltZXJfYXR0YWNoKSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZlcl90 IGVjX3RpbWVyX2RyaXZlciA9IHsKKwkidGltZXIiLAorCWVjX3RpbWVyX21ldGhvZHMsCisJc2l6 ZW9mKHN0cnVjdCBlY190aW1lcl9zb2Z0YyksCit9OworCisKK3N0YXRpYyBkZXZjbGFzc190IGVj X3RpbWVyX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKHRpbWVyLCBlY29uYWFybSwgZWNfdGlt ZXJfZHJpdmVyLCBlY190aW1lcl9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBzeXMvYXJtL2Vjb25h L2Vjb25hLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAw KQorKysgc3lzL2FybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1NiBA QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvLiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEICQiKTsK KworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1 ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMva2Vy bmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4K KyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0v dm1fa2Vybi5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+ CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CisKKyNkZWZpbmUJX0FSTTMyX0JVU19ETUFfUFJJ VkFURQorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+ CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgi CisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZWNvbmFfc29mdGMgKmVj b25hX3NvZnRjOworCitic19wcm90b3MoZ2VuZXJpYyk7Citic19wcm90b3MoZ2VuZXJpY19hcm12 NCk7CisKK3N0cnVjdCBidXNfc3BhY2UgZWNvbmFfYnNfdGFnID0geworCS8qIGNvb2tpZSAqLwor CSh2b2lkICopIDAsCisKKwkvKiBtYXBwaW5nL3VubWFwcGluZyAqLworCWdlbmVyaWNfYnNfbWFw LAorCWdlbmVyaWNfYnNfdW5tYXAsCisJZ2VuZXJpY19ic19zdWJyZWdpb24sCisKKwkvKiBhbGxv Y2F0aW9uL2RlYWxsb2NhdGlvbiAqLworCWdlbmVyaWNfYnNfYWxsb2MsCisJZ2VuZXJpY19ic19m cmVlLAorCisJLyogYmFycmllciAqLworCWdlbmVyaWNfYnNfYmFycmllciwKKworCS8qIHJlYWQg KHNpbmdsZSkgKi8KKwlnZW5lcmljX2JzX3JfMSwKKwlnZW5lcmljX2FybXY0X2JzX3JfMiwKKwln ZW5lcmljX2JzX3JfNCwKKwlOVUxMLAorCisJLyogcmVhZCBtdWx0aXBsZSAqLworCWdlbmVyaWNf YnNfcm1fMSwKKwlnZW5lcmljX2FybXY0X2JzX3JtXzIsCisJZ2VuZXJpY19ic19ybV80LAorCU5V TEwsCisKKwkvKiByZWFkIHJlZ2lvbiAqLworCWdlbmVyaWNfYnNfcnJfMSwKKwlnZW5lcmljX2Fy bXY0X2JzX3JyXzIsCisJZ2VuZXJpY19ic19ycl80LAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2lu Z2xlKSAqLworCWdlbmVyaWNfYnNfd18xLAorCWdlbmVyaWNfYXJtdjRfYnNfd18yLAorCWdlbmVy aWNfYnNfd180LAorCU5VTEwsCisKKwkvKiB3cml0ZSBtdWx0aXBsZSAqLworCWdlbmVyaWNfYnNf d21fMSwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJZ2VuZXJpY19ic193bV80LAorCU5VTEws CisKKwkvKiB3cml0ZSByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAor CisJLyogc2V0IG11bHRpcGxlICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwor CS8qIHNldCByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyog Y29weSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFkIChzaW5n bGUpIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFk IG11bHRpcGxlIHN0cmVhbSAqLworCU5VTEwsCisJZ2VuZXJpY19hcm12NF9ic19ybV8yLAorCU5V TEwsCisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwK KwlOVUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2luZ2xlKSBzdHJlYW0gKi8KKwlOVUxMLAor CU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3JpdGUgbXVsdGlwbGUgc3RyZWFtICovCisJ TlVMTCwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3Jp dGUgcmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwKK307CisK K2J1c19zcGFjZV90YWdfdCBvYmlvX3RhZyA9ICZlY29uYV9ic190YWc7CisKKworc3RhdGljIGlu dAorZWNvbmFfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCWRldmljZV9zZXRfZGVzYyhkZXYsICJF Q09OQSBkZXZpY2UgYnVzIik7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK2Vjb25h X2lkZW50aWZ5KGRyaXZlcl90ICpkcnYsIGRldmljZV90IHBhcmVudCkKK3sKKwlCVVNfQUREX0NI SUxEKHBhcmVudCwgMCwgImVjb25hYXJtIiwgMCk7Cit9CisKK3N0cnVjdCBhcm0zMl9kbWFfcmFu Z2UgKgorYnVzX2RtYV9nZXRfcmFuZ2Uodm9pZCkKK3sKKworCXJldHVybiAoTlVMTCk7Cit9CisK K2ludAorYnVzX2RtYV9nZXRfcmFuZ2VfbmIodm9pZCkKK3sKKwlyZXR1cm4gKDApOworfQorCitl eHRlcm4gdm9pZCBpcnFfZW50cnkodm9pZCk7CisKK3N0YXRpYyB2b2lkCitlY29uYV9hZGRfY2hp bGQoZGV2aWNlX3QgZGV2LCBpbnQgcHJpbywgY29uc3QgY2hhciAqbmFtZSwgaW50IHVuaXQsCisJ CWJ1c19hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBzaXplLCBpbnQgaXJxMCwgaW50IGlycTEsCisJ CWludCBpcnEyLCBpbnQgaXJxMywgaW50IGlycTQpCit7CisJZGV2aWNlX3Qga2lkOworCXN0cnVj dCBlY29uYV9pdmFyICppdmFyOworCisJa2lkID0gZGV2aWNlX2FkZF9jaGlsZF9vcmRlcmVkKGRl diwgcHJpbywgbmFtZSwgdW5pdCk7CisJaWYgKGtpZCA9PSBOVUxMKSB7CisJICAgIHByaW50Zigi Q2FuJ3QgYWRkIGNoaWxkICVzJWQgb3JkZXJlZFxuIiwgbmFtZSwgdW5pdCk7CisJICAgIHJldHVy bjsKKwl9CisJaXZhciA9IG1hbGxvYyhzaXplb2YoKml2YXIpLCBNX0RFVkJVRiwgTV9OT1dBSVQg fCBNX1pFUk8pOworCWlmIChpdmFyID09IE5VTEwpIHsKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChk ZXYsIGtpZCk7CisJCXJldHVybjsKKwl9CisJZGV2aWNlX3NldF9pdmFycyhraWQsIGl2YXIpOwor CXJlc291cmNlX2xpc3RfaW5pdCgmaXZhci0+cmVzb3VyY2VzKTsKKwlpZiAoaXJxMCAhPSAtMSkK KwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAwLCBpcnEwLCAxKTsKKwlpZiAo aXJxMSAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDEsIGlycTEs IDEpOworCWlmIChpcnEyICE9IDApCisJCWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lS USwgMiwgaXJxMiwgMSk7CisJaWYgKGlycTMgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQs IFNZU19SRVNfSVJRLCAzLCBpcnEzLCAxKTsKKwlpZiAoaXJxNCAhPSAwKQorCQlidXNfc2V0X3Jl c291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDQsIGlycTQsIDEpOworCisJaWYgKGFkZHIgIT0gMCkK KwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfTUVNT1JZLCAwLCBhZGRyLCBzaXplKTsK K30KKworc3RydWN0IGNwdV9kZXZzCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdW5pdDsK KwlidXNfYWRkcl90IG1lbV9iYXNlOworCWJ1c19zaXplX3QgbWVtX2xlbjsKKwlpbnQgaXJxMDsK KwlpbnQgaXJxMTsKKwlpbnQgaXJxMjsKKwlpbnQgaXJxMzsKKwlpbnQgaXJxNDsKK307CisKKwor c3RydWN0IGNwdV9kZXZzIGVjb25hcm1fZGV2c1tdID0KK3sKKwkvLyBBbGwgdGhlICJzeXN0ZW0i IGRldmljZXMKKwl7CisJCSJlY29uYV9pYyIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9Q SUNfQkFTRSwgRUNPTkFfUElDX1NJWkUsCisJCTAJLy8gSW50ZXJydXB0IGNvbnRyb2xsZXIgaGFz IG5vIGludGVycnVwdHMhCisJfSwKKwl7CisJCSJ1YXJ0IiwgMCwKKwkJRUNPTkFfSU9fQkFTRSAr IEVDT05BX1VBUlRfQkFTRSwgRUNPTkFfVUFSVF9TSVpFLAorCQlFQ09OQV9JUlFfVUFSVAorCX0s CisJeworCQkidGltZXIiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfVElNRVJfQkFTRSwg RUNPTkFfVElNRVJfU0laRSwKKwkJRUNPTkFfSVJRX1RJTUVSXzEsIEVDT05BX0lSUV9USU1FUl8y CisJfSwKKwl7CisJCSJvaGNpIiwgMCwKKwkJRUNPTkFfT0hDSV9WQkFTRSwgRUNPTkFfT0hDSV9T SVpFLAorCQlFQ09OQV9JUlFfT0hDSQorCQl9LAorCXsKKwkJImVoY2kiLCAwLAorCQlFQ09OQV9F SENJX1ZCQVNFLCBFQ09OQV9FSENJX1NJWkUsCisJCUVDT05BX0lSUV9FSENJCisJfSwKKwl7CisJ CSJjZmkiLCAwLAorCQlFQ09OQV9DRklfVkJBU0UsIEVDT05BX0NGSV9TSVpFLAorCQkwCisJfSwK Kwl7CisJCSJlY2UiLCAwLAorCQlFQ09OQV9ORVRfVkJBU0UsIEVDT05BX05FVF9TSVpFLAorCQlF Q09OQV9JUlFfU1RBVFVTLAorCQlFQ09OQV9JUlFfVFNUQywgRUNPTkFfSVJRX0ZTUkMsCisJCUVD T05BX0lSUV9UU1FFLCBFQ09OQV9JUlFfRlNRRiwKKwl9LAorCXsJMCwgMCwgMCwgMCwgMCB9Cit9 OworCitzdGF0aWMgdm9pZAorZWNvbmFfY3B1X2FkZF9idWlsdGluX2NoaWxkcmVuKGRldmljZV90 IGRldiwgc3RydWN0IGVjb25hX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3B1X2Rl dnMgKndhbGtlcjsKKworCWZvciAoaSA9IDAsIHdhbGtlciA9IGVjb25hcm1fZGV2czsgd2Fsa2Vy LT5uYW1lOyBpKyssIHdhbGtlcisrKSB7CisJCWVjb25hX2FkZF9jaGlsZChkZXYsIGksIHdhbGtl ci0+bmFtZSwgd2Fsa2VyLT51bml0LAorCQkgICAgd2Fsa2VyLT5tZW1fYmFzZSwgd2Fsa2VyLT5t ZW1fbGVuLCB3YWxrZXItPmlycTAsCisJCQkJd2Fsa2VyLT5pcnExLCB3YWxrZXItPmlycTIsIHdh bGtlci0+aXJxMywKKwkJCXdhbGtlci0+aXJxNCk7CisJfQorCit9CisKKworc3RydWN0IGludGNf dHJpZ2dlcl90IHsKKwlpbnQgbW9kZTsKKwlpbnQgbGV2ZWw7Cit9OworCisKK3N0YXRpYyBzdHJ1 Y3QgaW50Y190cmlnZ2VyX3QgaW50Y190cmlnZ2VyX3RhYmxlW10gPSB7CisJe0lOVENfRURHRV9U UklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklT SU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19GQUxMSU5HX0VER0V9LAorCXtJ TlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfVFJJR0dFUl9VTktO T1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19B Q1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJ TlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX1RSSUdHRVJfVU5L Tk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENf QUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAor CXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RS SUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19U UklHR0VSX1VOS05PV059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9 LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19GQUxMSU5HX0VER0V9LAorCXtJTlRDX1RSSUdH RVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9X TiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNU SVZFX0hJR0h9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lO VENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIs IElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURH RX0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZF TF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorfTsKKworc3RhdGljIGlubGluZSB1aW50MzJf dAorUkQ0KHN0cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCXJldHVy biBidXNfc3BhY2VfcmVhZF80KHNjLT5zY19zdCwgc2MtPnNjX3N5c19zaCwgb2ZmKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkCitXUjQoc3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVf dCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnNj X3N0LCBzYy0+c2Nfc3lzX3NoLCBvZmYsIHZhbCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lk IAorZWNvbmFfc2V0X2lycV9tb2RlKHN0cnVjdCBlY29uYV9zb2Z0YyAqIHNjLCB1bnNpZ25lZCBp bnQgaXJxLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYg KChtb2RlICE9IElOVENfTEVWRUxfVFJJR0dFUikgJiYgKG1vZGUgIT0gSU5UQ19FREdFX1RSSUdH RVIpKQorCQlyZXR1cm47CisKKwl2YWwgPQlSRDQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJf TU9ERV9SRUdfT0ZGU0VUKTsKKworCWlmIChtb2RlID09IElOVENfTEVWRUxfVFJJR0dFUikgewor CQlpZiAodmFsICYgKDFVTCA8PCBpcnEpKSB7CisJCQl2YWwgJj0gfigxVUwgPDwgaXJxKTsKKwkJ CVdSNChzYywgIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULCAgdmFsKTsK KwkJfQorCX0gZWxzZSB7CisJCWlmICghKHZhbCAmICgxVUwgPDwgaXJxKSkpIHsKKwkJCXZhbCB8 PSAoMVVMIDw8IGlycSk7CisJCQlXUjQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9S RUdfT0ZGU0VULCAgdmFsKTsKKwkJfQorCX0KK30KKworCisvKgorICogQ29uZmlndXJlIGludGVy cnVwdCB0cmlnZ2VyIGxldmVsIHRvIGJlIEFjdGl2ZSBIaWdoL0xvdworICogb3IgUmlzaW5nL0Zh bGxpbmcgRWRnZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgCitlY29uYV9zZXRfaXJxX2xldmVs KHN0cnVjdCBlY29uYV9zb2Z0YyAqIHNjLAorCQkgICAgdW5zaWduZWQgaW50IGlycSwgdW5zaWdu ZWQgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKworCWlmICgobGV2ZWwgIT0g SU5UQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGxldmVsICE9IElOVENfQUNUSVZFX0xPVykgJiYK KwkgICAgKGxldmVsICE9IElOVENfUklTSU5HX0VER0UpICYmCisJICAgIChsZXZlbCAhPSBJTlRD X0ZBTExJTkdfRURHRSkpIHsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IFJENChzYywgSU5UQ19J TlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VUKTsKKworCWlmICgobGV2ZWwgPT0gSU5U Q19BQ1RJVkVfSElHSCkgfHwgKGxldmVsID09IElOVENfUklTSU5HX0VER0UpKSB7CisJCWlmICh2 YWwgJiAoMVVMIDw8IGlycSkpIHsKKwkJCXZhbCAmPSB+KDFVTCA8PCBpcnEpOworCQkJV1I0KHNj LCBJTlRDX0lOVEVSUlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZTRVQsIHZhbCk7CisJCX0KKwl9 IGVsc2UgeworCQlpZiAoISh2YWwgJiAoMVVMIDw8IGlycSkpKSB7CisJCQl2YWwgfD0gKDFVTCA8 PCBpcnEpOworCQkJV1I0KHNjLCAgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZG U0VULCB2YWwpOworCQl9CisJfQorfQorCisKKworc3RhdGljIGludAorZWNvbmFfYXR0YWNoKGRl dmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXYpOworCWludCBpOworCisJZWNvbmFfc29mdGMgPSBzYzsKKwlzYy0+c2Nfc3QgPSAmZWNv bmFfYnNfdGFnOworCXNjLT5zY19zaCA9IEVDT05BX0lPX0JBU0U7CisJc2MtPmRldiA9IGRldjsK KwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+c2Nfc3QsIHNjLT5zY19zaCwgRUNPTkFfUElD X0JBU0UsCisJICAgIEVDT05BX1BJQ19TSVpFLCAmc2MtPnNjX3N5c19zaCkgIT0gMCkKKwkJcGFu aWMoIlVuYWJsZSB0byBtYXAgSVJRIHJlZ2lzdGVycyIpOworCXNjLT5zY19pcnFfcm1hbi5ybV90 eXBlID0gUk1BTl9BUlJBWTsKKwlzYy0+c2NfaXJxX3JtYW4ucm1fZGVzY3IgPSAiRUNPTkEgSVJR cyI7CisJc2MtPnNjX21lbV9ybWFuLnJtX3R5cGUgPSBSTUFOX0FSUkFZOworCXNjLT5zY19tZW1f cm1hbi5ybV9kZXNjciA9ICJFQ09OQSBNZW1vcnkiOworCWlmIChybWFuX2luaXQoJnNjLT5zY19p cnFfcm1hbikgIT0gMCB8fAorCSAgICBybWFuX21hbmFnZV9yZWdpb24oJnNjLT5zY19pcnFfcm1h biwgMCwgMzEpICE9IDApCisJCXBhbmljKCJlY29uYV9hdHRhY2g6IGZhaWxlZCB0byBzZXQgdXAg SVJRIHJtYW4iKTsKKwlpZiAocm1hbl9pbml0KCZzYy0+c2NfbWVtX3JtYW4pICE9IDAgfHwKKwkg ICAgcm1hbl9tYW5hZ2VfcmVnaW9uKCZzYy0+c2NfbWVtX3JtYW4sIDAsCisJICAgIH4wKSAhPSAw KQorCQlwYW5pYygiZWNvbmFfYXR0YWNoOiBmYWlsZWQgdG8gc2V0IHVwIG1lbW9yeSBybWFuIik7 CisKKwlXUjQoc2MsICBJTlRDX0lOVEVSUlVQVF9DTEVBUl9FREdFX1RSSUdHRVJfUkVHX09GRlNF VCwgIDB4ZmZmZmZmZmYpOworCisJV1I0KHNjLCAgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZG U0VULCAgMHhmZmZmZmZmZik7CisKKwlXUjQoc2MsIElOVENfRklRX01PREVfU0VMRUNUX1JFR19P RkZTRVQsICAwKTsKKworCS8qaW5pdGlhbGl6ZSBpcnEqLworCWZvciAoaSA9IDA7IGkgPCAzMjsg aSsrKSB7CisJCWlmIChpbnRjX3RyaWdnZXJfdGFibGVbaV0ubW9kZSAhPSBJTlRDX1RSSUdHRVJf VU5LTk9XTikgeworCQkJZWNvbmFfc2V0X2lycV9tb2RlKHNjLGksIGludGNfdHJpZ2dlcl90YWJs ZVtpXS5tb2RlKTsKKwkJCWVjb25hX3NldF9pcnFfbGV2ZWwoc2MsIGksIGludGNfdHJpZ2dlcl90 YWJsZVtpXS5sZXZlbCk7CisJCX0KKwl9CisKKwllY29uYV9jcHVfYWRkX2J1aWx0aW5fY2hpbGRy ZW4oZGV2LCBzYyk7CisKKwlidXNfZ2VuZXJpY19wcm9iZShkZXYpOworCWJ1c19nZW5lcmljX2F0 dGFjaChkZXYpOworCWVuYWJsZV9pbnRlcnJ1cHRzKEkzMl9iaXQgfCBGMzJfYml0KTsKKworCXJl dHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKgorZWNvbmFfYWxsb2NfcmVz b3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAor ICAgIHVfbG9uZyBzdGFydCwgdV9sb25nIGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykK K3sKKwlzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0 cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5ICpybGU7CisJc3RydWN0IGVjb25hX2l2YXIgKml2YXIg PSBkZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmwgPSAm aXZhci0+cmVzb3VyY2VzOworCisKKwlpZiAoZGV2aWNlX2dldF9wYXJlbnQoY2hpbGQpICE9IGRl dikKKwkJcmV0dXJuIChCVVNfQUxMT0NfUkVTT1VSQ0UoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwg Y2hpbGQsCisJCQkJCSAgIHR5cGUsIHJpZCwgc3RhcnQsIGVuZCwgY291bnQsIGZsYWdzKSk7CisK KwlybGUgPSByZXNvdXJjZV9saXN0X2ZpbmQocmwsIHR5cGUsICpyaWQpOworCWlmIChybGUgPT0g TlVMTCkgeworCQkvL3ByaW50ZigicmVzb3VyY2Ugbm90IGZvdW5kXHJcbiIpOworCQlyZXR1cm4g KE5VTEwpOworCX0KKwlpZiAocmxlLT5yZXMpCisJCXBhbmljKCJSZXNvdXJjZSByaWQgJWQgdHlw ZSAlZCBhbHJlYWR5IGluIHVzZSIsICpyaWQsIHR5cGUpOworCWlmIChzdGFydCA9PSAwVUwgJiYg ZW5kID09IH4wVUwpIHsKKwkJc3RhcnQgPSBybGUtPnN0YXJ0OworCQljb3VudCA9IHVsbWF4KGNv dW50LCBybGUtPmNvdW50KTsKKwkJZW5kID0gdWxtYXgocmxlLT5lbmQsIHN0YXJ0ICsgY291bnQg LSAxKTsKKwkJLypwcmludGYoImVjb25hX2FsbG9jX3Jlc291cmNlIHN0YXJ0ICUwOGx4IGVuZCAl MDhseCwgY291bnQgPSAlMDhseCBcclxuIiwKKwkJICBzdGFydCwgZW5kLCBjb3VudCk7Ki8KKwor CX0KKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgU1lTX1JFU19JUlE6CisJCXJsZS0+cmVzID0g cm1hbl9yZXNlcnZlX3Jlc291cmNlKCZzYy0+c2NfaXJxX3JtYW4sCisJCSAgICBzdGFydCwgZW5k LCBjb3VudCwgZmxhZ3MsIGNoaWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfUkVTX01FTU9SWToK KwkJcmxlLT5yZXMgPSBybWFuX3Jlc2VydmVfcmVzb3VyY2UoJnNjLT5zY19tZW1fcm1hbiwKKwkJ ICAgIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFncywgY2hpbGQpOworCQlpZiAocmxlLT5yZXMgIT0g TlVMTCkgeworCQkJcm1hbl9zZXRfYnVzdGFnKHJsZS0+cmVzLCAmZWNvbmFfYnNfdGFnKTsKKwkJ CXJtYW5fc2V0X2J1c2hhbmRsZShybGUtPnJlcywgc3RhcnQpOworCQl9CisJCWJyZWFrOworCX0K KwlpZiAocmxlLT5yZXMpIHsKKwkJcmxlLT5zdGFydCA9IHJtYW5fZ2V0X3N0YXJ0KHJsZS0+cmVz KTsKKwkJcmxlLT5lbmQgPSBybWFuX2dldF9lbmQocmxlLT5yZXMpOworCQlybGUtPmNvdW50ID0g Y291bnQ7CisJCXJtYW5fc2V0X3JpZChybGUtPnJlcywgKnJpZCk7CisJfQorCXJldHVybiAocmxl LT5yZXMpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlX2xpc3QgKgorZWNvbmFfZ2V0X3Jl c291cmNlX2xpc3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNv bmFfaXZhciAqaXZhcjsKKwlpdmFyID0gZGV2aWNlX2dldF9pdmFycyhjaGlsZCk7CisJcmV0dXJu ICgmKGl2YXItPnJlc291cmNlcykpOworfQorCitzdGF0aWMgaW50CitlY29uYV9yZWxlYXNlX3Jl c291cmNlKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAorICAgIGludCBy aWQsIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJ c3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKworCXJsID0gZWNvbmFfZ2V0X3Jlc291 cmNlX2xpc3QoZGV2LCBjaGlsZCk7CisJaWYgKHJsID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFM KTsKKwlybGUgPSByZXNvdXJjZV9saXN0X2ZpbmQocmwsIHR5cGUsIHJpZCk7CisJaWYgKHJsZSA9 PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJcm1hbl9yZWxlYXNlX3Jlc291cmNlKHIpOwor CXJsZS0+cmVzID0gTlVMTDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlY29uYV9z ZXR1cF9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291 cmNlICppcmVzLCBpbnQgZmxhZ3MsIGRyaXZlcl9maWx0ZXJfdCAqZmlsdCwKKyAgICBkcml2ZXJf aW50cl90ICppbnRyLCB2b2lkICphcmcsIHZvaWQgKipjb29raWVwKQoreworCWlmIChybWFuX2dl dF9zdGFydChpcmVzKSA9PSBFQ09OQV9JUlFfU1lTVEVNICYmIGZpbHQgPT0gTlVMTCkKKwkJcGFu aWMoIkFsbCBzeXN0ZW0gaW50ZXJydXB0IElTUnMgbXVzdCBiZSBGSUxURVIiKTsKKworCUJVU19T RVRVUF9JTlRSKGRldmljZV9nZXRfcGFyZW50KGRldiksIGNoaWxkLCBpcmVzLCBmbGFncywgZmls dCwKKwkgICAgaW50ciwgYXJnLCBjb29raWVwKTsKKworCWFybV91bm1hc2tfaXJxKHJtYW5fZ2V0 X3N0YXJ0KGlyZXMpKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX3Rl YXJkb3duX2ludHIoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgc3RydWN0IHJlc291cmNl ICpyZXMsCisgICAgdm9pZCAqY29va2llKQoreworCXJldHVybiAoQlVTX1RFQVJET1dOX0lOVFIo ZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgY2hpbGQsIHJlcywgY29va2llKSk7Cit9CisKK3N0YXRp YyBpbnQKK2Vjb25hX2FjdGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hp bGQsIGludCB0eXBlLCBpbnQgcmlkLAorICAgIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlyZXR1 cm4gKHJtYW5fYWN0aXZhdGVfcmVzb3VyY2UocikpOworfQorCitzdGF0aWMgaW50CitlY29uYV9w cmludF9jaGlsZChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCXN0cnVjdCBlY29u YV9pdmFyICppdmFyczsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJaW50IHJldHZhbCA9 IDA7CisKKwlpdmFycyA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJsID0gJml2YXJzLT5y ZXNvdXJjZXM7CisKKwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2hlYWRlcihkZXYsIGNoaWxk KTsKKworCXJldHZhbCArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJwb3J0IiwgU1lT X1JFU19JT1BPUlQsICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlw ZShybCwgIm1lbSIsIFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworCXJldHZhbCArPSByZXNvdXJj ZV9saXN0X3ByaW50X3R5cGUocmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOworCWlmIChk ZXZpY2VfZ2V0X2ZsYWdzKGRldikpCisJCXJldHZhbCArPSBwcmludGYoIiBmbGFncyAlI3giLCBk ZXZpY2VfZ2V0X2ZsYWdzKGRldikpOworCisJcmV0dmFsICs9IGJ1c19wcmludF9jaGlsZF9mb290 ZXIoZGV2LCBjaGlsZCk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3ZvaWQKK2FybV9tYXNr X2lycSh1aW50cHRyX3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFsdWUgPSBS RDQoZWNvbmFfc29mdGMsSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSB8IDE8PG5iOwor CVdSNChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VULCB2YWx1ZSk7 Cit9CisKKwordm9pZAorYXJtX3VubWFza19pcnEodWludHB0cl90IG5iKQoreworCXVuc2lnbmVk IGludCB2YWx1ZTsKKworCXZhbHVlID0JUkQ0KGVjb25hX3NvZnRjLAorCQkgICAgSU5UQ19JTlRF UlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQpIHwgKDEgPDwgbmIpOworCisJV1I0 KGVjb25hX3NvZnRjLCAgCisJICAgIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9S RUdfT0ZGU0VULCAgdmFsdWUpOworCisJdmFsdWUgPQlSRDQoZWNvbmFfc29mdGMsIElOVENfSU5U RVJSVVBUX01BU0tfUkVHX09GRlNFVCkmIH4oMSA8PCBuYik7CisKKwlXUjQoZWNvbmFfc29mdGMs ICBJTlRDX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTRVQsIHZhbHVlKTsKKworfQorCisKK2ludAor YXJtX2dldF9uZXh0X2lycShpbnQgeCkKK3sKKworCWludCBpcnE7CisKKwlpcnEgPSBSRDQoZWNv bmFfc29mdGMsIElOVENfSU5URVJSVVBUX1NUQVRVU19SRUdfT0ZGU0VUKSAmCisJCX4oUkQ0KGVj b25hX3NvZnRjLCAgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSk7CisKKwlpZiAoaXJx IT0wKSB7CisJCXJldHVybiAoZmZzKGlycSkgLSAxKTsKKwl9CisKKwlyZXR1cm4gKC0xKTsKK30K Kworc3RhdGljIGRldmljZV9tZXRob2RfdCBlY29uYV9tZXRob2RzW10gPSB7CisJREVWTUVUSE9E KGRldmljZV9wcm9iZSwgZWNvbmFfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBl Y29uYV9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfaWRlbnRpZnksIGVjb25hX2lkZW50aWZ5 KSwKKwlERVZNRVRIT0QoYnVzX2FsbG9jX3Jlc291cmNlLCBlY29uYV9hbGxvY19yZXNvdXJjZSks CisJREVWTUVUSE9EKGJ1c19zZXR1cF9pbnRyLCBlY29uYV9zZXR1cF9pbnRyKSwKKwlERVZNRVRI T0QoYnVzX3RlYXJkb3duX2ludHIsIGVjb25hX3RlYXJkb3duX2ludHIpLAorCURFVk1FVEhPRChi dXNfYWN0aXZhdGVfcmVzb3VyY2UsIGVjb25hX2FjdGl2YXRlX3Jlc291cmNlKSwKKwlERVZNRVRI T0QoYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2UsIGJ1c19nZW5lcmljX2RlYWN0aXZhdGVfcmVzb3Vy Y2UpLAorCURFVk1FVEhPRChidXNfZ2V0X3Jlc291cmNlX2xpc3QsZWNvbmFfZ2V0X3Jlc291cmNl X2xpc3QpLAorCURFVk1FVEhPRChidXNfc2V0X3Jlc291cmNlLAlidXNfZ2VuZXJpY19ybF9zZXRf cmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfZ2V0X3Jlc291cmNlLAlidXNfZ2VuZXJpY19ybF9n ZXRfcmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfcmVsZWFzZV9yZXNvdXJjZSwJZWNvbmFfcmVs ZWFzZV9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwJZWNvbmFfcHJpbnRf Y2hpbGQpLAorCXswLCAwfSwKK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY29uYV9kcml2ZXIgPSB7 CisJImVjb25hYXJtIiwKKwllY29uYV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNvbmFfc29m dGMpLAorfTsKK3N0YXRpYyBkZXZjbGFzc190IGVjb25hX2RldmNsYXNzOworCitEUklWRVJfTU9E VUxFKGVjb25hYXJtLCBuZXh1cywgZWNvbmFfZHJpdmVyLCBlY29uYV9kZXZjbGFzcywgMCwgMCk7 CkluZGV4OiBzeXMvYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0v ZWNvbmEvZWhjaV9lYnVzLmMJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL2VoY2lfZWJ1 cy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMyBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMp IDIwMDkgWW9oYW5lcyBOdWdyb2hvCisgKiBiYXNlZCBvbiBlaGNpX21idXMuYyAKKyAqIENvcHly aWdodCAoQykgMjAwOCBNQVJWRUxMIElOVEVSTkFUSU9OQUwgTFRELgorICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwg bm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgor X19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAib3B0X2J1cy5oIgorCisjaW5jbHVk ZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8c3lzL3N0ZGludC5oPgorI2luY2x1 ZGUgPHN5cy9zdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMv cXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4K KyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg PHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5 cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL2NvbmR2YXIu aD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N4Lmg+CisjaW5jbHVk ZSA8c3lzL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9jYWxsb3V0Lmg+CisjaW5jbHVkZSA8c3lz L21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9wcml2Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5o PgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+ CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2Jf YnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRl di91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiX2NvbnRyb2xsZXIuaD4K KyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xs ZXIvZWhjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJvbGxlci9laGNpcmVnLmg+CisKKwor c3RhdGljIGRldmljZV9hdHRhY2hfdCBlaGNpX2VidXNfYXR0YWNoOworc3RhdGljIGRldmljZV9k ZXRhY2hfdCBlaGNpX2VidXNfZGV0YWNoOworc3RhdGljIGRldmljZV9zaHV0ZG93bl90IGVoY2lf ZWJ1c19zaHV0ZG93bjsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IGVoY2lfZWJ1c19zdXNwZW5k Oworc3RhdGljIGRldmljZV9yZXN1bWVfdCBlaGNpX2VidXNfcmVzdW1lOworCisKK3N0YXRpYyB2 b2lkICppaF9lcnI7CisKKyNkZWZpbmUJVVNCX0JSSURHRV9JTlRSX0NBVVNFICAweDIxMAorI2Rl ZmluZQlVU0JfQlJJREdFX0lOVFJfTUFTSyAgIDB4MjE0CisKKyNkZWZpbmUgRUhDSV9IQ19ERVZT VFIgIkNOUzExWFggVVNCIEVIQ0kiCisKKworc3RhdGljIGludAorZWhjaV9lYnVzX3N1c3BlbmQo ZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0Yyhz ZWxmKTsKKwlpbnQgZXJyOworCisJZXJyID0gYnVzX2dlbmVyaWNfc3VzcGVuZChzZWxmKTsKKwlp ZiAoZXJyKQorCQlyZXR1cm4gKGVycik7CisJZWhjaV9zdXNwZW5kKHNjKTsKKwlyZXR1cm4gKDAp OworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNfcmVzdW1lKGRldmljZV90IHNlbGYpCit7CisJ ZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisKKwllaGNpX3Jlc3Vt ZShzYyk7CisKKwlidXNfZ2VuZXJpY19yZXN1bWUoc2VsZik7CisKKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgaW50CitlaGNpX2VidXNfc2h1dGRvd24oZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNp X3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlpbnQgZXJyOworCisJZXJy ID0gYnVzX2dlbmVyaWNfc2h1dGRvd24oc2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIp OworCWVoY2lfc2h1dGRvd24oc2MpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor ZWhjaV9lYnVzX3Byb2JlKGRldmljZV90IHNlbGYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2Moc2Vs ZiwgRUhDSV9IQ19ERVZTVFIpOworCisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisK K3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19hdHRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3Nv ZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlidXNfc3BhY2VfaGFuZGxlX3Qg YnNoOworCWludCBlcnI7CisJaW50IHJpZDsKKworCS8qIGluaXRpYWxpc2Ugc29tZSBidXMgZmll bGRzICovCisJc2MtPnNjX2J1cy5wYXJlbnQgPSBzZWxmOworCXNjLT5zY19idXMuZGV2aWNlcyA9 IHNjLT5zY19kZXZpY2VzOworCXNjLT5zY19idXMuZGV2aWNlc19tYXggPSBFSENJX01BWF9ERVZJ Q0VTOworCisJLyogZ2V0IGFsbCBETUEgbWVtb3J5ICovCisJaWYgKHVzYl9idXNfbWVtX2FsbG9j X2FsbCgmc2MtPnNjX2J1cywKKwkgICAgVVNCX0dFVF9ETUFfVEFHKHNlbGYpLCAmZWhjaV9pdGVy YXRlX2h3X3NvZnRjKSkgeworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJc2MtPnNjX2J1cy51 c2JyZXYgPSBVU0JfUkVWXzJfMDsKKworCXJpZCA9IDA7CisJc2MtPnNjX2lvX3JlcyA9IGJ1c19h bGxvY19yZXNvdXJjZV9hbnkoc2VsZiwgU1lTX1JFU19NRU1PUlksICZyaWQsIFJGX0FDVElWRSk7 CisJaWYgKCFzYy0+c2NfaW9fcmVzKSB7CisJCWRldmljZV9wcmludGYoc2VsZiwgIkNvdWxkIG5v dCBtYXAgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2MtPnNjX2lvX3RhZyA9IHJt YW5fZ2V0X2J1c3RhZyhzYy0+c2NfaW9fcmVzKTsKKwlic2ggPSBybWFuX2dldF9idXNoYW5kbGUo c2MtPnNjX2lvX3Jlcyk7CisKKwlidXNfc3BhY2Vfd3JpdGVfNCgKKwkJKHNjKS0+c2NfaW9fdGFn LCBic2gsCisJCTB4MDQsIDB4MTA2KTsKKworCWJ1c19zcGFjZV93cml0ZV80KAorCQkoc2MpLT5z Y19pb190YWcsIGJzaCwKKwkJMHg0MCwgKDMgPDwgNSl8MHgyMDAwKTsKKworCisJREVMQVkoMTAw MCk7CisJCisKKwkvL3NjLT5zY19pb19zaXplID0gMHg0MDAwMDAwOworCisJc2MtPnNjX2lvX3Np emUgPSAgNDA5NjsKKworCWlmIChidXNfc3BhY2Vfc3VicmVnaW9uKHNjLT5zY19pb190YWcsIGJz aCwgMHg0MDAwMDAwLAorCSAgICBzYy0+c2NfaW9fc2l6ZSwgJnNjLT5zY19pb19oZGwpICE9IDAp CisJCXBhbmljKCIlczogdW5hYmxlIHRvIHN1YnJlZ2lvbiBVU0IgaG9zdCByZWdpc3RlcnMiLAor CQkgICAgZGV2aWNlX2dldF9uYW1lKHNlbGYpKTsKKworCisKKwlyaWQgPSAwOworCXNjLT5zY19p cnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShzZWxmLCBTWVNfUkVTX0lSUSwgJnJpZCwK KwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPnNjX2lycV9yZXMgPT0g TlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgYWxsb2NhdGUgaXJxXG4i KTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisK KwlzYy0+c2NfYnVzLmJkZXYgPSBkZXZpY2VfYWRkX2NoaWxkKHNlbGYsICJ1c2J1cyIsIC0xKTsK KwlpZiAoIXNjLT5zY19idXMuYmRldikgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBu b3QgYWRkIFVTQiBkZXZpY2VcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXZpY2Vfc2V0X2l2 YXJzKHNjLT5zY19idXMuYmRldiwgJnNjLT5zY19idXMpOworCWRldmljZV9zZXRfZGVzYyhzYy0+ c2NfYnVzLmJkZXYsIEVIQ0lfSENfREVWU1RSKTsKKworIAlzcHJpbnRmKHNjLT5zY192ZW5kb3Is ICJDYXZpdW0iKTsKKworCisJZXJyID0gYnVzX3NldHVwX2ludHIoc2VsZixzYy0+c2NfaXJxX3Jl cywgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FGRSwKKwkgICAgTlVMTCwgKGRyaXZlcl9pbnRy X3QgKillaGNpX2ludGVycnVwdCwgc2MsICZzYy0+c2NfaW50cl9oZGwpOworCWlmIChlcnIpIHsK KwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IHNldHVwIGVycm9yIGlycSwgJWRcbiIs IGVycik7CisJCWloX2VyciA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisKKwllcnIgPSBl aGNpX2luaXQoc2MpOworCWlmICghZXJyKSB7CisJCWVyciA9IGRldmljZV9wcm9iZV9hbmRfYXR0 YWNoKHNjLT5zY19idXMuYmRldik7CisJfQorCWlmIChlcnIpIHsKKwkJZGV2aWNlX3ByaW50Zihz ZWxmLCAiVVNCIGluaXQgZmFpbGVkIGVycj0lZFxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9 CisJcmV0dXJuICgwKTsKKworZXJyb3I6CisJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwlyZXR1 cm4gKEVOWElPKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX2RldGFjaChkZXZpY2VfdCBz ZWxmKQoreworCWVoY2lfc29mdGNfdCAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHNlbGYpOworCWRl dmljZV90IGJkZXY7CisJaW50IGVycjsgICAgICAgCisKKyAJaWYgKHNjLT5zY19idXMuYmRldikg eworCQliZGV2ID0gc2MtPnNjX2J1cy5iZGV2OworCQlkZXZpY2VfZGV0YWNoKGJkZXYpOworCQlk ZXZpY2VfZGVsZXRlX2NoaWxkKHNlbGYsIGJkZXYpOworCX0KKwkvKiBkdXJpbmcgbW9kdWxlIHVu bG9hZCB0aGVyZSBhcmUgbG90cyBvZiBjaGlsZHJlbiBsZWZ0b3ZlciAqLworCWRldmljZV9kZWxl dGVfYWxsX2NoaWxkcmVuKHNlbGYpOworCisJLyoKKwkgKiBkaXNhYmxlIGludGVycnVwdHMgdGhh dCBtaWdodCBoYXZlIGJlZW4gc3dpdGNoZWQgb24gaW4gZWhjaV9pbml0CisJICovCisJaWYgKHNj LT5zY19pb19yZXMpIHsKKwkJRVdSSVRFNChzYywgRUhDSV9VU0JJTlRSLCAwKTsKKwkJRVdSSVRF NChzYywgVVNCX0JSSURHRV9JTlRSX01BU0ssIDApOworCX0KKyAJaWYgKHNjLT5zY19pcnFfcmVz ICYmIHNjLT5zY19pbnRyX2hkbCkgeworCQkvKgorCQkgKiBvbmx5IGNhbGwgZWhjaV9kZXRhY2go KSBhZnRlciBlaGNpX2luaXQoKQorCQkgKi8KKwkJZWhjaV9kZXRhY2goc2MpOworCisJCWVyciA9 IGJ1c190ZWFyZG93bl9pbnRyKHNlbGYsIHNjLT5zY19pcnFfcmVzLCBzYy0+c2NfaW50cl9oZGwp OworCisJCWlmIChlcnIpCisJCQkvKiBYWFggb3Igc2hvdWxkIHdlIHBhbmljPyAqLworCQkJZGV2 aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IHRlYXIgZG93biBpcnEsICVkXG4iLAorCQkJICAg IGVycik7CisJCXNjLT5zY19pbnRyX2hkbCA9IE5VTEw7CisJfQorIAlpZiAoc2MtPnNjX2lycV9y ZXMpIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2Uoc2VsZiwgU1lTX1JFU19JUlEsIDEsIHNjLT5z Y19pcnFfcmVzKTsKKwkJc2MtPnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lv X3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzZWxmLCBTWVNfUkVTX01FTU9SWSwgMCwK KwkJICAgIHNjLT5zY19pb19yZXMpOworCQlzYy0+c2NfaW9fcmVzID0gTlVMTDsKKwl9CisJdXNi X2J1c19tZW1fZnJlZV9hbGwoJnNjLT5zY19idXMsICZlaGNpX2l0ZXJhdGVfaHdfc29mdGMpOwor CisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGVoY2lfbWV0aG9k c1tdID0geworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2Jl LCBlaGNpX2VidXNfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBlaGNpX2VidXNf YXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgZWhjaV9lYnVzX2RldGFjaCksCisJ REVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCBlaGNpX2VidXNfc3VzcGVuZCksCisJREVWTUVUSE9E KGRldmljZV9yZXN1bWUsIGVoY2lfZWJ1c19yZXN1bWUpLAorCURFVk1FVEhPRChkZXZpY2Vfc2h1 dGRvd24sIGVoY2lfZWJ1c19zaHV0ZG93biksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVW TUVUSE9EKGJ1c19wcmludF9jaGlsZCwgYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCisJezAs IDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgZWhjaV9kcml2ZXIgPSB7CisJImVoY2kiLAorCWVo Y2lfbWV0aG9kcywKKwlzaXplb2YoZWhjaV9zb2Z0Y190KSwKK307CisKK3N0YXRpYyBkZXZjbGFz c190IGVoY2lfZGV2Y2xhc3M7CisKK0RSSVZFUl9NT0RVTEUoZWhjaSwgZWNvbmFhcm0sIGVoY2lf ZHJpdmVyLCBlaGNpX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9ERVBFTkQoZWhjaSwgdXNiLCAx LCAxLCAxKTsKSW5kZXg6IHN5cy9hcm0vZWNvbmEvZWNvbmFfcmVnLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g c3lzL2FybS9lY29uYS9lY29uYV9yZWcuaAkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEv ZWNvbmFfcmVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcyIEBACisvKi0KKyAqIENvcHly aWdodCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRS SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9B Uk1fRUNPTkFfUkVHX0gKKyNkZWZpbmUgX0FSTV9FQ09OQV9SRUdfSAorCisjZGVmaW5lIEVDT05B X1NSQU1fU0laRQkweDEwMDAwMDAwCisjZGVmaW5lIEVDT05BX0RSQU1fQkFTRQkweDAwMDAwMDAw IC8qIERSQU0gKHZpYSBERFIgQ29udHJvbCBNb2R1bGUpICovCisKKyNkZWZpbmUgRUNPTkFfSU9f QkFTRSAweDcwMDAwMDAwCisjZGVmaW5lIEVDT05BX1BJQ19CQVNFICAweDBEMDAwMDAwCisjZGVm aW5lIEVDT05BX1BJQ19TSVpFICAweDAxMDAwMDAwCisKKyNkZWZpbmUgRUNPTkFfVUFSVF9CQVNF IDB4MDgwMDAwMDAKKyNkZWZpbmUgRUNPTkFfVUFSVF9TSVpFIDB4MDEwMDAwMDAKKyNkZWZpbmUg RUNPTkFfSVJRX1VBUlQgMHhBCisKKyNkZWZpbmUgRUNPTkFfVElNRVJfQkFTRSAweDA5MDAwMDAw CisjZGVmaW5lIEVDT05BX1RJTUVSX1NJWkUgMHgwMTAwMDAwMAorI2RlZmluZSBFQ09OQV9JUlFf VElNRVJfMSAwCisjZGVmaW5lIEVDT05BX0lSUV9USU1FUl8yIDEKKyNkZWZpbmUgRUNPTkFfSVJR X0VIQ0kgMjQKKyNkZWZpbmUgRUNPTkFfSVJRX09IQ0kgMjMKKworI2RlZmluZSBFQ09OQV9ORVRf UEJBU0UgMHg3MDAwMDAwMAorI2RlZmluZSBFQ09OQV9ORVRfVkJBU0UgMHhFMDAwMDAwMAorI2Rl ZmluZSBFQ09OQV9ORVRfU0laRSAweDEwMDAwMDAKKworCisjZGVmaW5lIEVDT05BX0NGSV9QQkFT RSAweDEwMDAwMDAwCisjZGVmaW5lIEVDT05BX0NGSV9WQkFTRSAweEQwMDAwMDAwCisjZGVmaW5l IEVDT05BX0NGSV9TSVpFIDB4MTAwMDAwMDAKKworCisjZGVmaW5lCUVDT05BX0lSUV9TVEFUVVMg MTgKKyNkZWZpbmUJRUNPTkFfSVJRX1RTVEMgMTkKKyNkZWZpbmUgRUNPTkFfSVJRX0ZTUkMgMjAK KyNkZWZpbmUgRUNPTkFfSVJRX1RTUUUgMjEKKyNkZWZpbmUgRUNPTkFfSVJRX0ZTUUYgMjIKKwor CisjZGVmaW5lIEVDT05BX0lSUV9TWVNURU0gMAorCisjZGVmaW5lIEVDT05BX0VIQ0lfUEJBU0Ug MHhDODAwMDAwMAorI2RlZmluZSBFQ09OQV9FSENJX1ZCQVNFIDB4RjgwMDAwMDAKKyNkZWZpbmUg RUNPTkFfRUhDSV9TSVpFIDB4ODAwMDAwMAorCisjZGVmaW5lIEVDT05BX09IQ0lfUEJBU0UgMHhD MDAwMDAwMAorI2RlZmluZSBFQ09OQV9PSENJX1ZCQVNFIDB4RjAwMDAwMDAKKyNkZWZpbmUgRUNP TkFfT0hDSV9TSVpFIDB4ODAwMDAwMAorCisjZGVmaW5lIEVDT05BX1VTQl9TSVpFIDB4ZjAwMDAw MAorCisvKklDKi8KKworI2RlZmluZSBJTlRDX0xFVkVMX1RSSUdHRVIgICAgICAgICAgICAgICAg ICAwCisjZGVmaW5lIElOVENfRURHRV9UUklHR0VSICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp bmUgSU5UQ19BQ1RJVkVfSElHSCAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRDX0FD VElWRV9MT1cgICAgICAgICAgICAgICAgICAgICAxCisvKgorICogZGVmaW5lIHJpc2luZy9mYWxs aW5nIGVkZ2UgZm9yIGVkZ2UgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUgSU5UQ19SSVNJTkdf RURHRSAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRDX0ZBTExJTkdfRURHRSAgICAg ICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgSU5UQ19JTlRFUlJVUFRfU09VUkNFX1JFR19PRkZT RVQgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBJTlRDX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZT RVQgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0Vf VFJJR0dFUl9SRUdfT0ZGU0VUIDB4MDgKKyNkZWZpbmUgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9N T0RFX1JFR19PRkZTRVQgICAgICAgMHgwQworI2RlZmluZSBJTlRDX0lOVEVSUlVQVF9UUklHR0VS X0xFVkVMX1JFR19PRkZTRVQgICAgICAweDEwCisjZGVmaW5lIElOVENfSU5URVJSVVBUX1NUQVRV U19SRUdfT0ZGU0VUICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgSU5UQ19GSVFfTU9ERV9TRUxF Q1RfUkVHX09GRlNFVCAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBJTlRDX1NPRlRXQVJFX0lO VEVSUlVQVF9SRUdfT0ZGU0VUICAgICAgICAgICAweDFDCisKKworLyoKKyAqIGRlZmluZSByaXNp bmcvZmFsbGluZyBlZGdlIGZvciBlZGdlIHRyaWdnZXIgbW9kZQorICovCisjZGVmaW5lIElOVENf UklTSU5HX0VER0UgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UQ19GQUxMSU5HX0VE R0UgICAgICAgICAgICAgICAgICAgMQorCisKKyNkZWZpbmUgVElNRVJfVE0xX0NPVU5URVJfUkVH X09GRlNFVCAgICAweDAwCisjZGVmaW5lIFRJTUVSX1RNMV9MT0FEX1JFR19PRkZTRVQgICAgICAg MHgwNAorI2RlZmluZSBUSU1FUl9UTTFfTUFUQ0gxX1JFR19PRkZTRVQgICAgIDB4MDgKKyNkZWZp bmUgVElNRVJfVE0xX01BVENIMl9SRUdfT0ZGU0VUICAgICAweDBDCisKKyNkZWZpbmUgVElNRVJf VE0yX0NPVU5URVJfUkVHX09GRlNFVCAgICAweDEwCisjZGVmaW5lIFRJTUVSX1RNMl9MT0FEX1JF R19PRkZTRVQgICAgICAgMHgxNAorI2RlZmluZSBUSU1FUl9UTTJfTUFUQ0gxX1JFR19PRkZTRVQg ICAgIDB4MTgKKyNkZWZpbmUgVElNRVJfVE0yX01BVENIMl9SRUdfT0ZGU0VUICAgICAweDFDCisK KyNkZWZpbmUgVElNRVJfVE1fQ1JfUkVHX09GRlNFVCAgICAgICAgICAweDMwCisjZGVmaW5lIFRJ TUVSX1RNX0lOVFJfU1RBVFVTX1JFR19PRkZTRVQgMHgzNAorI2RlZmluZSBUSU1FUl9UTV9JTlRS X01BU0tfUkVHX09GRlNFVCAgIDB4MzgKKworI2RlZmluZSBUSU1FUl9UTV9SRVZJU0lPTl9SRUdf T0ZGU0VUICAgIDB4M0MKKworCisjZGVmaW5lIElOVENfVElNRVIxX0JJVF9JTkRFWCAgICAgICAg ICAgICAgIDAKKworI2RlZmluZSBUSU1FUjFfVVBfRE9XTl9DT1VOVCAgICAgICgxPDw5KQorI2Rl ZmluZSBUSU1FUjJfVVBfRE9XTl9DT1VOVCAgICAgICgxPDwxMCkKKworI2RlZmluZSBUSU1FUjFf TUFUQ0gxX0lOVFIgICAgICAgICgxPDwwKQorI2RlZmluZSBUSU1FUjFfTUFUQ0gyX0lOVFIgICAg ICAgICgxPDwxKQorI2RlZmluZSBUSU1FUjFfT1ZFUkZMT1dfSU5UUiAgICAgICgxPDwyKQorCisK KyNkZWZpbmUgVElNRVIyX01BVENIMV9JTlRSICAgICAgICAoMTw8MykKKyNkZWZpbmUgVElNRVIy X01BVENIMl9JTlRSICAgICAgICAoMTw8NCkKKyNkZWZpbmUgVElNRVIyX09WRVJGTE9XX0lOVFIg ICAgICAoMTw8NSkKKworCisjZGVmaW5lIFRJTUVSX0NMT0NLX1NPVVJDRV9QQ0xLICAgICAgICAg ICAgIDAKKyNkZWZpbmUgVElNRVJfQ0xPQ0tfU09VUkNFX0VYVF9DTEsgICAgICAgICAgMQorCisv KgorICogZGVmaW5lIGludGVycnVwdCB0cmlnZ2VyIG1vZGUKKyAqLworI2RlZmluZSBJTlRDX0xF VkVMX1RSSUdHRVIgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVENfRURHRV9UUklHR0VS ICAgICAgICAgICAgICAgICAgIDEKKworCisjZGVmaW5lIElOVENfVFJJR0dFUl9VTktOT1dOIC0x CisKKyNkZWZpbmUJVElNRVIxX09WRVJGTE9XX0lOVEVSUlVQVAkoMTw8MikKKyNkZWZpbmUJVElN RVIyX09WRVJGTE9XX0lOVEVSUlVQVAkoMTw8NSkKKyNkZWZpbmUJVElNRVJfSU5URVJSVVBUX1NU QVRVU19SRUcJCTB4MzQKKworCisjZGVmaW5lIFRJTUVSMV9FTkFCTEUgICAoMTw8MCkKKyNkZWZp bmUgVElNRVIxX0NMT0NLX1NPVVJDRSAgICAgICAoMTw8MSkKKyNkZWZpbmUgVElNRVIxX09WRVJG TE9XX0VOQUJMRSAgICAoMTw8MikKKworCisjZGVmaW5lIFRJTUVSMl9FTkFCTEUgICAgICAgICAg ICAgKDE8PDMpCisjZGVmaW5lIFRJTUVSMl9DTE9DS19TT1VSQ0UgICAgICAgKDE8PDQpCisjZGVm aW5lIFRJTUVSMl9PVkVSRkxPV19FTkFCTEUgICAgKDE8PDUpCisKKworI2RlZmluZSBUSU1FUl8x ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgRUNfVUFSVF9DTE9DSyAx NDc2OTIwMAorI2RlZmluZSBFQ19VQVJUX1JFR1NISUZUIDIKKworI2RlZmluZSBTWVNURU1fQ0xP Q0tfSU5GTyAoMHg3NzAwMDAxNCkKKyNkZWZpbmUgQ1BVX1JFU0VUX1JFR0lTVEVSICgweDc3MDAw MDE0KQorCisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9lY29uYS9pZl9lY2V2YXIuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBzeXMvYXJtL2Vjb25hL2lmX2VjZXZhci5oCShyZXZpc2lvbiAwKQorKysgc3lzL2Fy bS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTYgQEAKKy8qLQor ICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBB TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9S IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor I2lmbmRlZiBfSUZFQ0VWQVJfSAorI2RlZmluZSBfSUZFQ0VWQVJfSAorCisjZGVmaW5lIEVDRV9N QVhfVFhfQlVGRkVSUyAxMjgKKyNkZWZpbmUgRUNFX01BWF9SWF9CVUZGRVJTIDEyOAorI2RlZmlu ZSBNQVhfRlJBR01FTlQgMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIDFzdCAzMkJpdHMgKi8K Kwl1aW50MzJfdAkJZGF0YV9wdHI7CisJLyogMm5kCTMyQml0cyovCisJdWludDMyX3QJCWxlbmd0 aDoxNjsKKworCXVpbnQzMl90CQl0Y286MTsgLyp0Y3AgY2hlY2tzdW0gb2ZmbG9hZCovCisJdWlu dDMyX3QJCXVjbzoxOyAvKnVkcCBjaGVja3N1bSBvZmZsb2FkKi8KKwl1aW50MzJfdAkJaWNvOjE7 IC8qaXAgY2hlY2tzdW0gb2ZmbG9hZCovCisJLyogZm9yY2Vfcm91dGVfcG9ydF9tYXAqLworCXVp bnQzMl90CQlwbWFwOjM7CisJLyogZm9yY2Vfcm91dGUgKi8KKwl1aW50MzJfdAkJZnI6MTsKKwkv KiBmb3JjZV9wcmlvcml0eV92YWx1ZSAqLworCXVpbnQzMl90CQlwcmk6MzsKKwkvKiBmb3JjZV9w cmlvcml0eSAqLworCXVpbnQzMl90CQlmcDoxOworCS8qaW50ZXJydXB0X2JpdCovCisJdWludDMy X3QJCWludGVycnVwdDoxOworCS8qbGFzdF9zZWcqLworCXVpbnQzMl90CQlsczoxOworCS8qZmly c3Rfc2VnKi8KKwl1aW50MzJfdAkJZnM6MTsKKwkvKiBlbmRfYml0ICovCisJdWludDMyX3QJCWVv cjoxOworCS8qIGNfYml0ICovCisJdWludDMyX3QJCWNvd246MTsKKwkvKiAzcmQgMzJCaXRzKi8K KwkvKnZpZF9pbmRleCovCisJdWludDMyX3QJCXZpZDozOworCS8qaW5zZXJ0X3ZpZF90YWcqLwor CXVpbnQzMl90CQlpbnN2OjE7CisJLypwcHBvZV9zZWN0aW9uX2luZGV4Ki8KKwl1aW50MzJfdAkJ c2lkOjM7CisJLyppbnNlcnRfcHBwb2Vfc2VjdGlvbiovCisJdWludDMyX3QJCWluc3M6MTsKKwl1 aW50MzJfdAkJdW51c2VkOjI0OworCS8qIDR0aCAzMkJpdHMqLworCXVpbnQzMl90CQl1bnVzZWQy OworCit9IGV0aF90eF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0eworCXVpbnQzMl90CQlkYXRh X3B0cjsKKwl1aW50MzJfdAkJbGVuZ3RoOjE2OworCXVpbnQzMl90CQlsNGY6MTsKKwl1aW50MzJf dAkJaXBmOjE7CisJdWludDMyX3QJCXByb3Q6MjsKKwl1aW50MzJfdAkJaHI6NjsKKwl1aW50MzJf dAkJc3A6MjsKKwl1aW50MzJfdAkJbHM6MTsKKwl1aW50MzJfdAkJZnM6MTsKKwl1aW50MzJfdAkJ ZW9yOjE7CisJdWludDMyX3QJCWNvd246MTsKKwl1aW50MzJfdAkJdW51c2VkOworCXVpbnQzMl90 CQl1bnVzZWQyOworfSBldGhfcnhfZGVzY190OworCisKK3N0cnVjdCByeF9kZXNjX2luZm8gewor CXN0cnVjdCBtYnVmKmJ1ZmY7CisJYnVzX2RtYW1hcF90IGRtYW1hcDsKKwlldGhfcnhfZGVzY190 ICpkZXNjOworfTsKKworc3RydWN0IHR4X2Rlc2NfaW5mbyB7CisJc3RydWN0IG1idWYqYnVmZjsK KwlidXNfZG1hbWFwX3QgZG1hbWFwOworCWV0aF90eF9kZXNjX3QgKmRlc2M7Cit9OworCisKK3N0 cnVjdCBlY2Vfc29mdGMKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsJCS8qIGlmbmV0IHBvaW50ZXIg Ki8KKwlzdHJ1Y3QgbXR4IHNjX210eDsJCS8qIGdsb2JhbCBtdXRleCAqLworCXN0cnVjdCBtdHgg c2NfbXR4X3R4OwkJLyogdHggbXV0ZXggKi8KKwlzdHJ1Y3QgbXR4IHNjX210eF9yeDsJCS8qIHJ4 IG11dGV4ICovCisJc3RydWN0IG10eCBzY19tdHhfY2xlYW51cDsJLyogcnggbXV0ZXggKi8KKwor CWJ1c19kbWFfdGFnX3QJc2NfcGFyZW50X3RhZzsJLyogcGFyZW50IGJ1cyBETUEgdGFnICovCisK KwlkZXZpY2VfdCBkZXY7CQkJLyogTXlzZWxmICovCisJZGV2aWNlX3QgbWlpYnVzOwkJLyogTXkg Y2hpbGQgbWlpYnVzICovCisJdm9pZCAqaW50cmhhbmQ7CQkJLyogSW50ZXJydXB0IGhhbmRsZSAq LworCXZvaWQgKmludHJoYW5kX3FmOwkJCS8qIEludGVycnVwdCBoYW5kbGU6IHF1ZXVlIGZ1bGwg Ki8KKwl2b2lkICppbnRyaGFuZF90eDsJCQkvKiBJbnRlcnJ1cHQgaGFuZGxlOiBxdWV1ZSBmdWxs ICovCisJdm9pZCAqaW50cmhhbmRfc3RhdHVzOwkJCS8qIEludGVycnVwdCBoYW5kbGUgKi8KKwor CXN0cnVjdCByZXNvdXJjZSAqaXJxX3Jlc190eDsJLyogdHJhbnNtaXQgKi8KKwlzdHJ1Y3QgcmVz b3VyY2UgKmlycV9yZXNfcmVjOwkvKiByZWNlaXZlICovCisJc3RydWN0IHJlc291cmNlICppcnFf cmVzX3FmOwkvKiBxdWV1ZSBmdWxsICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3N0YXR1 czsJLyogc3RhdHVzICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CS8qIE1lbW9yeSBy ZXNvdXJjZSAqLworCisJc3RydWN0IGNhbGxvdXQgdGlja19jaDsJCS8qIFRpY2sgY2FsbG91dCAq LworCisJaW50IHVzZV9ybWlpOworCisJc3RydWN0IHRhc2txdWV1ZSAqc2NfdHE7CisJc3RydWN0 IHRhc2sJc2NfaW50cl90YXNrOworCXN0cnVjdCB0YXNrCXNjX2NsZWFudXBfdGFzazsKKwlzdHJ1 Y3QgdGFzawlzY190eF90YXNrOworCisKKwlidXNfZG1hbWFwX3QJZG1hbWFwX3JpbmdfdHg7CisJ YnVzX2RtYW1hcF90CWRtYW1hcF9yaW5nX3J4OworCWJ1c19kbWFtYXBfdAlyeF9zcGFyZW1hcDsK KworCS8qZG1hIHRhZyBmb3IgcmluZyovCisJYnVzX2RtYV90YWdfdAlkbWF0YWdfcmluZ190eDsK KwlidXNfZG1hX3RhZ190CWRtYXRhZ19yaW5nX3J4OworCisJLypkbWEgdGFnIGZvciBkYXRhKi8K KwlidXNfZG1hX3RhZ190CWRtYXRhZ19kYXRhX3R4OworCWJ1c19kbWFfdGFnX3QJZG1hdGFnX2Rh dGFfcng7CisKKwkvKnRoZSByaW5nKi8KKwlldGhfdHhfZGVzY190KglkZXNjX3R4OworCWV0aF9y eF9kZXNjX3QqCWRlc2Nfcng7CisKKwkvKnJpbmcgcGh5c2ljYWwgYWRkcmVzcyovCisJYnVzX2Fk ZHJfdAlyaW5nX3BhZGRyX3R4OworCWJ1c19hZGRyX3QJcmluZ19wYWRkcl9yeDsKKworCS8qaW5k ZXggb2YgbGFzdCByZWNlaXZlZCBkZXNjcml0b3IqLworCXVpbnQzMl90IGxhc3Rfcng7CisJc3Ry dWN0IHJ4X2Rlc2NfaW5mbyByeF9kZXNjW0VDRV9NQVhfUlhfQlVGRkVSU107CisKKworCS8qIHR4 IHByb2R1Y2VyIGluZGV4ICovCisJdWludDMyX3QgdHhfcHJvZDsKKwkvKiB0eCBjb25zdW1lciBp bmRleCAqLworCXVpbnQzMl90IHR4X2NvbnM7CisJLyogdHggcmluZyBpbmRleCovCisJdWludDMy X3QgZGVzY19jdXJyX3R4OworCisJc3RydWN0IHR4X2Rlc2NfaW5mbyB0eF9kZXNjW0VDRV9NQVhf VFhfQlVGRkVSU107CisKK307CisKKworc3RydWN0IGFybF90YWJsZV9lbnRyeV90IHsKKwl1aW50 MzJfdCBjbWRfY29tcGxldGU6IDE7CisJdWludDMyX3QgdGFibGVfZW5kOiAxOworCXVpbnQzMl90 IHNlYXJjaF9tYXRjaDogMTsKKwl1aW50MzJfdCBmaWx0ZXI6MTsgLyppZiBzZXQsIHBhY2tldCB3 aWxsIGJlIGRyb3BwZWQgKi8KKwl1aW50MzJfdCB2bGFuX21hYzoxOyAvKmluZGljYXRlcyB0aGF0 IHRoaXMgaXMgdGhlIGdhdGV3YXkgbWFjIGFkZHJlc3MqLworCXVpbnQzMl90IHZsYW5fZ2lkOjM7 IC8qdmxhbiBpZCovCisJdWludDMyX3QgYWdlX2ZpZWxkOjM7CisJdWludDMyX3QgcG9ydF9tYXA6 MzsKKwkgLyo0OCBiaXQgbWFjIGFkZHJlc3MqLworCXVpbnQ4X3QgbWFjX2FkZHJbNl07CisJdWlu dDhfdCBwYWRbMl07Cit9OworCitzdHJ1Y3QgbWFjX2xpc3R7CisJY2hhciBtYWNfYWRkcls2XTsK KwlzdHJ1Y3QgbWFjX2xpc3QgKm5leHQ7Cit9OworCisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9l Y29uYS9vaGNpX2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9vaGNpX2VjLmMJKHJl dmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL29oY2lfZWMuYwkocmV2aXNpb24gMCkKQEAgLTAs MCArMSwyNDIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obwor ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgi JEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvc3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0 ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgor I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUg PHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2xpbmtl cl9zZXQuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4K KyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvY29uZHZhci5oPgorI2luY2x1 ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3guaD4KKyNpbmNsdWRlIDxzeXMvdW5p c3RkLmg+CisjaW5jbHVkZSA8c3lzL2NhbGxvdXQuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+ CisjaW5jbHVkZSA8c3lzL3ByaXYuaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjaW5j bHVkZSA8ZGV2L3VzYi91c2JkaS5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfY29yZS5oPgor I2luY2x1ZGUgPGRldi91c2IvdXNiX2J1c2RtYS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3By b2Nlc3MuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl91dGlsLmg+CisKKyNpbmNsdWRlIDxkZXYv dXNiL3VzYl9jb250cm9sbGVyLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzLmg+CisjaW5j bHVkZSA8ZGV2L3VzYi9jb250cm9sbGVyL29oY2kuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRy b2xsZXIvb2hjaXJlZy5oPgorCisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKworI2luY2x1ZGUgPGFy bS9lY29uYS9lY29uYV9yZWcuaD4KKworI2RlZmluZQlNRU1fUklECTAKKworc3RhdGljIGRldmlj ZV9wcm9iZV90IG9oY2lfZWNfcHJvYmU7CitzdGF0aWMgZGV2aWNlX2F0dGFjaF90IG9oY2lfZWNf YXR0YWNoOworc3RhdGljIGRldmljZV9kZXRhY2hfdCBvaGNpX2VjX2RldGFjaDsKKworc3RydWN0 IGVjX29oY2lfc29mdGMgeworCXN0cnVjdCBvaGNpX3NvZnRjIHNjX29oY2k7CS8qIG11c3QgYmUg Zmlyc3QgKi8KK307CisKK3N0YXRpYyBpbnQKK29oY2lfZWNfcHJvYmUoZGV2aWNlX3QgZGV2KQor eworCWRldmljZV9zZXRfZGVzYyhkZXYsICJFY29uYSBpbnRlZ3JhdGVkIE9IQ0kgY29udHJvbGxl ciIpOworCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50CitvaGNp X2VjX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGVjX29oY2lfc29mdGMgKnNjID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWJ1c19zcGFjZV9oYW5kbGVfdCBic2g7CisJaW50IGVy cjsKKwlpbnQgcmlkOworCisJLyogaW5pdGlhbGlzZSBzb21lIGJ1cyBmaWVsZHMgKi8KKwlzYy0+ c2Nfb2hjaS5zY19idXMucGFyZW50ID0gZGV2OworCXNjLT5zY19vaGNpLnNjX2J1cy5kZXZpY2Vz ID0gc2MtPnNjX29oY2kuc2NfZGV2aWNlczsKKwlzYy0+c2Nfb2hjaS5zY19idXMuZGV2aWNlc19t YXggPSBPSENJX01BWF9ERVZJQ0VTOworCisJLyogZ2V0IGFsbCBETUEgbWVtb3J5ICovCisJaWYg KHVzYl9idXNfbWVtX2FsbG9jX2FsbCgmc2MtPnNjX29oY2kuc2NfYnVzLAorCSAgICBVU0JfR0VU X0RNQV9UQUcoZGV2KSwgJm9oY2lfaXRlcmF0ZV9od19zb2Z0YykpIHsKKwkJcmV0dXJuIChFTk9N RU0pOworCX0KKwlzYy0+c2Nfb2hjaS5zY19kZXYgPSBkZXY7CisKKwlyaWQgPSBNRU1fUklEOwor CisJc2MtPnNjX29oY2kuc2NfaW9fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZ U19SRVNfTUVNT1JZLAorCSAgICAmcmlkLCBSRl9BQ1RJVkUpOworCisJaWYgKCEoc2MtPnNjX29o Y2kuc2NfaW9fcmVzKSkgeworCQllcnIgPSBFTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCXNj LT5zY19vaGNpLnNjX2lvX3RhZyA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+c2Nfb2hjaS5zY19pb19y ZXMpOworCWJzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+c2Nfb2hjaS5zY19pb19yZXMpOwor CisKKworCWJ1c19zcGFjZV93cml0ZV80KAorCQkoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNo LAorCQkweDA0LCAweDE0Nik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNCgKKwkJKHNjKS0+c2Nfb2hj aS5zY19pb190YWcsIGJzaCwKKwkJMHg0NCwgMHgwMjAwKTsKKworCURFTEFZKDEwMDApOworCisK KwlzYy0+c2Nfb2hjaS5zY19pb19zaXplID0gcm1hbl9nZXRfc2l6ZShzYy0+c2Nfb2hjaS5zY19p b19yZXMpOworCisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+c2Nfb2hjaS5zY19pb190 YWcsIGJzaCwgMHg0MDAwMDAwLAorCSAgICBzYy0+c2Nfb2hjaS5zY19pb19zaXplLCAmc2MtPnNj X29oY2kuc2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24g VVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShkZXYpKTsKKworCisJ cmlkID0gMDsKKwlzYy0+c2Nfb2hjaS5zY19pcnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu eShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmICghKHNjLT5z Y19vaGNpLnNjX2lycV9yZXMpKSB7CisJCWdvdG8gZXJyb3I7CisJfQorCXNjLT5zY19vaGNpLnNj X2J1cy5iZGV2ID0gZGV2aWNlX2FkZF9jaGlsZChkZXYsICJ1c2J1cyIsIC0xKTsKKwlpZiAoIShz Yy0+c2Nfb2hjaS5zY19idXMuYmRldikpIHsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2aWNlX3Nl dF9pdmFycyhzYy0+c2Nfb2hjaS5zY19idXMuYmRldiwgJnNjLT5zY19vaGNpLnNjX2J1cyk7CisK KwlzdHJsY3B5KHNjLT5zY19vaGNpLnNjX3ZlbmRvciwgIkNhdml1bSIsIHNpemVvZihzYy0+c2Nf b2hjaS5zY192ZW5kb3IpKTsKKworI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMzEpCisJ ZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+c2Nfb2hjaS5zY19pcnFfcmVzLCBJTlRSX1RZ UEVfQklPIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEwsIChkcml2ZXJfaW50cl90ICopb2hjaV9p bnRlcnJ1cHQsIHNjLCAmc2MtPnNjX29oY2kuc2NfaW50cl9oZGwpOworI2Vsc2UKKwllcnIgPSBi dXNfc2V0dXBfaW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMsIElOVFJfVFlQRV9CSU8g fCBJTlRSX01QU0FGRSwKKwkgICAgKGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVwdCwgc2Ms ICZzYy0+c2Nfb2hjaS5zY19pbnRyX2hkbCk7CisjZW5kaWYKKwlpZiAoZXJyKSB7CisJCXNjLT5z Y19vaGNpLnNjX2ludHJfaGRsID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlidXNfc3Bh Y2Vfd3JpdGVfNChzYy0+c2Nfb2hjaS5zY19pb190YWcsIHNjLT5zY19vaGNpLnNjX2lvX2hkbCwK KwkgICAgT0hDSV9DT05UUk9MLCAwKTsKKworCWVyciA9IG9oY2lfaW5pdCgmc2MtPnNjX29oY2kp OworCWlmICghZXJyKSB7CisJCWVyciA9IGRldmljZV9wcm9iZV9hbmRfYXR0YWNoKHNjLT5zY19v aGNpLnNjX2J1cy5iZGV2KTsKKwl9CisJaWYgKGVycikgeworCQlnb3RvIGVycm9yOworCX0KKwly ZXR1cm4gKDApOworCitlcnJvcjoKKwlvaGNpX2VjX2RldGFjaChkZXYpOworCXJldHVybiAoRU5Y SU8pOworfQorCitzdGF0aWMgaW50CitvaGNpX2VjX2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJ c3RydWN0IGVjX29oY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWRldmlj ZV90IGJkZXY7CisJaW50IGVycjsKKworCWlmIChzYy0+c2Nfb2hjaS5zY19idXMuYmRldikgewor CQliZGV2ID0gc2MtPnNjX29oY2kuc2NfYnVzLmJkZXY7CisJCWRldmljZV9kZXRhY2goYmRldik7 CisJCWRldmljZV9kZWxldGVfY2hpbGQoZGV2LCBiZGV2KTsKKwl9CisJLyogZHVyaW5nIG1vZHVs ZSB1bmxvYWQgdGhlcmUgYXJlIGxvdHMgb2YgY2hpbGRyZW4gbGVmdG92ZXIgKi8KKwlkZXZpY2Vf ZGVsZXRlX2FsbF9jaGlsZHJlbihkZXYpOworCisJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnNjX29o Y2kuc2NfaW9fdGFnLCBzYy0+c2Nfb2hjaS5zY19pb19oZGwsCisJICAgIE9IQ0lfQ09OVFJPTCwg MCk7CisKKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcyAmJiBzYy0+c2Nfb2hjaS5zY19pbnRy X2hkbCkgeworCQkvKgorCQkgKiBvbmx5IGNhbGwgb2hjaV9kZXRhY2goKSBhZnRlciBvaGNpX2lu aXQoKQorCQkgKi8KKwkJb2hjaV9kZXRhY2goJnNjLT5zY19vaGNpKTsKKworCQllcnIgPSBidXNf dGVhcmRvd25faW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMsIHNjLT5zY19vaGNpLnNj X2ludHJfaGRsKTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAo c2MtPnNjX29oY2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ U19SRVNfSVJRLCAwLCBzYy0+c2Nfb2hjaS5zY19pcnFfcmVzKTsKKwkJc2MtPnNjX29oY2kuc2Nf aXJxX3JlcyA9IE5VTEw7CisJfQorCWlmIChzYy0+c2Nfb2hjaS5zY19pb19yZXMpIHsKKwkJYnVz X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgTUVNX1JJRCwKKwkJICAgIHNj LT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJCXNjLT5zY19vaGNpLnNjX2lvX3JlcyA9IE5VTEw7CisJ fQorCXVzYl9idXNfbWVtX2ZyZWVfYWxsKCZzYy0+c2Nfb2hjaS5zY19idXMsICZvaGNpX2l0ZXJh dGVfaHdfc29mdGMpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2Rf dCBvaGNpX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9E KGRldmljZV9wcm9iZSwgb2hjaV9lY19wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gs IG9oY2lfZWNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgb2hjaV9lY19kZXRh Y2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc2h1dGRvd24sIGJ1c19nZW5lcmljX3NodXRkb3duKSwK KworCS8qIEJ1cyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLCBidXNf Z2VuZXJpY19wcmludF9jaGlsZCksCisKKwl7MCwgMH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBv aGNpX2RyaXZlciA9IHsKKwkib2hjaSIsCisJb2hjaV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3Qg ZWNfb2hjaV9zb2Z0YyksCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBvaGNpX2RldmNsYXNzOwor CitEUklWRVJfTU9EVUxFKG9oY2ksIGVjb25hYXJtLCBvaGNpX2RyaXZlciwgb2hjaV9kZXZjbGFz cywgMCwgMCk7CitNT0RVTEVfREVQRU5EKG9oY2ksIHVzYiwgMSwgMSwgMSk7CkluZGV4OiBzeXMv YXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS91YXJ0 X2NwdV9lYy5jCShyZXZpc2lvbiAwKQorKysgc3lzL2FybS9lY29uYS91YXJ0X2NwdV9lYy5jCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKi0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBZ b2hhbmVzIE51Z3JvaG8KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVk IGJ5IFNlbWloYWxmLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0 OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNQVJWRUxM IG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAg IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAib3B0X3VhcnQuaCIKKwor I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVk ZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1 cy5oPgorI2luY2x1ZGUgPHN5cy9jb25zLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgor CisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfY3B1 Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25h X3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4KKworYnVzX3NwYWNlX3Rh Z190IHVhcnRfYnVzX3NwYWNlX2lvOworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX21l bTsKKworCitpbnQKK3VhcnRfY3B1X2VxcmVzKHN0cnVjdCB1YXJ0X2JhcyAqYjEsIHN0cnVjdCB1 YXJ0X2JhcyAqYjIpCit7CisKKwlyZXR1cm4gKChiMS0+YnNoID09IGIyLT5ic2ggJiYgYjEtPmJz dCA9PSBiMi0+YnN0KSA/IDEgOiAwKTsKK30KKworaW50Cit1YXJ0X2NwdV9nZXRkZXYoaW50IGRl dnR5cGUsIHN0cnVjdCB1YXJ0X2RldmluZm8gKmRpKQoreworCXN0cnVjdCB1YXJ0X2NsYXNzICpj bGFzcyA9ICZ1YXJ0X25zODI1MF9jbGFzczsKKworCWRpLT5vcHMgPSB1YXJ0X2dldG9wcyhjbGFz cyk7CisJZGktPmJhcy5jaGFuID0gMDsKKwlkaS0+YmFzLmJzdCA9IG9iaW9fdGFnOworCisJaWYg KGJ1c19zcGFjZV9tYXAoZGktPmJhcy5ic3QsIEVDT05BX0lPX0JBU0UgKyBFQ09OQV9VQVJUX0JB U0UsCisJCQkgIEVDT05BX1VBUlRfU0laRSwKKwkJCSAgMCwgJmRpLT5iYXMuYnNoKSAhPSAwKSB7 CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWRpLT5iYXVkcmF0ZSA9IDA7CisJZGktPmJhcy5y ZWdzaGZ0ID0gRUNfVUFSVF9SRUdTSElGVDsKKwlkaS0+YmFzLnJjbGsgPSBFQ19VQVJUX0NMT0NL IDsKKwlkaS0+ZGF0YWJpdHMgPSA4OworCWRpLT5zdG9wYml0cyA9IDE7CisJZGktPnBhcml0eSA9 IFVBUlRfUEFSSVRZX05PTkU7CisJdWFydF9idXNfc3BhY2VfbWVtID0gb2Jpb190YWc7CisJdWFy dF9idXNfc3BhY2VfaW8gPSBOVUxMOworCisJcmV0dXJuICgwKTsKK30KSW5kZXg6IHN5cy9hcm0v ZWNvbmEvdWFydF9idXNfZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2Vjb25hL3VhcnRfYnVz X2VjLmMJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL3VhcnRfYnVzX2VjLmMJKHJldmlz aW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qLQorICogQ29weXJpZ2h0IChDKSAyMDA5IFlvaGFu ZXMgTnVncm9obworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBO ZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMK KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1Ig QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK KyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1 ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9i dXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNp bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1 ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVk ZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfYnVzLmg+CisjaW5j bHVkZSA8ZGV2L3VhcnQvdWFydF9jcHUuaD4KKworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9y ZWcuaD4KKworc3RhdGljIGludCB1YXJ0X2VjX3Byb2JlKGRldmljZV90IGRldik7CisKK3N0YXRp YyBkZXZpY2VfbWV0aG9kX3QgdWFydF9lY19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVy ZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQl1YXJ0X2VjX3Byb2JlKSwKKwlERVZN RVRIT0QoZGV2aWNlX2F0dGFjaCwJdWFydF9idXNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNl X2RldGFjaCwJdWFydF9idXNfZGV0YWNoKSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZl cl90IHVhcnRfZWNfZHJpdmVyID0geworCXVhcnRfZHJpdmVyX25hbWUsCisJdWFydF9lY19tZXRo b2RzLAorCXNpemVvZihzdHJ1Y3QgdWFydF9zb2Z0YyksCit9OworCitzdGF0aWMgaW50Cit1YXJ0 X2VjX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QJdWFydF9zb2Z0YyAqc2M7CisJaW50 IAlzdGF0dXM7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+c2NfY2xhc3Mg PSAmdWFydF9uczgyNTBfY2xhc3M7CisJc3RhdHVzID0gdWFydF9idXNfcHJvYmUoZGV2LCBFQ19V QVJUX1JFR1NISUZULCBFQ19VQVJUX0NMT0NLICwgMCwgMCk7CisKKwlyZXR1cm4oc3RhdHVzKTsK K30KKworRFJJVkVSX01PRFVMRSh1YXJ0LCBlY29uYWFybSwgdWFydF9lY19kcml2ZXIsIHVhcnRf ZGV2Y2xhc3MsIDAsIDApOwpJbmRleDogc3lzL2FybS9lY29uYS9zdGQuZWNvbmEKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc3lzL2FybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2Vj b25hL3N0ZC5lY29uYQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorIyAkRnJlZUJTRCQK KworZmlsZXMJIi4uL2Vjb25hL2ZpbGVzLmVjb25hIgorY3B1CQlDUFVfRkE1MjYKK21ha2VvcHRp b25zCUNPTkZfQ0ZMQUdTPS1tYXJjaD1hcm12NAorb3B0aW9ucyAJUEhZU0FERFI9MHgwMDAwMDAw MAorbWFrZW9wdGlvbnMJS0VSTlBIWVNBRERSPTB4MDEwMDAwMDAKK21ha2VvcHRpb25zCUtFUk5W SVJUQUREUj0weGMxMDAwMDAwCisKK29wdGlvbnMgCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCitv cHRpb25zIAlLRVJOVklSVEFERFI9MHhjMTAwMDAwMAkJIyBVc2VkIGluIGxkc2NyaXB0LmFybQor b3B0aW9ucyAJRkxBU0hBRERSPTB4RDAwMDAwMDAKK29wdGlvbnMgCUxPQURFUlJBTUFERFI9MHgw MDAwMDAwMAorb3B0aW9ucyAJU1RBUlRVUF9QQUdFVEFCTEVfQUREUj0weDAwMTAwMDAwCkluZGV4 OiBzeXMvY29uZi9NYWtlZmlsZS5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvTWFrZWZpbGUu YXJtCShyZXZpc2lvbiAyMDA5ODgpCisrKyBzeXMvY29uZi9NYWtlZmlsZS5hcm0JKHdvcmtpbmcg Y29weSkKQEAgLTczLDcgKzczLDcgQEAKIAkkUy8kTS8kTS9jcHVmdW5jX2FzbV9zYTEuUyAkUy8k TS8kTS9jcHVmdW5jX2FzbV9hcm0xMC5TIFwKIAkkUy8kTS8kTS9jcHVmdW5jX2FzbV94c2NhbGUu UyAkUy8kTS8kTS9jcHVmdW5jX2FzbS5TIFwKIAkkUy8kTS8kTS9jcHVmdW5jX2FzbV94c2NhbGVf YzMuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9hcm12NV9lYy5TIFwKLQkkUy8kTS8kTS9jcHVmdW5j X2FzbV9zaGVldmEuUworCSRTLyRNLyRNL2NwdWZ1bmNfYXNtX3NoZWV2YS5TICRTLyRNLyRNL2Nw dWZ1bmNfYXNtX2ZhNTI2LlMKIEtFUk5FTF9FWFRSQT10cmFtcG9saW5lCiBLRVJORUxfRVhUUkFf SU5TVEFMTD1rZXJuZWwuZ3oudHJhbXAKIHRyYW1wb2xpbmU6ICR7S0VSTkVMX0tPfS50cmFtcApJ bmRleDogc3lzL2NvbmYvb3B0aW9ucy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvb3B0aW9u cy5hcm0JKHJldmlzaW9uIDIwMDk4OCkKKysrIHN5cy9jb25mL29wdGlvbnMuYXJtCSh3b3JraW5n IGNvcHkpCkBAIC0zNiwzICszNiw0IEBACiBBVDkxX0JXQ1QJCW9wdF9hdDkxLmgKIEFUOTFfVFND CQlvcHRfYXQ5MS5oCiBBVDkxX0tXSUtCWVRFCQlvcHRfYXQ5MS5oCitDUFVfRkE1MjYJCW9wdF9n bG9iYWwuaApJbmRleDogc3lzL2tlcm4vdmZzX21vdW50LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2tl cm4vdmZzX21vdW50LmMJKHJldmlzaW9uIDIwMDk4OCkKKysrIHN5cy9rZXJuL3Zmc19tb3VudC5j CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAzLDYgKzE0MDMsMTEgQEAKIAlzdHJ1Y3QgdGltZXZhbCBs YXN0ZmFpbDsKIAlpbnQgY3VyZmFpbCA9IDA7CiAKKwkvKiB0ZW1wb3Jhcnkgc29sdXRpb24gZm9y IHRpbWVvdXQgd2FpdGluZyBmb3IgVVNCIGRpc2sgcm9vdAorCSAqIGZpbGVzeXN0ZW0KKwkgKi8K KwlwYXVzZSgiV0FJVCIsIGh6ICogMTApOworCiAJZm9yICg7OykgewogCQlEUk9QX0dJQU5UKCk7 CiAJCWdfd2FpdGlkbGUoKTsK --001636b2adb14f1efd047b912a10--