From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23383 invoked by alias); 23 Jun 2009 07:37:44 -0000 Received: (qmail 23366 invoked by uid 22791); 23 Jun 2009 07:37:36 -0000 X-SWARE-Spam-Status: No, hits=1.6 required=5.0 tests=AWL,BAYES_50,HK_OBFDOM,HK_OBFDOMREQ,J_CHICKENPOX_12,J_CHICKENPOX_93,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 23 Jun 2009 07:37:22 +0000 Received: from wpaz37.hot.corp.google.com (wpaz37.hot.corp.google.com [172.24.198.101]) by smtp-out.google.com with ESMTP id n5N7bHXw006065 for ; Tue, 23 Jun 2009 08:37:17 +0100 Received: from yxe39 (yxe39.prod.google.com [10.190.2.39]) by wpaz37.hot.corp.google.com with ESMTP id n5N7bELw032724 for ; Tue, 23 Jun 2009 00:37:15 -0700 Received: by yxe39 with SMTP id 39so3761449yxe.14 for ; Tue, 23 Jun 2009 00:37:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.90.100.20 with SMTP id x20mr6020990agb.55.1245742634306; Tue, 23 Jun 2009 00:37:14 -0700 (PDT) In-Reply-To: <200906210055.06940.pedro@codesourcery.com> References: <20090430071853.99F5584890@localhost> <001201c9d860$e66c5850$b34508f0$@u-strasbg.fr> <200906210055.06940.pedro@codesourcery.com> Date: Tue, 23 Jun 2009 07:37:00 -0000 Message-ID: Subject: Re: [RFA] i386/amd64 h/w watchpoints in gdbserver From: Doug Evans To: Pedro Alves Cc: Pierre Muller , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016361e87f033105b046cff0f58 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-06/txt/msg00602.txt.bz2 --0016361e87f033105b046cff0f58 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 19000 On Sat, Jun 20, 2009 at 4:55 PM, Pedro Alves wrote: > On Tuesday 02 June 2009 16:36:05, Doug Evans wrote: > >> RCS file: i386-low.c >> diff -N i386-low.c >> --- /dev/null=A0=A0=A01 Jan 1970 00:00:00 -0000 >> +++ i386-low.c=A0=A01 Jun 2009 22:02:43 -0000 >> @@ -0,0 +1,660 @@ > > >> +/* Support for 8-byte wide hw watchpoints. =A0*/ >> +#ifndef TARGET_HAS_DR_LEN_8 >> +#define TARGET_HAS_DR_LEN_8 (sizeof (long) =3D=3D 8) > > Note: this will be trouble for Win64 (sizeof(long) =3D=3D 4, sizeof (ptr)= =3D=3D 8) changed to sizeof (void *) >> +/* Set in DR7 the RW and LEN fields for the I'th debug register. =A0*/ >> +#define I386_DR_SET_RW_LEN(state, i,rwlen) \ >> + =A0do { \ >> + =A0 =A0(state)->dr_control_mirror &=3D \ >> + =A0 =A0 =A0~(0x0f << (DR_CONTROL_SHIFT+DR_CONTROL_SIZE*(i))); \ >> + =A0 =A0(state)->dr_control_mirror |=3D \ >> + =A0 =A0 =A0((rwlen) << (DR_CONTROL_SHIFT+DR_CONTROL_SIZE*(i))); \ >> + =A0} while (0) > > Spaces around operators missing, here and several other places. > I realise this is copied from GDB, but IWBN to fix this while we > go. =A0Feel free to fix it on GDB as well, as obvious. patch updated. >> +/* Whether or not to print the mirrored debug registers. =A0*/ >> +static int maint_show_dr =3D 0; > > I see nowhere where this can be set. =A0There are a few references to > GDB's main show-debug-regs command left behind. =A0Could this be set with > a command line option and/or monitor command perhaps? It was useful during debugging, I just hardcoded it to 1. As for how to really enable set it, I wasn't sure. I added a monitor command. > >> + >> +/* Types of operations supported by i386_handle_nonaligned_watchpoint. = =A0*/ >> +typedef enum { WP_INSERT, WP_REMOVE, WP_COUNT } i386_wp_op_t; >> + >> +/* Internal functions. =A0*/ >> + >> +/* Return the value of a 4-bit field for DR7 suitable for watching a >> + =A0 region of LEN bytes for accesses of type TYPE. =A0LEN is assumed to >> + =A0 have the value of 1, 2, or 4. =A0*/ >> +static unsigned i386_length_and_rw_bits (int len, enum target_hw_bp_typ= e type); >> + >> +/* Insert a watchpoint at address ADDR, which is assumed to be aligned >> + =A0 according to the length of the region to watch. =A0LEN_RW_BITS is = the >> + =A0 value of the bit-field from DR7 which describes the length and >> + =A0 access type of the region to be watched by this watchpoint. =A0Ret= urn >> + =A0 0 on success, -1 on failure. =A0*/ >> +static int i386_insert_aligned_watchpoint (struct i386_debug_reg_state = *state, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 CORE_ADDR addr, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 unsigned len_rw_bits); >> + >> +/* Remove a watchpoint at address ADDR, which is assumed to be aligned >> + =A0 according to the length of the region to watch. =A0LEN_RW_BITS is = the >> + =A0 value of the bits from DR7 which describes the length and access >> + =A0 type of the region watched by this watchpoint. =A0Return 0 on >> + =A0 success, -1 on failure. =A0*/ >> +static int i386_remove_aligned_watchpoint (struct i386_debug_reg_state = *state, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 CORE_ADDR addr, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 unsigned len_rw_bits); >> + >> +/* Insert or remove a (possibly non-aligned) watchpoint, or count the >> + =A0 number of debug registers required to watch a region at address >> + =A0 ADDR whose length is LEN for accesses of type TYPE. =A0Return 0 on >> + =A0 successful insertion or removal, a positive number when queried >> + =A0 about the number of registers, or -1 on failure. =A0If WHAT is not= a >> + =A0 valid value, bombs through fatal. =A0*/ >> +static int i386_handle_nonaligned_watchpoint (struct i386_debug_reg_sta= te *state, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0i386_wp_op_t wh= at, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0CORE_ADDR addr,= int len, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0enum target_hw_= bp_type type); > > I don't think none of these forward declarations is needed? ok [once upon a time, they were ok. the new rules haven't been locked in memory yet] >> + >> +/* Implementation. =A0*/ >> + >> +/* Clear the reference counts and forget everything we knew about the >> + =A0 debug registers. =A0*/ >> + >> +void >> +i386_low_cleanup_dregs (struct i386_debug_reg_state *state) >> +{ >> + =A0int i; >> + >> + =A0ALL_DEBUG_REGISTERS(i) >> + =A0 =A0{ >> + =A0 =A0 =A0state->dr_mirror[i] =3D 0; >> + =A0 =A0 =A0state->dr_ref_count[i] =3D 0; >> + =A0 =A0} >> + =A0state->dr_control_mirror =3D 0; >> + =A0state->dr_status_mirror =A0=3D 0; >> +} > > This isn't called anywhere? Ah. 'tis now. >> + >> +/* Print the values of the mirrored debug registers. =A0This is called >> + =A0 when maint_show_dr is non-zero. > >> To set that up, type "maint >> + =A0 show-debug-regs" at GDB's prompt. =A0*/ > > Nope, this is a lie. fixed. >> + >> +static void >> +i386_show_dr (struct i386_debug_reg_state *state, >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0const char *func, CORE_ADDR addr, >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0int len, enum target_hw_bp_type type) >> +{ >> + =A0int i; >> + >> + =A0printf (func); >> + =A0if (addr || len) >> + =A0 =A0printf (" (addr=3D%lx, len=3D%d, type=3D%s)", >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0 (unsigned lon= g) addr, len, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0 type =3D=3D h= w_write ? "data-write" >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 =A0 : (type =3D= =3D hw_read ? "data-read" >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 = =A0: (type =3D=3D hw_access ? "data-read/write" >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 = =A0 =A0 : (type =3D=3D hw_execute ? "instruction-execute" >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0/* FIXME: if/when I/O read/write >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 =A0 watchpoints are supported, add them >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 =A0 here. =A0*/ >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0: "??unknown??")))); >> + =A0printf (":\n"); >> + =A0printf ("\tCONTROL (DR7): %08x =A0 =A0 =A0 =A0 =A0STATUS (DR6): %08= x\n", >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 state->dr_control= _mirror, state->dr_status_mirror); >> + =A0ALL_DEBUG_REGISTERS (i) >> + =A0 =A0{ >> + =A0 =A0 =A0printf ("\ >> +\tDR%d: addr=3D0x%s, ref.count=3D%d =A0DR%d: addr=3D0x%s, ref.count=3D%= d\n", >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 i= , paddr (state->dr_mirror[i]), state->dr_ref_count[i], >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 i= +1, paddr (state->dr_mirror[i+1]), state->dr_ref_count[i+1]); >> + =A0 =A0 =A0i++; >> + =A0 =A0} >> +} > > These should not go to stdout. =A0GDB should be fixed too to make these g= o to > gdb_stdlog. changed to stderr >> + >> +static int >> +Z_packet_to_hw_type (char type) >> +{ >> + =A0switch (type) >> + =A0 =A0{ >> + =A0 =A0case Z_PACKET_WRITE_WP: =A0return hw_write; >> + =A0 =A0case Z_PACKET_READ_WP: =A0 return hw_read; >> + =A0 =A0case Z_PACKET_ACCESS_WP: return hw_access; > > Please don't vertically align. =A0Stick to the standards and put > those return statements in their own line. k. >> + =A0 =A0default: >> + =A0 =A0 =A0error ("Z_packet_to_hw_type: bad watchpoint type %c", type); >> + =A0 =A0} >> +} >> + >> +/* Insert a watchpoint to watch a memory region which starts at >> + =A0 address ADDR and whose length is LEN bytes. =A0Watch memory access= es >> + =A0 of the type TYPE_FROM_PACKET. =A0Return 0 on success, -1 on failur= e. =A0*/ >> + >> +int >> +i386_low_insert_watchpoint (struct i386_debug_reg_state *state, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 = =A0 =A0char type_from_packet, CORE_ADDR addr, int len) >> +{ >> + =A0int retval; >> + =A0int type =3D Z_packet_to_hw_type (type_from_packet); >> + >> + =A0if (((len !=3D 1 && len !=3D2 && len !=3D4) && !(TARGET_HAS_DR_LEN_= 8 && len =3D=3D 8)) > > More examples of missing space around operators coming from GDB. patch updated >> + >> +/* If the inferior has some watchpoint that triggered, set the >> + =A0 address associated with that watchpoint and return non-zero. >> + =A0 Otherwise, return zero. =A0*/ >> + >> +CORE_ADDR >> +i386_low_stopped_data_address (struct i386_debug_reg_state *state) >> +{ >> + =A0CORE_ADDR addr =3D 0; >> + =A0int i; >> + >> + =A0/* Get dr_status_mirror for use by I386_DR_WATCH_HIT. =A0*/ >> + =A0i386_dr_low_get_status (state); >> + >> + =A0ALL_DEBUG_REGISTERS(i) >> + =A0 =A0{ >> + =A0 =A0 =A0if (I386_DR_WATCH_HIT (state, i) >> +=A0=A0=A0=A0=A0=A0=A0 =A0/* This second condition makes sure DRi is set= up for a data >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 watchpoint, not a hardware breakpoint. = =A0The reason is >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 that GDB doesn't call the target_stopped_= data_address >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 method except for data watchpoints. =A0In= other words, I'm >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0 being paranoiac. =A0*/ >> +=A0=A0=A0=A0=A0=A0=A0 =A0&& I386_DR_GET_RW_LEN (state, i) !=3D 0) >> +=A0=A0=A0=A0=A0=A0=A0{ >> +=A0=A0=A0=A0=A0=A0=A0 =A0addr =3D state->dr_mirror[i]; >> +=A0=A0=A0=A0=A0=A0=A0 =A0if (maint_show_dr) >> +=A0=A0=A0=A0=A0=A0=A0 =A0 =A0i386_show_dr (state, "watchpoint_hit", add= r, -1, hw_write); >> +=A0=A0=A0=A0=A0=A0=A0} >> + =A0 =A0} >> + >> + =A0if (maint_show_dr && addr =3D=3D 0) >> + =A0 =A0i386_show_dr (state, "stopped_data_addr", 0, 0, hw_write); >> + > >> + =A0/* NOTE: gdb version checks rc !=3D 0 here. =A0*/ >> + =A0return addr; >> +} > > Indeed. =A0GDB's interface was fixed to allow watchpoints at 0. =A0I > don't think that matters for any gdbserver target, but it would > be nice to fix the interface anyway... patch updated >> + >> +int >> +i386_low_stopped_by_watchpoint (struct i386_debug_reg_state *state) >> +{ >> + =A0CORE_ADDR addr =3D 0; >> + =A0/* NOTE: gdb version passes boolean found/not-found result from >> + =A0 =A0 i386_stopped_data_address. =A0*/ >> + =A0addr =3D i386_low_stopped_data_address (state); >> + =A0return (addr !=3D 0); >> +} > > Same as above. =A0You've probably thought about that too... > >> + >> +/* Support for h/w breakpoints. >> + =A0 This support is not currently used, kept for reference. =A0*/ > > Any reason for not using this currently? =A0If there's a good reason, > than let's drop it. =A0But I'd prefer to have it working. =A0:-) deleted. >> Index: utils.c >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > +char * > +paddr (CORE_ADDR addr) > > This isn't documented in neither server.h or here? Just "going with the flow". > +{ > + =A0char *str =3D get_cell (); > + =A0xsnprintf (str, CELLSIZE, "%lx", (long) addr); > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^= ^^^ > > Note: this will be wrong on Win64... =A0BTW, Ulrich > was removing several of these functions from GDB > in the removing-current_gdbarch series. =A0Will this one > stay? =A0Might be worth it to use the one that is going > to stay in GDB. I think a higher order bit is that gdb and gdbserver cannot share code. Bringing over all the smarts to handle all the different portability issues is painful/depressing. I went with something simple that works for now. IWBN if this kind of thing were in, say, libiberty and tools could just use= it. > > + =A0return str; > +} > > > >> Index: linux-low.c >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> RCS file: /cvs/src/src/gdb/gdbserver/linux-low.c,v >> retrieving revision 1.105 >> diff -u -p -r1.105 linux-low.c >> --- linux-low.c=A024 May 2009 17:44:19 -0000=A0=A0=A0=A0=A0=A01.105 >> +++ linux-low.c=A01 Jun 2009 22:02:43 -0000 >> @@ -224,6 +224,7 @@ delete_lwp (struct lwp_info *lwp) >> =A0{ >> =A0 =A0remove_thread (get_lwp_thread (lwp)); >> =A0 =A0remove_inferior (&all_lwps, &lwp->head); >> + =A0free (lwp->arch_private); >> =A0 =A0free (lwp); >> =A0} >> >> @@ -242,6 +243,9 @@ linux_add_process (int pid, int attached >> =A0 =A0proc =3D add_process (pid, attached); >> =A0 =A0proc->private =3D xcalloc (1, sizeof (*proc->private)); >> >> + =A0if (the_low_target.new_process !=3D NULL) >> + =A0 =A0proc->private->arch_private =3D the_low_target.new_process (pid= , attached); > > ( Wouldn't the interface be a bit cleaner if you > passed the 'proc' pointer down to new_process, and have the > callback manage arch_private field itself? =A0As is, your passing > some useless parameters down. =A0If they end up being needed, > it is likely that an extra look up on pid would be needed to > get at the structure. =A0This would also migrate better to a > per-process data mechanism similar to gdb's objfile_data, if > need be. ) args deleted. >> Index: linux-low.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> RCS file: /cvs/src/src/gdb/gdbserver/linux-low.h,v >> retrieving revision 1.30 >> diff -u -p -r1.30 linux-low.h >> --- linux-low.h=A012 May 2009 22:25:00 -0000=A0=A0=A0=A0=A0=A01.30 >> +++ linux-low.h=A01 Jun 2009 22:02:43 -0000 >> @@ -56,8 +56,13 @@ struct process_info_private >> >> =A0 =A0/* Connection to the libthread_db library. =A0*/ >> =A0 =A0td_thragent_t *thread_agent; >> + >> + =A0/* Target-specific additions. =A0*/ > > Warning: "Target" overload. =A0We need to get into the habit > of not doing this --- it makes refering to these things quite > ambiguous. =A0Call it "arch" or something else. =A0There are other > similar cases. I dunno. there's "the_low_target" in linux-low.h Perhaps we can migrate away but I don't see the above "infraction" as being critical. >> =A0#define pid_of(proc) ptid_get_pid ((proc)->head.id) >> =A0#define lwpid_of(proc) ptid_get_lwp ((proc)->head.id) >> +#define PIDGET(ptid) ptid_get_pid (ptid) >> +#define TIDGET(ptid) ptid_get_lwp (ptid) > > Why do we need extra ways to do the same thing? =A0Let's not > copy GDB's bad habits and legacy code. k. >> --- linux-x86-low.c=A0=A0=A0=A0=A013 May 2009 19:11:04 -0000=A0=A0=A0=A0= =A0=A01.2 >> +++ linux-x86-low.c=A0=A0=A0=A0=A01 Jun 2009 22:02:43 -0000 > >> +static unsigned long >> +x86_linux_dr_get (ptid_t ptid, int regnum) >> +{ >> + =A0int tid; >> + =A0unsigned long value; >> + >> + =A0tid =3D TIDGET (ptid); >> + =A0if (tid =3D=3D 0) >> + =A0 =A0tid =3D PIDGET (ptid); > > The tid =3D=3D 0 case is dead code coming from GDB, isn't it? > Likewise in other places. Perhaps. There's similar code in linux-low.c:same_lwp. =3D=3D 0 code deleted. >> + >> + =A0errno =3D 0; >> + =A0value =3D ptrace (PTRACE_PEEKUSER, tid, >> +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =A0offsetof (struct user,= u_debugreg[regnum]), 0); >> + =A0if (errno !=3D 0) >> + =A0 =A0error ("Couldn't read debug register"); >> + >> + =A0return value; >> +} >> + > >> +/* Update the inferior's debug register REGNUM from STATE. =A0*/ >> + >> +void >> +i386_dr_low_set_addr (const struct i386_debug_reg_state *state, int reg= num) >> +{ >> + =A0struct inferior_list_entry *lp; >> + =A0CORE_ADDR addr; >> + >> + =A0if (! (regnum >=3D 0 && regnum <=3D DR_LASTADDR - DR_FIRSTADDR)) >> + =A0 =A0fatal ("Invalid debug register %d", regnum); >> + >> + =A0addr =3D state->dr_mirror[regnum]; >> + >> + =A0/* ??? Will need tweaking for multi-process. =A0*/ > > Indeed. =A0Why not just set the debug_registers_changed in lwps > of the current process? Are there any existing examples of this? I would have done that had process_info contained the list of its threads (it would have been trivially straightforward). >> + =A0for (lp =3D all_lwps.head; lp; lp =3D lp->next) >> + =A0 =A0{ >> + =A0 =A0 =A0struct lwp_info *lwp =3D (struct lwp_info *) lp; >> + >> + =A0 =A0 =A0/* The actual update is done later, we just mark that the r= egister >> +=A0=A0=A0=A0=A0=A0=A0 needs updating. =A0*/ >> + =A0 =A0 =A0lwp->arch_private->debug_registers_changed =3D 1; >> + =A0 =A0} > > Thanks, this is likely more non-stop friendly than the win32 version. > We can just send a SIGSTOP to each thread that is stopped, and set > stop_expected. =A0Then, the debug register updating just works. =A0(we'll > still need to make sure that moribund locations work with watchpoints > though) > > >> Index: utils.c >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> RCS file: /cvs/src/src/gdb/gdbserver/utils.c,v >> retrieving revision 1.18 >> diff -u -p -r1.18 utils.c >> --- utils.c=A0=A0=A0=A0=A019 Jan 2009 00:16:46 -0000=A0=A0=A0=A0=A0=A01.= 18 >> +++ utils.c=A0=A0=A0=A0=A01 Jun 2009 22:02:43 -0000 >> @@ -170,3 +170,37 @@ warning (const char *string,...) >> =A0 =A0fprintf (stderr, "\n"); >> =A0 =A0va_end (args); >> =A0} >> + >> +/* temporary storage using circular buffer */ > > More bogus formatting copied from GDB. =A0Full sentence: capitalize, peri= od, > double space. k. >> +#define NUMCELLS 4 >> +#define CELLSIZE 50 >> +static char * >> +get_cell (void) >> +{ >> + =A0static char buf[NUMCELLS][CELLSIZE]; >> + =A0static int cell =3D 0; >> + =A0if (++cell >=3D NUMCELLS) >> + =A0 =A0cell =3D 0; >> + =A0return buf[cell]; >> +} >> + > > > Otherwise, this is looking good to me. =A0I still feel that > exposing the debug registers to GDB (as per-process wide > registers), as opposed to using Z packets would be an > alternative worth investigating, that would avoid having > to mostly copy i386-nat.c to gdbserver/i386-low.c. =A0But, > the Z packets interface already exists, so, that can > always be investigated at any later time... Setting aside breakpoints+watchpoints -> "points", http://sourceware.org/ml/gdb-patches/2009-06/msg00594.html how about this? --0016361e87f033105b046cff0f58 Content-Type: text/plain; charset=US-ASCII; name="gdb-090622-gdbserver-hw-wp-4.patch.txt" Content-Disposition: attachment; filename="gdb-090622-gdbserver-hw-wp-4.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwaayjxw0 Content-length: 70415 MjAwOS0wNi0yMiAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoJICAg IFBpZXJyZSBNdWxsZXIgIDxtdWxsZXJAaWNzLnUtc3RyYXNiZy5mcj4KCgkq IE1ha2VmaWxlLmluIChTRklMRVMpOiBBZGQgaTM4Ni1sb3cuYwoJKGkzODZf bG93X2gpOiBEZWZpbmUuCgkoaTM4Ni1sb3cubyk6IEFkZCBkZXBlbmRlbmNp ZXMuCgkobGludXgteDg2LWxvdy5vKTogQWRkIGkzODYtbG93LmggZGVwZW5k ZW5jeS4KCSh3aW4zMi1pMzg2LWxvdy5vKTogRGl0dG8uCgkqIGkzODYtbG93 LmM6IE5ldyBmaWxlLgoJKiBpMzg2LWxvdy5oOiBOZXcgZmlsZS4KCSogY29u ZmlndXJlLnNydiAoaVszNDU2N104Ni0qLWN5Z3dpbiopOiBBZGQgaTM4Ni1s b3cubyB0byBzcnZfdGd0b2JqLgoJKGlbMzQ1NjddODYtKi1saW51eCosIGlb MzQ1NjddODYtKi1taW5ndyosIHg4Nl82NC0qLWxpbnV4Kik6IERpdHRvLgoJ KiBsaW51eC1sb3cuYyAobGludXhfYWRkX3Byb2Nlc3MpOiBJbml0aWFsaXpl IGFyY2hfcHJpdmF0ZS4KCShsaW51eF9yZW1vdmVfcHJvY2Vzcyk6IEZyZWUg YXJjaF9wcml2YXRlLgoJKGFkZF9sd3ApOiBJbml0aWFsaXplIGFyY2hfcHJp dmF0ZS4KCShkZWxldGVfbHdwKTogRnJlZSBhcmNoX3ByaXZhdGUuCgkobGlu dXhfcmVzdW1lX29uZV9sd3ApOiBDYWxsIHRoZV9sb3dfdGFyZ2V0LnByZXBh cmVfdG9fcmVzdW1lIGlmCglwcm92aWRlZC4KCSogbGludXgtbG93LmggKHBy b2Nlc3NfaW5mb19wcml2YXRlKTogTmV3IG1lbWJlciBhcmNoX3ByaXZhdGUu CgkobHdwX2luZm8pOiBOZXcgbWVtYmVyIGFyY2hfcHJpdmF0ZS4KCShsaW51 eF90YXJnZXRfb3BzKTogTmV3IG1lbWJlcnMgbmV3X3Byb2Nlc3MsIG5ld190 aHJlYWQsCglwcmVwYXJlX3RvX3Jlc3VtZS4KCShwdGlkX29mKTogTmV3IG1h Y3JvLgoJKiBsaW51eC14ODYtbG93LmM6IEluY2x1ZGUgc3RkZGVmLmgsIGkz ODYtbG93LmguCgkoYXJjaF9wcm9jZXNzX2luZm8pOiBOZXcgc3RydWN0LgoJ KGFyY2hfbHdwX2luZm8pOiBOZXcgc3RydWN0LgoJKHg4Nl9saW51eF9kcl9n ZXQsIHg4Nl9saW51eF9kcl9zZXQpOiBOZXcgZnVuY3Rpb25zLgoJKGkzODZf ZHJfbG93X3NldF9hZGRyLCBpMzg2X2RyX2xvd19zZXRfY29udHJvbCk6IE5l dyBmdW5jdGlvbnMuCgkoaTM4Nl9kcl9sb3dfZ2V0X3N0YXR1cyk6IE5ldyBm dW5jdGlvbi4KCSh4ODZfaW5zZXJ0X3dhdGNocG9pbnQsIHg4Nl9yZW1vdmVf d2F0Y2hwb2ludCk6IE5ldyBmdW5jdGlvbnMuCgkoeDg2X3N0b3BwZWRfYnlf d2F0Y2hwb2ludCk6IE5ldyBmdW5jdGlvbi4KCSh4ODZfc3RvcHBlZF9kYXRh X2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uCgkoeDg2X2xpbnV4X25ld19wcm9j ZXNzLCB4ODZfbGludXhfbmV3X3RocmVhZCk6IE5ldyBmdW5jdGlvbnMuCgko eDg2X2xpbnV4X3ByZXBhcmVfdG9fcmVzdW1lKTogTmV3IGZ1bmN0aW9uLgoJ KHRoZV9sb3dfdGFyZ2V0KTogQWRkIGVudHJpZXMgZm9yIGluc2VydF93YXRj aHBvaW50LCByZW1vdmVfd2F0Y2hwb2ludCwKCXN0b3BwZWRfYnlfd2F0Y2hw b2ludCwgc3RvcHBlZF9kYXRhX2FkZHJlc3MsIG5ld19wcm9jZXNzLCBuZXdf dGhyZWFkLAoJcHJlcGFyZV90b19yZXN1bWUuCgkqIHNlcnZlci5jIChkZWJ1 Z19od19wb2ludHMpOiBOZXcgZ2xvYmFsLgoJKG1vbml0b3Jfc2hvd19oZWxw KTogRG9jdW1lbnQgc2V0IGRlYnVnLWh3LXBvaW50cy4KCSogc2VydmVyLmgg KGRlYnVnX2h3X3BvaW50cyk6IERlY2xhcmUuCgkocGFkZHIpOiBEZWNsYXJl LgoJKiB1dGlscy5jIChOVU1DRUxMUywgQ0VMTFNJWkUpOiBOZXcgbWFjcm9z LgoJKGdldF9zZWxsLCB4c25wcmludGYsIHBhZGRyKTogTmV3IGZ1bmN0aW9u cy4KCSogd2luMzItYXJtLWxvdy5jICh0aGVfbG93X3RhcmdldCk6IEFkZCBl bnRyaWVzIGZvciBpbnNlcnRfd2F0Y2hwb2ludCwKCXJlbW92ZV93YXRjaHBv aW50LCBzdG9wcGVkX2J5X3dhdGNocG9pbnQsIHN0b3BwZWRfZGF0YV9hZGRy ZXNzLgoJKiB3aW4zMi1pMzg2LWxvdy5jOiBJbmNsdWRlIGkzODYtbG93Lmgu CgkoZGVidWdfcmVnX3N0YXRlKTogUmVwbGFjZXMgZHIuCgkoaTM4Nl9kcl9s b3dfc2V0X2FkZHIsIGkzODZfZHJfbG93X3NldF9jb250cm9sKTogTmV3IGZ1 bmN0aW9ucy4KCShpMzg2X2RyX2xvd19nZXRfc3RhdHVzKTogTmV3IGZ1bmN0 aW9uLgoJKGkzODZfaW5zZXJ0X3dhdGNocG9pbnQsIGkzODZfcmVtb3ZlX3dh dGNocG9pbnQpOiBOZXcgZnVuY3Rpb25zLgoJKGkzODZfc3RvcHBlZF9ieV93 YXRjaHBvaW50KTogTmV3IGZ1bmN0aW9uLgoJKGkzODZfc3RvcHBlZF9kYXRh X2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uCgkoaTM4Nl9pbml0aWFsX3N0dWZm KTogVXBkYXRlLgoJKGdldF90aHJlYWRfY29udGV4dCxzZXRfdGhyZWFkX2Nv bnRleHQsaTM4Nl90aHJlYWRfYWRkZWQpOiBVcGRhdGUuCgkodGhlX2xvd190 YXJnZXQpOiBBZGQgZW50cmllcyBmb3IgaW5zZXJ0X3dhdGNocG9pbnQsCgly ZW1vdmVfd2F0Y2hwb2ludCwgc3RvcHBlZF9ieV93YXRjaHBvaW50LCBzdG9w cGVkX2RhdGFfYWRkcmVzcy4KCSogd2luMzItbG93LmMgKHdpbjMyX2luc2Vy dF93YXRjaHBvaW50KTogTmV3IGZ1bmN0aW9uLgoJKHdpbjMyX3JlbW92ZV93 YXRjaHBvaW50KTogTmV3IGZ1bmN0aW9uLgoJKHdpbjMyX3N0b3BwZWRfYnlf d2F0Y2hwb2ludCk6IE5ldyBmdW5jdGlvbi4KCSh3aW4zMl9zdG9wcGVkX2Rh dGFfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbi4KCSh3aW4zMl90YXJnZXRfb3Bz KTogQWRkIGVudHJpZXMgZm9yIGluc2VydF93YXRjaHBvaW50LAoJcmVtb3Zl X3dhdGNocG9pbnQsIHN0b3BwZWRfYnlfd2F0Y2hwb2ludCwgc3RvcHBlZF9k YXRhX2FkZHJlc3MuCgkqIHdpbjMyLWxvdy5oICh3aW4zMl90YXJnZXRfb3Bz KTogTmV3IG1lbWJlcnMgaW5zZXJ0X3dhdGNocG9pbnQsCglyZW1vdmVfd2F0 Y2hwb2ludCwgc3RvcHBlZF9ieV93YXRjaHBvaW50LCBzdG9wcGVkX2RhdGFf YWRkcmVzcy4KCkluZGV4OiBNYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9N YWtlZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC11 IC1wIC1yMS43NCBNYWtlZmlsZS5pbgotLS0gTWFrZWZpbGUuaW4JMTIgTWF5 IDIwMDkgMjI6MjU6MDAgLTAwMDAJMS43NAorKysgTWFrZWZpbGUuaW4JMjMg SnVuIDIwMDkgMDY6MzU6NDUgLTAwMDAKQEAgLTEwNCw3ICsxMDQsNyBAQCBT RklMRVM9CSQoc3JjZGlyKS9nZGJyZXBsYXkuYyAkKHNyY2RpcikvCiAJJChz cmNkaXIpL3RocmVhZC1kYi5jICQoc3JjZGlyKS91dGlscy5jIFwKIAkkKHNy Y2RpcikvbGludXgtYXJtLWxvdy5jICQoc3JjZGlyKS9saW51eC1jcmlzLWxv dy5jIFwKIAkkKHNyY2RpcikvbGludXgtY3Jpc3YzMi1sb3cuYyBcCi0JJChz cmNkaXIpL2kzODctZnAuYyBcCisJJHtzcmNkaXJ9L2kzODYtbG93LmMgJChz cmNkaXIpL2kzODctZnAuYyBcCiAJJChzcmNkaXIpL2xpbnV4LWlhNjQtbG93 LmMgJChzcmNkaXIpL2xpbnV4LWxvdy5jIFwKIAkkKHNyY2RpcikvbGludXgt bTMyci1sb3cuYyBcCiAJJChzcmNkaXIpL2xpbnV4LW02OGstbG93LmMgJChz cmNkaXIpL2xpbnV4LW1pcHMtbG93LmMgXApAQCAtMjg3LDYgKzI4NywxMCBA QCBzaWduYWxzLm86IC4uL2NvbW1vbi9zaWduYWxzLmMgJChzZXJ2ZXJfCiBt ZW1tZW0ubzogLi4vZ251bGliL21lbW1lbS5jCiAJJChDQykgLW8gbWVtbWVt Lm8gLWMgJChDUFBGTEFHUykgJChJTlRFUk5BTF9DRkxBR1MpICQ8CiAKK2kz ODZfbG93X2ggPSAkKHNyY2RpcikvaTM4Ni1sb3cuaAorCitpMzg2LWxvdy5v OiBpMzg2LWxvdy5jICQoaTM4Nl9sb3dfaCkgJChzZXJ2ZXJfaCkgJCh0YXJn ZXRfaCkKKwogaTM4Ny1mcC5vOiBpMzg3LWZwLmMgJChzZXJ2ZXJfaCkKIAog bGludXgtbG93Lm86IGxpbnV4LWxvdy5jICQobGludXhfbG93X2gpICQoc2Vy dmVyX2gpCkBAIC0zMDQsNyArMzA4LDcgQEAgbGludXgtcHBjLWxvdy5vOiBs aW51eC1wcGMtbG93LmMgJChsaW51eAogbGludXgtczM5MC1sb3cubzogbGlu dXgtczM5MC1sb3cuYyAkKGxpbnV4X2xvd19oKSAkKHNlcnZlcl9oKQogbGlu dXgtc2gtbG93Lm86IGxpbnV4LXNoLWxvdy5jICQobGludXhfbG93X2gpICQo c2VydmVyX2gpCiBsaW51eC14ODYtbG93Lm86IGxpbnV4LXg4Ni1sb3cuYyAk KGxpbnV4X2xvd19oKSAkKHNlcnZlcl9oKSBcCi0JJChnZGJfcHJvY19zZXJ2 aWNlX2gpCisJJChnZGJfcHJvY19zZXJ2aWNlX2gpICQoaTM4Nl9sb3dfaCkK IGxpbnV4LXh0ZW5zYS1sb3cubzogbGludXgteHRlbnNhLWxvdy5jIHh0ZW5z YS14dHJlZ3MuYyAkKGxpbnV4X2xvd19oKSAkKHNlcnZlcl9oKQogCiB3aW4z Ml9sb3dfaCA9ICQoc3JjZGlyKS93aW4zMi1sb3cuaApAQCAtMzEyLDcgKzMx Niw3IEBAIHdpbjMyX2xvd19oID0gJChzcmNkaXIpL3dpbjMyLWxvdy5oCiB3 aW4zMi1sb3cubzogd2luMzItbG93LmMgJCh3aW4zMl9sb3dfaCkgJChzZXJ2 ZXJfaCkgJChyZWdkZWZfaCkgJChyZWdjYWNoZV9oKQogCiB3aW4zMi1hcm0t bG93Lm86IHdpbjMyLWFybS1sb3cuYyAkKHdpbjMyX2xvd19oKSAkKHNlcnZl cl9oKQotd2luMzItaTM4Ni1sb3cubzogd2luMzItaTM4Ni1sb3cuYyAkKHdp bjMyX2xvd19oKSAkKHNlcnZlcl9oKQord2luMzItaTM4Ni1sb3cubzogd2lu MzItaTM4Ni1sb3cuYyAkKHdpbjMyX2xvd19oKSAkKHNlcnZlcl9oKSAkKGkz ODZfbG93X2gpCiAKIHNwdS1sb3cubzogc3B1LWxvdy5jICQoc2VydmVyX2gp CiAKSW5kZXg6IGNvbmZpZ3VyZS5zcnYKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvY29uZmln dXJlLnNydix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11IC1w IC1yMS40MSBjb25maWd1cmUuc3J2Ci0tLSBjb25maWd1cmUuc3J2CTEyIE1h eSAyMDA5IDIyOjI1OjAwIC0wMDAwCTEuNDEKKysrIGNvbmZpZ3VyZS5zcnYJ MjMgSnVuIDIwMDkgMDY6MzU6NDUgLTAwMDAKQEAgLTUzLDEwICs1MywxMCBA QCBjYXNlICIke3RhcmdldH0iIGluCiAJCQlzcnZfbGludXhfdGhyZWFkX2Ri PXllcwogCQkJOzsKICAgaVszNDU2N104Ni0qLWN5Z3dpbiopCXNydl9yZWdv Ymo9cmVnLWkzODYubwotCQkJc3J2X3RndG9iaj0id2luMzItbG93Lm8gd2lu MzItaTM4Ni1sb3cubyIKKwkJCXNydl90Z3RvYmo9ImkzODYtbG93Lm8gd2lu MzItbG93Lm8gd2luMzItaTM4Ni1sb3cubyIKIAkJCTs7CiAgIGlbMzQ1Njdd ODYtKi1saW51eCopCXNydl9yZWdvYmo9cmVnLWkzODYtbGludXgubwotCQkJ c3J2X3RndG9iaj0ibGludXgtbG93Lm8gbGludXgteDg2LWxvdy5vIGkzODct ZnAubyIKKwkJCXNydl90Z3RvYmo9ImxpbnV4LWxvdy5vIGxpbnV4LXg4Ni1s b3cubyBpMzg2LWxvdy5vIGkzODctZnAubyIKIAkJCXNydl9saW51eF91c3Jy ZWdzPXllcwogCQkJc3J2X2xpbnV4X3JlZ3NldHM9eWVzCiAJCQlzcnZfbGlu dXhfdGhyZWFkX2RiPXllcwpAQCAtNzEsNyArNzEsNyBAQCBjYXNlICIke3Rh cmdldH0iIGluCiAJCQlzcnZfbWluZ3djZT15ZXMKIAkJCTs7CiAgIGlbMzQ1 NjddODYtKi1taW5ndyopCXNydl9yZWdvYmo9cmVnLWkzODYubwotCQkJc3J2 X3RndG9iaj0id2luMzItbG93Lm8gd2luMzItaTM4Ni1sb3cubyIKKwkJCXNy dl90Z3RvYmo9ImkzODYtbG93Lm8gd2luMzItbG93Lm8gd2luMzItaTM4Ni1s b3cubyIKIAkJCXNydl9taW5ndz15ZXMKIAkJCTs7CiAgIGlhNjQtKi1saW51 eCopCXNydl9yZWdvYmo9cmVnLWlhNjQubwpAQCAtMTcwLDcgKzE3MCw3IEBA IGNhc2UgIiR7dGFyZ2V0fSIgaW4KIAkJCXNydl90Z3RvYmo9InNwdS1sb3cu byIKIAkJCTs7CiAgIHg4Nl82NC0qLWxpbnV4KikJc3J2X3JlZ29iaj0icmVn LXg4Ni02NC1saW51eC5vIHJlZy1pMzg2LWxpbnV4Lm8iCi0JCQlzcnZfdGd0 b2JqPSJsaW51eC1sb3cubyBsaW51eC14ODYtbG93Lm8gaTM4Ny1mcC5vIgor CQkJc3J2X3RndG9iaj0ibGludXgtbG93Lm8gbGludXgteDg2LWxvdy5vIGkz ODYtbG93Lm8gaTM4Ny1mcC5vIgogCQkJc3J2X2xpbnV4X3VzcnJlZ3M9eWVz ICMgVGhpcyBpcyBmb3IgaTM4NiBwcm9ncy4KIAkJCXNydl9saW51eF9yZWdz ZXRzPXllcwogCQkJc3J2X2xpbnV4X3RocmVhZF9kYj15ZXMKSW5kZXg6IGkz ODYtbG93LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogaTM4 Ni1sb3cuYwpkaWZmIC1OIGkzODYtbG93LmMKLS0tIC9kZXYvbnVsbAkxIEph biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBpMzg2LWxvdy5jCTIzIEp1biAy MDA5IDA2OjM1OjQ1IC0wMDAwCkBAIC0wLDAgKzEsNTc1IEBACisvKiBEZWJ1 ZyByZWdpc3RlciBjb2RlIGZvciB0aGUgaTM4Ni4KKworICAgQ29weXJpZ2h0 IChDKSAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAic2VydmVyLmgiCisjaW5j bHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaTM4Ni1sb3cuaCIKKworLyog U3VwcG9ydCBmb3IgOC1ieXRlIHdpZGUgaHcgd2F0Y2hwb2ludHMuICAqLwor I2lmbmRlZiBUQVJHRVRfSEFTX0RSX0xFTl84CisvKiBOT1RFOiBzaXplb2Yg KGxvbmcpID09IDQgb24gd2luNjQuICAqLworI2RlZmluZSBUQVJHRVRfSEFT X0RSX0xFTl84IChzaXplb2YgKHZvaWQgKikgPT0gOCkKKyNlbmRpZgorCitl bnVtIHRhcmdldF9od19icF90eXBlCisgIHsKKyAgICBod193cml0ZSAgID0g MCwJLyogQ29tbW9uICBIVyB3YXRjaHBvaW50ICovCisgICAgaHdfcmVhZCAg ICA9IDEsCS8qIFJlYWQgICAgSFcgd2F0Y2hwb2ludCAqLworICAgIGh3X2Fj Y2VzcyAgPSAyLAkvKiBBY2Nlc3MgIEhXIHdhdGNocG9pbnQgKi8KKyAgICBo d19leGVjdXRlID0gMwkvKiBFeGVjdXRlIEhXIGJyZWFrcG9pbnQgKi8KKyAg fTsKKworLyogRFI3IERlYnVnIENvbnRyb2wgcmVnaXN0ZXIgZmllbGRzLiAg Ki8KKworLyogSG93IG1hbnkgYml0cyB0byBza2lwIGluIERSNyB0byBnZXQg dG8gUi9XIGFuZCBMRU4gZmllbGRzLiAgKi8KKyNkZWZpbmUgRFJfQ09OVFJP TF9TSElGVAkxNgorLyogSG93IG1hbnkgYml0cyBpbiBEUjcgcGVyIFIvVyBh bmQgTEVOIGZpZWxkIGZvciBlYWNoIHdhdGNocG9pbnQuICAqLworI2RlZmlu ZSBEUl9DT05UUk9MX1NJWkUJCTQKKworLyogV2F0Y2hwb2ludC9icmVha3Bv aW50IHJlYWQvd3JpdGUgZmllbGRzIGluIERSNy4gICovCisjZGVmaW5lIERS X1JXX0VYRUNVVEUJKDB4MCkJLyogQnJlYWsgb24gaW5zdHJ1Y3Rpb24gZXhl Y3V0aW9uLiAgKi8KKyNkZWZpbmUgRFJfUldfV1JJVEUJKDB4MSkJLyogQnJl YWsgb24gZGF0YSB3cml0ZXMuICAqLworI2RlZmluZSBEUl9SV19SRUFECSgw eDMpCS8qIEJyZWFrIG9uIGRhdGEgcmVhZHMgb3Igd3JpdGVzLiAgKi8KKwor LyogVGhpcyBpcyBoZXJlIGZvciBjb21wbGV0ZW5lc3MuICBObyBwbGF0Zm9y bSBzdXBwb3J0cyB0aGlzCisgICBmdW5jdGlvbmFsaXR5IHlldCAoYXMgb2Yg TWFyY2ggMjAwMSkuICBOb3RlIHRoYXQgdGhlIERFIGZsYWcgaW4gdGhlCisg ICBDUjQgcmVnaXN0ZXIgbmVlZHMgdG8gYmUgc2V0IHRvIHN1cHBvcnQgdGhp cy4gICovCisjaWZuZGVmIERSX1JXX0lPUlcKKyNkZWZpbmUgRFJfUldfSU9S VwkoMHgyKQkvKiBCcmVhayBvbiBJL08gcmVhZHMgb3Igd3JpdGVzLiAgKi8K KyNlbmRpZgorCisvKiBXYXRjaHBvaW50L2JyZWFrcG9pbnQgbGVuZ3RoIGZp ZWxkcyBpbiBEUjcuICBUaGUgMi1iaXQgbGVmdCBzaGlmdAorICAgaXMgc28g d2UgY291bGQgT1IgdGhpcyB3aXRoIHRoZSByZWFkL3dyaXRlIGZpZWxkIGRl ZmluZWQgYWJvdmUuICAqLworI2RlZmluZSBEUl9MRU5fMQkoMHgwIDw8IDIp IC8qIDEtYnl0ZSByZWdpb24gd2F0Y2ggb3IgYnJlYWtwb2ludC4gICovCisj ZGVmaW5lIERSX0xFTl8yCSgweDEgPDwgMikgLyogMi1ieXRlIHJlZ2lvbiB3 YXRjaC4gICovCisjZGVmaW5lIERSX0xFTl80CSgweDMgPDwgMikgLyogNC1i eXRlIHJlZ2lvbiB3YXRjaC4gICovCisjZGVmaW5lIERSX0xFTl84CSgweDIg PDwgMikgLyogOC1ieXRlIHJlZ2lvbiB3YXRjaCAoQU1ENjQpLiAgKi8KKwor LyogTG9jYWwgYW5kIEdsb2JhbCBFbmFibGUgZmxhZ3MgaW4gRFI3LgorCisg ICBXaGVuIHRoZSBMb2NhbCBFbmFibGUgZmxhZyBpcyBzZXQsIHRoZSBicmVh a3BvaW50L3dhdGNocG9pbnQgaXMKKyAgIGVuYWJsZWQgb25seSBmb3IgdGhl IGN1cnJlbnQgdGFzazsgdGhlIHByb2Nlc3NvciBhdXRvbWF0aWNhbGx5Cisg ICBjbGVhcnMgdGhpcyBmbGFnIG9uIGV2ZXJ5IHRhc2sgc3dpdGNoLiAgV2hl biB0aGUgR2xvYmFsIEVuYWJsZSBmbGFnCisgICBpcyBzZXQsIHRoZSBicmVh a3BvaW50L3dhdGNocG9pbnQgaXMgZW5hYmxlZCBmb3IgYWxsIHRhc2tzOyB0 aGUKKyAgIHByb2Nlc3NvciBuZXZlciBjbGVhcnMgdGhpcyBmbGFnLgorCisg ICBDdXJyZW50bHksIGFsbCB3YXRjaHBvaW50IGFyZSBsb2NhbGx5IGVuYWJs ZWQuICBJZiB5b3UgbmVlZCB0bworICAgZW5hYmxlIHRoZW0gZ2xvYmFsbHks IHJlYWQgdGhlIGNvbW1lbnQgd2hpY2ggcGVydGFpbnMgdG8gdGhpcyBpbgor ICAgaTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IGJlbG93LiAgKi8K KyNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX1NISUZUCTAgLyogRXh0cmEgc2hp ZnQgdG8gdGhlIGxvY2FsIGVuYWJsZSBiaXQuICAqLworI2RlZmluZSBEUl9H TE9CQUxfRU5BQkxFX1NISUZUCTEgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGds b2JhbCBlbmFibGUgYml0LiAgKi8KKyNkZWZpbmUgRFJfRU5BQkxFX1NJWkUJ CTIgLyogVHdvIGVuYWJsZSBiaXRzIHBlciBkZWJ1ZyByZWdpc3Rlci4gICov CisKKy8qIExvY2FsIGFuZCBnbG9iYWwgZXhhY3QgYnJlYWtwb2ludCBlbmFi bGUgZmxhZ3MgKGEuay5hLiBzbG93ZG93bgorICAgZmxhZ3MpLiAgVGhlc2Ug YXJlIG9ubHkgcmVxdWlyZWQgb24gaTM4NiwgdG8gYWxsb3cgZGV0ZWN0aW9u IG9mIHRoZQorICAgZXhhY3QgaW5zdHJ1Y3Rpb24gd2hpY2ggY2F1c2VkIGEg d2F0Y2hwb2ludCB0byBicmVhazsgaTQ4NiBhbmQKKyAgIGxhdGVyIHByb2Nl c3NvcnMgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LiAgV2Ugc2V0IHRoZXNlIGZs YWdzIGZvcgorICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAqLworI2Rl ZmluZSBEUl9MT0NBTF9TTE9XRE9XTgkoMHgxMDApCisjZGVmaW5lIERSX0dM T0JBTF9TTE9XRE9XTiAgICAgCSgweDIwMCkKKworLyogRmllbGRzIHJlc2Vy dmVkIGJ5IEludGVsLiAgVGhpcyBpbmNsdWRlcyB0aGUgR0QgKEdlbmVyYWwg RGV0ZWN0CisgICBFbmFibGUpIGZsYWcsIHdoaWNoIGNhdXNlcyBhIGRlYnVn IGV4Y2VwdGlvbiB0byBiZSBnZW5lcmF0ZWQgd2hlbiBhCisgICBNT1YgaW5z dHJ1Y3Rpb24gYWNjZXNzZXMgb25lIG9mIHRoZSBkZWJ1ZyByZWdpc3RlcnMu CisKKyAgIEZJWE1FOiBNeSBJbnRlbCBtYW51YWwgc2F5cyB3ZSBzaG91bGQg dXNlIDB4RjgwMCwgbm90IDB4RkMwMC4gICovCisjZGVmaW5lIERSX0NPTlRS T0xfUkVTRVJWRUQJKDB4RkMwMCkKKworLyogQXV4aWxpYXJ5IGhlbHBlciBt YWNyb3MuICAqLworCisvKiBBIHZhbHVlIHRoYXQgbWFza3MgYWxsIGZpZWxk cyBpbiBEUjcgdGhhdCBhcmUgcmVzZXJ2ZWQgYnkgSW50ZWwuICAqLworI2Rl ZmluZSBJMzg2X0RSX0NPTlRST0xfTUFTSwkofkRSX0NPTlRST0xfUkVTRVJW RUQpCisKKy8qIFRoZSBJJ3RoIGRlYnVnIHJlZ2lzdGVyIGlzIHZhY2FudCBp ZiBpdHMgTG9jYWwgYW5kIEdsb2JhbCBFbmFibGUKKyAgIGJpdHMgYXJlIHJl c2V0IGluIHRoZSBEZWJ1ZyBDb250cm9sIHJlZ2lzdGVyLiAgKi8KKyNkZWZp bmUgSTM4Nl9EUl9WQUNBTlQoc3RhdGUsIGkpIFwKKyAgKCgoc3RhdGUpLT5k cl9jb250cm9sX21pcnJvciAmICgzIDw8IChEUl9FTkFCTEVfU0laRSAqIChp KSkpKSA9PSAwKQorCisvKiBMb2NhbGx5IGVuYWJsZSB0aGUgYnJlYWsvd2F0 Y2hwb2ludCBpbiB0aGUgSSd0aCBkZWJ1ZyByZWdpc3Rlci4gICovCisjZGVm aW5lIEkzODZfRFJfTE9DQUxfRU5BQkxFKHN0YXRlLCBpKSBcCisgIGRvIHsg XAorICAgIChzdGF0ZSktPmRyX2NvbnRyb2xfbWlycm9yIHw9IFwKKyAgICAg ICgxIDw8IChEUl9MT0NBTF9FTkFCTEVfU0hJRlQgKyBEUl9FTkFCTEVfU0la RSAqIChpKSkpOyBcCisgIH0gd2hpbGUgKDApCisKKy8qIEdsb2JhbGx5IGVu YWJsZSB0aGUgYnJlYWsvd2F0Y2hwb2ludCBpbiB0aGUgSSd0aCBkZWJ1ZyBy ZWdpc3Rlci4gICovCisjZGVmaW5lIEkzODZfRFJfR0xPQkFMX0VOQUJMRShz dGF0ZSwgaSkgXAorICBkbyB7IFwKKyAgICAoc3RhdGUpLT5kcl9jb250cm9s X21pcnJvciB8PSBcCisgICAgICAoMSA8PCAoRFJfR0xPQkFMX0VOQUJMRV9T SElGVCArIERSX0VOQUJMRV9TSVpFICogKGkpKSk7IFwKKyAgfSB3aGlsZSAo MCkKKworLyogRGlzYWJsZSB0aGUgYnJlYWsvd2F0Y2hwb2ludCBpbiB0aGUg SSd0aCBkZWJ1ZyByZWdpc3Rlci4gICovCisjZGVmaW5lIEkzODZfRFJfRElT QUJMRShzdGF0ZSwgaSkgXAorICBkbyB7IFwKKyAgICAoc3RhdGUpLT5kcl9j b250cm9sX21pcnJvciAmPSBcCisgICAgICB+KDMgPDwgKERSX0VOQUJMRV9T SVpFICogKGkpKSk7IFwKKyAgfSB3aGlsZSAoMCkKKworLyogU2V0IGluIERS NyB0aGUgUlcgYW5kIExFTiBmaWVsZHMgZm9yIHRoZSBJJ3RoIGRlYnVnIHJl Z2lzdGVyLiAgKi8KKyNkZWZpbmUgSTM4Nl9EUl9TRVRfUldfTEVOKHN0YXRl LCBpLHJ3bGVuKSBcCisgIGRvIHsgXAorICAgIChzdGF0ZSktPmRyX2NvbnRy b2xfbWlycm9yICY9IFwKKyAgICAgIH4oMHgwZiA8PCAoRFJfQ09OVFJPTF9T SElGVCArIERSX0NPTlRST0xfU0laRSAqIChpKSkpOyBcCisgICAgKHN0YXRl KS0+ZHJfY29udHJvbF9taXJyb3IgfD0gXAorICAgICAgKChyd2xlbikgPDwg KERSX0NPTlRST0xfU0hJRlQgKyBEUl9DT05UUk9MX1NJWkUgKiAoaSkpKTsg XAorICB9IHdoaWxlICgwKQorCisvKiBHZXQgZnJvbSBEUjcgdGhlIFJXIGFu ZCBMRU4gZmllbGRzIGZvciB0aGUgSSd0aCBkZWJ1ZyByZWdpc3Rlci4gICov CisjZGVmaW5lIEkzODZfRFJfR0VUX1JXX0xFTihzdGF0ZSwgaSkgXAorICAo KChzdGF0ZSktPmRyX2NvbnRyb2xfbWlycm9yIFwKKyAgICA+PiAoRFJfQ09O VFJPTF9TSElGVCArIERSX0NPTlRST0xfU0laRSAqIChpKSkpICYgMHgwZikK KworLyogRGlkIHRoZSB3YXRjaHBvaW50IHdob3NlIGFkZHJlc3MgaXMgaW4g dGhlIEkndGggcmVnaXN0ZXIgYnJlYWs/ICAqLworI2RlZmluZSBJMzg2X0RS X1dBVENIX0hJVChzdGF0ZSxpKSAoKHN0YXRlKS0+ZHJfc3RhdHVzX21pcnJv ciAmICgxIDw8IChpKSkpCisKKy8qIEEgbWFjcm8gdG8gbG9vcCBvdmVyIGFs bCBkZWJ1ZyByZWdpc3RlcnMuICAqLworI2RlZmluZSBBTExfREVCVUdfUkVH SVNURVJTKGkpCWZvciAoaSA9IDA7IGkgPCBEUl9OQUREUjsgaSsrKQorCisv KiBUeXBlcyBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBpMzg2X2hhbmRs ZV9ub25hbGlnbmVkX3dhdGNocG9pbnQuICAqLwordHlwZWRlZiBlbnVtIHsg V1BfSU5TRVJULCBXUF9SRU1PVkUsIFdQX0NPVU5UIH0gaTM4Nl93cF9vcF90 OworDAorLyogSW1wbGVtZW50YXRpb24uICAqLworCisvKiBDbGVhciB0aGUg cmVmZXJlbmNlIGNvdW50cyBhbmQgZm9yZ2V0IGV2ZXJ5dGhpbmcgd2Uga25l dyBhYm91dCB0aGUKKyAgIGRlYnVnIHJlZ2lzdGVycy4gICovCisKK3ZvaWQK K2kzODZfbG93X2luaXRfZHJlZ3MgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19z dGF0ZSAqc3RhdGUpCit7CisgIGludCBpOworCisgIEFMTF9ERUJVR19SRUdJ U1RFUlMgKGkpCisgICAgeworICAgICAgc3RhdGUtPmRyX21pcnJvcltpXSA9 IDA7CisgICAgICBzdGF0ZS0+ZHJfcmVmX2NvdW50W2ldID0gMDsKKyAgICB9 CisgIHN0YXRlLT5kcl9jb250cm9sX21pcnJvciA9IDA7CisgIHN0YXRlLT5k cl9zdGF0dXNfbWlycm9yICA9IDA7Cit9CisKKy8qIFByaW50IHRoZSB2YWx1 ZXMgb2YgdGhlIG1pcnJvcmVkIGRlYnVnIHJlZ2lzdGVycy4gIFRoaXMgaXMg ZW5hYmxlZCB2aWEKKyAgIHRoZSAic2V0IGRlYnVnLWh3LXBvaW50cyAxIiBt b25pdG9yIGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9pZAoraTM4Nl9zaG93 X2RyIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCSAg ICAgIGNvbnN0IGNoYXIgKmZ1bmMsIENPUkVfQUREUiBhZGRyLAorCSAgICAg IGludCBsZW4sIGVudW0gdGFyZ2V0X2h3X2JwX3R5cGUgdHlwZSkKK3sKKyAg aW50IGk7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXMiLCBmdW5jKTsKKyAg aWYgKGFkZHIgfHwgbGVuKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAoYWRk cj0lbHgsIGxlbj0lZCwgdHlwZT0lcykiLAorCSAgICAgKHVuc2lnbmVkIGxv bmcpIGFkZHIsIGxlbiwKKwkgICAgIHR5cGUgPT0gaHdfd3JpdGUgPyAiZGF0 YS13cml0ZSIKKwkgICAgIDogKHR5cGUgPT0gaHdfcmVhZCA/ICJkYXRhLXJl YWQiCisJCTogKHR5cGUgPT0gaHdfYWNjZXNzID8gImRhdGEtcmVhZC93cml0 ZSIKKwkJICAgOiAodHlwZSA9PSBod19leGVjdXRlID8gImluc3RydWN0aW9u LWV4ZWN1dGUiCisJCSAgICAgIC8qIEZJWE1FOiBpZi93aGVuIEkvTyByZWFk L3dyaXRlCisJCQkgd2F0Y2hwb2ludHMgYXJlIHN1cHBvcnRlZCwgYWRkIHRo ZW0KKwkJCSBoZXJlLiAgKi8KKwkJICAgICAgOiAiPz91bmtub3duPz8iKSkp KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiOlxuIik7CisgIGZwcmludGYgKHN0 ZGVyciwgIlx0Q09OVFJPTCAoRFI3KTogJTA4eCAgICAgICAgICBTVEFUVVMg KERSNik6ICUwOHhcbiIsCisJICAgc3RhdGUtPmRyX2NvbnRyb2xfbWlycm9y LCBzdGF0ZS0+ZHJfc3RhdHVzX21pcnJvcik7CisgIEFMTF9ERUJVR19SRUdJ U1RFUlMgKGkpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXAor XHREUiVkOiBhZGRyPTB4JXMsIHJlZi5jb3VudD0lZCAgRFIlZDogYWRkcj0w eCVzLCByZWYuY291bnQ9JWRcbiIsCisJICAgICAgaSwgcGFkZHIgKHN0YXRl LT5kcl9taXJyb3JbaV0pLAorCSAgICAgIHN0YXRlLT5kcl9yZWZfY291bnRb aV0sCisJICAgICAgaSArIDEsIHBhZGRyIChzdGF0ZS0+ZHJfbWlycm9yW2kg KyAxXSksCisJICAgICAgc3RhdGUtPmRyX3JlZl9jb3VudFtpICsgMV0pOwor ICAgICAgaSsrOworICAgIH0KK30KKworLyogUmV0dXJuIHRoZSB2YWx1ZSBv ZiBhIDQtYml0IGZpZWxkIGZvciBEUjcgc3VpdGFibGUgZm9yIHdhdGNoaW5n IGEKKyAgIHJlZ2lvbiBvZiBMRU4gYnl0ZXMgZm9yIGFjY2Vzc2VzIG9mIHR5 cGUgVFlQRS4gIExFTiBpcyBhc3N1bWVkIHRvCisgICBoYXZlIHRoZSB2YWx1 ZSBvZiAxLCAyLCBvciA0LiAgKi8KKworc3RhdGljIHVuc2lnbmVkCitpMzg2 X2xlbmd0aF9hbmRfcndfYml0cyAoaW50IGxlbiwgZW51bSB0YXJnZXRfaHdf YnBfdHlwZSB0eXBlKQoreworICB1bnNpZ25lZCBydzsKKworICBzd2l0Y2gg KHR5cGUpCisgICAgeworICAgICAgY2FzZSBod19leGVjdXRlOgorCXJ3ID0g RFJfUldfRVhFQ1VURTsKKwlicmVhazsKKyAgICAgIGNhc2UgaHdfd3JpdGU6 CisJcncgPSBEUl9SV19XUklURTsKKwlicmVhazsKKyAgICAgIGNhc2UgaHdf cmVhZDoKKwkvKiBUaGUgaTM4NiBkb2Vzbid0IHN1cHBvcnQgZGF0YS1yZWFk IHdhdGNocG9pbnRzLiAgKi8KKyAgICAgIGNhc2UgaHdfYWNjZXNzOgorCXJ3 ID0gRFJfUldfUkVBRDsKKwlicmVhazsKKyNpZiAwCisJLyogTm90IHlldCBz dXBwb3J0ZWQuICAqLworICAgICAgY2FzZSBod19pb19hY2Nlc3M6CisJcncg PSBEUl9SV19JT1JXOworCWJyZWFrOworI2VuZGlmCisgICAgICBkZWZhdWx0 OgorCWVycm9yICgiXAorSW52YWxpZCBoYXJkd2FyZSBicmVha3BvaW50IHR5 cGUgJWQgaW4gaTM4Nl9sZW5ndGhfYW5kX3J3X2JpdHMuXG4iLAorCQkJKGlu dCkgdHlwZSk7CisgICAgfQorCisgIHN3aXRjaCAobGVuKQorICAgIHsKKyAg ICAgIGNhc2UgMToKKwlyZXR1cm4gKERSX0xFTl8xIHwgcncpOworICAgICAg Y2FzZSAyOgorCXJldHVybiAoRFJfTEVOXzIgfCBydyk7CisgICAgICBjYXNl IDQ6CisJcmV0dXJuIChEUl9MRU5fNCB8IHJ3KTsKKyAgICAgIGNhc2UgODoK KyAgICAgICAgaWYgKFRBUkdFVF9IQVNfRFJfTEVOXzgpCisgCSAgcmV0dXJu IChEUl9MRU5fOCB8IHJ3KTsKKyAgICAgIGRlZmF1bHQ6CisJZXJyb3IgKCJc CitJbnZhbGlkIGhhcmR3YXJlIGJyZWFrcG9pbnQgbGVuZ3RoICVkIGluIGkz ODZfbGVuZ3RoX2FuZF9yd19iaXRzLlxuIiwgbGVuKTsKKyAgICB9Cit9CisK Ky8qIEluc2VydCBhIHdhdGNocG9pbnQgYXQgYWRkcmVzcyBBRERSLCB3aGlj aCBpcyBhc3N1bWVkIHRvIGJlIGFsaWduZWQKKyAgIGFjY29yZGluZyB0byB0 aGUgbGVuZ3RoIG9mIHRoZSByZWdpb24gdG8gd2F0Y2guICBMRU5fUldfQklU UyBpcyB0aGUKKyAgIHZhbHVlIG9mIHRoZSBiaXRzIGZyb20gRFI3IHdoaWNo IGRlc2NyaWJlcyB0aGUgbGVuZ3RoIGFuZCBhY2Nlc3MKKyAgIHR5cGUgb2Yg dGhlIHJlZ2lvbiB0byBiZSB3YXRjaGVkIGJ5IHRoaXMgd2F0Y2hwb2ludC4g IFJldHVybiAwIG9uCisgICBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8K Kworc3RhdGljIGludAoraTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50 IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCUNP UkVfQUREUiBhZGRyLCB1bnNpZ25lZCBsZW5fcndfYml0cykKK3sKKyAgaW50 IGk7CisKKyAgLyogRmlyc3QsIGxvb2sgZm9yIGFuIG9jY3VwaWVkIGRlYnVn IHJlZ2lzdGVyIHdpdGggdGhlIHNhbWUgYWRkcmVzcworICAgICBhbmQgdGhl IHNhbWUgUlcgYW5kIExFTiBkZWZpbml0aW9ucy4gIElmIHdlIGZpbmQgb25l LCB3ZSBjYW4KKyAgICAgcmV1c2UgaXQgZm9yIHRoaXMgd2F0Y2hwb2ludCBh cyB3ZWxsIChhbmQgc2F2ZSBhIHJlZ2lzdGVyKS4gICovCisgIEFMTF9ERUJV R19SRUdJU1RFUlMgKGkpCisgICAgeworICAgICAgaWYgKCFJMzg2X0RSX1ZB Q0FOVCAoc3RhdGUsIGkpCisJICAmJiBzdGF0ZS0+ZHJfbWlycm9yW2ldID09 IGFkZHIKKwkgICYmIEkzODZfRFJfR0VUX1JXX0xFTiAoc3RhdGUsIGkpID09 IGxlbl9yd19iaXRzKQorCXsKKwkgIHN0YXRlLT5kcl9yZWZfY291bnRbaV0r KzsKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgLyogTmV4dCwgbG9v ayBmb3IgYSB2YWNhbnQgZGVidWcgcmVnaXN0ZXIuICAqLworICBBTExfREVC VUdfUkVHSVNURVJTIChpKQorICAgIHsKKyAgICAgIGlmIChJMzg2X0RSX1ZB Q0FOVCAoc3RhdGUsIGkpKQorCWJyZWFrOworICAgIH0KKworICAvKiBObyBt b3JlIGRlYnVnIHJlZ2lzdGVycyEgICovCisgIGlmIChpID49IERSX05BRERS KQorICAgIHJldHVybiAtMTsKKworICAvKiBOb3cgc2V0IHVwIHRoZSByZWdp c3RlciBJIHRvIHdhdGNoIG91ciByZWdpb24uICAqLworCisgIC8qIFJlY29y ZCB0aGUgaW5mbyBpbiBvdXIgbG9jYWwgbWlycm9yZWQgYXJyYXkuICAqLwor ICBzdGF0ZS0+ZHJfbWlycm9yW2ldID0gYWRkcjsKKyAgc3RhdGUtPmRyX3Jl Zl9jb3VudFtpXSA9IDE7CisgIEkzODZfRFJfU0VUX1JXX0xFTiAoc3RhdGUs IGksIGxlbl9yd19iaXRzKTsKKyAgLyogTm90ZTogd2Ugb25seSBlbmFibGUg dGhlIHdhdGNocG9pbnQgbG9jYWxseSwgaS5lLiBpbiB0aGUgY3VycmVudAor ICAgICB0YXNrLiAgQ3VycmVudGx5LCBubyBpMzg2IHRhcmdldCBhbGxvd3Mg b3Igc3VwcG9ydHMgZ2xvYmFsCisgICAgIHdhdGNocG9pbnRzOyBob3dldmVy LCBpZiBhbnkgdGFyZ2V0IHdvdWxkIHdhbnQgdGhhdCBpbiB0aGUKKyAgICAg ZnV0dXJlLCBHREIgc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgYSBjb21tYW5k IHRvIGNvbnRyb2wgd2hldGhlcgorICAgICB0byBlbmFibGUgd2F0Y2hwb2lu dHMgZ2xvYmFsbHkgb3IgbG9jYWxseSwgYW5kIHRoZSBjb2RlIGJlbG93Cisg ICAgIHNob3VsZCB1c2UgZ2xvYmFsIG9yIGxvY2FsIGVuYWJsZSBhbmQgc2xv dy1kb3duIGZsYWdzIGFzCisgICAgIGFwcHJvcHJpYXRlLiAgKi8KKyAgSTM4 Nl9EUl9MT0NBTF9FTkFCTEUgKHN0YXRlLCBpKTsKKyAgc3RhdGUtPmRyX2Nv bnRyb2xfbWlycm9yIHw9IERSX0xPQ0FMX1NMT1dET1dOOworICBzdGF0ZS0+ ZHJfY29udHJvbF9taXJyb3IgJj0gSTM4Nl9EUl9DT05UUk9MX01BU0s7CisK KyAgLyogRmluYWxseSwgYWN0dWFsbHkgcGFzcyB0aGUgaW5mbyB0byB0aGUg aW5mZXJpb3IuICAqLworICBpMzg2X2RyX2xvd19zZXRfYWRkciAoc3RhdGUs IGkpOworICBpMzg2X2RyX2xvd19zZXRfY29udHJvbCAoc3RhdGUpOworCisg IHJldHVybiAwOworfQorCisvKiBSZW1vdmUgYSB3YXRjaHBvaW50IGF0IGFk ZHJlc3MgQUREUiwgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBhbGlnbmVkCisg ICBhY2NvcmRpbmcgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVnaW9uIHRvIHdh dGNoLiAgTEVOX1JXX0JJVFMgaXMgdGhlCisgICB2YWx1ZSBvZiB0aGUgYml0 cyBmcm9tIERSNyB3aGljaCBkZXNjcmliZXMgdGhlIGxlbmd0aCBhbmQgYWNj ZXNzCisgICB0eXBlIG9mIHRoZSByZWdpb24gd2F0Y2hlZCBieSB0aGlzIHdh dGNocG9pbnQuICBSZXR1cm4gMCBvbgorICAgc3VjY2VzcywgLTEgb24gZmFp bHVyZS4gICovCisKK3N0YXRpYyBpbnQKK2kzODZfcmVtb3ZlX2FsaWduZWRf d2F0Y2hwb2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0 ZSwKKwkJCQlDT1JFX0FERFIgYWRkciwgdW5zaWduZWQgbGVuX3J3X2JpdHMp Cit7CisgIGludCBpLCByZXR2YWwgPSAtMTsKKworICBBTExfREVCVUdfUkVH SVNURVJTIChpKQorICAgIHsKKyAgICAgIGlmICghSTM4Nl9EUl9WQUNBTlQg KHN0YXRlLCBpKQorCSAgJiYgc3RhdGUtPmRyX21pcnJvcltpXSA9PSBhZGRy CisJICAmJiBJMzg2X0RSX0dFVF9SV19MRU4gKHN0YXRlLCBpKSA9PSBsZW5f cndfYml0cykKKwl7CisJICBpZiAoLS1zdGF0ZS0+ZHJfcmVmX2NvdW50W2ld ID09IDApIC8qIE5vIGxvbmdlciBpbiB1c2U/ICAqLworCSAgICB7CisJICAg ICAgLyogUmVzZXQgb3VyIG1pcnJvci4gICovCisJICAgICAgc3RhdGUtPmRy X21pcnJvcltpXSA9IDA7CisJICAgICAgSTM4Nl9EUl9ESVNBQkxFIChzdGF0 ZSwgaSk7CisJICAgICAgLyogUmVzZXQgaXQgaW4gdGhlIGluZmVyaW9yLiAg Ki8KKwkgICAgICBpMzg2X2RyX2xvd19zZXRfY29udHJvbCAoc3RhdGUpOwor CSAgICAgIGkzODZfZHJfbG93X3NldF9hZGRyIChzdGF0ZSwgaSk7CisJICAg IH0KKwkgIHJldHZhbCA9IDA7CisJfQorICAgIH0KKworICByZXR1cm4gcmV0 dmFsOworfQorCisvKiBJbnNlcnQgb3IgcmVtb3ZlIGEgKHBvc3NpYmx5IG5v bi1hbGlnbmVkKSB3YXRjaHBvaW50LCBvciBjb3VudCB0aGUKKyAgIG51bWJl ciBvZiBkZWJ1ZyByZWdpc3RlcnMgcmVxdWlyZWQgdG8gd2F0Y2ggYSByZWdp b24gYXQgYWRkcmVzcworICAgQUREUiB3aG9zZSBsZW5ndGggaXMgTEVOIGZv ciBhY2Nlc3NlcyBvZiB0eXBlIFRZUEUuICBSZXR1cm4gMCBvbgorICAgc3Vj Y2Vzc2Z1bCBpbnNlcnRpb24gb3IgcmVtb3ZhbCwgYSBwb3NpdGl2ZSBudW1i ZXIgd2hlbiBxdWVyaWVkCisgICBhYm91dCB0aGUgbnVtYmVyIG9mIHJlZ2lz dGVycywgb3IgLTEgb24gZmFpbHVyZS4gIElmIFdIQVQgaXMgbm90IGEKKyAg IHZhbGlkIHZhbHVlLCBib21icyB0aHJvdWdoIGludGVybmFsX2Vycm9yLiAg Ki8KKworc3RhdGljIGludAoraTM4Nl9oYW5kbGVfbm9uYWxpZ25lZF93YXRj aHBvaW50IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAor CQkJCSAgIGkzODZfd3Bfb3BfdCB3aGF0LCBDT1JFX0FERFIgYWRkciwgaW50 IGxlbiwKKwkJCQkgICBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUpCit7 CisgIGludCByZXR2YWwgPSAwLCBzdGF0dXMgPSAwOworICBpbnQgbWF4X3dw X2xlbiA9IFRBUkdFVF9IQVNfRFJfTEVOXzggPyA4IDogNDsKKworICBzdGF0 aWMgY29uc3QgaW50IHNpemVfdHJ5X2FycmF5WzhdWzhdID0KKyAgeworICAg IHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfSwJLyogVHJ5aW5nIHNpemUgb25l LiAgKi8KKyAgICB7MiwgMSwgMiwgMSwgMiwgMSwgMiwgMX0sCS8qIFRyeWlu ZyBzaXplIHR3by4gICovCisgICAgezIsIDEsIDIsIDEsIDIsIDEsIDIsIDF9 LAkvKiBUcnlpbmcgc2l6ZSB0aHJlZS4gICovCisgICAgezQsIDEsIDIsIDEs IDQsIDEsIDIsIDF9LAkvKiBUcnlpbmcgc2l6ZSBmb3VyLiAgKi8KKyAgICB7 NCwgMSwgMiwgMSwgNCwgMSwgMiwgMX0sCS8qIFRyeWluZyBzaXplIGZpdmUu ICAqLworICAgIHs0LCAxLCAyLCAxLCA0LCAxLCAyLCAxfSwJLyogVHJ5aW5n IHNpemUgc2l4LiAgKi8KKyAgICB7NCwgMSwgMiwgMSwgNCwgMSwgMiwgMX0s CS8qIFRyeWluZyBzaXplIHNldmVuLiAgKi8KKyAgICB7OCwgMSwgMiwgMSwg NCwgMSwgMiwgMX0sCS8qIFRyeWluZyBzaXplIGVpZ2h0LiAgKi8KKyAgfTsK KworICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisgICAgICBpbnQgYWxpZ24g PSBhZGRyICUgbWF4X3dwX2xlbjsKKyAgICAgIC8qIEZvdXIgKGVpZ2h0IG9u IEFNRDY0KSBpcyB0aGUgbWF4aW11bSBsZW5ndGggYSBkZWJ1ZyByZWdpc3Rl cgorCSBjYW4gd2F0Y2guICAqLworICAgICAgaW50IHRyeSA9IChsZW4gPiBt YXhfd3BfbGVuID8gKG1heF93cF9sZW4gLSAxKSA6IGxlbiAtIDEpOworICAg ICAgaW50IHNpemUgPSBzaXplX3RyeV9hcnJheVt0cnldW2FsaWduXTsKKwor ICAgICAgaWYgKHdoYXQgPT0gV1BfQ09VTlQpCisJeworCSAgLyogc2l6ZV90 cnlfYXJyYXlbXSBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBlYWNoIGl0ZXJhdGlv bgorCSAgICAgdGhyb3VnaCB0aGUgbG9vcCBpcyBndWFyYW50ZWVkIHRvIHBy b2R1Y2UgYW4gYWRkcmVzcyBhbmQgYQorCSAgICAgc2l6ZSB0aGF0IGNhbiBi ZSB3YXRjaGVkIHdpdGggYSBzaW5nbGUgZGVidWcgcmVnaXN0ZXIuCisJICAg ICBUaHVzLCBmb3IgY291bnRpbmcgdGhlIHJlZ2lzdGVycyByZXF1aXJlZCB0 byB3YXRjaCBhCisJICAgICByZWdpb24sIHdlIHNpbXBseSBuZWVkIHRvIGlu Y3JlbWVudCB0aGUgY291bnQgb24gZWFjaAorCSAgICAgaXRlcmF0aW9uLiAg Ki8KKwkgIHJldHZhbCsrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB1bnNp Z25lZCBsZW5fcncgPSBpMzg2X2xlbmd0aF9hbmRfcndfYml0cyAoc2l6ZSwg dHlwZSk7CisKKwkgIGlmICh3aGF0ID09IFdQX0lOU0VSVCkKKwkgICAgc3Rh dHVzID0gaTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChzdGF0ZSwg YWRkciwgbGVuX3J3KTsKKwkgIGVsc2UgaWYgKHdoYXQgPT0gV1BfUkVNT1ZF KQorCSAgICBzdGF0dXMgPSBpMzg2X3JlbW92ZV9hbGlnbmVkX3dhdGNocG9p bnQgKHN0YXRlLCBhZGRyLCBsZW5fcncpOworCSAgZWxzZQorCSAgICBmYXRh bCAoIlwKK0ludmFsaWQgdmFsdWUgJWQgb2Ygb3BlcmF0aW9uIGluIGkzODZf aGFuZGxlX25vbmFsaWduZWRfd2F0Y2hwb2ludC5cbiIsCisJCSAgIChpbnQp IHdoYXQpOworCisJICAvKiBXZSBrZWVwIHRoZSBsb29wIGdvaW5nIGV2ZW4g YWZ0ZXIgYSBmYWlsdXJlLCBiZWNhdXNlIHNvbWUKKwkgICAgIG9mIHRoZSBv dGhlciBhbGlnbmVkIHdhdGNocG9pbnRzIG1pZ2h0IHN0aWxsIHN1Y2NlZWQK KwkgICAgIChlLmcuIGlmIHRoZXkgd2F0Y2ggYWRkcmVzc2VzIHRoYXQgYXJl IGFscmVhZHkgd2F0Y2hlZCwKKwkgICAgIGluIHdoaWNoIGNhc2Ugd2UganVz dCBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2YKKwkgICAgIG9j Y3VwaWVkIGRlYnVnIHJlZ2lzdGVycykuICBJZiB3ZSBicmVhayBvdXQgb2Yg dGhlIGxvb3AKKwkgICAgIHRvbyBlYXJseSwgd2UgY291bGQgY2F1c2UgdGhv c2UgYWRkcmVzc2VzIHdhdGNoZWQgYnkKKwkgICAgIG90aGVyIHdhdGNocG9p bnRzIHRvIGJlIGRpc2FibGVkIHdoZW4gYnJlYWtwb2ludC5jIHJlYWN0cwor CSAgICAgdG8gb3VyIGZhaWx1cmUgdG8gaW5zZXJ0IHRoaXMgd2F0Y2hwb2lu dCBhbmQgdHJpZXMgdG8KKwkgICAgIHJlbW92ZSBpdC4gICovCisJICBpZiAo c3RhdHVzKQorCSAgICByZXR2YWwgPSBzdGF0dXM7CisJfQorCisgICAgICBh ZGRyICs9IHNpemU7CisgICAgICBsZW4gLT0gc2l6ZTsKKyAgICB9CisKKyAg cmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBaX1BBQ0tFVF9XUklURV9X UCAnMicKKyNkZWZpbmUgWl9QQUNLRVRfUkVBRF9XUCAnMycKKyNkZWZpbmUg Wl9QQUNLRVRfQUNDRVNTX1dQICc0JworCitzdGF0aWMgaW50CitaX3BhY2tl dF90b19od190eXBlIChjaGFyIHR5cGUpCit7CisgIHN3aXRjaCAodHlwZSkK KyAgICB7CisgICAgY2FzZSBaX1BBQ0tFVF9XUklURV9XUDoKKyAgICAgIHJl dHVybiBod193cml0ZTsKKyAgICBjYXNlIFpfUEFDS0VUX1JFQURfV1A6Cisg ICAgICByZXR1cm4gaHdfcmVhZDsKKyAgICBjYXNlIFpfUEFDS0VUX0FDQ0VT U19XUDoKKyAgICAgIHJldHVybiBod19hY2Nlc3M7CisgICAgZGVmYXVsdDoK KyAgICAgIGVycm9yICgiWl9wYWNrZXRfdG9faHdfdHlwZTogYmFkIHdhdGNo cG9pbnQgdHlwZSAlYyIsIHR5cGUpOworICAgIH0KK30KKworLyogSW5zZXJ0 IGEgd2F0Y2hwb2ludCB0byB3YXRjaCBhIG1lbW9yeSByZWdpb24gd2hpY2gg c3RhcnRzIGF0CisgICBhZGRyZXNzIEFERFIgYW5kIHdob3NlIGxlbmd0aCBp cyBMRU4gYnl0ZXMuICBXYXRjaCBtZW1vcnkgYWNjZXNzZXMKKyAgIG9mIHRo ZSB0eXBlIFRZUEVfRlJPTV9QQUNLRVQuICBSZXR1cm4gMCBvbiBzdWNjZXNz LCAtMSBvbiBmYWlsdXJlLiAgKi8KKworaW50CitpMzg2X2xvd19pbnNlcnRf d2F0Y2hwb2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0 ZSwKKwkJCSAgICBjaGFyIHR5cGVfZnJvbV9wYWNrZXQsIENPUkVfQUREUiBh ZGRyLCBpbnQgbGVuKQoreworICBpbnQgcmV0dmFsOworICBpbnQgdHlwZSA9 IFpfcGFja2V0X3RvX2h3X3R5cGUgKHR5cGVfZnJvbV9wYWNrZXQpOworCisg IGlmICgoKGxlbiAhPSAxICYmIGxlbiAhPSAyICYmIGxlbiAhPSA0KQorICAg ICAgICYmICEoVEFSR0VUX0hBU19EUl9MRU5fOCAmJiBsZW4gPT0gOCkpCisg ICAgICB8fCBhZGRyICUgbGVuICE9IDApCisgICAgeworICAgICAgcmV0dmFs ID0gaTM4Nl9oYW5kbGVfbm9uYWxpZ25lZF93YXRjaHBvaW50IChzdGF0ZSwg V1BfSU5TRVJULAorCQkJCQkJICBhZGRyLCBsZW4sIHR5cGUpOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxlbl9ydyA9IGkzODZf bGVuZ3RoX2FuZF9yd19iaXRzIChsZW4sIHR5cGUpOworCisgICAgICByZXR2 YWwgPSBpMzg2X2luc2VydF9hbGlnbmVkX3dhdGNocG9pbnQgKHN0YXRlLCBh ZGRyLCBsZW5fcncpOworICAgIH0KKworICBpZiAoZGVidWdfaHdfcG9pbnRz KQorICAgIGkzODZfc2hvd19kciAoc3RhdGUsICJpbnNlcnRfd2F0Y2hwb2lu dCIsIGFkZHIsIGxlbiwgdHlwZSk7CisKKyAgcmV0dXJuIHJldHZhbDsKK30K KworLyogUmVtb3ZlIGEgd2F0Y2hwb2ludCB0aGF0IHdhdGNoZWQgdGhlIG1l bW9yeSByZWdpb24gd2hpY2ggc3RhcnRzIGF0CisgICBhZGRyZXNzIEFERFIs IHdob3NlIGxlbmd0aCBpcyBMRU4gYnl0ZXMsIGFuZCBmb3IgYWNjZXNzZXMg b2YgdGhlCisgICB0eXBlIFRZUEVfRlJPTV9QQUNLRVQuICBSZXR1cm4gMCBv biBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8KKworaW50CitpMzg2X2xv d19yZW1vdmVfd2F0Y2hwb2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0 YXRlICpzdGF0ZSwKKwkJCSAgICBjaGFyIHR5cGVfZnJvbV9wYWNrZXQsIENP UkVfQUREUiBhZGRyLCBpbnQgbGVuKQoreworICBpbnQgcmV0dmFsOworICBp bnQgdHlwZSA9IFpfcGFja2V0X3RvX2h3X3R5cGUgKHR5cGVfZnJvbV9wYWNr ZXQpOworCisgIGlmICgoKGxlbiAhPSAxICYmIGxlbiAhPSAyICYmIGxlbiAh PSA0KQorICAgICAgICYmICEoVEFSR0VUX0hBU19EUl9MRU5fOCAmJiBsZW4g PT0gOCkpCisgICAgICB8fCBhZGRyICUgbGVuICE9IDApCisgICAgeworICAg ICAgcmV0dmFsID0gaTM4Nl9oYW5kbGVfbm9uYWxpZ25lZF93YXRjaHBvaW50 IChzdGF0ZSwgV1BfUkVNT1ZFLAorCQkJCQkJICBhZGRyLCBsZW4sIHR5cGUp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxlbl9y dyA9IGkzODZfbGVuZ3RoX2FuZF9yd19iaXRzIChsZW4sIHR5cGUpOworCisg ICAgICByZXR2YWwgPSBpMzg2X3JlbW92ZV9hbGlnbmVkX3dhdGNocG9pbnQg KHN0YXRlLCBhZGRyLCBsZW5fcncpOworICAgIH0KKworICBpZiAoZGVidWdf aHdfcG9pbnRzKQorICAgIGkzODZfc2hvd19kciAoc3RhdGUsICJyZW1vdmVf d2F0Y2hwb2ludCIsIGFkZHIsIGxlbiwgdHlwZSk7CisKKyAgcmV0dXJuIHJl dHZhbDsKK30KKworLyogUmV0dXJuIG5vbi16ZXJvIGlmIHdlIGNhbiB3YXRj aCBhIG1lbW9yeSByZWdpb24gdGhhdCBzdGFydHMgYXQKKyAgIGFkZHJlc3Mg QUREUiBhbmQgd2hvc2UgbGVuZ3RoIGlzIExFTiBieXRlcy4gICovCisKK2lu dAoraTM4Nl9sb3dfcmVnaW9uX29rX2Zvcl93YXRjaHBvaW50IChzdHJ1Y3Qg aTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCSAgIENPUkVfQURE UiBhZGRyLCBpbnQgbGVuKQoreworICBpbnQgbnJlZ3M7CisKKyAgLyogQ29t cHV0ZSBob3cgbWFueSBhbGlnbmVkIHdhdGNocG9pbnRzIHdlIHdvdWxkIG5l ZWQgdG8gY292ZXIgdGhpcworICAgICByZWdpb24uICAqLworICBucmVncyA9 IGkzODZfaGFuZGxlX25vbmFsaWduZWRfd2F0Y2hwb2ludCAoc3RhdGUsIFdQ X0NPVU5ULAorCQkJCQkgICAgIGFkZHIsIGxlbiwgaHdfd3JpdGUpOworICBy ZXR1cm4gbnJlZ3MgPD0gRFJfTkFERFIgPyAxIDogMDsKK30KKworLyogSWYg dGhlIGluZmVyaW9yIGhhcyBzb21lIGJyZWFrL3dhdGNocG9pbnQgdGhhdCB0 cmlnZ2VyZWQsIHNldCB0aGUKKyAgIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRo IHRoYXQgYnJlYWsvd2F0Y2hwb2ludCBhbmQgcmV0dXJuIHRydWUuCisgICBP dGhlcndpc2UsIHJldHVybiBmYWxzZS4gICovCisKK2ludAoraTM4Nl9sb3df c3RvcHBlZF9kYXRhX2FkZHJlc3MgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19z dGF0ZSAqc3RhdGUsCisJCQkgICAgICAgQ09SRV9BRERSICphZGRyX3ApCit7 CisgIENPUkVfQUREUiBhZGRyID0gMDsKKyAgaW50IGk7CisgIGludCByYyA9 IDA7CisKKyAgLyogR2V0IGRyX3N0YXR1c19taXJyb3IgZm9yIHVzZSBieSBJ Mzg2X0RSX1dBVENIX0hJVC4gICovCisgIGkzODZfZHJfbG93X2dldF9zdGF0 dXMgKHN0YXRlKTsKKworICBBTExfREVCVUdfUkVHSVNURVJTIChpKQorICAg IHsKKyAgICAgIGlmIChJMzg2X0RSX1dBVENIX0hJVCAoc3RhdGUsIGkpCisJ ICAvKiBUaGlzIHNlY29uZCBjb25kaXRpb24gbWFrZXMgc3VyZSBEUmkgaXMg c2V0IHVwIGZvciBhIGRhdGEKKwkgICAgIHdhdGNocG9pbnQsIG5vdCBhIGhh cmR3YXJlIGJyZWFrcG9pbnQuICBUaGUgcmVhc29uIGlzCisJICAgICB0aGF0 IEdEQiBkb2Vzbid0IGNhbGwgdGhlIHRhcmdldF9zdG9wcGVkX2RhdGFfYWRk cmVzcworCSAgICAgbWV0aG9kIGV4Y2VwdCBmb3IgZGF0YSB3YXRjaHBvaW50 cy4gIEluIG90aGVyIHdvcmRzLCBJJ20KKwkgICAgIGJlaW5nIHBhcmFub2lh Yy4gICovCisJICAmJiBJMzg2X0RSX0dFVF9SV19MRU4gKHN0YXRlLCBpKSAh PSAwKQorCXsKKwkgIGFkZHIgPSBzdGF0ZS0+ZHJfbWlycm9yW2ldOworCSAg cmMgPSAxOworCSAgaWYgKGRlYnVnX2h3X3BvaW50cykKKwkgICAgaTM4Nl9z aG93X2RyIChzdGF0ZSwgIndhdGNocG9pbnRfaGl0IiwgYWRkciwgLTEsIGh3 X3dyaXRlKTsKKwl9CisgICAgfQorCisgIGlmIChkZWJ1Z19od19wb2ludHMg JiYgYWRkciA9PSAwKQorICAgIGkzODZfc2hvd19kciAoc3RhdGUsICJzdG9w cGVkX2RhdGFfYWRkciIsIDAsIDAsIGh3X3dyaXRlKTsKKworICBpZiAocmMp CisgICAgKmFkZHJfcCA9IGFkZHI7CisgIHJldHVybiByYzsKK30KKworLyog UmV0dXJuIHRydWUgaWYgdGhlIGluZmVyaW9yIGhhcyBzb21lIHdhdGNocG9p bnQgdGhhdCB0cmlnZ2VyZWQuCisgICBPdGhlcndpc2UgcmV0dXJuIGZhbHNl LiAgKi8KKworaW50CitpMzg2X2xvd19zdG9wcGVkX2J5X3dhdGNocG9pbnQg KHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUpCit7CisgIENP UkVfQUREUiBhZGRyID0gMDsKKyAgcmV0dXJuIGkzODZfbG93X3N0b3BwZWRf ZGF0YV9hZGRyZXNzIChzdGF0ZSwgJmFkZHIpOworfQpJbmRleDogaTM4Ni1s b3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBpMzg2LWxv dy5oCmRpZmYgLU4gaTM4Ni1sb3cuaAotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIGkzODYtbG93LmgJMjMgSnVuIDIwMDkg MDY6MzU6NDUgLTAwMDAKQEAgLTAsMCArMSwxMDkgQEAKKy8qIE1pc2MuIGxv dyBsZXZlbCBzdXBwb3J0IGZvciBpMzg2LgorCisgICBDb3B5cmlnaHQgKEMp IDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKy8qIFN1cHBvcnQgZm9yIGhhcmR3YXJlIHdhdGNo cG9pbnRzIGFuZCBicmVha3BvaW50cyB1c2luZyB0aGUgaTM4NgorICAgZGVi dWcgcmVnaXN0ZXJzLgorCisgICBUaGlzIHByb3ZpZGVzIHNldmVyYWwgZnVu Y3Rpb25zIGZvciBpbnNlcnRpbmcgYW5kIHJlbW92aW5nCisgICBoYXJkd2Fy ZS1hc3Npc3RlZCBicmVha3BvaW50cyBhbmQgd2F0Y2hwb2ludHMsIHRlc3Rp bmcgaWYgb25lIG9yCisgICBtb3JlIG9mIHRoZSB3YXRjaHBvaW50cyB0cmln Z2VyZWQgYW5kIGF0IHdoYXQgYWRkcmVzcywgY2hlY2tpbmcKKyAgIHdoZXRo ZXIgYSBnaXZlbiByZWdpb24gY2FuIGJlIHdhdGNoZWQsIGV0Yy4KKworICAg VGhlIGZ1bmN0aW9ucyBiZWxvdyBpbXBsZW1lbnQgZGVidWcgcmVnaXN0ZXJz IHNoYXJpbmcgYnkgcmVmZXJlbmNlCisgICBjb3VudHMsIGFuZCBhbGxvdyB0 byB3YXRjaCByZWdpb25zIHVwIHRvIDE2IGJ5dGVzIGxvbmcKKyAgICgzMiBi eXRlcyBvbiA2NCBiaXQgaG9zdHMpLiAgKi8KKworCisvKiBEZWJ1ZyByZWdp c3RlcnMnIGluZGljZXMuICAqLworI2RlZmluZSBEUl9GSVJTVEFERFIgMAor I2RlZmluZSBEUl9MQVNUQUREUiAgMworI2RlZmluZSBEUl9OQUREUiAgICAg NCAvKiBUaGUgbnVtYmVyIG9mIGRlYnVnIGFkZHJlc3MgcmVnaXN0ZXJzLiAg Ki8KKyNkZWZpbmUgRFJfU1RBVFVTICAgIDYKKyNkZWZpbmUgRFJfQ09OVFJP TCAgIDcKKworLyogR2xvYmFsIHN0YXRlIG5lZWRlZCB0byB0cmFjayBoL3cg d2F0Y2hwb2ludHMuICAqLworCitzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3Rh dGUKK3sKKyAgLyogTWlycm9yIHRoZSBpbmZlcmlvcidzIERSaSByZWdpc3Rl cnMuICBXZSBrZWVwIHRoZSBzdGF0dXMgYW5kCisgICAgIGNvbnRyb2wgcmVn aXN0ZXJzIHNlcGFyYXRlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgaG9sZCBhZGRy ZXNzZXMuICAqLworICBDT1JFX0FERFIgZHJfbWlycm9yW0RSX05BRERSXTsK KyAgdW5zaWduZWQgZHJfc3RhdHVzX21pcnJvciwgZHJfY29udHJvbF9taXJy b3I7CisKKyAgLyogUmVmZXJlbmNlIGNvdW50cyBmb3IgZWFjaCBkZWJ1ZyBy ZWdpc3Rlci4gICovCisgIGludCBkcl9yZWZfY291bnRbRFJfTkFERFJdOwor fTsKKworLyogSW5pdGlhbGl6ZSBTVEFURS4gICovCitleHRlcm4gdm9pZCBp Mzg2X2xvd19pbml0X2RyZWdzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3Rh dGUgKnN0YXRlKTsKKworLyogSW5zZXJ0IGEgd2F0Y2hwb2ludCB0byB3YXRj aCBhIG1lbW9yeSByZWdpb24gd2hpY2ggc3RhcnRzIGF0CisgICBhZGRyZXNz IEFERFIgYW5kIHdob3NlIGxlbmd0aCBpcyBMRU4gYnl0ZXMuICBXYXRjaCBt ZW1vcnkgYWNjZXNzZXMKKyAgIG9mIHRoZSB0eXBlIFRZUEVfRlJPTV9QQUNL RVQuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8K K2V4dGVybiBpbnQgaTM4Nl9sb3dfaW5zZXJ0X3dhdGNocG9pbnQgKHN0cnVj dCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIGNo YXIgdHlwZV9mcm9tX3BhY2tldCwgQ09SRV9BRERSIGFkZHIsCisJCQkJICAg ICAgIGludCBsZW4pOworCisvKiBSZW1vdmUgYSB3YXRjaHBvaW50IHRoYXQg d2F0Y2hlZCB0aGUgbWVtb3J5IHJlZ2lvbiB3aGljaCBzdGFydHMgYXQKKyAg IGFkZHJlc3MgQUREUiwgd2hvc2UgbGVuZ3RoIGlzIExFTiBieXRlcywgYW5k IGZvciBhY2Nlc3NlcyBvZiB0aGUKKyAgIHR5cGUgVFlQRV9GUk9NX1BBQ0tF VC4gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICAqLwor ZXh0ZXJuIGludCBpMzg2X2xvd19yZW1vdmVfd2F0Y2hwb2ludCAoc3RydWN0 IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgY2hh ciB0eXBlX2Zyb21fcGFja2V0LCBDT1JFX0FERFIgYWRkciwKKwkJCQkgICAg ICAgaW50IGxlbik7CisKKy8qIFJldHVybiBub24temVybyBpZiB3ZSBjYW4g d2F0Y2ggYSBtZW1vcnkgcmVnaW9uIHRoYXQgc3RhcnRzIGF0CisgICBhZGRy ZXNzIEFERFIgYW5kIHdob3NlIGxlbmd0aCBpcyBMRU4gYnl0ZXMuICAqLwor ZXh0ZXJuIGludCBpMzg2X2xvd19yZWdpb25fb2tfZm9yX3dhdGNocG9pbnQg KHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJCSAg ICAgIENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKTsKKworLyogSWYgdGhlIGlu ZmVyaW9yIGhhcyBzb21lIGJyZWFrL3dhdGNocG9pbnQgdGhhdCB0cmlnZ2Vy ZWQsIHNldCB0aGUKKyAgIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQg YnJlYWsvd2F0Y2hwb2ludCBhbmQgcmV0dXJuIHRydWUuCisgICBPdGhlcndp c2UsIHJldHVybiBmYWxzZS4gICovCitleHRlcm4gaW50IGkzODZfbG93X3N0 b3BwZWRfZGF0YV9hZGRyZXNzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3Rh dGUgKnN0YXRlLAorCQkJCQkgIENPUkVfQUREUiAqYWRkcl9wKTsKKworLyog UmV0dXJuIHRydWUgaWYgdGhlIGluZmVyaW9yIGhhcyBzb21lIHdhdGNocG9p bnQgdGhhdCB0cmlnZ2VyZWQuCisgICBPdGhlcndpc2UgcmV0dXJuIGZhbHNl LiAgKi8KK2V4dGVybiBpbnQgaTM4Nl9sb3dfc3RvcHBlZF9ieV93YXRjaHBv aW50IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKTsKKwwK Ky8qIEVhY2ggdGFyZ2V0IG5lZWRzIHRvIHByb3ZpZGUgc2V2ZXJhbCBsb3ct bGV2ZWwgZnVuY3Rpb25zCisgICB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIGlu c2VydCB3YXRjaHBvaW50cyBhbmQgaGFyZHdhcmUgYnJlYWtwb2ludHMKKyAg IGludG8gdGhlIGluZmVyaW9yLCByZW1vdmUgdGhlbSwgYW5kIGNoZWNrIHRo ZWlyIHN0YXR1cy4gIFRoZXNlCisgICBmdW5jdGlvbnMgYXJlOgorCisgICAg ICBpMzg2X2RyX2xvd19zZXRfY29udHJvbCAgLS0gc2V0IHRoZSBkZWJ1ZyBj b250cm9sIChEUjcpCisJCQkJICByZWdpc3RlciB0byBhIGdpdmVuIHZhbHVl CisKKyAgICAgIGkzODZfZHJfbG93X3NldF9hZGRyICAgICAtLSBwdXQgYW4g YWRkcmVzcyBpbnRvIG9uZSBkZWJ1ZyByZWdpc3RlcgorCisgICAgICBpMzg2 X2RyX2xvd19nZXRfc3RhdHVzICAgLS0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0 aGUgZGVidWcKKwkJCQkgIHN0YXR1cyAoRFI2KSByZWdpc3Rlci4KKyovCisK Ky8qIFVwZGF0ZSB0aGUgaW5mZXJpb3IncyBkZWJ1ZyByZWdpc3RlciBSRUdO VU0gZnJvbSBTVEFURS4gICovCitleHRlcm4gdm9pZCBpMzg2X2RyX2xvd19z ZXRfYWRkciAoY29uc3Qgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpz dGF0ZSwKKwkJCQkgIGludCByZWdudW0pOworCisvKiBVcGRhdGUgdGhlIGlu ZmVyaW9yJ3MgRFI3IGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgZnJvbSBTVEFU RS4gICovCitleHRlcm4gdm9pZCBpMzg2X2RyX2xvd19zZXRfY29udHJvbCAo Y29uc3Qgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSk7CisK Ky8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGluZmVyaW9yJ3MgRFI2IGRlYnVn IHN0YXR1cyByZWdpc3RlcgorICAgYW5kIHJlY29yZCBpdCBpbiBTVEFURS4g ICovCitleHRlcm4gdm9pZCBpMzg2X2RyX2xvd19nZXRfc3RhdHVzIChzdHJ1 Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKTsKSW5kZXg6IGxpbnV4 LWxvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEwNwpkaWZmIC11IC1wIC1yMS4xMDcgbGludXgtbG93 LmMKLS0tIGxpbnV4LWxvdy5jCTIyIEp1biAyMDA5IDE5OjMzOjQxIC0wMDAw CTEuMTA3CisrKyBsaW51eC1sb3cuYwkyMyBKdW4gMjAwOSAwNjozNTo0NSAt MDAwMApAQCAtMjI0LDYgKzIyNCw3IEBAIGRlbGV0ZV9sd3AgKHN0cnVjdCBs d3BfaW5mbyAqbHdwKQogewogICByZW1vdmVfdGhyZWFkIChnZXRfbHdwX3Ro cmVhZCAobHdwKSk7CiAgIHJlbW92ZV9pbmZlcmlvciAoJmFsbF9sd3BzLCAm bHdwLT5oZWFkKTsKKyAgZnJlZSAobHdwLT5hcmNoX3ByaXZhdGUpOwogICBm cmVlIChsd3ApOwogfQogCkBAIC0yNDIsNiArMjQzLDkgQEAgbGludXhfYWRk X3Byb2Nlc3MgKGludCBwaWQsIGludCBhdHRhY2hlZAogICBwcm9jID0gYWRk X3Byb2Nlc3MgKHBpZCwgYXR0YWNoZWQpOwogICBwcm9jLT5wcml2YXRlID0g eGNhbGxvYyAoMSwgc2l6ZW9mICgqcHJvYy0+cHJpdmF0ZSkpOwogCisgIGlm ICh0aGVfbG93X3RhcmdldC5uZXdfcHJvY2VzcyAhPSBOVUxMKQorICAgIHBy b2MtPnByaXZhdGUtPmFyY2hfcHJpdmF0ZSA9IHRoZV9sb3dfdGFyZ2V0Lm5l d19wcm9jZXNzICgpOworCiAgIHJldHVybiBwcm9jOwogfQogCkBAIC0yNTEs NiArMjU1LDcgQEAgbGludXhfYWRkX3Byb2Nlc3MgKGludCBwaWQsIGludCBh dHRhY2hlZAogc3RhdGljIHZvaWQKIGxpbnV4X3JlbW92ZV9wcm9jZXNzIChz dHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9jZXNzKQogeworICBmcmVlIChwcm9j ZXNzLT5wcml2YXRlLT5hcmNoX3ByaXZhdGUpOwogICBmcmVlIChwcm9jZXNz LT5wcml2YXRlKTsKICAgcmVtb3ZlX3Byb2Nlc3MgKHByb2Nlc3MpOwogfQpA QCAtMzc2LDYgKzM4MSw5IEBAIGFkZF9sd3AgKHB0aWRfdCBwdGlkKQogCiAg IGx3cC0+aGVhZC5pZCA9IHB0aWQ7CiAKKyAgaWYgKHRoZV9sb3dfdGFyZ2V0 Lm5ld190aHJlYWQgIT0gTlVMTCkKKyAgICBsd3AtPmFyY2hfcHJpdmF0ZSA9 IHRoZV9sb3dfdGFyZ2V0Lm5ld190aHJlYWQgKCk7CisKICAgYWRkX2luZmVy aW9yX3RvX2xpc3QgKCZhbGxfbHdwcywgJmx3cC0+aGVhZCk7CiAKICAgcmV0 dXJuIGx3cDsKQEAgLTQ2Niw3ICs0NzQsNiBAQCBsaW51eF9hdHRhY2hfbHdw XzEgKHVuc2lnbmVkIGxvbmcgbHdwaWQsCiAgIG5ld19sd3AgPSAoc3RydWN0 IGx3cF9pbmZvICopIGFkZF9sd3AgKHB0aWQpOwogICBhZGRfdGhyZWFkIChw dGlkLCBuZXdfbHdwKTsKIAotCiAgIC8qIFdlIG5lZWQgdG8gd2FpdCBmb3Ig U0lHU1RPUCBiZWZvcmUgYmVpbmcgYWJsZSB0byBtYWtlIHRoZSBuZXh0CiAg ICAgIHB0cmFjZSBjYWxsIG9uIHRoaXMgTFdQLiAgKi8KICAgbmV3X2x3cC0+ bXVzdF9zZXRfcHRyYWNlX2ZsYWdzID0gMTsKQEAgLTE3NDAsNiArMTc0Nyw5 IEBAIGxpbnV4X3Jlc3VtZV9vbmVfbHdwIChzdHJ1Y3QgbHdwX2luZm8gKmwK ICAgICAgICpwX3NpZyA9IE5VTEw7CiAgICAgfQogCisgIGlmICh0aGVfbG93 X3RhcmdldC5wcmVwYXJlX3RvX3Jlc3VtZSAhPSBOVUxMKQorICAgIHRoZV9s b3dfdGFyZ2V0LnByZXBhcmVfdG9fcmVzdW1lIChsd3ApOworCiAgIHJlZ2Nh Y2hlX2ludmFsaWRhdGVfb25lICgoc3RydWN0IGluZmVyaW9yX2xpc3RfZW50 cnkgKikKIAkJCSAgIGdldF9sd3BfdGhyZWFkIChsd3ApKTsKICAgZXJybm8g PSAwOwpJbmRleDogbGludXgtbG93LmgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvbGludXgt bG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtcCAt cjEuMzAgbGludXgtbG93LmgKLS0tIGxpbnV4LWxvdy5oCTEyIE1heSAyMDA5 IDIyOjI1OjAwIC0wMDAwCTEuMzAKKysrIGxpbnV4LWxvdy5oCTIzIEp1biAy MDA5IDA2OjM1OjQ1IC0wMDAwCkBAIC01Niw4ICs1NiwxMyBAQCBzdHJ1Y3Qg cHJvY2Vzc19pbmZvX3ByaXZhdGUKIAogICAvKiBDb25uZWN0aW9uIHRvIHRo ZSBsaWJ0aHJlYWRfZGIgbGlicmFyeS4gICovCiAgIHRkX3RocmFnZW50X3Qg KnRocmVhZF9hZ2VudDsKKworICAvKiBUYXJnZXQtc3BlY2lmaWMgYWRkaXRp b25zLiAgKi8KKyAgc3RydWN0IGFyY2hfcHJvY2Vzc19pbmZvICphcmNoX3By aXZhdGU7CiB9OwogCitzdHJ1Y3QgbHdwX2luZm87CisKIHN0cnVjdCBsaW51 eF90YXJnZXRfb3BzCiB7CiAgIC8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBz ZXR1cC4gICovCkBAIC05NiwxMCArMTAxLDI0IEBAIHN0cnVjdCBsaW51eF90 YXJnZXRfb3BzCiAgICAgIElmIERJUkVDVElPTiBpcyAxLCB0aGVuIGNvcHkg ZnJvbSBJTkYgdG8gTkFUSVZFLgogICAgICBJZiBESVJFQ1RJT04gaXMgMCwg Y29weSBmcm9tIE5BVElWRSB0byBJTkYuICAqLwogICBpbnQgKCpzaWdpbmZv X2ZpeHVwKSAoc3RydWN0IHNpZ2luZm8gKm5hdGl2ZSwgdm9pZCAqaW5mLCBp bnQgZGlyZWN0aW9uKTsKKworICAvKiBIb29rIHRvIGNhbGwgd2hlbiBhIG5l dyBwcm9jZXNzIGlzIGNyZWF0ZWQgb3IgYXR0YWNoZWQgdG8uCisgICAgIElm IHRoZSB0YXJnZXQgbmVlZHMgcGVyLXByb2Nlc3MgYXJjaGl0ZWN0dXJlLXNw ZWNpZmljIGRhdGEsCisgICAgIGFsbG9jYXRlIGl0IGhlcmUuICAqLworICBz dHJ1Y3QgYXJjaF9wcm9jZXNzX2luZm8gKiAoKm5ld19wcm9jZXNzKSAodm9p ZCk7CisKKyAgLyogSG9vayB0byBjYWxsIHdoZW4gYSBuZXcgdGhyZWFkIGlz IGRldGVjdGVkLgorICAgICBJZiB0aGUgdGFyZ2V0IG5lZWRzIHBlci10aHJl YWQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRhdGEsCisgICAgIGFsbG9jYXRl IGl0IGhlcmUuICAqLworICBzdHJ1Y3QgYXJjaF9sd3BfaW5mbyAqICgqbmV3 X3RocmVhZCkgKHZvaWQpOworCisgIC8qIEhvb2sgdG8gY2FsbCBwcmlvciB0 byByZXN1bWluZyBhIHRocmVhZC4gICovCisgIHZvaWQgKCpwcmVwYXJlX3Rv X3Jlc3VtZSkgKHN0cnVjdCBsd3BfaW5mbyAqKTsKIH07CiAKIGV4dGVybiBz dHJ1Y3QgbGludXhfdGFyZ2V0X29wcyB0aGVfbG93X3RhcmdldDsKIAorI2Rl ZmluZSBwdGlkX29mKHByb2MpICgocHJvYyktPmhlYWQuaWQpCiAjZGVmaW5l IHBpZF9vZihwcm9jKSBwdGlkX2dldF9waWQgKChwcm9jKS0+aGVhZC5pZCkK ICNkZWZpbmUgbHdwaWRfb2YocHJvYykgcHRpZF9nZXRfbHdwICgocHJvYykt PmhlYWQuaWQpCiAKQEAgLTE3Miw2ICsxOTEsOSBAQCBzdHJ1Y3QgbHdwX2lu Zm8KICAgICAgVEhSRUFEX0tOT1dOIGlzIHNldC4gICovCiAgIHRkX3Rocmhh bmRsZV90IHRoOwogI2VuZGlmCisKKyAgLyogVGFyZ2V0LXNwZWNpZmljIGFk ZGl0aW9ucy4gICovCisgIHN0cnVjdCBhcmNoX2x3cF9pbmZvICphcmNoX3By aXZhdGU7CiB9OwogCiBleHRlcm4gc3RydWN0IGluZmVyaW9yX2xpc3QgYWxs X2x3cHM7CkluZGV4OiBsaW51eC14ODYtbG93LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIv bGludXgteDg2LWxvdy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlm ZiAtdSAtcCAtcjEuMiBsaW51eC14ODYtbG93LmMKLS0tIGxpbnV4LXg4Ni1s b3cuYwkxMyBNYXkgMjAwOSAxOToxMTowNCAtMDAwMAkxLjIKKysrIGxpbnV4 LXg4Ni1sb3cuYwkyMyBKdW4gMjAwOSAwNjozNTo0NSAtMDAwMApAQCAtMTgs MTAgKzE4LDEyIEBACiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCisjaW5jbHVkZSA8c3RkZGVm Lmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAic2VydmVyLmgi CiAjaW5jbHVkZSAibGludXgtbG93LmgiCiAjaW5jbHVkZSAiaTM4Ny1mcC5o IgorI2luY2x1ZGUgImkzODYtbG93LmgiCiAKICNpbmNsdWRlICJnZGJfcHJv Y19zZXJ2aWNlLmgiCiAKQEAgLTU2LDYgKzU4LDIxIEBAIHZvaWQgaW5pdF9y ZWdpc3RlcnNfeDg2XzY0X2xpbnV4ICh2b2lkKTsKICNkZWZpbmUgQVJDSF9H RVRfR1MgMHgxMDA0CiAjZW5kaWYKIAorLyogUGVyLXByb2Nlc3MgYXJjaC1z cGVjaWZpYyBkYXRhIHdlIHdhbnQgdG8ga2VlcC4gICovCisKK3N0cnVjdCBh cmNoX3Byb2Nlc3NfaW5mbworeworICBzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdf c3RhdGUgZGVidWdfcmVnX3N0YXRlOworfTsKKworLyogUGVyLXRocmVhZCBh cmNoLXNwZWNpZmljIGRhdGEgd2Ugd2FudCB0byBrZWVwLiAgKi8KKworc3Ry dWN0IGFyY2hfbHdwX2luZm8KK3sKKyAgLyogTm9uLXplcm8gaWYgb3VyIGNv cHkgZGlmZmVycyBmcm9tIHdoYXQncyByZWNvcmRlZCBpbiB0aGUgdGhyZWFk LiAgKi8KKyAgaW50IGRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkOworfTsKKwog I2lmZGVmIF9feDg2XzY0X18KIAogLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBn ZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QgdXNlcicKQEAg LTMxNyw2ICszMzQsMTc2IEBAIHg4Nl9icmVha3BvaW50X2F0IChDT1JFX0FE RFIgcGMpCiAgIHJldHVybiAwOwogfQogDAorLyogU3VwcG9ydCBmb3IgZGVi dWcgcmVnaXN0ZXJzLiAgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3g4 Nl9saW51eF9kcl9nZXQgKHB0aWRfdCBwdGlkLCBpbnQgcmVnbnVtKQorewor ICBpbnQgdGlkOworICB1bnNpZ25lZCBsb25nIHZhbHVlOworCisgIHRpZCA9 IHB0aWRfZ2V0X2x3cCAocHRpZCk7CisKKyAgZXJybm8gPSAwOworICB2YWx1 ZSA9IHB0cmFjZSAoUFRSQUNFX1BFRUtVU0VSLCB0aWQsCisJCSAgb2Zmc2V0 b2YgKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnW3JlZ251bV0pLCAwKTsKKyAg aWYgKGVycm5vICE9IDApCisgICAgZXJyb3IgKCJDb3VsZG4ndCByZWFkIGRl YnVnIHJlZ2lzdGVyIik7CisKKyAgcmV0dXJuIHZhbHVlOworfQorCitzdGF0 aWMgdm9pZAoreDg2X2xpbnV4X2RyX3NldCAocHRpZF90IHB0aWQsIGludCBy ZWdudW0sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisgIGludCB0aWQ7CisK KyAgdGlkID0gcHRpZF9nZXRfbHdwIChwdGlkKTsKKworICBlcnJubyA9IDA7 CisgIHB0cmFjZSAoUFRSQUNFX1BPS0VVU0VSLCB0aWQsCisJICBvZmZzZXRv ZiAoc3RydWN0IHVzZXIsIHVfZGVidWdyZWdbcmVnbnVtXSksIHZhbHVlKTsK KyAgaWYgKGVycm5vICE9IDApCisgICAgZXJyb3IgKCJDb3VsZG4ndCB3cml0 ZSBkZWJ1ZyByZWdpc3RlciIpOworfQorCisvKiBVcGRhdGUgdGhlIGluZmVy aW9yJ3MgZGVidWcgcmVnaXN0ZXIgUkVHTlVNIGZyb20gU1RBVEUuICAqLwor Cit2b2lkCitpMzg2X2RyX2xvd19zZXRfYWRkciAoY29uc3Qgc3RydWN0IGkz ODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwgaW50IHJlZ251bSkKK3sKKyAg c3RydWN0IGluZmVyaW9yX2xpc3RfZW50cnkgKmxwOworICBDT1JFX0FERFIg YWRkcjsKKworICBpZiAoISAocmVnbnVtID49IDAgJiYgcmVnbnVtIDw9IERS X0xBU1RBRERSIC0gRFJfRklSU1RBRERSKSkKKyAgICBmYXRhbCAoIkludmFs aWQgZGVidWcgcmVnaXN0ZXIgJWQiLCByZWdudW0pOworCisgIGFkZHIgPSBz dGF0ZS0+ZHJfbWlycm9yW3JlZ251bV07CisKKyAgLyogPz8/IFdpbGwgbmVl ZCB0d2Vha2luZyBmb3IgbXVsdGktcHJvY2Vzcy4gICovCisgIGZvciAobHAg PSBhbGxfbHdwcy5oZWFkOyBscDsgbHAgPSBscC0+bmV4dCkKKyAgICB7Cisg ICAgICBzdHJ1Y3QgbHdwX2luZm8gKmx3cCA9IChzdHJ1Y3QgbHdwX2luZm8g KikgbHA7CisKKyAgICAgIC8qIFRoZSBhY3R1YWwgdXBkYXRlIGlzIGRvbmUg bGF0ZXIsIHdlIGp1c3QgbWFyayB0aGF0IHRoZSByZWdpc3RlcgorCSBuZWVk cyB1cGRhdGluZy4gICovCisgICAgICBsd3AtPmFyY2hfcHJpdmF0ZS0+ZGVi dWdfcmVnaXN0ZXJzX2NoYW5nZWQgPSAxOworICAgIH0KK30KKworLyogVXBk YXRlIHRoZSBpbmZlcmlvcidzIERSNyBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVy IGZyb20gU1RBVEUuICAqLworCit2b2lkCitpMzg2X2RyX2xvd19zZXRfY29u dHJvbCAoY29uc3Qgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0 ZSkKK3sKKyAgc3RydWN0IGluZmVyaW9yX2xpc3RfZW50cnkgKmxwOworCisg IC8qID8/PyBXaWxsIG5lZWQgdHdlYWtpbmcgZm9yIG11bHRpLXByb2Nlc3Mu ICAqLworICBmb3IgKGxwID0gYWxsX2x3cHMuaGVhZDsgbHA7IGxwID0gbHAt Pm5leHQpCisgICAgeworICAgICAgc3RydWN0IGx3cF9pbmZvICpsd3AgPSAo c3RydWN0IGx3cF9pbmZvICopIGxwOworCisgICAgICAvKiBUaGUgYWN0dWFs IHVwZGF0ZSBpcyBkb25lIGxhdGVyLCB3ZSBqdXN0IG1hcmsgdGhhdCB0aGUg cmVnaXN0ZXIKKwkgbmVlZHMgdXBkYXRpbmcuICAqLworICAgICAgbHdwLT5h cmNoX3ByaXZhdGUtPmRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkID0gMTsKKyAg ICB9Cit9CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIERSNiBkZWJ1ZyBz dGF0dXMgcmVnaXN0ZXIgZnJvbSB0aGUgaW5mZXJpb3IKKyAgIGFuZCByZWNv cmQgaXQgaW4gU1RBVEUuICAqLworCit2b2lkCitpMzg2X2RyX2xvd19nZXRf c3RhdHVzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQor eworICBzdHJ1Y3QgbHdwX2luZm8gKmx3cCA9IGdldF90aHJlYWRfbHdwIChj dXJyZW50X2luZmVyaW9yKTsKKyAgcHRpZF90IHB0aWQgPSBwdGlkX29mIChs d3ApOworCisgIHN0YXRlLT5kcl9zdGF0dXNfbWlycm9yID0geDg2X2xpbnV4 X2RyX2dldCAocHRpZCwgRFJfU1RBVFVTKTsKK30KKwwKKy8qIFdhdGNocG9p bnQgc3VwcG9ydC4gICovCisKK3N0YXRpYyBpbnQKK3g4Nl9pbnNlcnRfd2F0 Y2hwb2ludCAoY2hhciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbikK K3sKKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGN1cnJlbnRfcHJv Y2VzcyAoKTsKKyAgcmV0dXJuIGkzODZfbG93X2luc2VydF93YXRjaHBvaW50 ICgmcHJvYy0+cHJpdmF0ZS0+YXJjaF9wcml2YXRlLT5kZWJ1Z19yZWdfc3Rh dGUsCisJCQkJICAgICB0eXBlLCBhZGRyLCBsZW4pOworfQorCitzdGF0aWMg aW50Cit4ODZfcmVtb3ZlX3dhdGNocG9pbnQgKGNoYXIgdHlwZSwgQ09SRV9B RERSIGFkZHIsIGludCBsZW4pCit7CisgIHN0cnVjdCBwcm9jZXNzX2luZm8g KnByb2MgPSBjdXJyZW50X3Byb2Nlc3MgKCk7CisgIHJldHVybiBpMzg2X2xv d19yZW1vdmVfd2F0Y2hwb2ludCAoJnByb2MtPnByaXZhdGUtPmFyY2hfcHJp dmF0ZS0+ZGVidWdfcmVnX3N0YXRlLAorCQkJCSAgICAgdHlwZSwgYWRkciwg bGVuKTsKK30KKworc3RhdGljIGludAoreDg2X3N0b3BwZWRfYnlfd2F0Y2hw b2ludCAodm9pZCkKK3sKKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9 IGN1cnJlbnRfcHJvY2VzcyAoKTsKKyAgcmV0dXJuIGkzODZfbG93X3N0b3Bw ZWRfYnlfd2F0Y2hwb2ludCAoJnByb2MtPnByaXZhdGUtPmFyY2hfcHJpdmF0 ZS0+ZGVidWdfcmVnX3N0YXRlKTsKK30KKworc3RhdGljIENPUkVfQUREUgor eDg2X3N0b3BwZWRfZGF0YV9hZGRyZXNzICh2b2lkKQoreworICBzdHJ1Y3Qg cHJvY2Vzc19pbmZvICpwcm9jID0gY3VycmVudF9wcm9jZXNzICgpOworICBD T1JFX0FERFIgYWRkcjsKKyAgaWYgKGkzODZfbG93X3N0b3BwZWRfZGF0YV9h ZGRyZXNzICgmcHJvYy0+cHJpdmF0ZS0+YXJjaF9wcml2YXRlLT5kZWJ1Z19y ZWdfc3RhdGUsCisJCQkJICAgICAmYWRkcikpCisgICAgcmV0dXJuIGFkZHI7 CisgIHJldHVybiAwOyAvKiA/Pz8gZmF0YWw/ICAqLworfQorDAorLyogQ2Fs bGVkIHdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLiAgKi8KKworc3Rh dGljIHN0cnVjdCBhcmNoX3Byb2Nlc3NfaW5mbyAqCit4ODZfbGludXhfbmV3 X3Byb2Nlc3MgKHZvaWQpCit7CisgIHN0cnVjdCBhcmNoX3Byb2Nlc3NfaW5m byAqaW5mbyA9IHhjYWxsb2MgKDEsIHNpemVvZiAoKmluZm8pKTsKKworICBp Mzg2X2xvd19pbml0X2RyZWdzICgmaW5mby0+ZGVidWdfcmVnX3N0YXRlKTsK KworICByZXR1cm4gaW5mbzsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBuZXcg dGhyZWFkIGlzIGRldGVjdGVkLiAgKi8KKworc3RhdGljIHN0cnVjdCBhcmNo X2x3cF9pbmZvICoKK3g4Nl9saW51eF9uZXdfdGhyZWFkICh2b2lkKQorewor ICBzdHJ1Y3QgYXJjaF9sd3BfaW5mbyAqaW5mbyA9IHhjYWxsb2MgKDEsIHNp emVvZiAoKmluZm8pKTsKKworICBpbmZvLT5kZWJ1Z19yZWdpc3RlcnNfY2hh bmdlZCA9IDE7CisKKyAgcmV0dXJuIGluZm87Cit9CisKKy8qIENhbGxlZCB3 aGVuIHJlc3VtaW5nIGEgdGhyZWFkLgorICAgSWYgdGhlIGRlYnVnIHJlZ3Mg aGF2ZSBjaGFuZ2VkLCB1cGRhdGUgdGhlIHRocmVhZCdzIGNvcGllcy4gICov CisKK3N0YXRpYyB2b2lkCit4ODZfbGludXhfcHJlcGFyZV90b19yZXN1bWUg KHN0cnVjdCBsd3BfaW5mbyAqbHdwKQoreworICBpZiAobHdwLT5hcmNoX3By aXZhdGUtPmRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkKQorICAgIHsKKyAgICAg IGludCBpOworICAgICAgcHRpZF90IHB0aWQgPSBwdGlkX29mIChsd3ApOwor ICAgICAgaW50IHBpZCA9IHB0aWRfZ2V0X3BpZCAocHRpZCk7CisgICAgICBz dHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9jID0gZmluZF9wcm9jZXNzX3BpZCAo cGlkKTsKKyAgICAgIHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3Rh dGUgPSAmcHJvYy0+cHJpdmF0ZS0+YXJjaF9wcml2YXRlLT5kZWJ1Z19yZWdf c3RhdGU7CisKKyAgICAgIGZvciAoaSA9IERSX0ZJUlNUQUREUjsgaSA8PSBE Ul9MQVNUQUREUjsgaSsrKQorCXg4Nl9saW51eF9kcl9zZXQgKHB0aWQsIGks IHN0YXRlLT5kcl9taXJyb3JbaV0pOworCisgICAgICB4ODZfbGludXhfZHJf c2V0IChwdGlkLCBEUl9DT05UUk9MLCBzdGF0ZS0+ZHJfY29udHJvbF9taXJy b3IpOworCisgICAgICBsd3AtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnaXN0 ZXJzX2NoYW5nZWQgPSAwOworICAgIH0KK30KKwwKIC8qIFdoZW4gR0RCU0VS VkVSIGlzIGJ1aWx0IGFzIGEgNjQtYml0IGFwcGxpY2F0aW9uIG9uIGxpbnV4 LCB0aGUKICAgIFBUUkFDRV9HRVRTSUdJTkZPIGRhdGEgaXMgYWx3YXlzIHBy ZXNlbnRlZCBpbiA2NC1iaXQgbGF5b3V0LiAgU2luY2UKICAgIGRlYnVnZ2lu ZyBhIDMyLWJpdCBpbmZlcmlvciB3aXRoIGEgNjQtYml0IEdEQlNFUlZFUiBz aG91bGQgbG9vayB0aGUgc2FtZQpAQCAtNjMwLDEwICs4MTcsMTAgQEAgc3Ry dWN0IGxpbnV4X3RhcmdldF9vcHMgdGhlX2xvd190YXJnZXQgPQogICBOVUxM LAogICAxLAogICB4ODZfYnJlYWtwb2ludF9hdCwKLSAgTlVMTCwKLSAgTlVM TCwKLSAgTlVMTCwKLSAgTlVMTCwKKyAgeDg2X2luc2VydF93YXRjaHBvaW50 LAorICB4ODZfcmVtb3ZlX3dhdGNocG9pbnQsCisgIHg4Nl9zdG9wcGVkX2J5 X3dhdGNocG9pbnQsCisgIHg4Nl9zdG9wcGVkX2RhdGFfYWRkcmVzcywKICAg LyogY29sbGVjdF9wdHJhY2VfcmVnaXN0ZXIvc3VwcGx5X3B0cmFjZV9yZWdp c3RlciBhcmUgbm90IG5lZWRlZCBpbiB0aGUKICAgICAgbmF0aXZlIGkzODYg Y2FzZSAobm8gcmVnaXN0ZXJzIHNtYWxsZXIgdGhhbiBhbiB4ZmVyIHVuaXQp LCBhbmQgYXJlIG5vdAogICAgICB1c2VkIGluIHRoZSBiaWFyY2ggY2FzZSAo SEFWRV9MSU5VWF9VU1JSRUdTIGlzIG5vdCBkZWZpbmVkKS4gICovCkBAIC02 NDEsNCArODI4LDcgQEAgc3RydWN0IGxpbnV4X3RhcmdldF9vcHMgdGhlX2xv d190YXJnZXQgPQogICBOVUxMLAogICAvKiBuZWVkIHRvIGZpeCB1cCBpMzg2 IHNpZ2luZm8gaWYgaG9zdCBpcyBhbWQ2NCAqLwogICB4ODZfc2lnaW5mb19m aXh1cCwKKyAgeDg2X2xpbnV4X25ld19wcm9jZXNzLAorICB4ODZfbGludXhf bmV3X3RocmVhZCwKKyAgeDg2X2xpbnV4X3ByZXBhcmVfdG9fcmVzdW1lCiB9 OwpJbmRleDogc2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuOTgKZGlmZiAtdSAtcCAtcjEuOTggc2Vy dmVyLmMKLS0tIHNlcnZlci5jCTE5IEp1biAyMDA5IDEzOjM1OjM1IC0wMDAw CTEuOTgKKysrIHNlcnZlci5jCTIzIEp1biAyMDA5IDA2OjM1OjQ1IC0wMDAw CkBAIC01MSw2ICs1MSw5IEBAIHN0YXRpYyBjaGFyICoqcHJvZ3JhbV9hcmd2 LCAqKndyYXBwZXJfYXIKICAgIHdhcyBvcmlnaW5hbGx5IHVzZWQgdG8gZGVi dWcgTGludXhUaHJlYWRzIHN1cHBvcnQuICAqLwogaW50IGRlYnVnX3RocmVh ZHM7CiAKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgb2YgaC93IGJyZWFrcG9pbnQv d2F0Y2hwb2ludCBzdXBwb3J0LiAgKi8KK2ludCBkZWJ1Z19od19wb2ludHM7 CisKIGludCBwYXNzX3NpZ25hbHNbVEFSR0VUX1NJR05BTF9MQVNUXTsKIAog am1wX2J1ZiB0b3BsZXZlbDsKQEAgLTQ5NSw2ICs0OTgsOCBAQCBtb25pdG9y X3Nob3dfaGVscCAodm9pZCkKICAgbW9uaXRvcl9vdXRwdXQgKCJUaGUgZm9s bG93aW5nIG1vbml0b3IgY29tbWFuZHMgYXJlIHN1cHBvcnRlZDpcbiIpOwog ICBtb25pdG9yX291dHB1dCAoIiAgc2V0IGRlYnVnIDwwfDE+XG4iKTsKICAg bW9uaXRvcl9vdXRwdXQgKCIgICAgRW5hYmxlIGdlbmVyYWwgZGVidWdnaW5n IG1lc3NhZ2VzXG4iKTsKKyAgbW9uaXRvcl9vdXRwdXQgKCIgIHNldCBkZWJ1 Zy1ody1wb2ludHMgPDB8MT5cbiIpOworICBtb25pdG9yX291dHB1dCAoIiAg ICBFbmFibGUgaC93IGJyZWFrcG9pbnQvd2F0Y2hwb2ludCBkZWJ1Z2dpbmcg bWVzc2FnZXNcbiIpOwogICBtb25pdG9yX291dHB1dCAoIiAgc2V0IHJlbW90 ZS1kZWJ1ZyA8MHwxPlxuIik7CiAgIG1vbml0b3Jfb3V0cHV0ICgiICAgIEVu YWJsZSByZW1vdGUgcHJvdG9jb2wgZGVidWdnaW5nIG1lc3NhZ2VzXG4iKTsK ICAgbW9uaXRvcl9vdXRwdXQgKCIgIGV4aXRcbiIpOwpAQCAtMTIxNiw2ICsx MjIxLDE2IEBAIGhhbmRsZV9xdWVyeSAoY2hhciAqb3duX2J1ZiwgaW50IHBh Y2tldF8KIAkgIGRlYnVnX3RocmVhZHMgPSAwOwogCSAgbW9uaXRvcl9vdXRw dXQgKCJEZWJ1ZyBvdXRwdXQgZGlzYWJsZWQuXG4iKTsKIAl9CisgICAgICBl bHNlIGlmIChzdHJjbXAgKG1vbiwgInNldCBkZWJ1Zy1ody1wb2ludHMgMSIp ID09IDApCisJeworCSAgZGVidWdfaHdfcG9pbnRzID0gMTsKKwkgIG1vbml0 b3Jfb3V0cHV0ICgiSC9XIHBvaW50IGRlYnVnZ2luZyBvdXRwdXQgZW5hYmxl ZC5cbiIpOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0 IGRlYnVnLWh3LXBvaW50cyAwIikgPT0gMCkKKwl7CisJICBkZWJ1Z19od19w b2ludHMgPSAwOworCSAgbW9uaXRvcl9vdXRwdXQgKCJIL1cgcG9pbnQgZGVi dWdnaW5nIG91dHB1dCBkaXNhYmxlZC5cbiIpOworCX0KICAgICAgIGVsc2Ug aWYgKHN0cmNtcCAobW9uLCAic2V0IHJlbW90ZS1kZWJ1ZyAxIikgPT0gMCkK IAl7CiAJICByZW1vdGVfZGVidWcgPSAxOwpJbmRleDogc2VydmVyLmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9nZGJzZXJ2ZXIvc2VydmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NTgKZGlmZiAtdSAtcCAtcjEuNTggc2VydmVyLmgKLS0tIHNlcnZlci5oCTI0 IE1heSAyMDA5IDIxOjA2OjUzIC0wMDAwCTEuNTgKKysrIHNlcnZlci5oCTIz IEp1biAyMDA5IDA2OjM1OjQ1IC0wMDAwCkBAIC0yNzEsNiArMjcxLDcgQEAg ZXh0ZXJuIHB0aWRfdCBzdGVwX3RocmVhZDsKIAogZXh0ZXJuIGludCBzZXJ2 ZXJfd2FpdGluZzsKIGV4dGVybiBpbnQgZGVidWdfdGhyZWFkczsKK2V4dGVy biBpbnQgZGVidWdfaHdfcG9pbnRzOwogZXh0ZXJuIGludCBwYXNzX3NpZ25h bHNbXTsKIAogZXh0ZXJuIGptcF9idWYgdG9wbGV2ZWw7CkBAIC00MDcsNiAr NDA4LDcgQEAgdm9pZCBwZXJyb3Jfd2l0aF9uYW1lIChjb25zdCBjaGFyICpz dHJpbgogdm9pZCBlcnJvciAoY29uc3QgY2hhciAqc3RyaW5nLC4uLikgQVRU Ul9OT1JFVFVSTiBBVFRSX0ZPUk1BVCAocHJpbnRmLCAxLCAyKTsKIHZvaWQg ZmF0YWwgKGNvbnN0IGNoYXIgKnN0cmluZywuLi4pIEFUVFJfTk9SRVRVUk4g QVRUUl9GT1JNQVQgKHByaW50ZiwgMSwgMik7CiB2b2lkIHdhcm5pbmcgKGNv bnN0IGNoYXIgKnN0cmluZywuLi4pIEFUVFJfRk9STUFUIChwcmludGYsIDEs IDIpOworY2hhciAqcGFkZHIgKENPUkVfQUREUiBhZGRyKTsKIAogLyogTWF4 aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC93cml0ZSBhdCBvbmNlLiAg VGhlIHZhbHVlIGhlcmUKICAgIGlzIGNob3NlbiB0byBmaWxsIHVwIGEgcGFj a2V0ICh0aGUgaGVhZGVycyBhY2NvdW50IGZvciB0aGUgMzIpLiAgKi8KSW5k ZXg6IHV0aWxzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvdXRpbHMuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCB1dGlscy5jCi0t LSB1dGlscy5jCTE5IEphbiAyMDA5IDAwOjE2OjQ2IC0wMDAwCTEuMTgKKysr IHV0aWxzLmMJMjMgSnVuIDIwMDkgMDY6MzU6NDUgLTAwMDAKQEAgLTE3MCwz ICsxNzAsMzcgQEAgd2FybmluZyAoY29uc3QgY2hhciAqc3RyaW5nLC4uLikK ICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKICAgdmFfZW5kIChhcmdzKTsK IH0KKworLyogVGVtcG9yYXJ5IHN0b3JhZ2UgdXNpbmcgY2lyY3VsYXIgYnVm ZmVyLiAgKi8KKyNkZWZpbmUgTlVNQ0VMTFMgNAorI2RlZmluZSBDRUxMU0la RSA1MAorc3RhdGljIGNoYXIgKgorZ2V0X2NlbGwgKHZvaWQpCit7CisgIHN0 YXRpYyBjaGFyIGJ1ZltOVU1DRUxMU11bQ0VMTFNJWkVdOworICBzdGF0aWMg aW50IGNlbGwgPSAwOworICBpZiAoKytjZWxsID49IE5VTUNFTExTKQorICAg IGNlbGwgPSAwOworICByZXR1cm4gYnVmW2NlbGxdOworfQorCitzdGF0aWMg aW50Cit4c25wcmludGYgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGlu dCByZXQ7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9 IHZzbnByaW50ZiAoc3RyLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2YV9l bmQgKGFyZ3MpOworCisgIHJldHVybiByZXQ7Cit9CisKK2NoYXIgKgorcGFk ZHIgKENPUkVfQUREUiBhZGRyKQoreworICBjaGFyICpzdHIgPSBnZXRfY2Vs bCAoKTsKKyAgeHNucHJpbnRmIChzdHIsIENFTExTSVpFLCAiJWx4IiwgKGxv bmcpIGFkZHIpOworICByZXR1cm4gc3RyOworfQpJbmRleDogd2luMzItYXJt LWxvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy9nZGIvZ2Ric2VydmVyL3dpbjMyLWFybS1sb3cuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjggd2luMzItYXJt LWxvdy5jCi0tLSB3aW4zMi1hcm0tbG93LmMJMyBKYW4gMjAwOSAwNTo1Nzo1 NyAtMDAwMAkxLjgKKysrIHdpbjMyLWFybS1sb3cuYwkyMyBKdW4gMjAwOSAw NjozNTo0NSAtMDAwMApAQCAtMTIyLDQgKzEyMiw5IEBAIHN0cnVjdCB3aW4z Ml90YXJnZXRfb3BzIHRoZV9sb3dfdGFyZ2V0ID0KICAgTlVMTCwgLyogc2lu Z2xlX3N0ZXAgKi8KICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgJmFybV93 aW5jZV9icmVha3BvaW50LAogICBhcm1fd2luY2VfYnJlYWtwb2ludF9sZW4s CisgIC8qIFdhdGNocG9pbnQgcmVsYXRlZCBmdW5jdGlvbnMuICBTZWUgdGFy Z2V0LmggZm9yIGNvbW1lbnRzLiAgKi8KKyAgTlVMTCwgLyogaW5zZXJ0X3dh dGNocG9pbnQgKi8KKyAgTlVMTCwgLyogcmVtb3ZlX3dhdGNocG9pbnQgKi8K KyAgTlVMTCwgLyogc3RvcHBlZF9ieV93YXRjaHBvaW50ICovCisgIE5VTEwg IC8qIHN0b3BwZWRfZGF0YV9hZGRyZXNzICovCiB9OwpJbmRleDogd2luMzIt aTM4Ni1sb3cuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci93aW4zMi1pMzg2LWxvdy5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXUgLXAgLXIxLjE0IHdp bjMyLWkzODYtbG93LmMKLS0tIHdpbjMyLWkzODYtbG93LmMJMyBKYW4gMjAw OSAwNTo1Nzo1NyAtMDAwMAkxLjE0CisrKyB3aW4zMi1pMzg2LWxvdy5jCTIz IEp1biAyMDA5IDA2OjM1OjQ1IC0wMDAwCkBAIC0xNyw2ICsxNyw3IEBACiAK ICNpbmNsdWRlICJzZXJ2ZXIuaCIKICNpbmNsdWRlICJ3aW4zMi1sb3cuaCIK KyNpbmNsdWRlICJpMzg2LWxvdy5oIgogCiAjZGVmaW5lIEZDU19SRUdOVU0g MjcKICNkZWZpbmUgRk9QX1JFR05VTSAzMQpAQCAtMjYsMTUgKzI3LDgzIEBA CiAvKiBEZWZpbmVkIGluIGF1dG8tZ2VuZXJhdGVkIGZpbGUgcmVnLWkzODYu Yy4gICovCiB2b2lkIGluaXRfcmVnaXN0ZXJzX2kzODYgKHZvaWQpOwogCi1z dGF0aWMgdW5zaWduZWQgZHJbOF07CitzdGF0aWMgc3RydWN0IGkzODZfZGVi dWdfcmVnX3N0YXRlIGRlYnVnX3JlZ19zdGF0ZTsKIAogc3RhdGljIGludCBk ZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZCA9IDA7CiBzdGF0aWMgaW50IGRlYnVn X3JlZ2lzdGVyc191c2VkID0gMDsKIAorLyogVXBkYXRlIHRoZSBpbmZlcmlv cidzIGRlYnVnIHJlZ2lzdGVyIFJFR05VTSBmcm9tIFNUQVRFLiAgKi8KKwor dm9pZAoraTM4Nl9kcl9sb3dfc2V0X2FkZHIgKGNvbnN0IHN0cnVjdCBpMzg2 X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsIGludCByZWdudW0pCit7CisgIGlm ICghIChyZWdudW0gPj0gMCAmJiByZWdudW0gPD0gRFJfTEFTVEFERFIgLSBE Ul9GSVJTVEFERFIpKQorICAgIGZhdGFsICgiSW52YWxpZCBkZWJ1ZyByZWdp c3RlciAlZCIsIHJlZ251bSk7CisKKyAgLyogZGVidWdfcmVnX3N0YXRlLmRy X21pcnJvciBpcyBhbHJlYWR5IHNldC4KKyAgICAgSnVzdCBub3RpZnkgaTM4 Nl9zZXRfdGhyZWFkX2NvbnRleHQsIGkzODZfdGhyZWFkX2FkZGVkCisgICAg IHRoYXQgdGhlIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHVwZGF0ZWQuICAqLwor ICBkZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZCA9IDE7CisgIGRlYnVnX3JlZ2lz dGVyc191c2VkID0gMTsKK30KKworLyogVXBkYXRlIHRoZSBpbmZlcmlvcidz IERSNyBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIGZyb20gU1RBVEUuICAqLwor Cit2b2lkCitpMzg2X2RyX2xvd19zZXRfY29udHJvbCAoY29uc3Qgc3RydWN0 IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSkKK3sKKyAgLyogZGVidWdf cmVnX3N0YXRlLmRyX2NvbnRyb2xfbWlycm9yIGlzIGFscmVhZHkgc2V0Lgor ICAgICBKdXN0IG5vdGlmeSBpMzg2X3NldF90aHJlYWRfY29udGV4dCwgaTM4 Nl90aHJlYWRfYWRkZWQKKyAgICAgdGhhdCB0aGUgcmVnaXN0ZXJzIG5lZWQg dG8gYmUgdXBkYXRlZC4gICovCisgIGRlYnVnX3JlZ2lzdGVyc19jaGFuZ2Vk ID0gMTsKKyAgZGVidWdfcmVnaXN0ZXJzX3VzZWQgPSAxOworfQorCisvKiBH ZXQgdGhlIHZhbHVlIG9mIHRoZSBEUjYgZGVidWcgc3RhdHVzIHJlZ2lzdGVy IGZyb20gdGhlIGluZmVyaW9yCisgICBhbmQgcmVjb3JkIGl0IGluIFNUQVRF LiAgKi8KKwordm9pZAoraTM4Nl9kcl9sb3dfZ2V0X3N0YXR1cyAoc3RydWN0 IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSkKK3sKKyAgLyogV2UgZG9u J3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLCB0aGUgbGFzdCBjYWxsIHRv IHRocmVhZF9yZWMgZm9yCisgICAgIGN1cnJlbnRfZXZlbnQuZHdUaHJlYWRJ ZCBpZCBoYXMgYWxyZWFkeSBzZXQgaXQuICAqLworfQorCisvKiBXYXRjaHBv aW50IHN1cHBvcnQuICAqLworCitzdGF0aWMgaW50CitpMzg2X2luc2VydF93 YXRjaHBvaW50IChjaGFyIHR5cGUsIENPUkVfQUREUiBhZGRyLCBpbnQgbGVu KQoreworICByZXR1cm4gaTM4Nl9sb3dfaW5zZXJ0X3dhdGNocG9pbnQgKCZk ZWJ1Z19yZWdfc3RhdGUsCisJCQkJICAgICB0eXBlLCBhZGRyLCBsZW4pOwor fQorCitzdGF0aWMgaW50CitpMzg2X3JlbW92ZV93YXRjaHBvaW50IChjaGFy IHR5cGUsIENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKQoreworICByZXR1cm4g aTM4Nl9sb3dfcmVtb3ZlX3dhdGNocG9pbnQgKCZkZWJ1Z19yZWdfc3RhdGUs CisJCQkJICAgICB0eXBlLCBhZGRyLCBsZW4pOworfQorCitzdGF0aWMgaW50 CitpMzg2X3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAodm9pZCkKK3sKKyAgcmV0 dXJuIGkzODZfbG93X3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAoJmRlYnVnX3Jl Z19zdGF0ZSk7Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK2kzODZfc3RvcHBl ZF9kYXRhX2FkZHJlc3MgKHZvaWQpCit7CisgIENPUkVfQUREUiBhZGRyOwor ICBpZiAoaTM4Nl9sb3dfc3RvcHBlZF9kYXRhX2FkZHJlc3MgKCZkZWJ1Z19y ZWdfc3RhdGUsICZhZGRyKSkKKyAgICByZXR1cm4gYWRkcjsKKyAgcmV0dXJu IDA7IC8qID8/PyBmYXRhbD8gICovCit9CisKIHN0YXRpYyB2b2lkCiBpMzg2 X2luaXRpYWxfc3R1ZmYgKHZvaWQpCiB7Ci0gIG1lbXNldCAoJmRyLCAwLCBz aXplb2YgKGRyKSk7CisgIGkzODZfbG93X2luaXRfZHJlZ3MgKCZkZWJ1Z19y ZWdfc3RhdGUpOwogICBkZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZCA9IDA7CiAg IGRlYnVnX3JlZ2lzdGVyc191c2VkID0gMDsKIH0KQEAgLTU1LDEyICsxMjQs MTMgQEAgaTM4Nl9nZXRfdGhyZWFkX2NvbnRleHQgKHdpbjMyX3RocmVhZF9p bgogICBpZiAodGgtPnRpZCA9PSBjdXJyZW50X2V2ZW50LT5kd1RocmVhZElk KQogICAgIHsKICAgICAgIC8qIENvcHkgZHIgdmFsdWVzIGZyb20gdGhlIGN1 cnJlbnQgdGhyZWFkLiAgKi8KLSAgICAgIGRyWzBdID0gdGgtPmNvbnRleHQu RHIwOwotICAgICAgZHJbMV0gPSB0aC0+Y29udGV4dC5EcjE7Ci0gICAgICBk clsyXSA9IHRoLT5jb250ZXh0LkRyMjsKLSAgICAgIGRyWzNdID0gdGgtPmNv bnRleHQuRHIzOwotICAgICAgZHJbNl0gPSB0aC0+Y29udGV4dC5EcjY7Ci0g ICAgICBkcls3XSA9IHRoLT5jb250ZXh0LkRyNzsKKyAgICAgIHN0cnVjdCBp Mzg2X2RlYnVnX3JlZ19zdGF0ZSAqZHIgPSAmZGVidWdfcmVnX3N0YXRlOwor ICAgICAgZHItPmRyX21pcnJvclswXSA9IHRoLT5jb250ZXh0LkRyMDsKKyAg ICAgIGRyLT5kcl9taXJyb3JbMV0gPSB0aC0+Y29udGV4dC5EcjE7CisgICAg ICBkci0+ZHJfbWlycm9yWzJdID0gdGgtPmNvbnRleHQuRHIyOworICAgICAg ZHItPmRyX21pcnJvclszXSA9IHRoLT5jb250ZXh0LkRyMzsKKyAgICAgIGRy LT5kcl9zdGF0dXNfbWlycm9yID0gdGgtPmNvbnRleHQuRHI2OworICAgICAg ZHItPmRyX2NvbnRyb2xfbWlycm9yID0gdGgtPmNvbnRleHQuRHI3OwogICAg IH0KIH0KIApAQCAtNjksMTMgKzEzOSwxNCBAQCBpMzg2X3NldF90aHJlYWRf Y29udGV4dCAod2luMzJfdGhyZWFkX2luCiB7CiAgIGlmIChkZWJ1Z19yZWdp c3RlcnNfY2hhbmdlZCkKICAgICB7Ci0gICAgICB0aC0+Y29udGV4dC5EcjAg PSBkclswXTsKLSAgICAgIHRoLT5jb250ZXh0LkRyMSA9IGRyWzFdOwotICAg ICAgdGgtPmNvbnRleHQuRHIyID0gZHJbMl07Ci0gICAgICB0aC0+Y29udGV4 dC5EcjMgPSBkclszXTsKLSAgICAgIC8qIHRoLT5jb250ZXh0LkRyNiA9IGRy WzZdOworICAgICAgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpkciA9 ICZkZWJ1Z19yZWdfc3RhdGU7CisgICAgICB0aC0+Y29udGV4dC5EcjAgPSBk ci0+ZHJfbWlycm9yWzBdOworICAgICAgdGgtPmNvbnRleHQuRHIxID0gZHIt PmRyX21pcnJvclsxXTsKKyAgICAgIHRoLT5jb250ZXh0LkRyMiA9IGRyLT5k cl9taXJyb3JbMl07CisgICAgICB0aC0+Y29udGV4dC5EcjMgPSBkci0+ZHJf bWlycm9yWzNdOworICAgICAgLyogdGgtPmNvbnRleHQuRHI2ID0gZHItPmRy X3N0YXR1c19taXJyb3I7CiAJIEZJWE1FOiBzaG91bGQgd2Ugc2V0IGRyNiBh bHNvID8/ICovCi0gICAgICB0aC0+Y29udGV4dC5EcjcgPSBkcls3XTsKKyAg ICAgIHRoLT5jb250ZXh0LkRyNyA9IGRyLT5kcl9jb250cm9sX21pcnJvcjsK ICAgICB9CiAKICAgU2V0VGhyZWFkQ29udGV4dCAodGgtPmgsICZ0aC0+Y29u dGV4dCk7CkBAIC04NywxNiArMTU4LDE3IEBAIGkzODZfdGhyZWFkX2FkZGVk ICh3aW4zMl90aHJlYWRfaW5mbyAqdGgKICAgLyogU2V0IHRoZSBkZWJ1ZyBy ZWdpc3RlcnMgZm9yIHRoZSBuZXcgdGhyZWFkIGlmIHRoZXkgYXJlIHVzZWQu ICAqLwogICBpZiAoZGVidWdfcmVnaXN0ZXJzX3VzZWQpCiAgICAgeworICAg ICAgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpkciA9ICZkZWJ1Z19y ZWdfc3RhdGU7CiAgICAgICB0aC0+Y29udGV4dC5Db250ZXh0RmxhZ3MgPSBD T05URVhUX0RFQlVHX1JFR0lTVEVSUzsKICAgICAgIEdldFRocmVhZENvbnRl eHQgKHRoLT5oLCAmdGgtPmNvbnRleHQpOwogCi0gICAgICB0aC0+Y29udGV4 dC5EcjAgPSBkclswXTsKLSAgICAgIHRoLT5jb250ZXh0LkRyMSA9IGRyWzFd OwotICAgICAgdGgtPmNvbnRleHQuRHIyID0gZHJbMl07Ci0gICAgICB0aC0+ Y29udGV4dC5EcjMgPSBkclszXTsKLSAgICAgIC8qIHRoLT5jb250ZXh0LkRy NiA9IGRyWzZdOworICAgICAgdGgtPmNvbnRleHQuRHIwID0gZHItPmRyX21p cnJvclswXTsKKyAgICAgIHRoLT5jb250ZXh0LkRyMSA9IGRyLT5kcl9taXJy b3JbMV07CisgICAgICB0aC0+Y29udGV4dC5EcjIgPSBkci0+ZHJfbWlycm9y WzJdOworICAgICAgdGgtPmNvbnRleHQuRHIzID0gZHItPmRyX21pcnJvclsz XTsKKyAgICAgIC8qIHRoLT5jb250ZXh0LkRyNiA9IGRyLT5kcl9zdGF0dXNf bWlycm9yOwogCSBGSVhNRTogc2hvdWxkIHdlIHNldCBkcjYgYWxzbyA/PyAq LwotICAgICAgdGgtPmNvbnRleHQuRHI3ID0gZHJbN107CisgICAgICB0aC0+ Y29udGV4dC5EcjcgPSBkci0+ZHJfY29udHJvbF9taXJyb3I7CiAKICAgICAg IFNldFRocmVhZENvbnRleHQgKHRoLT5oLCAmdGgtPmNvbnRleHQpOwogICAg ICAgdGgtPmNvbnRleHQuQ29udGV4dEZsYWdzID0gMDsKQEAgLTIwNSw0ICsy NzcsOCBAQCBzdHJ1Y3Qgd2luMzJfdGFyZ2V0X29wcyB0aGVfbG93X3Rhcmdl dCA9CiAgIGkzODZfc2luZ2xlX3N0ZXAsCiAgIE5VTEwsIC8qIGJyZWFrcG9p bnQgKi8KICAgMCwgLyogYnJlYWtwb2ludF9sZW4gKi8KKyAgaTM4Nl9pbnNl cnRfd2F0Y2hwb2ludCwKKyAgaTM4Nl9yZW1vdmVfd2F0Y2hwb2ludCwKKyAg aTM4Nl9zdG9wcGVkX2J5X3dhdGNocG9pbnQsCisgIGkzODZfc3RvcHBlZF9k YXRhX2FkZHJlc3MKIH07CkluZGV4OiB3aW4zMi1sb3cuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNl cnZlci93aW4zMi1sb3cuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpk aWZmIC11IC1wIC1yMS4zNiB3aW4zMi1sb3cuYwotLS0gd2luMzItbG93LmMJ MjIgSnVuIDIwMDkgMTk6MzM6NDEgLTAwMDAJMS4zNgorKysgd2luMzItbG93 LmMJMjMgSnVuIDIwMDkgMDY6MzU6NDUgLTAwMDAKQEAgLTIyOCw2ICsyMjgs NDggQEAgY2hpbGRfZGVsZXRlX3RocmVhZCAoRFdPUkQgcGlkLCBEV09SRCB0 aQogICBkZWxldGVfdGhyZWFkX2luZm8gKHRocmVhZCk7CiB9CiAKKy8qIFRo ZXNlIHdhdGNocG9pbnQgcmVsYXRlZCB3cmFwcGVyIGZ1bmN0aW9ucyBzaW1w bHkgcGFzcyBvbiB0aGUgZnVuY3Rpb24gY2FsbAorICAgaWYgdGhlIHRhcmdl dCBoYXMgcmVnaXN0ZXJlZCBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24uICAq LworCitzdGF0aWMgaW50Cit3aW4zMl9pbnNlcnRfd2F0Y2hwb2ludCAoY2hh ciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgaWYgKHRo ZV9sb3dfdGFyZ2V0Lmluc2VydF93YXRjaHBvaW50ICE9IE5VTEwpCisgICAg cmV0dXJuIHRoZV9sb3dfdGFyZ2V0Lmluc2VydF93YXRjaHBvaW50ICh0eXBl LCBhZGRyLCBsZW4pOworICBlbHNlCisgICAgLyogVW5zdXBwb3J0ZWQgKHNl ZSB0YXJnZXQuaCkuICAqLworICAgIHJldHVybiAxOworfQorCitzdGF0aWMg aW50Cit3aW4zMl9yZW1vdmVfd2F0Y2hwb2ludCAoY2hhciB0eXBlLCBDT1JF X0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgaWYgKHRoZV9sb3dfdGFyZ2V0 LnJlbW92ZV93YXRjaHBvaW50ICE9IE5VTEwpCisgICAgcmV0dXJuIHRoZV9s b3dfdGFyZ2V0LnJlbW92ZV93YXRjaHBvaW50ICh0eXBlLCBhZGRyLCBsZW4p OworICBlbHNlCisgICAgLyogVW5zdXBwb3J0ZWQgKHNlZSB0YXJnZXQuaCku ICAqLworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3aW4zMl9z dG9wcGVkX2J5X3dhdGNocG9pbnQgKHZvaWQpCit7CisgIGlmICh0aGVfbG93 X3RhcmdldC5zdG9wcGVkX2J5X3dhdGNocG9pbnQgIT0gTlVMTCkKKyAgICBy ZXR1cm4gdGhlX2xvd190YXJnZXQuc3RvcHBlZF9ieV93YXRjaHBvaW50ICgp OworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBDT1JFX0FE RFIKK3dpbjMyX3N0b3BwZWRfZGF0YV9hZGRyZXNzICh2b2lkKQoreworICBp ZiAodGhlX2xvd190YXJnZXQuc3RvcHBlZF9kYXRhX2FkZHJlc3MgIT0gTlVM TCkKKyAgICByZXR1cm4gdGhlX2xvd190YXJnZXQuc3RvcHBlZF9kYXRhX2Fk ZHJlc3MgKCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworCiAvKiBU cmFuc2ZlciBtZW1vcnkgZnJvbS90byB0aGUgZGVidWdnZWQgcHJvY2Vzcy4g ICovCiBzdGF0aWMgaW50CiBjaGlsZF94ZmVyX21lbW9yeSAoQ09SRV9BRERS IG1lbWFkZHIsIGNoYXIgKm91ciwgaW50IGxlbiwKQEAgLTE2OTcsMTAgKzE3 MzksMTAgQEAgc3RhdGljIHN0cnVjdCB0YXJnZXRfb3BzIHdpbjMyX3Rhcmdl dF9vcAogICBOVUxMLAogICB3aW4zMl9yZXF1ZXN0X2ludGVycnVwdCwKICAg TlVMTCwKLSAgTlVMTCwKLSAgTlVMTCwKLSAgTlVMTCwKLSAgTlVMTCwKKyAg d2luMzJfaW5zZXJ0X3dhdGNocG9pbnQsCisgIHdpbjMyX3JlbW92ZV93YXRj aHBvaW50LAorICB3aW4zMl9zdG9wcGVkX2J5X3dhdGNocG9pbnQsCisgIHdp bjMyX3N0b3BwZWRfZGF0YV9hZGRyZXNzLAogICBOVUxMLAogICBOVUxMLAog ICBOVUxMLApJbmRleDogd2luMzItbG93LmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvd2lu MzItbG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1w IC1yMS45IHdpbjMyLWxvdy5oCi0tLSB3aW4zMi1sb3cuaAkzIEphbiAyMDA5 IDA1OjU3OjU3IC0wMDAwCTEuOQorKysgd2luMzItbG93LmgJMjMgSnVuIDIw MDkgMDY6MzU6NDUgLTAwMDAKQEAgLTcwLDYgKzcwLDEyIEBAIHN0cnVjdCB3 aW4zMl90YXJnZXRfb3BzCiAKICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnJl YWtwb2ludDsKICAgaW50IGJyZWFrcG9pbnRfbGVuOworCisgIC8qIFdhdGNo cG9pbnQgcmVsYXRlZCBmdW5jdGlvbnMuICBTZWUgdGFyZ2V0LmggZm9yIGNv bW1lbnRzLiAgKi8KKyAgaW50ICgqaW5zZXJ0X3dhdGNocG9pbnQpIChjaGFy IHR5cGUsIENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKTsKKyAgaW50ICgqcmVt b3ZlX3dhdGNocG9pbnQpIChjaGFyIHR5cGUsIENPUkVfQUREUiBhZGRyLCBp bnQgbGVuKTsKKyAgaW50ICgqc3RvcHBlZF9ieV93YXRjaHBvaW50KSAodm9p ZCk7CisgIENPUkVfQUREUiAoKnN0b3BwZWRfZGF0YV9hZGRyZXNzKSAodm9p ZCk7CiB9OwogCiBleHRlcm4gc3RydWN0IHdpbjMyX3RhcmdldF9vcHMgdGhl X2xvd190YXJnZXQ7Cg== --0016361e87f033105b046cff0f58--