public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17 12:06 Geoff Keating
  0 siblings, 0 replies; 18+ messages in thread
From: Geoff Keating @ 2002-07-17 12:06 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Geoff Keating <geoffk@geoffk.org>
To: amodra@bigpond.net.au
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
   dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Wed, 17 Jul 2002 12:03:14 -0700

 > Date: Wed, 17 Jul 2002 18:30:49 +0930
 > From: Alan Modra <amodra@bigpond.net.au>
 > Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
 >    dje@watson.ibm.com
 
 > On Wed, Jul 17, 2002 at 12:07:11AM -0700, Geoff Keating wrote:
 > > So, why don't we go back to the push/pop implementation, but this time
 > > do it properly?  We'd only need to push/pop in the (rare)
 > > nested-function case.
 > 
 > I wasn't aware that powerpc used that scheme previously, and therefore
 > was worried that some mcount implementation might peek at the stack.
 > 
 > Here we go.
 > 
 > 	* config/rs6000/r6000.c (first_reg_to_save): Remove bogus
 > 	adjustments to first_reg for profiling case.
 > 	(output_function_profiler): Correct lr save slot for ABI_AIX_NODESC.
 > 	Disable profiling for 64 bit code on both ABI_V4 and ABI_AIX_NODESC.
 > 	Save static chain reg to sp + 12 on ABI_AIX_NODESC.
 > 	* config/rs6000/sysv4.h (ASM_OUTPUT_REG_PUSH): Define.
 > 	(ASM_OUTPUT_REG_POP): Define.
 > 	* config/rs6000/linux64.h (ASM_OUTPUT_REG_PUSH): Undef.
 > 	(ASM_OUTPUT_REG_POP): Undef.
 
 This is OK.  I'm pretty sure it's right, and completely sure it's no
 worse than before. :-)
 
 
 -- 
 - Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17 13:36 David Edelsohn
  0 siblings, 0 replies; 18+ messages in thread
From: David Edelsohn @ 2002-07-17 13:36 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: David Edelsohn <dje@watson.ibm.com>
To: Geoff Keating <geoffk@redhat.com>
Cc: amodra@bigpond.net.au, d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org,
   gcc-patches@gcc.gnu.org
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5 
Date: Wed, 17 Jul 2002 16:28:02 -0400

 >>>>> Geoff Keating writes:
 
 >> PUSH/POP cannot work on PowerPC.  On AIX PUSH/POP were corrupting the
 >> stack.
 
 Geoff> Because they were implemented wrongly?
 
 Geoff> Clearly, push/pop can work, because procedures push and pop call
 Geoff> frames all the time.  It's just necessary to do it the right way. 
 
 	We are discussing PUSH/POP in the context of the macros to save
 and restore individual registers used when generating a profiler call in
 final.c, so GCC's ability to correctly allocate call frames is irrelevant.
 
 	The discussion about the PUSH/POP macros in March 1999 provides
 more background about the problem: the macros were not respecting the
 ABI-defined location of dynamic allocation on the stack.  PUSH/POP ideally
 should work like alloca and open a hole in the stack frame at the alloca
 location.  The PUSH/POP macros modify the stack pointer without updating
 the compiler's internal knowledge about the stack layout and assume that
 the alloca area is adjacent to the top of the stack, so adjusting the
 stack pointer will not have any bad consequences, e.g., if a function call
 is invoked.
 
 	On AIX, things went haywire because the PUSH/POP macros only
 copied the backchain pointer, not all of the ABI-specified area between
 the backchain pointer and the alloca area.  When GCC called the profiler
 function, the call frame had random garbage in ABI-specified locations,
 causing the application to run off the rails when an ABI stack location
 was accessed in the called function.  Copying the backchain *and* CR *and*
 LR may be sufficient for the AIX case for this particular use.
 
 	Because SVR4 PowerPC invokes the profiler before the prologue and
 has a slightly different stack layout, the simplistic definition of
 PUSH/POP may work correctly.
 
 David
 


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17 12:16 Geoff Keating
  0 siblings, 0 replies; 18+ messages in thread
From: Geoff Keating @ 2002-07-17 12:16 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Geoff Keating <geoffk@geoffk.org>
To: dje@watson.ibm.com
Cc: amodra@bigpond.net.au, d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org,
   gcc-patches@gcc.gnu.org
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Wed, 17 Jul 2002 12:10:12 -0700

 > cc: amodra@bigpond.net.au, d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org,
 >    gcc-patches@gcc.gnu.org
 > Date: Wed, 17 Jul 2002 11:42:02 -0400
 > From: David Edelsohn <dje@watson.ibm.com>
 > 
 > >>>>> Geoff Keating writes:
 > 
 > Geoff> So, thanks for testing it!  We now know this doesn't work. :-)
 > 
 > 	The patch was tested on SVR4 by Franz and showed no new failures:
 > 
 > http://gcc.gnu.org/ml/gcc-patches/1999-03n/msg00584.html
 
 The testsuite probably doesn't check that r30 is not clobbered in a
 nested function when profiling is switched on.  Actually, Alan, could
 you write a test for that?  (That's something I missed while reviewing
 your patch.)
 
 > PUSH/POP cannot work on PowerPC.  On AIX PUSH/POP were corrupting the
 > stack.
 
 Because they were implemented wrongly?
 
 Clearly, push/pop can work, because procedures push and pop call
 frames all the time.  It's just necessary to do it the right way. 
 
 For AIX, of course, push/pop is unnecessary, and Alan's patch didn't
 add it.
 
 -- 
 - Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17 10:46 David Edelsohn
  0 siblings, 0 replies; 18+ messages in thread
From: David Edelsohn @ 2002-07-17 10:46 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: David Edelsohn <dje@watson.ibm.com>
To: Alan Modra <amodra@bigpond.net.au>
Cc: Geoff Keating <geoffk@redhat.com>, d.mueller@elsoft.ch,
   gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5 
Date: Wed, 17 Jul 2002 13:38:23 -0400

 	If you want to define PUSH/POP for sysv4.h, that's fine.  I would
 recommend removing the !TARGET_32BIT case for those macros and only using
 the PowerPC mnemonics, to simplify things.
 
 >        * config/rs6000/r6000.c (first_reg_to_save): Remove bogus
 >        adjustments to first_reg for profiling case.
 > first_reg_to_save doesn't need to do anything special for any of these
 > registers as profiling is done via PROFILE_HOOK when ABI_AIX or
 > ABI_DARWIN.  The normal register allocation code will set up
 > regs_ever_live for us.  We're also not trying to use a reg when ABI_V4.
 
 	I guess this works now because of the scheduled prologue.
 
 	I think this is okay, once the trunk can bootstrap again and the
 patch can be tested there.  Joern has a patch which fixes the regrename.c
 bug he introduced
 
 http://gcc.gnu.org/ml/gcc-patches/2002-07/msg00840.html
 
 but no one with global write privileges has approved it.
 
 David


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17  8:46 David Edelsohn
  0 siblings, 0 replies; 18+ messages in thread
From: David Edelsohn @ 2002-07-17  8:46 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: David Edelsohn <dje@watson.ibm.com>
To: Geoff Keating <geoffk@redhat.com>
Cc: amodra@bigpond.net.au, d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org,
   gcc-patches@gcc.gnu.org
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5 
Date: Wed, 17 Jul 2002 11:42:02 -0400

 >>>>> Geoff Keating writes:
 
 Geoff> So, thanks for testing it!  We now know this doesn't work. :-)
 
 	The patch was tested on SVR4 by Franz and showed no new failures:
 
 http://gcc.gnu.org/ml/gcc-patches/1999-03n/msg00584.html
 
 PUSH/POP cannot work on PowerPC.  On AIX PUSH/POP were corrupting the
 stack.
 
 David


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17  2:06 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-17  2:06 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Geoff Keating <geoffk@redhat.com>
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
  dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Wed, 17 Jul 2002 18:30:49 +0930

 On Wed, Jul 17, 2002 at 12:07:11AM -0700, Geoff Keating wrote:
 > So, why don't we go back to the push/pop implementation, but this time
 > do it properly?  We'd only need to push/pop in the (rare)
 > nested-function case.
 
 I wasn't aware that powerpc used that scheme previously, and therefore
 was worried that some mcount implementation might peek at the stack.
 
 Here we go.
 
 	* config/rs6000/r6000.c (first_reg_to_save): Remove bogus
 	adjustments to first_reg for profiling case.
 	(output_function_profiler): Correct lr save slot for ABI_AIX_NODESC.
 	Disable profiling for 64 bit code on both ABI_V4 and ABI_AIX_NODESC.
 	Save static chain reg to sp + 12 on ABI_AIX_NODESC.
 	* config/rs6000/sysv4.h (ASM_OUTPUT_REG_PUSH): Define.
 	(ASM_OUTPUT_REG_POP): Define.
 	* config/rs6000/linux64.h (ASM_OUTPUT_REG_PUSH): Undef.
 	(ASM_OUTPUT_REG_POP): Undef.
 
 Rationale:
 
 	* config/rs6000/r6000.c (first_reg_to_save): Remove bogus
 	adjustments to first_reg for profiling case.
 first_reg_to_save doesn't need to do anything special for any of these
 registers as profiling is done via PROFILE_HOOK when ABI_AIX or
 ABI_DARWIN.  The normal register allocation code will set up
 regs_ever_live for us.  We're also not trying to use a reg when ABI_V4.
 
 	(output_function_profiler): Correct lr save slot for ABI_AIX_NODESC.
 ABI_AIX_NODESC saves lr to sp + 8.  This change is perhaps a little
 contentious as existing mcount implementations may take into account
 the current ABI breakage.
 
 	Disable profiling for 64 bit code on both ABI_V4 and ABI_AIX_NODESC.
 The instructions emitted here are 32 bit ones.  Fix this with a later
 patch.
 
 	Save static chain reg to sp + 12 on ABI_AIX_NODESC.
 We need to save it somewhere.  This seems a likely spot.
 
 	* config/rs6000/sysv4.h (ASM_OUTPUT_REG_PUSH): Define.
 	(ASM_OUTPUT_REG_POP): Define.
 Code resurrected from prior to Mon Mar 15 22:45:25 1999 delta, but
 with DEFAULT_ABI == ABI_V4 test added.
 
 
 powerpc-linux bootstrap on mainline seems to be broken at the moment.
 
 internal compiler error: Internal compiler error
  in tree_low_cst, at tree.c:3312
 
 so I'm in the process of bootstrapping this one on the 3.1 branch.
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre
 
 Index: gcc/config/rs6000/rs6000.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
 retrieving revision 1.344
 diff -u -p -r1.344 rs6000.c
 --- gcc/config/rs6000/rs6000.c	16 Jul 2002 20:59:03 -0000	1.344
 +++ gcc/config/rs6000/rs6000.c	17 Jul 2002 08:19:35 -0000
 @@ -7356,53 +7356,6 @@ first_reg_to_save ()
  		    || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
        break;
  
 -  if (current_function_profile)
 -    {
 -      /* AIX must save/restore every register that contains a parameter
 -	 before/after the .__mcount call plus an additional register
 -	 for the static chain, if needed; use registers from 30 down to 22
 -	 to do this.  */
 -      if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
 -	{
 -	  int last_parm_reg, profile_first_reg;
 -
 -	  /* Figure out last used parameter register.  The proper thing
 -	     to do is to walk incoming args of the function.  A function
 -	     might have live parameter registers even if it has no
 -	     incoming args.  */
 -	  for (last_parm_reg = 10;
 -	       last_parm_reg > 2 && ! regs_ever_live [last_parm_reg];
 -	       last_parm_reg--)
 -	    ;
 -
 -	  /* Calculate first reg for saving parameter registers
 -	     and static chain.
 -	     Skip reg 31 which may contain the frame pointer.  */
 -	  profile_first_reg = (33 - last_parm_reg
 -			       - (current_function_needs_context ? 1 : 0));
 -#if TARGET_MACHO
 -          /* Need to skip another reg to account for R31 being PICBASE
 -             (when flag_pic is set) or R30 being used as the frame
 -             pointer (when flag_pic is not set).  */
 -          --profile_first_reg;
 -#endif
 -	  /* Do not save frame pointer if no parameters needs to be saved.  */
 -	  if (profile_first_reg == 31)
 -	    profile_first_reg = 32;
 -
 -	  if (first_reg > profile_first_reg)
 -	    first_reg = profile_first_reg;
 -	}
 -
 -      /* SVR4 may need one register to preserve the static chain.  */
 -      else if (current_function_needs_context)
 -	{
 -	  /* Skip reg 31 which may contain the frame pointer.  */
 -	  if (first_reg > 30)
 -	    first_reg = 30;
 -	}
 -    }
 -
  #if TARGET_MACHO
    if (flag_pic && current_function_uses_pic_offset_table &&
        (first_reg > RS6000_PIC_OFFSET_TABLE_REGNUM))
 @@ -10429,6 +10382,7 @@ output_function_profiler (file, labelno)
    int labelno;
  {
    char buf[100];
 +  int save_lr = 8;
  
    ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
    switch (DEFAULT_ABI)
 @@ -10437,13 +10391,21 @@ output_function_profiler (file, labelno)
        abort ();
  
      case ABI_V4:
 +      save_lr = 4;
 +      /* Fall through.  */
 +
      case ABI_AIX_NODESC:
 +      if (!TARGET_32BIT)
 +	{
 +	  warning ("no profiling of 64-bit code for this ABI");
 +	  return;
 +	}
        fprintf (file, "\tmflr %s\n", reg_names[0]);
        if (flag_pic == 1)
  	{
  	  fputs ("\tbl _GLOBAL_OFFSET_TABLE_@local-4\n", file);
 -	  asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
 -		       reg_names[0], reg_names[1]);
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[0], save_lr, reg_names[1]);
  	  asm_fprintf (file, "\tmflr %s\n", reg_names[12]);
  	  asm_fprintf (file, "\t{l|lwz} %s,", reg_names[0]);
  	  assemble_name (file, buf);
 @@ -10451,8 +10413,8 @@ output_function_profiler (file, labelno)
  	}
        else if (flag_pic > 1)
  	{
 -	  asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
 -		       reg_names[0], reg_names[1]);
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[0], save_lr, reg_names[1]);
  	  /* Now, we need to get the address of the label.  */
  	  fputs ("\tbl 1f\n\t.long ", file);
  	  assemble_name (file, buf);
 @@ -10468,27 +10430,32 @@ output_function_profiler (file, labelno)
  	  asm_fprintf (file, "\t{liu|lis} %s,", reg_names[12]);
  	  assemble_name (file, buf);
  	  fputs ("@ha\n", file);
 -	  asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
 -		       reg_names[0], reg_names[1]);
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[0], save_lr, reg_names[1]);
  	  asm_fprintf (file, "\t{cal|la} %s,", reg_names[0]);
  	  assemble_name (file, buf);
  	  asm_fprintf (file, "@l(%s)\n", reg_names[12]);
  	}
  
 -      if (current_function_needs_context)
 -	asm_fprintf (file, "\tmr %s,%s\n",
 -		     reg_names[30], reg_names[STATIC_CHAIN_REGNUM]);
 -      fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
 -      if (current_function_needs_context)
 -	asm_fprintf (file, "\tmr %s,%s\n",
 -		     reg_names[STATIC_CHAIN_REGNUM], reg_names[30]);
 +      if (current_function_needs_context && DEFAULT_ABI == ABI_AIX_NODESC)
 +	{
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[STATIC_CHAIN_REGNUM],
 +		       12, reg_names[1]);
 +	  fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
 +	  asm_fprintf (file, "\t{l|lwz} %s,%d(%s)\n",
 +		       reg_names[STATIC_CHAIN_REGNUM],
 +		       12, reg_names[1]);
 +	}
 +      else
 +	/* ABI_V4 saves the static chain reg with ASM_OUTPUT_REG_PUSH.  */
 +	fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
        break;
  
      case ABI_AIX:
      case ABI_DARWIN:
        /* Don't do anything, done in output_profile_hook ().  */
        break;
 -
      }
  }
  
 Index: gcc/config/rs6000/sysv4.h
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/rs6000/sysv4.h,v
 retrieving revision 1.98
 diff -u -p -r1.98 sysv4.h
 --- gcc/config/rs6000/sysv4.h	10 Jul 2002 00:33:51 -0000	1.98
 +++ gcc/config/rs6000/sysv4.h	17 Jul 2002 08:19:36 -0000
 @@ -736,6 +736,38 @@ do {									\
    ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN);			\
  } while (0)
  
 +/* This is how to output code to push a register on the stack.
 +   It need not be very fast code.
 +
 +   On the rs6000, we must keep the backchain up to date.  In order
 +   to simplify things, always allocate 16 bytes for a push (System V
 +   wants to keep stack aligned to a 16 byte boundary).  */
 +
 +#define	ASM_OUTPUT_REG_PUSH(FILE, REGNO)				\
 +do {									\
 +  if (DEFAULT_ABI == ABI_V4)						\
 +    asm_fprintf (FILE,							\
 +		 (TARGET_32BIT						\
 +		  ? "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n"	\
 +		  : "\tstdu %s,-32(%s)\n\tstd %s,24(%s)\n"),		\
 +		 reg_names[1], reg_names[1], reg_names[REGNO],		\
 +		 reg_names[1]);						\
 +} while (0)
 +
 +/* This is how to output an insn to pop a register from the stack.
 +   It need not be very fast code.  */
 +
 +#define	ASM_OUTPUT_REG_POP(FILE, REGNO)					\
 +do {									\
 +  if (DEFAULT_ABI == ABI_V4)						\
 +    asm_fprintf (FILE,							\
 +		 (TARGET_32BIT						\
 +		  ? "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n"	\
 +		  : "\tld %s,24(%s)\n\t{ai|addic} %s,%s,32\n"),		\
 +		 reg_names[REGNO], reg_names[1], reg_names[1],		\
 +		 reg_names[1]);						\
 +} while (0)
 +
  /* Switch  Recognition by gcc.c.  Add -G xx support.  */
  
  /* Override svr4.h definition.  */
 Index: gcc/config/rs6000/linux64.h
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/rs6000/linux64.h,v
 retrieving revision 1.21
 diff -u -p -r1.21 linux64.h
 --- gcc/config/rs6000/linux64.h	11 Jul 2002 00:23:16 -0000	1.21
 +++ gcc/config/rs6000/linux64.h	17 Jul 2002 08:19:25 -0000
 @@ -329,3 +329,7 @@ do									\
      sym_lineno += 1;							\
    }									\
  while (0)
 +
 +/* Override sysv4.h as these are ABI_V4 only.  */
 +#undef	ASM_OUTPUT_REG_PUSH
 +#undef	ASM_OUTPUT_REG_POP
 


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-17  0:16 Geoff Keating
  0 siblings, 0 replies; 18+ messages in thread
From: Geoff Keating @ 2002-07-17  0:16 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Geoff Keating <geoffk@geoffk.org>
To: amodra@bigpond.net.au
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
   dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Wed, 17 Jul 2002 00:07:11 -0700

 > Date: Wed, 17 Jul 2002 11:17:39 +0930
 > From: Alan Modra <amodra@bigpond.net.au>
 
 > On Tue, Jul 16, 2002 at 10:48:14AM -0700, Geoff Keating wrote:
 > > The profiling function isn't allowed to clobber r30.  It never has
 > > been, so this should be no surprise.
 > 
 > I'm not quite sure what to make of this response.  We're talking about
 > this code from rs6000.c:10479
 > 
 >       if (current_function_needs_context)
 > 	asm_fprintf (file, "\tmr %s,%s\n",
 > 		     reg_names[30], reg_names[STATIC_CHAIN_REGNUM]);
 >       fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
 >       if (current_function_needs_context)
 > 	asm_fprintf (file, "\tmr %s,%s\n",
 > 		     reg_names[STATIC_CHAIN_REGNUM], reg_names[30]);
 
 I see, I was confused.  I thought we were already using r30 for
 STATIC_CHAIN_REGNUM.  The ABI specifies r31, but I see we can't use
 that if we want trampolines to be efficient.
 
 > This is currently emitted _before_ the prologue in the nested function,
 > thus trashes r30.  I was considering the idea of adding a clobber of
 > r30 to CALL_INSN_FUNCTION_USAGE when calling a nested function.  That's
 > a workable solution, but means you need to zap r30 on all calls via
 > function pointers too.
 
 From David's mail message when he put the code in:
 
      I have ripped out all of the stack PUSH/POP stuff that was
      causing ABI problems and replaced it with explicit moves to a
      temporary register.  This includes having the SVR4 ABI act more
      like AIX using a register instead of the dangerous stack
      save/restore game.  I could not test the SVR4 changes, so I would
      appreciate if the LinuxPPC testers would make sure that I have
      not broken anything when profiling is enabled.
 
 So, thanks for testing it!  We now know this doesn't work. :-)
 
 So, why don't we go back to the push/pop implementation, but this time
 do it properly?  We'd only need to push/pop in the (rare)
 nested-function case.
 
 -- 
 - Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-16 21:16 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-16 21:16 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Geoff Keating <geoffk@redhat.com>, d.mueller@elsoft.ch,
  gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org, dje@watson.ibm.com
Cc:  
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Wed, 17 Jul 2002 13:42:00 +0930

 	PR target/5967, PR other/7114
 	* config/rs6000/r6000.c (first_reg_to_save): Remove bogus
 	adjustments to first_reg for profiling case.
 	(output_function_profiler): Correct lr save slot for ABI_AIX_NODESC.
 	Disable profiling for nested functions on ABI_V4, and for 64 bit
 	code on both ABI_V4 and ABI_AIX_NODESC.  Save static chain reg
 	to sp + 12 on ABI_AIX_NODESC.
 
 Rationale:
 
 	* config/rs6000/r6000.c (first_reg_to_save): Remove bogus
 	adjustments to first_reg for profiling case.
 first_reg_to_save doesn't need to do anything special for any of these
 registers as profiling is done via PROFILE_HOOK when ABI_AIX or
 ABI_DARWIN.  The normal register allocation code will set up
 regs_ever_live for us.  We're killing profiling on nested functions
 when ABI_V4.
 
 	(output_function_profiler): Correct lr save slot for ABI_AIX_NODESC.
 ABI_AIX_NODESC saves lr to sp + 8.  This change is perhaps a little
 contentious as existing mcount implementations may take into account
 the current ABI breakage.
 
 	Disable profiling for nested functions on ABI_V4
 See the comment below.
 
 	and for 64 bit code on both ABI_V4 and ABI_AIX_NODESC.
 The instructions emitted here are 32 bit ones.
 
 	Save static chain reg to sp + 12 on ABI_AIX_NODESC.
 We need to save it somewhere, or disable profiling of nested functions
 for ABI_AIX_NODESC too.
 
 bootstrapped (a slightly different patch) and regression tested
 powerpc-linux.  I'm re-running the bootstrap now.  Built powerpc-linux
 and powerpc64-linux glibc --enable-profile to test ABI_V4 and ABI_AIX
 changes.
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre
 
 Index: rs6000.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
 retrieving revision 1.343
 diff -u -p -r1.343 rs6000.c
 --- rs6000.c	16 Jul 2002 02:16:41 -0000	1.343
 +++ rs6000.c	17 Jul 2002 03:43:03 -0000
 @@ -7357,53 +7357,6 @@ first_reg_to_save ()
  		    || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
        break;
  
 -  if (current_function_profile)
 -    {
 -      /* AIX must save/restore every register that contains a parameter
 -	 before/after the .__mcount call plus an additional register
 -	 for the static chain, if needed; use registers from 30 down to 22
 -	 to do this.  */
 -      if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
 -	{
 -	  int last_parm_reg, profile_first_reg;
 -
 -	  /* Figure out last used parameter register.  The proper thing
 -	     to do is to walk incoming args of the function.  A function
 -	     might have live parameter registers even if it has no
 -	     incoming args.  */
 -	  for (last_parm_reg = 10;
 -	       last_parm_reg > 2 && ! regs_ever_live [last_parm_reg];
 -	       last_parm_reg--)
 -	    ;
 -
 -	  /* Calculate first reg for saving parameter registers
 -	     and static chain.
 -	     Skip reg 31 which may contain the frame pointer.  */
 -	  profile_first_reg = (33 - last_parm_reg
 -			       - (current_function_needs_context ? 1 : 0));
 -#if TARGET_MACHO
 -          /* Need to skip another reg to account for R31 being PICBASE
 -             (when flag_pic is set) or R30 being used as the frame
 -             pointer (when flag_pic is not set).  */
 -          --profile_first_reg;
 -#endif
 -	  /* Do not save frame pointer if no parameters needs to be saved.  */
 -	  if (profile_first_reg == 31)
 -	    profile_first_reg = 32;
 -
 -	  if (first_reg > profile_first_reg)
 -	    first_reg = profile_first_reg;
 -	}
 -
 -      /* SVR4 may need one register to preserve the static chain.  */
 -      else if (current_function_needs_context)
 -	{
 -	  /* Skip reg 31 which may contain the frame pointer.  */
 -	  if (first_reg > 30)
 -	    first_reg = 30;
 -	}
 -    }
 -
  #if TARGET_MACHO
    if (flag_pic && current_function_uses_pic_offset_table &&
        (first_reg > RS6000_PIC_OFFSET_TABLE_REGNUM))
 @@ -10430,6 +10383,8 @@ output_function_profiler (file, labelno)
    int labelno;
  {
    char buf[100];
 +  int save_lr = 8;
 +  int save_chain = 12;
  
    ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
    switch (DEFAULT_ABI)
 @@ -10438,13 +10393,35 @@ output_function_profiler (file, labelno)
        abort ();
  
      case ABI_V4:
 +      if (current_function_needs_context)
 +	{
 +	  /* There's no safe way to save STATIC_CHAIN_REGNUM around
 +	     the mcount call.  The ABI_V4 stack has no slot available,
 +	     and since we are PROFILE_BEFORE_PROLOGUE, we can't use a
 +	     call-saved register.  Adjusting the stack to give us some
 +	     space might confuse special purpose mcount functions.
 +	     And finally, clobbering a callee saved register for the
 +	     purpose of saving the static chain when calling a nested
 +	     function is difficult to get right;  You might be calling
 +	     a nested function via a function pointer.  */
 +	  warning ("no profiling on nested functions for this ABI");
 +	  return;
 +	}
 +      save_lr = 4;
 +      /* Fall through.  */
 +
      case ABI_AIX_NODESC:
 +      if (!TARGET_32BIT)
 +	{
 +	  warning ("no profiling of 64-bit code for this ABI");
 +	  return;
 +	}
        fprintf (file, "\tmflr %s\n", reg_names[0]);
        if (flag_pic == 1)
  	{
  	  fputs ("\tbl _GLOBAL_OFFSET_TABLE_@local-4\n", file);
 -	  asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
 -		       reg_names[0], reg_names[1]);
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[0], save_lr, reg_names[1]);
  	  asm_fprintf (file, "\tmflr %s\n", reg_names[12]);
  	  asm_fprintf (file, "\t{l|lwz} %s,", reg_names[0]);
  	  assemble_name (file, buf);
 @@ -10452,8 +10429,8 @@ output_function_profiler (file, labelno)
  	}
        else if (flag_pic > 1)
  	{
 -	  asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
 -		       reg_names[0], reg_names[1]);
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[0], save_lr, reg_names[1]);
  	  /* Now, we need to get the address of the label.  */
  	  fputs ("\tbl 1f\n\t.long ", file);
  	  assemble_name (file, buf);
 @@ -10469,20 +10446,25 @@ output_function_profiler (file, labelno)
  	  asm_fprintf (file, "\t{liu|lis} %s,", reg_names[12]);
  	  assemble_name (file, buf);
  	  fputs ("@ha\n", file);
 -	  asm_fprintf (file, "\t{st|stw} %s,4(%s)\n",
 -		       reg_names[0], reg_names[1]);
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[0], save_lr, reg_names[1]);
  	  asm_fprintf (file, "\t{cal|la} %s,", reg_names[0]);
  	  assemble_name (file, buf);
  	  asm_fprintf (file, "@l(%s)\n", reg_names[12]);
  	}
  
        if (current_function_needs_context)
 -	asm_fprintf (file, "\tmr %s,%s\n",
 -		     reg_names[30], reg_names[STATIC_CHAIN_REGNUM]);
 -      fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
 -      if (current_function_needs_context)
 -	asm_fprintf (file, "\tmr %s,%s\n",
 -		     reg_names[STATIC_CHAIN_REGNUM], reg_names[30]);
 +	{
 +	  asm_fprintf (file, "\t{st|stw} %s,%d(%s)\n",
 +		       reg_names[STATIC_CHAIN_REGNUM],
 +		       save_chain, reg_names[1]);
 +	  fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
 +	  asm_fprintf (file, "\t{l|lwz} %s,%d(%s)\n",
 +		       reg_names[STATIC_CHAIN_REGNUM],
 +		       save_chain, reg_names[1]);
 +	}
 +      else
 +	fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
        break;
  
      case ABI_AIX:


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-16 18:56 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-16 18:56 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Geoff Keating <geoffk@redhat.com>
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
  dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Wed, 17 Jul 2002 11:17:39 +0930

 On Tue, Jul 16, 2002 at 10:48:14AM -0700, Geoff Keating wrote:
 > The profiling function isn't allowed to clobber r30.  It never has
 > been, so this should be no surprise.
 
 I'm not quite sure what to make of this response.  We're talking about
 this code from rs6000.c:10479
 
       if (current_function_needs_context)
 	asm_fprintf (file, "\tmr %s,%s\n",
 		     reg_names[30], reg_names[STATIC_CHAIN_REGNUM]);
       fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
       if (current_function_needs_context)
 	asm_fprintf (file, "\tmr %s,%s\n",
 		     reg_names[STATIC_CHAIN_REGNUM], reg_names[30]);
 
 This is currently emitted _before_ the prologue in the nested function,
 thus trashes r30.  I was considering the idea of adding a clobber of
 r30 to CALL_INSN_FUNCTION_USAGE when calling a nested function.  That's
 a workable solution, but means you need to zap r30 on all calls via
 function pointers too.
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-16 10:56 Geoff Keating
  0 siblings, 0 replies; 18+ messages in thread
From: Geoff Keating @ 2002-07-16 10:56 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Geoff Keating <geoffk@geoffk.org>
To: amodra@bigpond.net.au
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
   dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Tue, 16 Jul 2002 10:48:14 -0700

 > Date: Tue, 16 Jul 2002 11:08:16 +0930
 > From: Alan Modra <amodra@bigpond.net.au>
 > Mail-Followup-To: Geoff Keating <geoffk@redhat.com>, d.mueller@elsoft.ch,
 > 	gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org, dje@watson.ibm.com
 > Content-Disposition: inline
 > User-Agent: Mutt/1.3.25i
 > 
 > On Tue, Jul 16, 2002 at 09:20:27AM +0930, Alan Modra wrote:
 > > The testcase saves r30 and r31, but both are marked unused (don't
 > > appear in regs_ever_live).  Later rtl analysis decides that the
 > > save instruction can be eliminated, thus the ICE.  The real bug is
 > > that r30 is not marked used when current_function_needs_context.
 > > This is also the reason for PR5967.
 > > 
 > > The code that I copied from the !using_store_multiple case just
 > > papers over this bug.  So the above patch merely makes -mmultiple
 > > and -mno-multiple consistently wrong.
 > 
 > It gets worse.  rs6000/sysv4.h sets PROFILE_BEFORE_PROLOGUE.  That
 > means it is completely wrong for first_reg_to_save to decide r30
 > needs saving when profiling and current_function_needs_context.
 > It's too late to think about saving r30.  What really needs to
 > happen is one of
 > 
 > a) Don't use PROFILE_BEFORE_PROLOGUE.
 > or
 > b) Save the static chain reg on the stack somewhere before the mcount
 >    call.
 > or
 > c) Clobber r30 in a call to a nested function when profiling is
 >    enabled.
 > 
 > People would probably scream if we went with (a) as special purpose
 > implementations of mcount might make assumptions about the stack.
 > So, anyone want to speak up on the best way to solve this?
 
 The profiling function isn't allowed to clobber r30.  It never has
 been, so this should be no surprise.
 
 -- 
 - Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-16 10:46 Geoff Keating
  0 siblings, 0 replies; 18+ messages in thread
From: Geoff Keating @ 2002-07-16 10:46 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Geoff Keating <geoffk@geoffk.org>
To: amodra@bigpond.net.au
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
   dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Tue, 16 Jul 2002 10:45:33 -0700

 > Date: Tue, 16 Jul 2002 09:20:27 +0930
 > From: Alan Modra <amodra@bigpond.net.au>
 
 > On Mon, Jul 15, 2002 at 12:43:02PM -0700, Geoff Keating wrote:
 > > > Date: Mon, 15 Jul 2002 18:56:03 +0930
 > > > From: Alan Modra <amodra@bigpond.net.au>
 > > 
 > > > This patch cures the testcase.  The !using_store_multiple code tests
 > > > whether regs are live before saving.  We need to do something similar
 > > > for using_store_multiple, in case all regs need not be saved.
 > > 
 > > Those registers are actually saved, whether they need to be or not,
 > > correct?
 > > 
 > > So the RTL generated is an accurate representation of the instruction,
 > > and the bug must be elsewhere.
 > 
 > The testcase saves r30 and r31, but both are marked unused (don't
 > appear in regs_ever_live).  Later rtl analysis decides that the
 > save instruction can be eliminated, thus the ICE.  The real bug is
 > that r30 is not marked used when current_function_needs_context.
 > This is also the reason for PR5967.
 > 
 > The code that I copied from the !using_store_multiple case just
 > papers over this bug.  So the above patch merely makes -mmultiple
 > and -mno-multiple consistently wrong.
 
 No, the code below causes unused registers to actually not be saved,
 which is correct (it does sometimes happen that all uses of a register
 are eliminated after reload).  This can be done when individual loads
 and stores are being used, you just don't emit that store.  It can't
 be done when store-multiple is being used.
 
 -- 
 - Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-15 22:16 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-15 22:16 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Richard Henderson <rth@redhat.com>, Geoff Keating <geoffk@redhat.com>,
  d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
  dje@watson.ibm.com
Cc:  
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Tue, 16 Jul 2002 14:38:08 +0930

 On Mon, Jul 15, 2002 at 09:31:24PM -0700, Richard Henderson wrote:
 > On Tue, Jul 16, 2002 at 11:08:16AM +0930, Alan Modra wrote:
 > > It gets worse.  rs6000/sysv4.h sets PROFILE_BEFORE_PROLOGUE.
 > 
 > Make rs6000/sysv4.h can use PROFILE_HOOK instead.
 
 Aye, that's the nice way to do it.  However, on powerpc64-linux,
 I've had kernel people complaining that the profiling code isn't
 what they want:  All those register saves from the prologue
 preceding the mcount call apparently are messing up accurate
 count values, and it's hard for an mcount implementation to
 adjust times, or so I'm told.  I implemented a simple hack to
 do PROFILE_BEFORE_PROLOGUE on powerpc64-linux for people who
 want it.
 
 I suspect we'll get the same sort of complaint if we change
 powerpc mcount.  There's also the issue that some special-purpose
 mcount functions may expect to be called before the stack has
 been adjusted.
 
 I'm rapidly approaching the point where I either give up on this
 problem, or simply remove support for profiling on nested
 functions.  The current code just doesn't work.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-15 21:36 Richard Henderson
  0 siblings, 0 replies; 18+ messages in thread
From: Richard Henderson @ 2002-07-15 21:36 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Richard Henderson <rth@redhat.com>
To: Geoff Keating <geoffk@redhat.com>, d.mueller@elsoft.ch,
   gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org, dje@watson.ibm.com
Cc:  
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Mon, 15 Jul 2002 21:31:24 -0700

 On Tue, Jul 16, 2002 at 11:08:16AM +0930, Alan Modra wrote:
 > It gets worse.  rs6000/sysv4.h sets PROFILE_BEFORE_PROLOGUE.
 
 Make rs6000/sysv4.h can use PROFILE_HOOK instead.
 
 I don't know what the ppc svr4 _mcount abi looks like, but I know that
 you can emit any sort of rtl you want, which pretty much means that you
 can avoid all of these register allocation problems by making an actual
 register allocator take care of them.
 
 
 r~


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-15 18:46 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-15 18:46 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Geoff Keating <geoffk@redhat.com>, d.mueller@elsoft.ch,
  gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org, dje@watson.ibm.com
Cc:  
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Tue, 16 Jul 2002 11:08:16 +0930

 On Tue, Jul 16, 2002 at 09:20:27AM +0930, Alan Modra wrote:
 > The testcase saves r30 and r31, but both are marked unused (don't
 > appear in regs_ever_live).  Later rtl analysis decides that the
 > save instruction can be eliminated, thus the ICE.  The real bug is
 > that r30 is not marked used when current_function_needs_context.
 > This is also the reason for PR5967.
 > 
 > The code that I copied from the !using_store_multiple case just
 > papers over this bug.  So the above patch merely makes -mmultiple
 > and -mno-multiple consistently wrong.
 
 It gets worse.  rs6000/sysv4.h sets PROFILE_BEFORE_PROLOGUE.  That
 means it is completely wrong for first_reg_to_save to decide r30
 needs saving when profiling and current_function_needs_context.
 It's too late to think about saving r30.  What really needs to
 happen is one of
 
 a) Don't use PROFILE_BEFORE_PROLOGUE.
 or
 b) Save the static chain reg on the stack somewhere before the mcount
    call.
 or
 c) Clobber r30 in a call to a nested function when profiling is
    enabled.
 
 People would probably scream if we went with (a) as special purpose
 implementations of mcount might make assumptions about the stack.
 So, anyone want to speak up on the best way to solve this?
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-15 16:56 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-15 16:56 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Geoff Keating <geoffk@redhat.com>
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
  dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Tue, 16 Jul 2002 09:20:27 +0930

 On Mon, Jul 15, 2002 at 12:43:02PM -0700, Geoff Keating wrote:
 > > Date: Mon, 15 Jul 2002 18:56:03 +0930
 > > From: Alan Modra <amodra@bigpond.net.au>
 > 
 > > This patch cures the testcase.  The !using_store_multiple code tests
 > > whether regs are live before saving.  We need to do something similar
 > > for using_store_multiple, in case all regs need not be saved.
 > 
 > Those registers are actually saved, whether they need to be or not,
 > correct?
 > 
 > So the RTL generated is an accurate representation of the instruction,
 > and the bug must be elsewhere.
 
 The testcase saves r30 and r31, but both are marked unused (don't
 appear in regs_ever_live).  Later rtl analysis decides that the
 save instruction can be eliminated, thus the ICE.  The real bug is
 that r30 is not marked used when current_function_needs_context.
 This is also the reason for PR5967.
 
 The code that I copied from the !using_store_multiple case just
 papers over this bug.  So the above patch merely makes -mmultiple
 and -mno-multiple consistently wrong.
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-15 12:46 Geoff Keating
  0 siblings, 0 replies; 18+ messages in thread
From: Geoff Keating @ 2002-07-15 12:46 UTC (permalink / raw)
  To: amodra; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Geoff Keating <geoffk@geoffk.org>
To: amodra@bigpond.net.au
Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
   dje@watson.ibm.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Mon, 15 Jul 2002 12:43:02 -0700

 > Date: Mon, 15 Jul 2002 18:56:03 +0930
 > From: Alan Modra <amodra@bigpond.net.au>
 
 > This patch cures the testcase.  The !using_store_multiple code tests
 > whether regs are live before saving.  We need to do something similar
 > for using_store_multiple, in case all regs need not be saved.
 
 Those registers are actually saved, whether they need to be or not,
 correct?
 
 So the RTL generated is an accurate representation of the instruction,
 and the bug must be elsewhere.
 
 > 	* config/rs6000/rs6000.c (rs6000_emit_prologue): Trim saved regs
 > 	for -mmultiple case like -mno-multiple case.
 > 	(rs6000_emit_epilogue): Likewise.
 > 
 > Index: gcc/config/rs6000/rs6000.c
 > ===================================================================
 > RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
 > retrieving revision 1.291.2.13
 > diff -u -p -r1.291.2.13 rs6000.c
 > --- gcc/config/rs6000/rs6000.c	23 May 2002 23:22:44 -0000	1.291.2.13
 > +++ gcc/config/rs6000/rs6000.c	15 Jul 2002 09:06:31 -0000
 > @@ -8836,30 +8836,45 @@ rs6000_emit_prologue ()
 >       the store-multiple instructions.  */
 >    if (using_store_multiple)
 >      {
 > -      rtvec p, dwarfp;
 > -      int i;
 > -      p = rtvec_alloc (32 - info->first_gp_reg_save);
 > -      dwarfp = rtvec_alloc (32 - info->first_gp_reg_save);
 > -      for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 > +      int n = info->first_gp_reg_save;
 > +
 > +      while (n < 32
 > +	     && !((regs_ever_live[n]
 > +		   && ! call_used_regs[n])
 > +		  || (n == RS6000_PIC_OFFSET_TABLE_REGNUM
 > +		      && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
 > +			  || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
 > +	n++;
 > +
 > +      if (n < 32)
 >  	{
 > -	  rtx addr, reg, mem;
 > -	  reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i);
 > -	  addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 > -			       GEN_INT (info->gp_save_offset 
 > -					+ sp_offset 
 > -					+ reg_size * i));
 > -	  mem = gen_rtx_MEM (reg_mode, addr);
 > -	  set_mem_alias_set (mem, rs6000_sr_alias_set);
 > +	  rtvec p, dwarfp;
 > +	  int i;
 > +
 > +	  p = rtvec_alloc (32 - n);
 > +	  dwarfp = rtvec_alloc (32 - n);
 > +	  for (i = 0; i < 32 - n; i++)
 > +	    {
 > +	      rtx addr, reg, mem;
 > +	      reg = gen_rtx_REG (reg_mode, n + i);
 > +	      addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 > +				   GEN_INT (info->gp_save_offset 
 > +					    + sp_offset 
 > +					    + reg_size * i));
 > +	      mem = gen_rtx_MEM (reg_mode, addr);
 > +	      set_mem_alias_set (mem, rs6000_sr_alias_set);
 >  
 > -	  RTVEC_ELT (p, i) = gen_rtx_SET (VOIDmode, mem, reg);
 > +	      RTVEC_ELT (p, i) = gen_rtx_SET (VOIDmode, mem, reg);
 > +	    }
 > +	  insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
 > +	  rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, 
 > +				NULL_RTX, NULL_RTX);
 >  	}
 > -      insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
 > -      rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, 
 > -			    NULL_RTX, NULL_RTX);
 >      }
 >    else
 >      {
 >        int i;
 > +
 >        for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 >  	if ((regs_ever_live[info->first_gp_reg_save+i] 
 >  	     && ! call_used_regs[info->first_gp_reg_save+i])
 > @@ -9226,24 +9241,38 @@ rs6000_emit_epilogue (sibcall)
 >       the load-multiple instructions.  */
 >    if (using_load_multiple)
 >      {
 > -      rtvec p;
 > -      p = rtvec_alloc (32 - info->first_gp_reg_save);
 > -      for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 > -	{
 > -	  rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 > -				   GEN_INT (info->gp_save_offset 
 > -					    + sp_offset 
 > -					    + reg_size * i));
 > -	  rtx mem = gen_rtx_MEM (reg_mode, addr);
 > +      int n = info->first_gp_reg_save;
 >  
 > -	  set_mem_alias_set (mem, rs6000_sr_alias_set);
 > +      while (n < 32
 > +	     && !((regs_ever_live[n]
 > +		   && ! call_used_regs[n])
 > +		  || (n == RS6000_PIC_OFFSET_TABLE_REGNUM
 > +		      && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
 > +			  || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
 > +	n++;
 > +
 > +      if (n < 32)
 > +	{
 > +	  rtvec p;
 >  
 > -	  RTVEC_ELT (p, i) = 
 > -	    gen_rtx_SET (VOIDmode,
 > -			 gen_rtx_REG (reg_mode, info->first_gp_reg_save + i),
 > -			 mem);
 > +	  p = rtvec_alloc (32 - n);
 > +	  for (i = 0; i < 32 - n; i++)
 > +	    {
 > +	      rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 > +				       GEN_INT (info->gp_save_offset 
 > +						+ sp_offset 
 > +						+ reg_size * i));
 > +	      rtx mem = gen_rtx_MEM (reg_mode, addr);
 > +
 > +	      set_mem_alias_set (mem, rs6000_sr_alias_set);
 > +
 > +	      RTVEC_ELT (p, i) = 
 > +		gen_rtx_SET (VOIDmode,
 > +			     gen_rtx_REG (reg_mode, n + i),
 > +			     mem);
 > +	    }
 > +	  emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
 >  	}
 > -      emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
 >      }
 >    else
 >      for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 > 
 > -- 
 > Alan Modra
 > IBM OzLabs - Linux Technology Centre
 > 
 
 
 -- 
 - Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-07-15  2:36 Alan Modra
  0 siblings, 0 replies; 18+ messages in thread
From: Alan Modra @ 2002-07-15  2:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR other/7114; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: d.mueller@elsoft.ch
Cc: gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org,
  David Edelsohn <dje@watson.ibm.com>, geoffk@redhat.com
Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5
Date: Mon, 15 Jul 2002 18:56:03 +0930

 This patch cures the testcase.  The !using_store_multiple code tests
 whether regs are live before saving.  We need to do something similar
 for using_store_multiple, in case all regs need not be saved.
 
 	* config/rs6000/rs6000.c (rs6000_emit_prologue): Trim saved regs
 	for -mmultiple case like -mno-multiple case.
 	(rs6000_emit_epilogue): Likewise.
 
 Index: gcc/config/rs6000/rs6000.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
 retrieving revision 1.291.2.13
 diff -u -p -r1.291.2.13 rs6000.c
 --- gcc/config/rs6000/rs6000.c	23 May 2002 23:22:44 -0000	1.291.2.13
 +++ gcc/config/rs6000/rs6000.c	15 Jul 2002 09:06:31 -0000
 @@ -8836,30 +8836,45 @@ rs6000_emit_prologue ()
       the store-multiple instructions.  */
    if (using_store_multiple)
      {
 -      rtvec p, dwarfp;
 -      int i;
 -      p = rtvec_alloc (32 - info->first_gp_reg_save);
 -      dwarfp = rtvec_alloc (32 - info->first_gp_reg_save);
 -      for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 +      int n = info->first_gp_reg_save;
 +
 +      while (n < 32
 +	     && !((regs_ever_live[n]
 +		   && ! call_used_regs[n])
 +		  || (n == RS6000_PIC_OFFSET_TABLE_REGNUM
 +		      && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
 +			  || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
 +	n++;
 +
 +      if (n < 32)
  	{
 -	  rtx addr, reg, mem;
 -	  reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i);
 -	  addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 -			       GEN_INT (info->gp_save_offset 
 -					+ sp_offset 
 -					+ reg_size * i));
 -	  mem = gen_rtx_MEM (reg_mode, addr);
 -	  set_mem_alias_set (mem, rs6000_sr_alias_set);
 +	  rtvec p, dwarfp;
 +	  int i;
 +
 +	  p = rtvec_alloc (32 - n);
 +	  dwarfp = rtvec_alloc (32 - n);
 +	  for (i = 0; i < 32 - n; i++)
 +	    {
 +	      rtx addr, reg, mem;
 +	      reg = gen_rtx_REG (reg_mode, n + i);
 +	      addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 +				   GEN_INT (info->gp_save_offset 
 +					    + sp_offset 
 +					    + reg_size * i));
 +	      mem = gen_rtx_MEM (reg_mode, addr);
 +	      set_mem_alias_set (mem, rs6000_sr_alias_set);
  
 -	  RTVEC_ELT (p, i) = gen_rtx_SET (VOIDmode, mem, reg);
 +	      RTVEC_ELT (p, i) = gen_rtx_SET (VOIDmode, mem, reg);
 +	    }
 +	  insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
 +	  rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, 
 +				NULL_RTX, NULL_RTX);
  	}
 -      insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
 -      rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, 
 -			    NULL_RTX, NULL_RTX);
      }
    else
      {
        int i;
 +
        for (i = 0; i < 32 - info->first_gp_reg_save; i++)
  	if ((regs_ever_live[info->first_gp_reg_save+i] 
  	     && ! call_used_regs[info->first_gp_reg_save+i])
 @@ -9226,24 +9241,38 @@ rs6000_emit_epilogue (sibcall)
       the load-multiple instructions.  */
    if (using_load_multiple)
      {
 -      rtvec p;
 -      p = rtvec_alloc (32 - info->first_gp_reg_save);
 -      for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 -	{
 -	  rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 -				   GEN_INT (info->gp_save_offset 
 -					    + sp_offset 
 -					    + reg_size * i));
 -	  rtx mem = gen_rtx_MEM (reg_mode, addr);
 +      int n = info->first_gp_reg_save;
  
 -	  set_mem_alias_set (mem, rs6000_sr_alias_set);
 +      while (n < 32
 +	     && !((regs_ever_live[n]
 +		   && ! call_used_regs[n])
 +		  || (n == RS6000_PIC_OFFSET_TABLE_REGNUM
 +		      && ((DEFAULT_ABI == ABI_V4 && flag_pic == 1)
 +			  || (DEFAULT_ABI == ABI_DARWIN && flag_pic)))))
 +	n++;
 +
 +      if (n < 32)
 +	{
 +	  rtvec p;
  
 -	  RTVEC_ELT (p, i) = 
 -	    gen_rtx_SET (VOIDmode,
 -			 gen_rtx_REG (reg_mode, info->first_gp_reg_save + i),
 -			 mem);
 +	  p = rtvec_alloc (32 - n);
 +	  for (i = 0; i < 32 - n; i++)
 +	    {
 +	      rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, 
 +				       GEN_INT (info->gp_save_offset 
 +						+ sp_offset 
 +						+ reg_size * i));
 +	      rtx mem = gen_rtx_MEM (reg_mode, addr);
 +
 +	      set_mem_alias_set (mem, rs6000_sr_alias_set);
 +
 +	      RTVEC_ELT (p, i) = 
 +		gen_rtx_SET (VOIDmode,
 +			     gen_rtx_REG (reg_mode, n + i),
 +			     mem);
 +	    }
 +	  emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
  	}
 -      emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
      }
    else
      for (i = 0; i < 32 - info->first_gp_reg_save; i++)
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre


^ permalink raw reply	[flat|nested] 18+ messages in thread

* other/7114: ICE building strcoll.op from glibc-2.2.5
@ 2002-06-25  2:16 d.mueller
  0 siblings, 0 replies; 18+ messages in thread
From: d.mueller @ 2002-06-25  2:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7114
>Category:       other
>Synopsis:       ICE building strcoll.op from glibc-2.2.5
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 25 01:26:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     d.mueller@elsoft.ch
>Release:        gcc-3.1
>Organization:
>Environment:
PowerPC PPC405GP based hardware, native gcc-3.1, native binutils-2.12.1, glibc-2.2.5
>Description:
If the "-mmultiple" options is specified, GCC throws an ICE while compiling the profiled version of strcoll.c from the "string" subdirectory of glibc-2.2.5. If the "-mmultiple" option is removed, everything is fine.
>How-To-Repeat:
> gcc strcoll.i -c -O2 -Wall -Wbad-function-cast -Wcast-qual -Wcomment -Wcomments -Wfloat-equal -Winline -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wmultichar -Wsign-compare -Wstrict-prototypes -Wtrigraphs -Wwrite-strings -mmultiple -msoft-float -mnew-mnemonics -Wa,-mppc -mpowerpc -pg -nostdinc -o ~/strcoll.op
strcoll.c: In function `findidx':
strcoll.c:549: Attempt to delete prologue/epilogue insn:
(insn 693 692 695 (parallel[ 
            (set (reg:SI 30 r30)
                (mem:SI (plus:SI (reg/f:SI 1 r1)
                        (const_int 24 [0x18])) [1 S4 A8]))
            (set (reg/f:SI 31 r31)
                (mem:SI (plus:SI (reg/f:SI 1 r1)
                        (const_int 28 [0x1c])) [1 S4 A8]))
        ] ) -1 (nil)
    (nil))
strcoll.c:549: Internal compiler error in propagate_one_insn, at flow.c:1615
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

> gcc strcoll.i -c -O2 -Wall -Wbad-function-cast -Wcast-qual -Wcomment -Wcomments -Wfloat-equal -Winline -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wmultichar -Wsign-compare -Wstrict-prototypes -Wtrigraphs -Wwrite-strings -msoft-float -mnew-mnemonics -Wa,-mppc -mpowerpc -pg -nostdinc -o ~/strcoll.op

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="strcoll.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="strcoll.i"

IyAxICJzdHJjb2xsLmMiDQojIDEgIjxidWlsdC1pbj4iDQojIDEgIjxjb21tYW5kIGxpbmU+Ig0K
IyAxICIuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIiAxDQojIDU0ICIuLi9pbmNsdWRlL2xpYmMt
c3ltYm9scy5oIg0KIyAxICIvaG9tZS9jb21waWxlci9idWlsZC1nbGliYy0yLjIuNS1nY2N0ZXN0
L2NvbmZpZy5oIiAxDQojIDU1ICIuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIiAyDQojIDIgIjxj
b21tYW5kIGxpbmU+IiAyDQojIDEgInN0cmNvbGwuYyINCiMgMjAgInN0cmNvbGwuYyINCiMgMSAi
Li4vaW5jbHVkZS9hc3NlcnQuaCIgMQ0KIyAxICIuLi9hc3NlcnQvYXNzZXJ0LmgiIDENCiMgMzYg
Ii4uL2Fzc2VydC9hc3NlcnQuaCINCiMgMSAiLi4vaW5jbHVkZS9mZWF0dXJlcy5oIiAxDQojIDI4
MyAiLi4vaW5jbHVkZS9mZWF0dXJlcy5oIg0KIyAxICIuLi9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx
DQojIDEgIi4uL21pc2Mvc3lzL2NkZWZzLmgiIDENCiMgMiAiLi4vaW5jbHVkZS9zeXMvY2RlZnMu
aCIgMg0KIyAyODQgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIgMg0KIyAzNyAiLi4vYXNzZXJ0L2Fz
c2VydC5oIiAyDQojIDY1ICIuLi9hc3NlcnQvYXNzZXJ0LmgiDQoNCg0KDQpleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9f
Y29uc3QgY2hhciAqX19mdW5jdGlvbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOw0KDQoNCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0s
IF9fY29uc3QgY2hhciAqX19maWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBfX2xpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7DQoNCg0KDQoNCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2Vy
dGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQ0KICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7DQoNCg0KDQojIDIgIi4uL2luY2x1ZGUvYXNzZXJ0LmgiIDINCiMg
MjEgInN0cmNvbGwuYyIgMg0KIyAxICIuLi9pbmNsdWRlL2xhbmdpbmZvLmgiIDENCiMgMSAiLi4v
bG9jYWxlL2xhbmdpbmZvLmgiIDENCiMgMjQgIi4uL2xvY2FsZS9sYW5naW5mby5oIg0KIyAxICIu
Li9pbmNsdWRlL25sX3R5cGVzLmgiIDENCiMgMSAiLi4vY2F0Z2V0cy9ubF90eXBlcy5oIiAxDQoj
IDMxICIuLi9jYXRnZXRzL25sX3R5cGVzLmgiDQoNCg0KDQp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7
DQoNCg0KdHlwZWRlZiBpbnQgbmxfaXRlbTsNCg0KDQpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChf
X2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIDsNCg0KDQoNCmV4dGVybiBjaGFy
ICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0LCBpbnQgX19udW1iZXIsDQog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgOw0KDQoNCmV4dGVy
biBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSA7DQoNCg0KIyAyICIuLi9pbmNsdWRl
L25sX3R5cGVzLmgiIDINCiMgMjUgIi4uL2xvY2FsZS9sYW5naW5mby5oIiAyDQoNCiMgMSAiLi4v
aW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxDQojIDEgIi4uL2xvY2FsZS9iaXRzL2xvY2FsZS5oIiAx
DQojIDI3ICIuLi9sb2NhbGUvYml0cy9sb2NhbGUuaCINCmVudW0NCnsNCiAgX19MQ19DVFlQRSA9
IDAsDQogIF9fTENfTlVNRVJJQyA9IDEsDQogIF9fTENfVElNRSA9IDIsDQogIF9fTENfQ09MTEFU
RSA9IDMsDQogIF9fTENfTU9ORVRBUlkgPSA0LA0KICBfX0xDX01FU1NBR0VTID0gNSwNCiAgX19M
Q19BTEwgPSA2LA0KICBfX0xDX1BBUEVSID0gNywNCiAgX19MQ19OQU1FID0gOCwNCiAgX19MQ19B
RERSRVNTID0gOSwNCiAgX19MQ19URUxFUEhPTkUgPSAxMCwNCiAgX19MQ19NRUFTVVJFTUVOVCA9
IDExLA0KICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTINCn07DQojIDIgIi4uL2luY2x1ZGUvYml0
cy9sb2NhbGUuaCIgMg0KIyAyNyAiLi4vbG9jYWxlL2xhbmdpbmZvLmgiIDINCg0KDQoNCiMgNDMg
Ii4uL2xvY2FsZS9sYW5naW5mby5oIg0KZW51bQ0Kew0KDQoNCg0KICBBQkRBWV8xID0gKCgoX19M
Q19USU1FKSA8PCAxNikgfCAoMCkpLA0KDQogIEFCREFZXzIsDQoNCiAgQUJEQVlfMywNCg0KICBB
QkRBWV80LA0KDQogIEFCREFZXzUsDQoNCiAgQUJEQVlfNiwNCg0KICBBQkRBWV83LA0KDQoNCg0K
ICBEQVlfMSwNCg0KICBEQVlfMiwNCg0KICBEQVlfMywNCg0KICBEQVlfNCwNCg0KICBEQVlfNSwN
Cg0KICBEQVlfNiwNCg0KICBEQVlfNywNCg0KDQoNCiAgQUJNT05fMSwNCg0KICBBQk1PTl8yLA0K
DQogIEFCTU9OXzMsDQoNCiAgQUJNT05fNCwNCg0KICBBQk1PTl81LA0KDQogIEFCTU9OXzYsDQoN
CiAgQUJNT05fNywNCg0KICBBQk1PTl84LA0KDQogIEFCTU9OXzksDQoNCiAgQUJNT05fMTAsDQoN
CiAgQUJNT05fMTEsDQoNCiAgQUJNT05fMTIsDQoNCg0KDQogIE1PTl8xLA0KDQogIE1PTl8yLA0K
DQogIE1PTl8zLA0KDQogIE1PTl80LA0KDQogIE1PTl81LA0KDQogIE1PTl82LA0KDQogIE1PTl83
LA0KDQogIE1PTl84LA0KDQogIE1PTl85LA0KDQogIE1PTl8xMCwNCg0KICBNT05fMTEsDQoNCiAg
TU9OXzEyLA0KDQoNCiAgQU1fU1RSLA0KDQogIFBNX1NUUiwNCg0KDQogIERfVF9GTVQsDQoNCiAg
RF9GTVQsDQoNCiAgVF9GTVQsDQoNCiAgVF9GTVRfQU1QTSwNCg0KDQogIEVSQSwNCg0KICBfX0VS
QV9ZRUFSLA0KDQoNCg0KICBFUkFfRF9GTVQsDQoNCiAgQUxUX0RJR0lUUywNCg0KICBFUkFfRF9U
X0ZNVCwNCg0KICBFUkFfVF9GTVQsDQoNCg0KICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsDQog
IF9OTF9USU1FX0VSQV9FTlRSSUVTLA0KDQogIF9OTF9XQUJEQVlfMSwNCiAgX05MX1dBQkRBWV8y
LA0KICBfTkxfV0FCREFZXzMsDQogIF9OTF9XQUJEQVlfNCwNCiAgX05MX1dBQkRBWV81LA0KICBf
TkxfV0FCREFZXzYsDQogIF9OTF9XQUJEQVlfNywNCg0KDQogIF9OTF9XREFZXzEsDQogIF9OTF9X
REFZXzIsDQogIF9OTF9XREFZXzMsDQogIF9OTF9XREFZXzQsDQogIF9OTF9XREFZXzUsDQogIF9O
TF9XREFZXzYsDQogIF9OTF9XREFZXzcsDQoNCg0KICBfTkxfV0FCTU9OXzEsDQogIF9OTF9XQUJN
T05fMiwNCiAgX05MX1dBQk1PTl8zLA0KICBfTkxfV0FCTU9OXzQsDQogIF9OTF9XQUJNT05fNSwN
CiAgX05MX1dBQk1PTl82LA0KICBfTkxfV0FCTU9OXzcsDQogIF9OTF9XQUJNT05fOCwNCiAgX05M
X1dBQk1PTl85LA0KICBfTkxfV0FCTU9OXzEwLA0KICBfTkxfV0FCTU9OXzExLA0KICBfTkxfV0FC
TU9OXzEyLA0KDQoNCiAgX05MX1dNT05fMSwNCiAgX05MX1dNT05fMiwNCiAgX05MX1dNT05fMywN
CiAgX05MX1dNT05fNCwNCiAgX05MX1dNT05fNSwNCiAgX05MX1dNT05fNiwNCiAgX05MX1dNT05f
NywNCiAgX05MX1dNT05fOCwNCiAgX05MX1dNT05fOSwNCiAgX05MX1dNT05fMTAsDQogIF9OTF9X
TU9OXzExLA0KICBfTkxfV01PTl8xMiwNCg0KICBfTkxfV0FNX1NUUiwNCiAgX05MX1dQTV9TVFIs
DQoNCiAgX05MX1dEX1RfRk1ULA0KICBfTkxfV0RfRk1ULA0KICBfTkxfV1RfRk1ULA0KICBfTkxf
V1RfRk1UX0FNUE0sDQoNCiAgX05MX1dFUkFfWUVBUiwNCiAgX05MX1dFUkFfRF9GTVQsDQogIF9O
TF9XQUxUX0RJR0lUUywNCiAgX05MX1dFUkFfRF9UX0ZNVCwNCiAgX05MX1dFUkFfVF9GTVQsDQoN
CiAgX05MX1RJTUVfV0VFS19OREFZUywNCiAgX05MX1RJTUVfV0VFS18xU1REQVksDQogIF9OTF9U
SU1FX1dFRUtfMVNUV0VFSywNCiAgX05MX1RJTUVfRklSU1RfV0VFS0RBWSwNCiAgX05MX1RJTUVf
RklSU1RfV09SS0RBWSwNCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwNCiAgX05MX1RJTUVfVElN
RVpPTkUsDQoNCiAgX0RBVEVfRk1ULA0KDQogIF9OTF9XX0RBVEVfRk1ULA0KDQogIF9OTF9USU1F
X0NPREVTRVQsDQoNCiAgX05MX05VTV9MQ19USU1FLA0KDQoNCg0KDQogIF9OTF9DT0xMQVRFX05S
VUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwNCiAgX05MX0NPTExBVEVfUlVM
RVNFVFMsDQogIF9OTF9DT0xMQVRFX1RBQkxFTUIsDQogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLA0K
ICBfTkxfQ09MTEFURV9FWFRSQU1CLA0KICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLA0KICBfTkxf
Q09MTEFURV9HQVAxLA0KICBfTkxfQ09MTEFURV9HQVAyLA0KICBfTkxfQ09MTEFURV9HQVAzLA0K
ICBfTkxfQ09MTEFURV9UQUJMRVdDLA0KICBfTkxfQ09MTEFURV9XRUlHSFRXQywNCiAgX05MX0NP
TExBVEVfRVhUUkFXQywNCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywNCiAgX05MX0NPTExBVEVf
U1lNQl9IQVNIX1NJWkVNQiwNCiAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CLA0KICBfTkxfQ09M
TEFURV9TWU1CX0VYVFJBTUIsDQogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwNCiAgX05MX0NPTExB
VEVfQ09MTFNFUVdDLA0KICBfTkxfQ09MTEFURV9DT0RFU0VULA0KICBfTkxfTlVNX0xDX0NPTExB
VEUsDQoNCg0KDQoNCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwg
KDApKSwNCiAgX05MX0NUWVBFX1RPVVBQRVIsDQogIF9OTF9DVFlQRV9HQVAxLA0KICBfTkxfQ1RZ
UEVfVE9MT1dFUiwNCiAgX05MX0NUWVBFX0dBUDIsDQogIF9OTF9DVFlQRV9DTEFTUzMyLA0KICBf
TkxfQ1RZUEVfR0FQMywNCiAgX05MX0NUWVBFX0dBUDQsDQogIF9OTF9DVFlQRV9HQVA1LA0KICBf
TkxfQ1RZUEVfR0FQNiwNCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLA0KICBfTkxfQ1RZUEVfTUFQ
X05BTUVTLA0KICBfTkxfQ1RZUEVfV0lEVEgsDQogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLA0KICBf
TkxfQ1RZUEVfQ09ERVNFVF9OQU1FLA0KICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFN
RSwNCg0KICBfTkxfQ1RZUEVfVE9VUFBFUjMyLA0KICBfTkxfQ1RZUEVfVE9MT1dFUjMyLA0KICBf
TkxfQ1RZUEVfQ0xBU1NfT0ZGU0VULA0KICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwNCiAgX05MX0NU
WVBFX0lORElHSVRTX01CX0xFTiwNCiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwNCiAgX05MX0NU
WVBFX0lORElHSVRTMV9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwNCiAgX05MX0NUWVBF
X0lORElHSVRTM19NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwNCiAgX05MX0NUWVBFX0lO
RElHSVRTNV9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTNl9NQiwNCiAgX05MX0NUWVBFX0lORElH
SVRTN19NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRT
OV9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwNCiAgX05MX0NUWVBFX0lORElHSVRT
MF9XQywNCiAgX05MX0NUWVBFX0lORElHSVRTMV9XQywNCiAgX05MX0NUWVBFX0lORElHSVRTMl9X
QywNCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywNCiAgX05MX0NUWVBFX0lORElHSVRTNF9XQywN
CiAgX05MX0NUWVBFX0lORElHSVRTNV9XQywNCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywNCiAg
X05MX0NUWVBFX0lORElHSVRTN19XQywNCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywNCiAgX05M
X0NUWVBFX0lORElHSVRTOV9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUMF9NQiwNCiAgX05MX0NU
WVBFX09VVERJR0lUMV9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwNCiAgX05MX0NUWVBF
X09VVERJR0lUM19NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUNF9NQiwNCiAgX05MX0NUWVBFX09V
VERJR0lUNV9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwNCiAgX05MX0NUWVBFX09VVERJ
R0lUN19NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lU
OV9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUMF9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUMV9X
QywNCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywN
CiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUNV9XQywNCiAg
X05MX0NUWVBFX09VVERJR0lUNl9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywNCiAgX05M
X0NUWVBFX09VVERJR0lUOF9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUOV9XQywNCiAgX05MX0NU
WVBFX1RSQU5TTElUX1RBQl9TSVpFLA0KICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgsDQog
IF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwNCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lE
WCwNCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCwNCiAgX05MX0NUWVBFX1RSQU5TTElUX0RF
RkFVTFRfTUlTU0lOR19MRU4sDQogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcs
DQogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkVfTEVOLA0KICBfTkxfQ1RZUEVfVFJBTlNMSVRf
SUdOT1JFLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsDQogIF9OTF9DVFlQRV9FWFRSQV9NQVBf
MiwNCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsDQog
IF9OTF9DVFlQRV9FWFRSQV9NQVBfNSwNCiAgX05MX0NUWVBFX0VYVFJBX01BUF82LA0KICBfTkxf
Q1RZUEVfRVhUUkFfTUFQXzcsDQogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwNCiAgX05MX0NUWVBF
X0VYVFJBX01BUF85LA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLA0KICBfTkxfQ1RZUEVfRVhU
UkFfTUFQXzExLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLA0KICBfTkxfQ1RZUEVfRVhUUkFf
TUFQXzEzLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzE0LA0KICBfTkxfTlVNX0xDX0NUWVBFLA0K
DQoNCg0KDQogIF9fSU5UX0NVUlJfU1lNQk9MID0gKCgoX19MQ19NT05FVEFSWSkgPDwgMTYpIHwg
KDApKSwNCg0KDQoNCiAgX19DVVJSRU5DWV9TWU1CT0wsDQoNCg0KDQogIF9fTU9OX0RFQ0lNQUxf
UE9JTlQsDQoNCg0KDQogIF9fTU9OX1RIT1VTQU5EU19TRVAsDQoNCg0KDQogIF9fTU9OX0dST1VQ
SU5HLA0KDQoNCg0KICBfX1BPU0lUSVZFX1NJR04sDQoNCg0KDQogIF9fTkVHQVRJVkVfU0lHTiwN
Cg0KDQoNCiAgX19JTlRfRlJBQ19ESUdJVFMsDQoNCg0KDQogIF9fRlJBQ19ESUdJVFMsDQoNCg0K
DQogIF9fUF9DU19QUkVDRURFUywNCg0KDQoNCiAgX19QX1NFUF9CWV9TUEFDRSwNCg0KDQoNCiAg
X19OX0NTX1BSRUNFREVTLA0KDQoNCg0KICBfX05fU0VQX0JZX1NQQUNFLA0KDQoNCg0KICBfX1Bf
U0lHTl9QT1NOLA0KDQoNCg0KICBfX05fU0lHTl9QT1NOLA0KDQoNCg0KICBfTkxfTU9ORVRBUllf
Q1JOQ1lTVFIsDQoNCiAgX19JTlRfUF9DU19QUkVDRURFUywNCg0KDQoNCiAgX19JTlRfUF9TRVBf
QllfU1BBQ0UsDQoNCg0KDQogIF9fSU5UX05fQ1NfUFJFQ0VERVMsDQoNCg0KDQogIF9fSU5UX05f
U0VQX0JZX1NQQUNFLA0KDQoNCg0KICBfX0lOVF9QX1NJR05fUE9TTiwNCg0KDQoNCiAgX19JTlRf
Tl9TSUdOX1BPU04sDQoNCg0KDQogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLA0K
ICBfTkxfTU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwNCiAgX05MX01PTkVUQVJZX0RVT19J
TlRfRlJBQ19ESUdJVFMsDQogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsDQogIF9OTF9N
T05FVEFSWV9EVU9fUF9DU19QUkVDRURFUywNCiAgX05MX01PTkVUQVJZX0RVT19QX1NFUF9CWV9T
UEFDRSwNCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLA0KICBfTkxfTU9ORVRBUllf
RFVPX05fU0VQX0JZX1NQQUNFLA0KICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX0NTX1BSRUNFREVT
LA0KICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwNCiAgX05MX01PTkVUQVJZ
X0RVT19JTlRfTl9DU19QUkVDRURFUywNCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TRVBfQllf
U1BBQ0UsDQogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04sDQogIF9OTF9NT05FVEFSWV9E
VU9fTl9TSUdOX1BPU04sDQogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9QT1NOLA0KICBf
TkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwNCiAgX05MX01PTkVUQVJZX1VOT19WQUxJ
RF9GUk9NLA0KICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLA0KICBfTkxfTU9ORVRBUllfRFVP
X1ZBTElEX0ZST00sDQogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURfVE8sDQogIF9OTF9NT05FVEFS
WV9DT05WRVJTSU9OX1JBVEUsDQogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLA0KICBf
TkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywNCiAgX05MX01PTkVUQVJZX0NPREVTRVQsDQog
IF9OTF9OVU1fTENfTU9ORVRBUlksDQoNCg0KDQogIF9fREVDSU1BTF9QT0lOVCA9ICgoKF9fTENf
TlVNRVJJQykgPDwgMTYpIHwgKDApKSwNCg0KDQoNCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BP
SU5ULA0KDQogIF9fVEhPVVNBTkRTX1NFUCwNCg0KDQoNCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRT
X1NFUCwNCg0KICBfX0dST1VQSU5HLA0KDQoNCg0KICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5U
X1dDLA0KICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLA0KICBfTkxfTlVNRVJJQ19DT0RF
U0VULA0KICBfTkxfTlVNX0xDX05VTUVSSUMsDQoNCiAgX19ZRVNFWFBSID0gKCgoX19MQ19NRVNT
QUdFUykgPDwgMTYpIHwgKDApKSwNCg0KICBfX05PRVhQUiwNCg0KICBfX1lFU1NUUiwNCg0KDQoN
CiAgX19OT1NUUiwNCg0KDQoNCiAgX05MX01FU1NBR0VTX0NPREVTRVQsDQogIF9OTF9OVU1fTENf
TUVTU0FHRVMsDQoNCiAgX05MX1BBUEVSX0hFSUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8
ICgwKSksDQogIF9OTF9QQVBFUl9XSURUSCwNCiAgX05MX1BBUEVSX0NPREVTRVQsDQogIF9OTF9O
VU1fTENfUEFQRVIsDQoNCiAgX05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2
KSB8ICgwKSksDQogIF9OTF9OQU1FX05BTUVfR0VOLA0KICBfTkxfTkFNRV9OQU1FX01SLA0KICBf
TkxfTkFNRV9OQU1FX01SUywNCiAgX05MX05BTUVfTkFNRV9NSVNTLA0KICBfTkxfTkFNRV9OQU1F
X01TLA0KICBfTkxfTkFNRV9DT0RFU0VULA0KICBfTkxfTlVNX0xDX05BTUUsDQoNCiAgX05MX0FE
RFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwNCiAgX05M
X0FERFJFU1NfQ09VTlRSWV9OQU1FLA0KICBfTkxfQUREUkVTU19DT1VOVFJZX1BPU1QsDQogIF9O
TF9BRERSRVNTX0NPVU5UUllfQUIyLA0KICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywNCiAgX05M
X0FERFJFU1NfQ09VTlRSWV9DQVIsDQogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLA0KICBfTkxf
QUREUkVTU19DT1VOVFJZX0lTQk4sDQogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwNCiAgX05MX0FE
RFJFU1NfTEFOR19BQiwNCiAgX05MX0FERFJFU1NfTEFOR19URVJNLA0KICBfTkxfQUREUkVTU19M
QU5HX0xJQiwNCiAgX05MX0FERFJFU1NfQ09ERVNFVCwNCiAgX05MX05VTV9MQ19BRERSRVNTLA0K
DQogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYp
IHwgKDApKSwNCiAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwNCiAgX05MX1RFTEVQSE9ORV9J
TlRfU0VMRUNULA0KICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsDQogIF9OTF9URUxFUEhPTkVf
Q09ERVNFVCwNCiAgX05MX05VTV9MQ19URUxFUEhPTkUsDQoNCiAgX05MX01FQVNVUkVNRU5UX01F
QVNVUkVNRU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwNCiAgX05MX01F
QVNVUkVNRU5UX0NPREVTRVQsDQogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsDQoNCiAgX05MX0lE
RU5USUZJQ0FUSU9OX1RJVExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDAp
KSwNCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwNCiAgX05MX0lERU5USUZJQ0FUSU9OX0FE
RFJFU1MsDQogIF9OTF9JREVOVElGSUNBVElPTl9DT05UQUNULA0KICBfTkxfSURFTlRJRklDQVRJ
T05fRU1BSUwsDQogIF9OTF9JREVOVElGSUNBVElPTl9URUwsDQogIF9OTF9JREVOVElGSUNBVElP
Tl9GQVgsDQogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwNCiAgX05MX0lERU5USUZJQ0FU
SU9OX1RFUlJJVE9SWSwNCiAgX05MX0lERU5USUZJQ0FUSU9OX0FVRElFTkNFLA0KICBfTkxfSURF
TlRJRklDQVRJT05fQVBQTElDQVRJT04sDQogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJQVRJ
T04sDQogIF9OTF9JREVOVElGSUNBVElPTl9SRVZJU0lPTiwNCiAgX05MX0lERU5USUZJQ0FUSU9O
X0RBVEUsDQogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwNCiAgX05MX0lERU5USUZJQ0FU
SU9OX0NPREVTRVQsDQogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sDQoNCg0KICBfTkxfTlVN
DQp9Ow0KIyA1NzUgIi4uL2xvY2FsZS9sYW5naW5mby5oIg0KZXh0ZXJuIGNoYXIgKm5sX2xhbmdp
bmZvIChubF9pdGVtIF9faXRlbSkgOw0KDQoNCg0KDQoNCg0KDQojIDEgIi4uL2luY2x1ZGUveGxv
Y2FsZS5oIiAxDQojIDEgIi4uL2xvY2FsZS94bG9jYWxlLmgiIDENCiMgMjggIi4uL2xvY2FsZS94
bG9jYWxlLmgiDQp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QNCnsNCg0KICBzdHJ1Y3Qg
bG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107DQoNCg0KICBjb25zdCB1bnNpZ25lZCBzaG9ydCBp
bnQgKl9fY3R5cGVfYjsNCiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7DQogIGNvbnN0IGlu
dCAqX19jdHlwZV90b3VwcGVyOw0KfSAqX19sb2NhbGVfdDsNCiMgMiAiLi4vaW5jbHVkZS94bG9j
YWxlLmgiIDINCiMgNTg0ICIuLi9sb2NhbGUvbGFuZ2luZm8uaCIgMg0KDQoNCmV4dGVybiBjaGFy
ICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOw0KDQoNCg0K
IyAyICIuLi9pbmNsdWRlL2xhbmdpbmZvLmgiIDINCiMgMjIgInN0cmNvbGwuYyIgMg0KIyAxICIu
Li9pbmNsdWRlL2xvY2FsZS5oIiAxDQoNCiMgMSAiLi4vbG9jYWxlL2xvY2FsZS5oIiAxDQojIDI5
ICIuLi9sb2NhbGUvbG9jYWxlLmgiDQojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtu
b3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDMwICIuLi9sb2NhbGUv
bG9jYWxlLmgiIDINCiMgMSAiLi4vaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxDQojIDEgIi4uL2xv
Y2FsZS9iaXRzL2xvY2FsZS5oIiAxDQojIDIgIi4uL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMg0K
IyAzMSAiLi4vbG9jYWxlL2xvY2FsZS5oIiAyDQoNCg0KIyA1MiAiLi4vbG9jYWxlL2xvY2FsZS5o
Ig0Kc3RydWN0IGxjb252DQp7DQoNCg0KICBjaGFyICpkZWNpbWFsX3BvaW50Ow0KICBjaGFyICp0
aG91c2FuZHNfc2VwOw0KDQoNCg0KDQoNCiAgY2hhciAqZ3JvdXBpbmc7DQoNCg0KDQoNCg0KICBj
aGFyICppbnRfY3Vycl9zeW1ib2w7DQogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsNCiAgY2hhciAq
bW9uX2RlY2ltYWxfcG9pbnQ7DQogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOw0KICBjaGFyICpt
b25fZ3JvdXBpbmc7DQogIGNoYXIgKnBvc2l0aXZlX3NpZ247DQogIGNoYXIgKm5lZ2F0aXZlX3Np
Z247DQogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOw0KICBjaGFyIGZyYWNfZGlnaXRzOw0KDQogIGNo
YXIgcF9jc19wcmVjZWRlczsNCg0KICBjaGFyIHBfc2VwX2J5X3NwYWNlOw0KDQogIGNoYXIgbl9j
c19wcmVjZWRlczsNCg0KICBjaGFyIG5fc2VwX2J5X3NwYWNlOw0KDQoNCg0KDQoNCg0KICBjaGFy
IHBfc2lnbl9wb3NuOw0KICBjaGFyIG5fc2lnbl9wb3NuOw0KDQoNCiAgY2hhciBpbnRfcF9jc19w
cmVjZWRlczsNCg0KICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsNCg0KICBjaGFyIGludF9uX2Nz
X3ByZWNlZGVzOw0KDQogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOw0KDQoNCg0KDQoNCg0KICBj
aGFyIGludF9wX3NpZ25fcG9zbjsNCiAgY2hhciBpbnRfbl9zaWduX3Bvc247DQojIDExOSAiLi4v
bG9jYWxlL2xvY2FsZS5oIg0KfTsNCg0KDQoNCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBf
X2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSA7DQoNCg0KZXh0ZXJuIHN0cnVjdCBs
Y29udiAqbG9jYWxlY29udiAodm9pZCkgOw0KIyAxNDEgIi4uL2xvY2FsZS9sb2NhbGUuaCINCiMg
MSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDENCiMgMTQyICIuLi9sb2NhbGUvbG9jYWxlLmgiIDIN
Cg0KDQoNCg0KDQoNCg0KZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVn
b3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIDsNCg0KDQoNCmV4dGVybiBfX2xvY2FsZV90IF9f
ZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgOw0KDQoNCg0KZXh0ZXJuIHZvaWQgX19m
cmVlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgOw0KDQoNCg0KIyAzICIuLi9pbmNsdWRl
L2xvY2FsZS5oIiAyDQoNCg0KZXh0ZXJuIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QgX25sX0NfbG9j
b2JqOw0KDQoNCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKl9fbG9jYWxlY29udiAodm9pZCk7DQojIDIz
ICJzdHJjb2xsLmMiIDINCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGlu
dXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGli
L3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVk
ZWYgaW50IHB0cmRpZmZfdDsNCiMgMjAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93
bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsNCiMgMjk0ICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1n
bnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsNCiMg
MjQgInN0cmNvbGwuYyIgMg0KIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiIDENCiMg
MjcgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCINCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmlj
L2JpdHMvd2NoYXIuaCIgMQ0KIyAyOCAiLi4vc3lzZGVwcy9nZW5lcmljL3N0ZGludC5oIiAyDQoj
IDEgIi4uL3N5c2RlcHMvd29yZHNpemUtMzIvYml0cy93b3Jkc2l6ZS5oIiAxDQojIDI5ICIuLi9z
eXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiIDINCiMgMzcgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRp
bnQuaCINCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90Ow0KdHlwZWRlZiBzaG9ydCBpbnQgaW50
MTZfdDsNCnR5cGVkZWYgaW50IGludDMyX3Q7DQoNCg0KDQpfX2V4dGVuc2lvbl9fDQp0eXBlZGVm
IGxvbmcgbG9uZyBpbnQgaW50NjRfdDsNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVp
bnQ4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsNCg0KdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDMyX3Q7DQoNCg0KDQoNCg0KX19leHRlbnNpb25fXw0KdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90Ow0KDQoNCg0KDQoNCg0KdHlwZWRlZiBzaWdu
ZWQgY2hhciBpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Ow0K
dHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsNCg0KDQoNCl9fZXh0ZW5zaW9uX18NCnR5cGVkZWYg
bG9uZyBsb25nIGludCBpbnRfbGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHVpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50X2xlYXN0MTZf
dDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90Ow0KDQoNCg0KX19leHRlbnNp
b25fXw0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfbGVhc3Q2NF90Ow0KDQoN
Cg0KDQoNCg0KdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsNCg0KDQoNCg0KDQp0eXBl
ZGVmIGludCBpbnRfZmFzdDE2X3Q7DQp0eXBlZGVmIGludCBpbnRfZmFzdDMyX3Q7DQpfX2V4dGVu
c2lvbl9fDQp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90Ow0KDQoNCg0KdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVk
IGludCB1aW50X2Zhc3QxNl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsN
Cl9fZXh0ZW5zaW9uX18NCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zhc3Q2
NF90Ow0KIyAxMjYgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCINCnR5cGVkZWYgaW50IGlu
dHB0cl90Ow0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsNCiMgMTM4ICIuLi9z
eXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiDQpfX2V4dGVuc2lvbl9fDQp0eXBlZGVmIGxvbmcgbG9u
ZyBpbnQgaW50bWF4X3Q7DQpfX2V4dGVuc2lvbl9fDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgdWludG1heF90Ow0KIyAyNSAic3RyY29sbC5jIiAyDQojIDEgIi4uL2luY2x1ZGUvc3Rk
bGliLmgiIDENCg0KDQoNCg0KDQoNCiMgMSAiLi4vc3RkbGliL3N0ZGxpYi5oIiAxDQojIDMzICIu
Li9zdGRsaWIvc3RkbGliLmgiDQojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3du
LWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDM0ICIuLi9zdGRsaWIvc3Rk
bGliLmgiIDINCg0KDQoNCg0KDQoNCg0KDQojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4
L2JpdHMvd2FpdGZsYWdzLmgiIDENCiMgNDMgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMg0KIyAxICIu
Li9zeXNkZXBzL2dlbmVyaWMvYml0cy93YWl0c3RhdHVzLmgiIDENCiMgNjMgIi4uL3N5c2RlcHMv
Z2VuZXJpYy9iaXRzL3dhaXRzdGF0dXMuaCINCiMgMSAiLi4vaW5jbHVkZS9lbmRpYW4uaCIgMQ0K
IyAxICIuLi9zdHJpbmcvZW5kaWFuLmgiIDENCiMgMzcgIi4uL3N0cmluZy9lbmRpYW4uaCINCiMg
MSAiLi4vc3lzZGVwcy9wb3dlcnBjL2JpdHMvZW5kaWFuLmgiIDENCiMgMzggIi4uL3N0cmluZy9l
bmRpYW4uaCIgMg0KIyAyICIuLi9pbmNsdWRlL2VuZGlhbi5oIiAyDQojIDY0ICIuLi9zeXNkZXBz
L2dlbmVyaWMvYml0cy93YWl0c3RhdHVzLmgiIDINCg0KdW5pb24gd2FpdA0KICB7DQogICAgaW50
IHdfc3RhdHVzOw0KICAgIHN0cnVjdA0KICAgICAgew0KDQoNCg0KDQoNCg0KDQogICAgICAgIHVu
c2lnbmVkIGludDoxNjsNCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7DQogICAg
ICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsNCiAgICAgICAgdW5zaWduZWQgaW50IF9f
d190ZXJtc2lnOjc7DQoNCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7DQogICAgc3RydWN0DQog
ICAgICB7DQoNCg0KDQoNCg0KDQogICAgICAgIHVuc2lnbmVkIGludDoxNjsNCiAgICAgICAgdW5z
aWduZWQgaW50IF9fd19zdG9wc2lnOjg7DQogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZh
bDo4Ow0KDQogICAgICB9IF9fd2FpdF9zdG9wcGVkOw0KICB9Ow0KIyA0NCAiLi4vc3RkbGliL3N0
ZGxpYi5oIiAyDQojIDY4ICIuLi9zdGRsaWIvc3RkbGliLmgiDQp0eXBlZGVmIHVuaW9uDQogIHsN
CiAgICB1bmlvbiB3YWl0ICpfX3VwdHI7DQogICAgaW50ICpfX2lwdHI7DQogIH0gX19XQUlUX1NU
QVRVUyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7DQojIDk0ICIuLi9z
dGRsaWIvc3RkbGliLmgiDQp0eXBlZGVmIHN0cnVjdA0KICB7DQogICAgaW50IHF1b3Q7DQogICAg
aW50IHJlbTsNCiAgfSBkaXZfdDsNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQogIHsNCiAgICBsb25n
IGludCBxdW90Ow0KICAgIGxvbmcgaW50IHJlbTsNCiAgfSBsZGl2X3Q7DQoNCg0KDQoNCg0KX19l
eHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdA0KICB7DQogICAgbG9uZyBsb25nIGludCBxdW90Ow0K
ICAgIGxvbmcgbG9uZyBpbnQgcmVtOw0KICB9IGxsZGl2X3Q7DQojIDEzMyAiLi4vc3RkbGliL3N0
ZGxpYi5oIg0KZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7DQoN
Cg0KDQpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsNCg0KZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0
cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQpf
X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9f
bnB0cikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQpleHRlcm4gZG91
YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgOw0KDQoNCg0KZXh0ZXJuIGZs
b2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7DQoNCmV4dGVybiBsb25nIGRv
dWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7DQoNCg0KDQpl
eHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIDsNCg0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpDQogICAgIDsNCg0KDQoNCl9f
ZXh0ZW5zaW9uX18NCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQ0KICAgICA7DQoNCg0KDQoNCg0KDQpfX2V4
dGVuc2lvbl9fDQpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpDQogICAgIDsNCiMgMjExICIuLi9zdGRs
aWIvc3RkbGliLmgiDQojIDEgIi4uL2luY2x1ZGUveGxvY2FsZS5oIiAxDQojIDIxMiAiLi4vc3Rk
bGliL3N0ZGxpYi5oIiAyDQoNCg0KDQpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7DQoNCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu
dCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9j
YWxlX3QgX19sb2MpIDsNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19z
dHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg
Ow0KDQpfX2V4dGVuc2lvbl9fDQpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRv
dWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBf
X2xvY2FsZV90IF9fbG9jKQ0KICAgICA7DQoNCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpDQogICAgIDsNCg0K
ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9f
bG9jYWxlX3QgX19sb2MpIDsNCg0KZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOw0KDQoNCg0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBf
X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19ncm91cCkNCiAgICAgOw0KZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApDQogICAgIDsNCmV4
dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2dyb3VwKSA7DQoNCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7DQoNCg0KDQpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOw0KDQoN
Cg0KDQpfX2V4dGVuc2lvbl9fDQpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgOw0KDQoNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkNCiAgICAgOw0KDQoNCg0KDQoNCg0K
DQpleHRlcm4gX19pbmxpbmUgZG91YmxlDQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQ0Kew0KICByZXR1cm4gX19zdHJ0
b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOw0KfQ0KZXh0ZXJuIF9faW5saW5lIGxv
bmcgaW50DQpzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLA0KICAgICAgICBpbnQgX19iYXNlKQ0Kew0KICByZXR1cm4gX19z
dHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7DQp9DQpleHRlcm4g
X19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQNCnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KICAgICAgICAgaW50IF9f
YmFzZSkNCnsNCiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsNCn0NCg0KDQpleHRlcm4gX19pbmxpbmUgZmxvYXQNCnN0cnRvZiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpDQp7
DQogIHJldHVybiBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7DQp9DQpl
eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUNCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQ0Kew0KICByZXR1cm4gX19z
dHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsNCn0NCg0KDQoNCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQNCnN0cnRvcSAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQogICAgICAg
IGludCBfX2Jhc2UpDQp7DQogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7DQp9DQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNp
Z25lZCBsb25nIGxvbmcgaW50DQpzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCiAgICAgICAgIGludCBfX2Jhc2UpDQp7
DQogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOw0KfQ0KDQoNCg0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGlu
dA0Kc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsDQogICAgICAgICBpbnQgX19iYXNlKQ0Kew0KICByZXR1cm4gX19zdHJ0
b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOw0KfQ0KX19leHRlbnNp
b25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludA0Kc3RydG91bGwgKF9f
Y29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwNCiAgICAgICAgICBpbnQgX19iYXNlKQ0Kew0KICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsNCn0NCg0KDQpleHRlcm4gX19pbmxpbmUg
ZG91YmxlDQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikNCnsNCiAgcmV0dXJuIHN0cnRvZCAo
X19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkpOw0KfQ0KZXh0ZXJuIF9faW5saW5lIGludA0K
YXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpDQp7DQogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9f
bnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7DQp9DQpleHRlcm4gX19pbmxpbmUgbG9u
ZyBpbnQNCmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQ0Kew0KICByZXR1cm4gc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOw0KfQ0KDQoNCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQNCmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0
cikNCnsNCiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAx
MCk7DQp9DQojIDM4NCAiLi4vc3RkbGliL3N0ZGxpYi5oIg0KZXh0ZXJuIGNoYXIgKmw2NGEgKGxv
bmcgaW50IF9fbikgOw0KDQoNCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9f
cykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KIyAxICIuLi9pbmNsdWRlL3N5cy90
eXBlcy5oIiAxDQojIDEgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAxDQojIDI4ICIuLi9wb3NpeC9z
eXMvdHlwZXMuaCINCg0KDQojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvdHlw
ZXMuaCIgMQ0KIyAyOSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90eXBlcy5oIg0K
IyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMw0KIyAzMCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90
eXBlcy5oIiAyDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOw0KdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Ow0K
dHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOw0KDQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90Ow0KX19leHRlbnNpb25fXyB0eXBlZGVm
IGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7DQojIDQ5ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51
eC9iaXRzL3R5cGVzLmgiDQp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Ow0KdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIF9fdWludDhfdDsNCnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2
X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Ow0KdHlwZWRlZiBzaWdu
ZWQgaW50IF9faW50MzJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7DQoNCl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7DQpfX2V4
dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90Ow0KDQp0
eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7DQoNCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90
Ow0KdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7DQp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsNCnR5
cGVkZWYgX191X2xvbmcgX19pbm9fdDsNCnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsNCnR5cGVk
ZWYgX191X2ludCBfX25saW5rX3Q7DQp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7DQp0eXBlZGVm
IF9fcXVhZF90IF9fbG9mZl90Ow0KdHlwZWRlZiBpbnQgX19waWRfdDsNCnR5cGVkZWYgaW50IF9f
c3NpemVfdDsNCnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7DQp0eXBlZGVmIF9fdV9xdWFkX3Qg
X19ybGltNjRfdDsNCnR5cGVkZWYgX191X2ludCBfX2lkX3Q7DQoNCnR5cGVkZWYgc3RydWN0DQog
IHsNCiAgICBpbnQgX192YWxbMl07DQogIH0gX19mc2lkX3Q7DQoNCg0KdHlwZWRlZiBpbnQgX19k
YWRkcl90Ow0KdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7DQp0eXBlZGVmIGxvbmcgaW50IF9fdGlt
ZV90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Ow0KdHlwZWRlZiBsb25nIGlu
dCBfX3N1c2Vjb25kc190Ow0KdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7DQoNCnR5cGVkZWYg
bG9uZyBpbnQgX19jbG9ja190Ow0KDQoNCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90Ow0KDQoNCnR5
cGVkZWYgaW50IF9fdGltZXJfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IF9fa2V5X3Q7DQoN
Cg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7DQoNCg0KDQp0eXBlZGVm
IGxvbmcgaW50IF9fYmxrc2l6ZV90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250
X3Q7DQp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsNCg0KDQp0eXBlZGVmIF9fdV9sb25n
IF9fZnNibGtjbnRfdDsNCnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsNCg0KDQp0
eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsNCnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmls
Y250NjRfdDsNCg0KDQp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90Ow0KDQoNCnR5cGVkZWYg
X19sb2ZmX3QgX19vZmY2NF90Ow0KDQoNCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Ow0K
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90Ow0KDQoNCnR5cGVkZWYgaW50
IF9faW50cHRyX3Q7DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7DQoNCg0K
DQoNCiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAxDQojIDIzICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMvcHRocmVh
ZHR5cGVzLmgiDQojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2NoZWQuaCIg
MQ0KIyA2OCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zY2hlZC5oIg0Kc3RydWN0
IF9fc2NoZWRfcGFyYW0NCiAgew0KICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Ow0KICB9Ow0KIyAy
NCAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBlcy5oIiAy
DQoNCg0Kc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrDQp7DQogIGxvbmcgaW50IF9fc3RhdHVzOw0K
ICBpbnQgX19zcGlubG9jazsNCg0KfTsNCg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rl
c2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX19w
dGhyZWFkX2F0dHJfcw0Kew0KICBpbnQgX19kZXRhY2hzdGF0ZTsNCiAgaW50IF9fc2NoZWRwb2xp
Y3k7DQogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsNCiAgaW50IF9faW5oZXJp
dHNjaGVkOw0KICBpbnQgX19zY29wZTsNCiAgc2l6ZV90IF9fZ3VhcmRzaXplOw0KICBpbnQgX19z
dGFja2FkZHJfc2V0Ow0KICB2b2lkICpfX3N0YWNrYWRkcjsNCiAgc2l6ZV90IF9fc3RhY2tzaXpl
Ow0KfSBwdGhyZWFkX2F0dHJfdDsNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIHN0cnVjdCBf
cHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsNCiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7
DQp9IHB0aHJlYWRfY29uZF90Ow0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgaW50IF9fZHVt
bXk7DQp9IHB0aHJlYWRfY29uZGF0dHJfdDsNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhy
ZWFkX2tleV90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIGludCBfX21fcmVzZXJ2
ZWQ7DQogIGludCBfX21fY291bnQ7DQogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsNCiAgaW50
IF9fbV9raW5kOw0KICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7DQp9IHB0aHJl
YWRfbXV0ZXhfdDsNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIGludCBfX211dGV4a2luZDsN
Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsNCg0KDQoNCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90
Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdA0Kew0KICBzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOw0KICBpbnQgX19yd19yZWFkZXJzOw0KICBfcHRo
cmVhZF9kZXNjciBfX3J3X3dyaXRlcjsNCiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRp
bmc7DQogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsNCiAgaW50IF9fcndfa2lu
ZDsNCiAgaW50IF9fcndfcHNoYXJlZDsNCn0gcHRocmVhZF9yd2xvY2tfdDsNCg0KDQoNCnR5cGVk
ZWYgc3RydWN0DQp7DQogIGludCBfX2xvY2traW5kOw0KICBpbnQgX19wc2hhcmVkOw0KfSBwdGhy
ZWFkX3J3bG9ja2F0dHJfdDsNCg0KDQoNCg0KdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9z
cGlubG9ja190Ow0KDQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rs
b2NrIF9fYmFfbG9jazsNCiAgaW50IF9fYmFfcmVxdWlyZWQ7DQogIGludCBfX2JhX3ByZXNlbnQ7
DQogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsNCn0gcHRocmVhZF9iYXJyaWVyX3Q7DQoN
Cg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBpbnQgX19wc2hhcmVkOw0KfSBwdGhyZWFkX2JhcnJpZXJh
dHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7DQoj
IDE0NCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90eXBlcy5oIiAyDQojIDMxICIu
Li9wb3NpeC9zeXMvdHlwZXMuaCIgMg0KDQoNCg0KdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7DQp0
eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Ow0KdHlwZWRlZiBfX3VfaW50IHVfaW50Ow0KdHlwZWRl
ZiBfX3VfbG9uZyB1X2xvbmc7DQp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsNCnR5cGVkZWYgX191
X3F1YWRfdCB1X3F1YWRfdDsNCnR5cGVkZWYgX19mc2lkX3QgZnNpZF90Ow0KDQoNCg0KDQp0eXBl
ZGVmIF9fbG9mZl90IGxvZmZfdDsNCg0KDQoNCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsNCg0KDQoN
Cg0KDQoNCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7DQoNCg0KDQoNCnR5cGVkZWYgX19kZXZf
dCBkZXZfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX2dpZF90IGdpZF90Ow0KDQoNCg0KDQp0eXBlZGVm
IF9fbW9kZV90IG1vZGVfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsNCg0K
DQoNCg0KdHlwZWRlZiBfX3VpZF90IHVpZF90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgX19vZmZfdCBv
ZmZfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7DQoNCg0KDQoNCnR5
cGVkZWYgX19waWRfdCBwaWRfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX2lkX3QgaWRfdDsNCg0KDQoN
Cg0KdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIF9fZGFkZHJf
dCBkYWRkcl90Ow0KdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsNCg0KDQoNCg0KDQp0eXBlZGVm
IF9fa2V5X3Qga2V5X3Q7DQojIDEzMiAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiDQojIDEgIi4uL2lu
Y2x1ZGUvdGltZS5oIiAxDQoNCg0KIyAxICIuLi90aW1lL3RpbWUuaCIgMQ0KIyA1OSAiLi4vdGlt
ZS90aW1lLmgiDQp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190Ow0KIyA3MCAiLi4vdGltZS90aW1l
LmgiDQp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsNCiMgODIgIi4uL3RpbWUvdGltZS5oIg0KdHlw
ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7DQojIDk0ICIuLi90aW1lL3RpbWUuaCINCnR5cGVk
ZWYgX190aW1lcl90IHRpbWVyX3Q7DQojIDQgIi4uL2luY2x1ZGUvdGltZS5oIiAyDQojIDEzMyAi
Li4vcG9zaXgvc3lzL3R5cGVzLmgiIDINCg0KDQoNCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNv
bmRzX3Q7DQoNCg0KDQp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7DQoNCg0KDQoN
Cg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAxNDcgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAyDQoNCg0K
DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOw0KdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgdXNob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsNCiMgMTk2ICIuLi9wb3Np
eC9zeXMvdHlwZXMuaCINCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOw0KdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f
KSkpOw0KDQp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X193b3JkX18pKSk7DQojIDIxMiAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiDQojIDEgIi4uL2luY2x1
ZGUvZW5kaWFuLmgiIDENCiMgMjEzICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIgMg0KDQoNCiMgMSAi
Li4vaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDENCg0KIyAxICIuLi9taXNjL3N5cy9zZWxlY3QuaCIg
MQ0KIyAzMSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiDQojIDEgIi4uL3N5c2RlcHMvZ2VuZXJpYy9i
aXRzL3NlbGVjdC5oIiAxDQojIDMyICIuLi9taXNjL3N5cy9zZWxlY3QuaCIgMg0KDQoNCiMgMSAi
Li4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdzZXQuaCIgMQ0KIyAyMyAiLi4vc3lz
ZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdzZXQuaCINCnR5cGVkZWYgaW50IF9fc2lnX2F0
b21pY190Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdA0KICB7DQogICAgdW5zaWduZWQgbG9uZyBp
bnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOw0KICB9
IF9fc2lnc2V0X3Q7DQojIDM1ICIuLi9taXNjL3N5cy9zZWxlY3QuaCIgMg0KDQoNCg0KdHlwZWRl
ZiBfX3NpZ3NldF90IHNpZ3NldF90Ow0KDQoNCg0KDQoNCiMgMSAiLi4vaW5jbHVkZS90aW1lLmgi
IDENCg0KDQojIDEgIi4uL3RpbWUvdGltZS5oIiAxDQojIDEwNiAiLi4vdGltZS90aW1lLmgiDQpz
dHJ1Y3QgdGltZXNwZWMNCiAgew0KICAgIF9fdGltZV90IHR2X3NlYzsNCiAgICBsb25nIGludCB0
dl9uc2VjOw0KICB9Ow0KIyA0ICIuLi9pbmNsdWRlL3RpbWUuaCIgMg0KIyA0NSAiLi4vbWlzYy9z
eXMvc2VsZWN0LmgiIDINCg0KIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3Rp
bWUuaCIgMQ0KIyA2MyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90aW1lLmgiDQpz
dHJ1Y3QgdGltZXZhbA0KICB7DQogICAgX190aW1lX3QgdHZfc2VjOw0KICAgIF9fc3VzZWNvbmRz
X3QgdHZfdXNlYzsNCiAgfTsNCiMgNDcgIi4uL21pc2Mvc3lzL3NlbGVjdC5oIiAyDQojIDU1ICIu
Li9taXNjL3N5cy9zZWxlY3QuaCINCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOw0KDQoNCg0K
DQoNCg0KDQp0eXBlZGVmIHN0cnVjdA0KICB7DQoNCg0KDQogICAgX19mZF9tYXNrIGZkc19iaXRz
WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOw0KDQoNCg0KDQoNCiAgfSBmZF9zZXQ7
DQoNCg0KDQoNCg0KDQp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOw0KIyA5NSAiLi4vbWlzYy9z
eXMvc2VsZWN0LmgiDQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRz
LCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLA0KICAgICAgICAgICAgICAgICAgIGZkX3Nl
dCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLA0KICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19y
ZXN0cmljdCBfX2V4Y2VwdGZkcywNCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAq
X19yZXN0cmljdCBfX3RpbWVvdXQpIDsNCg0KDQoNCg0KDQpleHRlcm4gaW50IHBzZWxlY3QgKGlu
dCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsDQogICAgICAgICAgICAgICAg
ICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLA0KICAgICAgICAgICAgICAgICAgICBm
ZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsDQogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSA7DQoNCg0KDQojIDMg
Ii4uL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyDQoNCg0KZXh0ZXJuIGludCBfX3BzZWxlY3QgKGlu
dCBfX25mZHMsIGZkX3NldCAqX19yZWFkZmRzLA0KICAgICAgICAgICAgICAgICAgICAgIGZkX3Nl
dCAqX193cml0ZWZkcywgZmRfc2V0ICpfX2V4Y2VwdGZkcywNCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwNCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX3NpZ3NldF90ICpfX3NpZ21hc2spOw0KDQpleHRlcm4gaW50IF9fc2VsZWN0IChp
bnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLA0KICAgICAgICAgICAgICAg
ICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsDQogICAgICAgICAgICAgICAgICAg
ICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsDQogICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpOw0KIyAyMTYgIi4uL3Bvc2l4L3N5
cy90eXBlcy5oIiAyDQoNCg0KIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvc3lz
bWFjcm9zLmgiIDENCiMgMjE5ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIgMg0KDQoNCg0KDQp0eXBl
ZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgX19ibGtjbnRf
dCBibGtjbnRfdDsNCg0KDQoNCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7DQoNCg0K
DQp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90Ow0KIyAyNTcgIi4uL3Bvc2l4L3N5cy90
eXBlcy5oIg0KdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsNCnR5cGVkZWYgX19mc2Js
a2NudDY0X3QgZnNibGtjbnQ2NF90Ow0KdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0
X3Q7DQoNCg0KDQojIDIgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDINCiMgMzkxICIuLi9zdGRs
aWIvc3RkbGliLmgiIDINCg0KDQoNCg0KDQoNCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQp
IDsNCg0KDQpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7DQoNCg0K
DQoNCg0KZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq
X19zdGF0ZWJ1ZiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7
DQoNCg0KDQpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsNCg0KDQoN
Cg0KDQoNCg0Kc3RydWN0IHJhbmRvbV9kYXRhDQogIHsNCiAgICBpbnQzMl90ICpmcHRyOw0KICAg
IGludDMyX3QgKnJwdHI7DQogICAgaW50MzJfdCAqc3RhdGU7DQogICAgaW50IHJhbmRfdHlwZTsN
CiAgICBpbnQgcmFuZF9kZWc7DQogICAgaW50IHJhbmRfc2VwOw0KICAgIGludDMyX3QgKmVuZF9w
dHI7DQogIH07DQoNCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZiwNCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIDsNCg0KZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQs
IHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsNCg0KZXh0ZXJuIGludCBpbml0c3RhdGVfciAo
dW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sDQogICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsNCg0KZXh0ZXJuIGlu
dCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsDQogICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOw0KDQoNCg0K
DQoNCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOw0KDQpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWdu
ZWQgaW50IF9fc2VlZCkgOw0KDQoNCg0KZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAq
X19zZWVkKSA7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOw0K
ZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOw0K
DQoNCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7DQpleHRlcm4gbG9uZyBpbnQgbnJh
bmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsNCg0KDQpleHRlcm4gbG9uZyBp
bnQgbXJhbmQ0OCAodm9pZCkgOw0KZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdKSA7DQoNCg0KZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQg
X19zZWVkdmFsKSA7DQpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVk
IHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsNCmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVk
IHNob3J0IGludCBfX3BhcmFtWzddKSA7DQoNCg0KDQoNCg0Kc3RydWN0IGRyYW5kNDhfZGF0YQ0K
ICB7DQogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsNCiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX19vbGRfeFszXTsNCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOw0KICAgIHVuc2lnbmVk
IHNob3J0IGludCBfX2luaXQ7DQogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7DQogIH07
DQoNCg0KZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSA7DQpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10sDQogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIDsNCg0KDQpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgOw0KZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdLA0KICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsNCg0KDQpleHRlcm4gaW50IG1yYW5kNDhfciAoc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOw0KZXh0ZXJuIGludCBqcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLA0KICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsDQogICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsNCg0KDQpleHRlcm4gaW50
IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikNCiAgICAgOw0KDQpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg
X19zZWVkMTZ2WzNdLA0KICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19idWZmZXIpIDsNCg0KZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3BhcmFtWzddLA0KICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
YnVmZmVyKSA7DQojIDUyNyAiLi4vc3RkbGliL3N0ZGxpYi5oIg0KZXh0ZXJuIHZvaWQgKm1hbGxv
YyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsNCg0KZXh0ZXJu
IHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpDQogICAgIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7DQoNCg0KDQoNCg0KZXh0ZXJuIHZvaWQgKnJlYWxsb2Mg
KHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
Ow0KDQpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgOw0KDQoNCg0KZXh0ZXJuIHZvaWQg
Y2ZyZWUgKHZvaWQgKl9fcHRyKSA7DQoNCg0KDQojIDEgIi4uL2luY2x1ZGUvYWxsb2NhLmgiIDEN
Cg0KDQojIDEgIi4uL3N0ZGxpYi9hbGxvY2EuaCIgMQ0KIyAyNSAiLi4vc3RkbGliL2FsbG9jYS5o
Ig0KIyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAyNiAiLi4vc3RkbGliL2FsbG9jYS5oIiAyDQoNCg0KDQoN
Cg0KDQoNCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsNCg0KDQoNCg0KDQoN
CiMgNCAiLi4vaW5jbHVkZS9hbGxvY2EuaCIgMg0KDQoNCg0KDQpleHRlcm4gdm9pZCAqX19hbGxv
Y2EgKHNpemVfdCBfX3NpemUpOw0KIyA1NDcgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMg0KDQoNCg0K
DQpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOw0KDQoNCg0KDQpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19t
ZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkNCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fbWFsbG9jX18pKTsNCg0KDQoNCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCg0KDQpleHRlcm4gaW50IGF0ZXhpdCAodm9p
ZCAoKl9fZnVuYykgKHZvaWQpKSA7DQoNCg0KDQoNCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAo
Kl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykNCiAgICAg
Ow0KDQoNCg0KDQoNCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOw0KDQoNCg0KDQpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3Rh
dHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCg0KDQoNCmV4dGVybiBjaGFy
ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7DQoNCg0KDQpleHRlcm4gY2hhciAqX19z
ZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOw0KDQoNCg0KDQoNCmV4dGVybiBp
bnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgOw0KDQoNCg0KDQoNCmV4dGVybiBpbnQgc2V0ZW52
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBs
YWNlKQ0KICAgICA7DQoNCg0KZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25h
bWUpIDsNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsNCiMgNjIzICIu
Li9zdGRsaWIvc3RkbGliLmgiDQpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRl
KSA7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg
Ow0KIyA2NDAgIi4uL3N0ZGxpYi9zdGRsaWIuaCINCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFy
ICpfX3RlbXBsYXRlKSA7DQojIDY1MCAiLi4vc3RkbGliL3N0ZGxpYi5oIg0KZXh0ZXJuIGNoYXIg
Km1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsNCg0KDQoNCg0KZXh0ZXJuIGludCBzeXN0ZW0g
KF9fY29uc3QgY2hhciAqX19jb21tYW5kKSA7DQoNCg0KDQoNCg0KDQpleHRlcm4gY2hhciAqY2Fu
b25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIDsNCiMgNjcyICIuLi9z
dGRsaWIvc3RkbGliLmgiDQpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25hbWUsDQogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg
X19yZXNvbHZlZCkgOw0KDQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAo
X19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsNCg0KDQp0eXBlZGVmIF9fY29tcGFyX2Zu
X3QgY29tcGFyaXNvbl9mbl90Ow0KDQoNCg0KDQoNCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2Nv
bnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwNCiAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBh
cik7DQoNCg0KDQpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVt
Yiwgc2l6ZV90IF9fc2l6ZSwNCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29t
cGFyKTsNCg0KDQoNCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7DQpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7DQoNCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
bGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7DQoNCg0KDQoNCg0KDQpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVu
b20pDQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsNCmV4dGVybiBsZGl2X3QgbGRp
diAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkNCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOw0KDQpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChs
b25nIGxvbmcgaW50IF9fbnVtZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb25nIGxvbmcgaW50IF9fZGVub20pDQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsNCiMgNzI4ICIuLi9zdGRsaWIvc3RkbGliLmgiDQpleHRlcm4gY2hhciAqZWN2dCAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsDQogICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOw0KDQoNCg0KDQpleHRlcm4gY2hh
ciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsDQogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOw0KDQoN
Cg0KDQpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh
ciAqX19idWYpIDsNCg0KDQoNCg0KZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsDQogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7DQpleHRlcm4gY2hhciAqcWZjdnQgKGxv
bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwNCiAgICAgICAgICAgICAgICAgICAgaW50
ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsNCmV4dGVybiBj
aGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1
ZikgOw0KDQoNCg0KDQpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsDQogICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwNCiAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19sZW4pIDsNCmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwNCiAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLA0KICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOw0KDQpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcg
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwNCiAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sDQogICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOw0KZXh0ZXJuIGlu
dCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsDQogICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu
LA0KICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s
ZW4pIDsNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBz
aXplX3QgX19uKSA7DQoNCg0KZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19wd2MsDQogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgOw0KDQoNCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3Qg
X193Y2hhcikgOw0KDQoNCg0KZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3Y3MsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19uKSA7DQoNCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikNCiAgICAgOw0KDQoNCg0KDQoNCg0KDQpl
eHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgOw0KIyA4MDggIi4u
L3N0ZGxpYi9zdGRsaWIuaCINCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmlj
dCBfX29wdGlvbnAsDQogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0
cmljdCBfX3Rva2VucywNCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X3ZhbHVlcCkgOw0KDQoNCg0KDQoNCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpf
X2tleSkgOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2Zs
YWcpIDsNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOw0KDQoN
Cg0KZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIDsNCg0KDQoNCg0KZXh0ZXJuIGNoYXIg
KnB0c25hbWUgKGludCBfX2ZkKSA7DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IHB0c25hbWVfciAo
aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsNCg0KDQpleHRlcm4gaW50
IGdldHB0ICh2b2lkKSA7DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJs
ZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsNCg0KDQoNCg0KDQoNCiMgOCAiLi4vaW5jbHVk
ZS9zdGRsaWIuaCIgMg0KDQoNCg0KZXh0ZXJuIGxvbmcgaW50IF9fcmFuZG9tICh2b2lkKTsNCmV4
dGVybiB2b2lkIF9fc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCk7DQpleHRlcm4gY2hhciAq
X19pbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKTsNCmV4dGVybiBjaGFyICpf
X3NldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKTsNCmV4dGVybiBpbnQgX19yYW5kb21fciAoc3Ry
dWN0IHJhbmRvbV9kYXRhICpfX2J1ZiwgaW50MzJfdCAqX19yZXN1bHQpOw0KZXh0ZXJuIGludCBf
X3NyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1
Zik7DQpleHRlcm4gaW50IF9faW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIg
Kl9fc3RhdGVidWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVu
LCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsNCmV4dGVybiBpbnQgX19zZXRzdGF0ZV9yIChj
aGFyICpfX3N0YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsNCmV4dGVybiBpbnQg
X19yYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKTsNCmV4dGVybiBpbnQgX19lcmFuZDQ4X3Ig
KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLA0KICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIsIGRvdWJsZSAqX19yZXN1bHQpOw0KZXh0ZXJu
IGludCBfX25yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sDQogICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwNCiAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3VsdCk7DQpleHRlcm4gaW50IF9fanJhbmQ0
OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBpbnQgKl9fcmVzdWx0KTsNCmV4dGVybiBpbnQgX19zcmFuZDQ4X3IgKGxvbmcgaW50
IF9fc2VlZHZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKTsNCmV4dGVybiBpbnQgX19zZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f
c2VlZDE2dlszXSwNCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19idWZmZXIpOw0KZXh0ZXJuIGludCBfX2xjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f
cGFyYW1bN10sDQogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcik7DQoNCg0KZXh0ZXJuIGludCBfX2RyYW5kNDhfaXRlcmF0ZSAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcik7DQoNCmV4dGVybiBpbnQgX19zZXRlbnYgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsDQogICAgICAgICAgICAgICAgICAg
ICBpbnQgX19yZXBsYWNlKTsNCmV4dGVybiBpbnQgX191bnNldGVudiAoX19jb25zdCBjaGFyICpf
X25hbWUpOw0KZXh0ZXJuIGludCBfX2NsZWFyZW52ICh2b2lkKTsNCmV4dGVybiBjaGFyICpfX2Nh
bm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKTsNCmV4dGVybiBjaGFy
ICpfX3JlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19yZXNvbHZlZCk7DQpl
eHRlcm4gaW50IF9fcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1
Zmxlbik7DQpleHRlcm4gaW50IF9fZ2V0cHQgKHZvaWQpOw0KZXh0ZXJuIGludCBfX3Bvc2l4X29w
ZW5wdCAoaW50IF9fb2ZsYWcpOw0KDQpleHRlcm4gaW50IF9fYWRkX3RvX2Vudmlyb24gKGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpjb21iaW5lcywgaW50IHJlcGxhY2UpOw0KDQpleHRlcm4gdm9pZCBf
cXVpY2tzb3J0ICh2b2lkICpjb25zdCBwYmFzZSwgc2l6ZV90IHRvdGFsX2VsZW1zLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIF9fY29tcGFyX2ZuX3QgY21wKTsNCg0KZXh0
ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9f
YXJnKSwgdm9pZCAqX19hcmcpOw0KDQpleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCAodm9pZCAoKmZ1
bmMpICh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKmQpOw0KDQpleHRlcm4gdm9pZCBfX2N4YV9m
aW5hbGl6ZSAodm9pZCAqZCk7DQoNCmV4dGVybiBpbnQgX19wb3NpeF9tZW1hbGlnbiAodm9pZCAq
Km1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpDQogICAgIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7DQoNCmV4dGVybiBpbnQgX19saWJjX3N5c3RlbSAoY29uc3QgY2hh
ciAqbGluZSk7DQojIDI2ICJzdHJjb2xsLmMiIDINCiMgMSAiLi4vaW5jbHVkZS9zdHJpbmcuaCIg
MQ0KDQoNCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIgMQ0KIyA0ICIuLi9pbmNsdWRlL3N0
cmluZy5oIiAyDQoNCmV4dGVybiB2b2lkICpfX21lbWNjcHkgKHZvaWQgKl9fZGVzdCwgX19jb25z
dCB2b2lkICpfX3NyYywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90
IF9fbik7DQoNCmV4dGVybiBzaXplX3QgX19zdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n
LCBzaXplX3QgX19tYXhsZW4pDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQpl
eHRlcm4gY2hhciAqX19zdHJzZXAgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19k
ZWxpbSk7DQoNCmV4dGVybiBpbnQgX19zdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4
dGVybiBpbnQgX19zdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pDQogICAgIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoX19jb25z
dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpDQogICAgIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOw0KDQpleHRlcm4gY2hhciAqX19zdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9f
aGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpDQogICAgIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOw0KDQpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJp
bmcpDQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7DQpleHRlcm4gY2hhciAqX19z
dHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQ0KICAgICBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOw0KDQpleHRlcm4gdm9pZCAqX19yYXdtZW1jaHIgKF9fY29u
c3Qgdm9pZCAqX19zLCBpbnQgX19jKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsN
Cg0KZXh0ZXJuIGNoYXIgKl9fc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykN
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4dGVybiB2b2lkICpfX21lbXJj
aHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQ0KICAgICBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsNCg0KZXh0ZXJuIHZvaWQgKl9fbWVtY2hyIChfX2NvbnN0IHZv
aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7DQoNCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25z
dCkpOw0KDQpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19idWZsZW4pOw0KDQoNCg0KIyAxICIuLi9zdHJpbmcvc3RyaW5nLmgiIDEN
CiMgMjggIi4uL3N0cmluZy9zdHJpbmcuaCINCg0KDQoNCg0KDQojIDEgIi91c3IvbGliL2djYy1s
aWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQoj
IDM0ICIuLi9zdHJpbmcvc3RyaW5nLmgiIDINCg0KDQoNCmV4dGVybiB2b2lkICptZW1jcHkgKHZv
aWQgKl9fcmVzdHJpY3QgX19kZXN0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7DQoNCg0KZXh0ZXJuIHZvaWQgKm1lbW1v
dmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikNCiAgICAg
Ow0KDQoNCg0KDQoNCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLA0KICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2MsIHNpemVfdCBfX24pDQogICAgIDsNCg0KDQoNCg0KZXh0ZXJuIHZvaWQgKm1lbXNl
dCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7DQoNCg0KZXh0ZXJuIGludCBtZW1j
bXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQ0K
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KDQpleHRlcm4gdm9pZCAqbWVtY2hy
IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikNCiAgICAgIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KDQpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2Nv
bnN0IHZvaWQgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0K
ZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3Qg
X19uKQ0KICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCmV4dGVybiBj
aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMpDQogICAgIDsNCg0KZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOw0KDQoNCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIg
Kl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpDQogICAg
IDsNCg0KZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsDQogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fbikgOw0KDQoNCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4dGVy
biBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp
emVfdCBfX24pDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCmV4dGVybiBp
bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpDQogICAg
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsNCg0KDQoNCg0KDQojIDEgIi4uL2lu
Y2x1ZGUveGxvY2FsZS5oIiAxDQojIDEwOSAiLi4vc3RyaW5nL3N0cmluZy5oIiAyDQoNCg0KZXh0
ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIF9fbG9jYWxlX3QgX19sKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0K
ZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
c3JjLCBzaXplX3QgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBf
X2wpIDsNCg0KDQoNCg0KZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIF9f
YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7DQoNCg0KDQoNCg0KDQpleHRlcm4gY2hhciAqc3Ry
bmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fbWFsbG9jX18pKTsNCiMgMTU1ICIuLi9zdHJpbmcvc3RyaW5nLmgiDQpleHRlcm4g
Y2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7DQoNCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCmV4dGVybiBjaGFy
ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsNCg0KDQoNCg0KZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIg
Kl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7DQoNCg0KZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fYWNjZXB0KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0K
ZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f
YWNjZXB0KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KZXh0ZXJuIGNoYXIg
KnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl
KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KDQoNCmV4dGVybiBjaGFyICpz
dHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVk
bGUpDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KZXh0ZXJuIGNoYXIg
KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltKQ0KICAgICA7DQoNCg0KDQpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19y
ZXN0cmljdCBfX3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZGVsaW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19zYXZlX3B0cikgOw0KDQpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOw0KDQoNCg0KDQoNCg0KZXh0
ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlz
dGFja2xlbiwNCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNp
emVfdCBfX25lZWRsZWxlbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0K
DQpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbikgOw0KZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgOw0KDQoNCg0KDQpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpf
X3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KDQpleHRlcm4gc2l6ZV90IHN0
cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikNCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCmV4dGVybiBjaGFyICpzdHJlcnJvciAo
aW50IF9fZXJybnVtKSA7DQoNCg0KDQpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJy
bnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7DQoNCg0KDQoNCmV4dGVybiB2b2lk
IF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOw0KDQoNCg0KZXh0ZXJuIHZvaWQgYmNv
cHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgOw0KDQoN
CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsNCg0KDQpleHRlcm4g
aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg
X19uKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KDQpleHRlcm4gY2hhciAq
aW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsNCg0KDQpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQpleHRlcm4gaW50IGZmcyAoaW50
IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQpleHRlcm4gaW50IGZm
c2wgKGxvbmcgaW50IF9fbCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQpfX2V4dGVu
c2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkNCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQ0KICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsNCg0KDQpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0K
ZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9j
YWxlX3QgX19sb2MpDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KDQoN
CmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwNCiAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7DQoNCg0K
DQoNCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIpDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCmV4dGVybiBj
aGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgOw0KDQoNCmV4dGVybiBjaGFyICpfX3N0cGNweSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykN
CiAgICAgOw0KZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykNCiAgICAgOw0KDQoNCg0KZXh0ZXJuIGNoYXIg
Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsNCmV4dGVy
biBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsNCg0K
DQpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgOw0KDQoNCmV4dGVybiB2b2lk
ICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsNCg0KDQoNCg0KDQoNCmV4dGVybiBj
aGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7DQojIDM1NyAiLi4vc3Ry
aW5nL3N0cmluZy5oIg0KIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy9zdHJpbmcuaCIgMQ0K
IyAzNTggIi4uL3N0cmluZy9zdHJpbmcuaCIgMg0KDQoNCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3N0
cmluZzIuaCIgMQ0KIyAxICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiIDENCiMgODAgIi4uL3N0
cmluZy9iaXRzL3N0cmluZzIuaCINCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fy
clsyXTsgfSBfX1NUUklORzJfQ09QWV9BUlIyIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5
cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2FyclszXTsgfSBfX1NUUklORzJfQ09QWV9B
UlIzIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQg
Y2hhciBfX2Fycls0XTsgfSBfX1NUUklORzJfQ09QWV9BUlI0IF9fYXR0cmlidXRlX18gKChwYWNr
ZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls1XTsgfSBfX1NUUklO
RzJfQ09QWV9BUlI1IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsg
dW5zaWduZWQgY2hhciBfX2Fycls2XTsgfSBfX1NUUklORzJfQ09QWV9BUlI2IF9fYXR0cmlidXRl
X18gKChwYWNrZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls3XTsg
fSBfX1NUUklORzJfQ09QWV9BUlI3IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5cGVkZWYg
c3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls4XTsgfSBfX1NUUklORzJfQ09QWV9BUlI4IF9f
YXR0cmlidXRlX18gKChwYWNrZWQpKTsNCiMgMzE3ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgi
DQpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1wY3B5X3NtYWxsICh2b2lkICosIGNoYXIsIF9f
U1RSSU5HMl9DT1BZX0FSUjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX1NUUklORzJfQ09QWV9BUlIzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjUsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI2LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNywNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjgsIHNpemVfdCk7DQpleHRl
cm4gX19pbmxpbmUgdm9pZCAqDQpfX21lbXBjcHlfc21hbGwgKHZvaWQgKl9fZGVzdCwgY2hhciBf
X3NyYzEsDQogICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zcmMyLCBfX1NU
UklORzJfQ09QWV9BUlIzIF9fc3JjMywNCiAgICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlf
QVJSNCBfX3NyYzQsIF9fU1RSSU5HMl9DT1BZX0FSUjUgX19zcmM1LA0KICAgICAgICAgICAgICAg
ICBfX1NUUklORzJfQ09QWV9BUlI2IF9fc3JjNiwgX19TVFJJTkcyX0NPUFlfQVJSNyBfX3NyYzcs
DQogICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjggX19zcmM4LCBzaXplX3QgX19z
cmNsZW4pDQp7DQogIHVuaW9uIHsNCiAgICBjaGFyIF9fYzsNCiAgICBfX1NUUklORzJfQ09QWV9B
UlIyIF9fc2NhMjsNCiAgICBfX1NUUklORzJfQ09QWV9BUlIzIF9fc2NhMzsNCiAgICBfX1NUUklO
RzJfQ09QWV9BUlI0IF9fc2NhNDsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI1IF9fc2NhNTsNCiAg
ICBfX1NUUklORzJfQ09QWV9BUlI2IF9fc2NhNjsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI3IF9f
c2NhNzsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI4IF9fc2NhODsNCiAgfSAqX191ID0gX19kZXN0
Ow0KICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQ0KICAgIHsNCiAgICBjYXNlIDE6
DQogICAgICBfX3UtPl9fYyA9IF9fc3JjMTsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgMjoNCiAg
ICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTIgPSBfX3NyYzI7DQogICAgICBicmVhazsNCiAg
ICBjYXNlIDM6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2EzID0gX19zcmMzOw0KICAg
ICAgYnJlYWs7DQogICAgY2FzZSA0Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNCA9
IF9fc3JjNDsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgNToNCiAgICAgIF9fZXh0ZW5zaW9uX18g
X191LT5fX3NjYTUgPSBfX3NyYzU7DQogICAgICBicmVhazsNCiAgICBjYXNlIDY6DQogICAgICBf
X2V4dGVuc2lvbl9fIF9fdS0+X19zY2E2ID0gX19zcmM2Ow0KICAgICAgYnJlYWs7DQogICAgY2Fz
ZSA3Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNyA9IF9fc3JjNzsNCiAgICAgIGJy
ZWFrOw0KICAgIGNhc2UgODoNCiAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTggPSBfX3Ny
Yzg7DQogICAgICBicmVhazsNCiAgICB9DQogIHJldHVybiBfX2V4dGVuc2lvbl9fICh2b2lkICop
KChjaGFyICopIF9fdSArIF9fc3JjbGVuKTsNCn0NCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIHZvaWQg
Kl9fcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOw0KIyA0ODkgIi4uL3N0cmlu
Zy9iaXRzL3N0cmluZzIuaCINCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cmNweV9zbWFsbCAo
Y2hhciAqLCBfX1NUUklORzJfQ09QWV9BUlIyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlIzLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI1LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI2LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI3LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI4LCBzaXplX3QpOw0K
ZXh0ZXJuIF9faW5saW5lIGNoYXIgKg0KX19zdHJjcHlfc21hbGwgKGNoYXIgKl9fZGVzdCwNCiAg
ICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlIyIF9fc3JjMiwgX19TVFJJTkcyX0NPUFlf
QVJSMyBfX3NyYzMsDQogICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCBfX3NyYzQs
IF9fU1RSSU5HMl9DT1BZX0FSUjUgX19zcmM1LA0KICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9D
T1BZX0FSUjYgX19zcmM2LCBfX1NUUklORzJfQ09QWV9BUlI3IF9fc3JjNywNCiAgICAgICAgICAg
ICAgICBfX1NUUklORzJfQ09QWV9BUlI4IF9fc3JjOCwgc2l6ZV90IF9fc3JjbGVuKQ0Kew0KICB1
bmlvbiB7DQogICAgY2hhciBfX2M7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSMiBfX3NjYTI7DQog
ICAgX19TVFJJTkcyX0NPUFlfQVJSMyBfX3NjYTM7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSNCBf
X3NjYTQ7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSNSBfX3NjYTU7DQogICAgX19TVFJJTkcyX0NP
UFlfQVJSNiBfX3NjYTY7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSNyBfX3NjYTc7DQogICAgX19T
VFJJTkcyX0NPUFlfQVJSOCBfX3NjYTg7DQogIH0gKl9fdSA9ICh2b2lkICopIF9fZGVzdDsNCiAg
c3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikNCiAgICB7DQogICAgY2FzZSAxOg0KICAg
ICAgX191LT5fX2MgPSAnXDAnOw0KICAgICAgYnJlYWs7DQogICAgY2FzZSAyOg0KICAgICAgX19l
eHRlbnNpb25fXyBfX3UtPl9fc2NhMiA9IF9fc3JjMjsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2Ug
MzoNCiAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTMgPSBfX3NyYzM7DQogICAgICBicmVh
azsNCiAgICBjYXNlIDQ6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E0ID0gX19zcmM0
Ow0KICAgICAgYnJlYWs7DQogICAgY2FzZSA1Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9f
c2NhNSA9IF9fc3JjNTsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgNjoNCiAgICAgIF9fZXh0ZW5z
aW9uX18gX191LT5fX3NjYTYgPSBfX3NyYzY7DQogICAgICBicmVhazsNCiAgICBjYXNlIDc6DQog
ICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E3ID0gX19zcmM3Ow0KICAgICAgYnJlYWs7DQog
ICAgY2FzZSA4Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhOCA9IF9fc3JjODsNCiAg
ICAgIGJyZWFrOw0KICB9DQogIHJldHVybiBfX2Rlc3Q7DQp9DQojIDY1OSAiLi4vc3RyaW5nL2Jp
dHMvc3RyaW5nMi5oIg0KZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RwY3B5X3NtYWxsIChjaGFy
ICosIF9fU1RSSU5HMl9DT1BZX0FSUjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjQsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjUsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjYsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjcsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjgsIHNpemVfdCk7DQpleHRl
cm4gX19pbmxpbmUgY2hhciAqDQpfX3N0cGNweV9zbWFsbCAoY2hhciAqX19kZXN0LA0KICAgICAg
ICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zcmMyLCBfX1NUUklORzJfQ09QWV9BUlIz
IF9fc3JjMywNCiAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI0IF9fc3JjNCwgX19T
VFJJTkcyX0NPUFlfQVJSNSBfX3NyYzUsDQogICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlf
QVJSNiBfX3NyYzYsIF9fU1RSSU5HMl9DT1BZX0FSUjcgX19zcmM3LA0KICAgICAgICAgICAgICAg
IF9fU1RSSU5HMl9DT1BZX0FSUjggX19zcmM4LCBzaXplX3QgX19zcmNsZW4pDQp7DQogIHVuaW9u
IHsNCiAgICBjaGFyIF9fYzsNCiAgICBfX1NUUklORzJfQ09QWV9BUlIyIF9fc2NhMjsNCiAgICBf
X1NUUklORzJfQ09QWV9BUlIzIF9fc2NhMzsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI0IF9fc2Nh
NDsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI1IF9fc2NhNTsNCiAgICBfX1NUUklORzJfQ09QWV9B
UlI2IF9fc2NhNjsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI3IF9fc2NhNzsNCiAgICBfX1NUUklO
RzJfQ09QWV9BUlI4IF9fc2NhODsNCiAgfSAqX191ID0gKHZvaWQgKikgX19kZXN0Ow0KICBzd2l0
Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQ0KICAgIHsNCiAgICBjYXNlIDE6DQogICAgICBf
X3UtPl9fYyA9ICdcMCc7DQogICAgICBicmVhazsNCiAgICBjYXNlIDI6DQogICAgICBfX2V4dGVu
c2lvbl9fIF9fdS0+X19zY2EyID0gX19zcmMyOw0KICAgICAgYnJlYWs7DQogICAgY2FzZSAzOg0K
ICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhMyA9IF9fc3JjMzsNCiAgICAgIGJyZWFrOw0K
ICAgIGNhc2UgNDoNCiAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTQgPSBfX3NyYzQ7DQog
ICAgICBicmVhazsNCiAgICBjYXNlIDU6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E1
ID0gX19zcmM1Ow0KICAgICAgYnJlYWs7DQogICAgY2FzZSA2Og0KICAgICAgX19leHRlbnNpb25f
XyBfX3UtPl9fc2NhNiA9IF9fc3JjNjsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgNzoNCiAgICAg
IF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTcgPSBfX3NyYzc7DQogICAgICBicmVhazsNCiAgICBj
YXNlIDg6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E4ID0gX19zcmM4Ow0KICAgICAg
YnJlYWs7DQogIH0NCiAgcmV0dXJuIF9fZGVzdCArIF9fc3JjbGVuIC0gMTsNCn0NCiMgODkzICIu
Li9zdHJpbmcvYml0cy9zdHJpbmcyLmgiDQpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nw
bl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCk7DQpleHRlcm4gX19pbmxpbmUg
c2l6ZV90DQpfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpDQp7
DQogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7DQogIHdoaWxlIChfX3NbX19yZXN1bHRd
ICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkNCiAgICArK19fcmVzdWx0Ow0K
ICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3Bu
X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyKTsNCmV4dGVybiBfX2lubGluZSBzaXpl
X3QNCl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBf
X3JlamVjdDIpDQp7DQogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7DQogIHdoaWxlIChf
X3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDENCiAgICAg
ICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyKQ0KICAgICsrX19yZXN1bHQ7DQogIHJl
dHVybiBfX3Jlc3VsdDsNCn0NCg0KZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzMg
KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIsIGludCBfX3JlamVjdDMpOw0KZXh0ZXJuIF9f
aW5saW5lIHNpemVfdA0KX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq
ZWN0MSwgaW50IF9fcmVqZWN0MiwNCiAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MykNCnsNCiAg
cmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsNCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0g
J1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQ0KICAgICAgICAgJiYgX19zW19fcmVz
dWx0XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpDQogICAgKytf
X3Jlc3VsdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KIyA5NTAgIi4uL3N0cmluZy9iaXRzL3N0
cmluZzIuaCINCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19hY2NlcHQpOw0KZXh0ZXJuIF9faW5saW5lIHNpemVfdA0KX19zdHJzcG5f
YzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpDQp7DQogIHJlZ2lzdGVyIHNpemVf
dCBfX3Jlc3VsdCA9IDA7DQoNCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpDQog
ICAgKytfX3Jlc3VsdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQpleHRlcm4gX19pbmxpbmUg
c2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOw0KZXh0ZXJu
IF9faW5saW5lIHNpemVfdA0KX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h
Y2NlcHQxLCBpbnQgX19hY2NlcHQyKQ0Kew0KICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAw
Ow0KDQogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRd
ID09IF9fYWNjZXB0MikNCiAgICArK19fcmVzdWx0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoN
CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19hY2NlcHQxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YWNjZXB0MiwgaW50IF9fYWNjZXB0Myk7DQpleHRlcm4gX19pbmxpbmUgc2l6ZV90DQpfX3N0cnNw
bl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGlu
dCBfX2FjY2VwdDMpDQp7DQogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7DQoNCiAgd2hp
bGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2Nl
cHQyDQogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykNCiAgICArK19fcmVz
dWx0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQojIDEwMDcgIi4uL3N0cmluZy9iaXRzL3N0cmlu
ZzIuaCINCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19hY2NlcHQxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2FjY2VwdDIpOw0KZXh0ZXJuIF9faW5saW5lIGNoYXIgKg0KX19zdHJwYnJrX2MyIChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikNCnsNCg0KICB3
aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2Nl
cHQyKQ0KICAgICsrX19zOw0KICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAo
Y2hhciAqKSAoc2l6ZV90KSBfX3M7DQp9DQoNCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBi
cmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOw0KZXh0
ZXJuIF9faW5saW5lIGNoYXIgKg0KX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwNCiAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MykN
CnsNCg0KICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3Mg
IT0gX19hY2NlcHQyDQogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykNCiAgICArK19fczsN
CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkg
X19zOw0KfQ0KIyAxMDU5ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiDQpleHRlcm4gX19pbmxp
bmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19u
ZXh0cCk7DQpleHRlcm4gX19pbmxpbmUgY2hhciAqDQpfX3N0cnRva19yXzFjIChjaGFyICpfX3Ms
IGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQ0Kew0KICBjaGFyICpfX3Jlc3VsdDsNCiAgaWYg
KF9fcyA9PSAoKHZvaWQgKikwKSkNCiAgICBfX3MgPSAqX19uZXh0cDsNCiAgd2hpbGUgKCpfX3Mg
PT0gX19zZXApDQogICAgKytfX3M7DQogIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7DQogIGlmICgq
X19zICE9ICdcMCcpDQogICAgew0KICAgICAgX19yZXN1bHQgPSBfX3MrKzsNCiAgICAgIHdoaWxl
ICgqX19zICE9ICdcMCcpDQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApDQogICAgICAgICAg
ew0KICAgICAgICAgICAgX19zWy0xXSA9ICdcMCc7DQogICAgICAgICAgICBicmVhazsNCiAgICAg
ICAgICB9DQogICAgICAqX19uZXh0cCA9IF9fczsNCiAgICB9DQogIHJldHVybiBfX3Jlc3VsdDsN
Cn0NCiMgMTA5MSAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIg0KZXh0ZXJuIGNoYXIgKl9fc3Ry
c2VwX2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7DQojIDExMDkg
Ii4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCINCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNl
cF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7DQpleHRlcm4gX19pbmxpbmUgY2hhciAq
DQpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkNCnsNCiAgcmVnaXN0ZXIg
Y2hhciAqX19yZXR2YWwgPSAqX19zOw0KICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkgJiYg
KCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAm
JiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9f
cmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkN
CiAgICAqKCpfX3MpKysgPSAnXDAnOw0KICByZXR1cm4gX19yZXR2YWw7DQp9DQoNCmV4dGVybiBf
X2lubGluZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNo
YXIgX19yZWplY3QyKTsNCmV4dGVybiBfX2lubGluZSBjaGFyICoNCl9fc3Ryc2VwXzJjIChjaGFy
ICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpDQp7DQogIHJlZ2lzdGVyIGNo
YXIgKl9fcmV0dmFsID0gKl9fczsNCiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQ0KICAg
IHsNCiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsNCiAgICAgIHdoaWxlICgx
KQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpDQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsNCiAgICAgICAgICBicmVhazsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09
IF9fcmVqZWN0MikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7
DQogICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICsrX19jcDsN
CiAgICAgICAgfQ0KICAgICAgKl9fcyA9IF9fY3A7DQogICAgfQ0KICByZXR1cm4gX19yZXR2YWw7
DQp9DQoNCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hh
ciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyIF9fcmVqZWN0Myk7DQpleHRlcm4gX19pbmxpbmUgY2hhciAqDQpfX3N0cnNl
cF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9f
cmVqZWN0MykNCnsNCiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOw0KICBpZiAoX19y
ZXR2YWwgIT0gKCh2b2lkICopMCkpDQogICAgew0KICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9
IF9fcmV0dmFsOw0KICAgICAgd2hpbGUgKDEpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoKl9f
Y3AgPT0gJ1wwJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAq
KTApOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmICgqX19j
cCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0
MykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7DQogICAgICAg
ICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICsrX19jcDsNCiAgICAgICAg
fQ0KICAgICAgKl9fcyA9IF9fY3A7DQogICAgfQ0KICByZXR1cm4gX19yZXR2YWw7DQp9DQojIDEx
OTAgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCINCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19j
b25zdCBjaGFyICpfX3N0cmluZykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsNCiMgMTIw
OSAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIg0KZXh0ZXJuIGNoYXIgKl9fc3RybmR1cCAoX19j
b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
bWFsbG9jX18pKTsNCiMgMiAiLi4vaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMg0KIyAzNjEgIi4u
L3N0cmluZy9zdHJpbmcuaCIgMg0KDQoNCg0KDQojIDUwICIuLi9pbmNsdWRlL3N0cmluZy5oIiAy
DQojIDI3ICJzdHJjb2xsLmMiIDINCiMgNDYgInN0cmNvbGwuYyINCiMgMSAiLi4vbG9jYWxlL2xv
Y2FsZWluZm8uaCIgMQ0KIyAyMyAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCINCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMNCiMgMjQgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiIDINCiMgMSAiLi4vaW5jbHVkZS9s
YW5naW5mby5oIiAxDQojIDI1ICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIiAyDQojIDEgIi4uL2lu
Y2x1ZGUvbGltaXRzLmgiIDENCiMgMTI0ICIuLi9pbmNsdWRlL2xpbWl0cy5oIg0KIyAxICIvdXNy
L2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvbGltaXRz
LmgiIDEgMw0KIyAxMjUgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDINCiMgMTQ0ICIuLi9pbmNsdWRl
L2xpbWl0cy5oIg0KIyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxDQojIDEgIi4u
L3Bvc2l4L2JpdHMvcG9zaXgxX2xpbS5oIiAxDQojIDEyNiAiLi4vcG9zaXgvYml0cy9wb3NpeDFf
bGltLmgiDQojIDEgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRz
L2xvY2FsX2xpbS5oIiAxDQojIDM2ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3Yv
bGludXgvYml0cy9sb2NhbF9saW0uaCINCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9saW1pdHMuaCIgMSAzDQojIDM3ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3Yv
bGludXgvYml0cy9sb2NhbF9saW0uaCIgMg0KIyAxMjcgIi4uL3Bvc2l4L2JpdHMvcG9zaXgxX2xp
bS5oIiAyDQojIDIgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDINCiMgMTQ1ICIuLi9p
bmNsdWRlL2xpbWl0cy5oIiAyDQoNCg0KDQojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDJfbGlt
LmgiIDENCiMgMSAiLi4vcG9zaXgvYml0cy9wb3NpeDJfbGltLmgiIDENCiMgMiAiLi4vaW5jbHVk
ZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMg0KIyAxNDkgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDINCg0K
DQoNCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxDQojIDM0ICIuLi9pbmNsdWRl
L2JpdHMveG9wZW5fbGltLmgiDQojIDEgIi9ob21lL2NvbXBpbGVyL2J1aWxkLWdsaWJjLTIuMi41
LWdjY3Rlc3QvYml0cy9zdGRpb19saW0uaCIgMQ0KIyAzNSAiLi4vaW5jbHVkZS9iaXRzL3hvcGVu
X2xpbS5oIiAyDQojIDE1MyAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMg0KIyAyNiAiLi4vbG9jYWxl
L2xvY2FsZWluZm8uaCIgMg0KIyAxICIuLi9pbmNsdWRlL3RpbWUuaCIgMQ0KDQoNCg0KDQojIDEg
Ii4uL3RpbWUvdGltZS5oIiAxDQojIDMwICIuLi90aW1lL3RpbWUuaCINCg0KDQoNCg0KDQoNCg0K
DQojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzDQojIDM5ICIuLi90aW1lL3RpbWUuaCIgMg0KDQoNCg0KIyAxICIu
Li9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3RpbWUuaCIgMQ0KIyA0MyAiLi4vdGltZS90
aW1lLmgiIDINCiMgMTE4ICIuLi90aW1lL3RpbWUuaCINCnN0cnVjdCB0bQ0Kew0KICBpbnQgdG1f
c2VjOw0KICBpbnQgdG1fbWluOw0KICBpbnQgdG1faG91cjsNCiAgaW50IHRtX21kYXk7DQogIGlu
dCB0bV9tb247DQogIGludCB0bV95ZWFyOw0KICBpbnQgdG1fd2RheTsNCiAgaW50IHRtX3lkYXk7
DQogIGludCB0bV9pc2RzdDsNCg0KDQogIGxvbmcgaW50IHRtX2dtdG9mZjsNCiAgX19jb25zdCBj
aGFyICp0bV96b25lOw0KDQoNCg0KDQp9Ow0KDQoNCg0KDQpzdHJ1Y3QgaXRpbWVyc3BlYw0KICB7
DQogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICAgIHN0cnVjdCB0aW1lc3BlYyBp
dF92YWx1ZTsNCiAgfTsNCg0KDQpzdHJ1Y3Qgc2lnZXZlbnQ7DQojIDE2MyAiLi4vdGltZS90aW1l
LmgiDQpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgOw0KDQoNCmV4dGVybiB0aW1lX3QgdGlt
ZSAodGltZV90ICpfX3RpbWVyKSA7DQoNCg0KZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90
IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7DQoNCg0KZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOw0KDQoNCg0K
DQoNCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19tYXhzaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX190cCkgOw0KDQoNCg0KDQpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsDQogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQ0KICAgICA7DQoNCg0KDQoN
Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOw0K
DQoNCg0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1l
cikgOw0KDQoNCg0KDQpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3Qg
Kl9fcmVzdHJpY3QgX190aW1lciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCkgOw0KDQoNCg0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
X3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsNCg0KDQoNCg0KZXh0
ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSA7DQoNCg0KZXh0ZXJu
IGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOw0KDQoNCg0KDQoNCg0KZXh0
ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwN
CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsNCg0KDQpl
eHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwN
CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7DQoNCg0KDQoN
CmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsNCmV4dGVybiBpbnQgX19kYXlsaWdodDsNCmV4dGVy
biBsb25nIGludCBfX3RpbWV6b25lOw0KDQoNCg0KDQpleHRlcm4gY2hhciAqdHpuYW1lWzJdOw0K
DQoNCg0KZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIDsNCg0KDQoNCmV4dGVybiBpbnQgZGF5bGln
aHQ7DQpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBzdGlt
ZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgOw0KIyAyNzEgIi4uL3RpbWUvdGltZS5oIg0KZXh0
ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgOw0KDQoNCmV4dGVybiB0aW1lX3Qg
dGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIDsNCg0KDQpleHRlcm4gaW50IGR5c2l6ZSAoaW50
IF9feWVhcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQoNCmV4dGVybiBp
bnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwN
CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7DQoN
Cg0KDQpleHRlcm4gaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVj
dCB0aW1lc3BlYyAqX19yZXMpIDsNCg0KDQpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2Nr
aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIDsNCg0KDQpleHRlcm4gaW50
IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqX190cCkNCiAgICAgOw0KDQoNCg0KZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNs
b2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgOw0KDQoNCmV4dGVybiBpbnQgY2xvY2tf
Z2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOw0KDQoN
Cg0KDQpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSA7
DQoNCg0KZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7DQoNCg0K
ZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3Ms
DQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9f
cmVzdHJpY3QgX192YWx1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1l
cnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIDsNCg0KDQpleHRlcm4gaW50IHRpbWVyX2dldHRp
bWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkNCiAgICAg
Ow0KDQoNCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIDsN
CiMgMzQyICIuLi90aW1lL3RpbWUuaCINCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7DQoNCg0KDQoN
Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgOw0K
IyAzNTcgIi4uL3RpbWUvdGltZS5oIg0KZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3N0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX19yZXNidWZwKSA7DQoNCg0KDQoNCiMgNiAiLi4vaW5jbHVkZS90aW1lLmgi
IDINCg0KDQpzdHJ1Y3QgdG07DQoNCg0KZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCBf
X21vbl95ZGF5WzJdWzEzXTsNCg0KDQpleHRlcm4gc3RydWN0IHRtIF90bWJ1ZjsNCg0KDQpleHRl
cm4gY2hhciAqX190enN0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nKTsNCg0KDQpleHRlcm4gc2l6
ZV90IF9fdHpuYW1lX2N1cl9tYXg7DQoNCg0KZXh0ZXJuIGludCBfX3VzZV90emZpbGU7DQoNCmV4
dGVybiB2b2lkIF9fdHpmaWxlX3JlYWQgKGNvbnN0IGNoYXIgKmZpbGUsIHNpemVfdCBleHRyYSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipleHRyYXApOw0KZXh0ZXJuIGludCBf
X3R6ZmlsZV9jb21wdXRlICh0aW1lX3QgdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqbGVhcF9jb3JyZWN0LCBpbnQgKmxlYXBf
aGl0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnRwKTsNCmV4dGVy
biB2b2lkIF9fdHpmaWxlX2RlZmF1bHQgKGNvbnN0IGNoYXIgKnN0ZCwgY29uc3QgY2hhciAqZHN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgc3Rkb2ZmLCBsb25nIGlu
dCBkc3RvZmYpOw0KDQoNCg0KDQpleHRlcm4gdGltZV90IF9fbWt0aW1lX2ludGVybmFsIChzdHJ1
Y3QgdG0gKl9fdHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g
KigqX19mdW5jKSAoY29uc3QgdGltZV90ICosDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICopLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZV90ICpfX29mZnNldCk7DQpleHRlcm4gc3RydWN0IHRtICpf
X2xvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX190aW1lciwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX190cCk7DQoNCmV4dGVybiBzdHJ1Y3QgdG0gKl9f
Z210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCk7DQoNCg0KDQoN
Cg0KZXh0ZXJuIGludCBfX29mZnRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyLA0KICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgaW50IF9fb2Zmc2V0LA0KICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCB0bSAqX190cCk7DQoNCmV4dGVybiBjaGFyICpfX2FzY3RpbWVfciAoX19jb25zdCBz
dHJ1Y3QgdG0gKl9fdHAsIGNoYXIgKl9fYnVmKTsNCmV4dGVybiB2b2lkIF9fdHpzZXQgKHZvaWQp
Ow0KDQoNCmV4dGVybiBzdHJ1Y3QgdG0gKl9fdHpfY29udmVydCAoY29uc3QgdGltZV90ICp0aW1l
ciwgaW50IHVzZV9sb2NhbHRpbWUsIHN0cnVjdCB0bSAqdHApOw0KDQoNCg0KZXh0ZXJuIGxvbmcg
aW50IF9fdHpuYW1lX21heCAodm9pZCk7DQoNCmV4dGVybiBpbnQgX19uYW5vc2xlZXAgKF9fY29u
c3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZyk7DQpleHRlcm4gaW50IF9fZ2V0ZGF0
ZV9yIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzdHJ1Y3QgdG0gKl9fcmVzYnVmcCk7DQoNCg0K
DQpleHRlcm4gaW50IF9fZ2V0Y2xrdGNrICh2b2lkKTsNCiMgMjcgIi4uL2xvY2FsZS9sb2NhbGVp
bmZvLmgiIDINCg0KIyAxICIuLi9pbmNsdWRlL3N5cy90eXBlcy5oIiAxDQojIDI5ICIuLi9sb2Nh
bGUvbG9jYWxlaW5mby5oIiAyDQoNCg0KDQoNCiMgMSAiLi4vaW50bC9sb2FkaW5mby5oIiAxDQoj
IDU1ICIuLi9pbnRsL2xvYWRpbmZvLmgiDQpzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlDQp7DQogIGNv
bnN0IGNoYXIgKmZpbGVuYW1lOw0KICBpbnQgZGVjaWRlZDsNCg0KICBjb25zdCB2b2lkICpkYXRh
Ow0KDQogIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKm5leHQ7DQogIHN0cnVjdCBsb2FkZWRfbDEw
bmZpbGUgKnN1Y2Nlc3NvclsxXTsNCn07DQoNCg0KDQoNCg0KDQpleHRlcm4gY29uc3QgY2hhciAq
X25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LCBzaXplX3QgbmFtZV9s
ZW4pOw0KDQoNCmV4dGVybiBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoNCl9ubF9tYWtlX2wxMG5m
bGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsIGNvbnN0IGNoYXIg
KmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssIGNvbnN0IGNoYXIgKmxhbmd1
YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKmNvZGVzZXQsIGNvbnN0IGNo
YXIgKm5vcm1hbGl6ZWRfY29kZXNldCwgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIg
KnNwZWNpYWwsIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25z
dCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKTsNCiMgODUgIi4uL2ludGwvbG9hZGlu
Zm8uaCINCmV4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICpu
YW1lKTsNCg0KDQoNCmV4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKip0
ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LCBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9j
b2Rlc2V0LCBjb25zdCBjaGFyICoqc3BlY2lhbCwgY29uc3QgY2hhciAqKnNwb25zb3IsIGNvbnN0
IGNoYXIgKipyZXZpc2lvbik7DQojIDk4ICIuLi9pbnRsL2xvYWRpbmZvLmgiDQpleHRlcm4gY2hh
ciAqX25sX2ZpbmRfbGFuZ3VhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpOw0KIyAzNCAiLi4vbG9jYWxl
L2xvY2FsZWluZm8uaCIgMg0KIyA0NyAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCINCnN0cnVjdCBs
b2NhbGVfZGF0YQ0Kew0KICBjb25zdCBjaGFyICpuYW1lOw0KICBjb25zdCBjaGFyICpmaWxlZGF0
YTsNCiAgb2ZmX3QgZmlsZXNpemU7DQogIGludCBtbWFwZWQ7DQoNCiAgdW5zaWduZWQgaW50IHVz
YWdlX2NvdW50Ow0KDQogIGludCB1c2VfdHJhbnNsaXQ7DQoNCiAgY29uc3QgY2hhciAqb3B0aW9u
czsNCg0KDQogIHVuc2lnbmVkIGludCBuc3RyaW5nczsNCiAgdW5pb24gbG9jYWxlX2RhdGFfdmFs
dWUNCiAgew0KICAgIGNvbnN0IHVpbnQzMl90ICp3c3RyOw0KICAgIGNvbnN0IGNoYXIgKnN0cmlu
ZzsNCiAgICB1bnNpZ25lZCBpbnQgd29yZDsNCiAgfQ0KICB2YWx1ZXMgW107DQp9Ow0KDQoNCmVu
dW0gY29sbF9zb3J0X3J1bGUNCnsNCiAgaWxsZWdhbF8wX18sDQogIHNvcnRfZm9yd2FyZCwNCiAg
c29ydF9iYWNrd2FyZCwNCiAgaWxsZWdhbF8zX18sDQogIHNvcnRfcG9zaXRpb24sDQogIHNvcnRf
Zm9yd2FyZF9wb3NpdGlvbiwNCiAgc29ydF9iYWNrd2FyZF9wb3NpdGlvbiwNCiAgc29ydF9tYXNr
DQp9Ow0KDQoNCmVudW0gdmFsdWVfdHlwZQ0Kew0KICBub25lLA0KICBzdHJpbmcsDQogIHN0cmlu
Z2FycmF5LA0KICBieXRlLA0KICBieXRlYXJyYXksDQogIHdvcmQsDQogIHN0cmluZ2xpc3QsDQog
IHdvcmRhcnJheSwNCiAgd3N0cmluZywNCiAgd3N0cmluZ2FycmF5LA0KICB3c3RyaW5nbGlzdA0K
fTsNCiMgMTEwICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIg0Kc3RydWN0IGVyYV9lbnRyeQ0Kew0K
ICB1aW50MzJfdCBkaXJlY3Rpb247DQogIGludDMyX3Qgb2Zmc2V0Ow0KICBpbnQzMl90IHN0YXJ0
X2RhdGVbM107DQogIGludDMyX3Qgc3RvcF9kYXRlWzNdOw0KICBjb25zdCBjaGFyICplcmFfbmFt
ZTsNCiAgY29uc3QgY2hhciAqZXJhX2Zvcm1hdDsNCiAgY29uc3Qgd2NoYXJfdCAqZXJhX3duYW1l
Ow0KICBjb25zdCB3Y2hhcl90ICplcmFfd2Zvcm1hdDsNCiAgaW50IGFic29sdXRlX2RpcmVjdGlv
bjsNCg0KDQoNCn07DQoNCg0KDQoNCmVudW0NCnsNCiAgX19UT1dfdG91cHBlciA9IDAsDQogIF9f
VE9XX3RvbG93ZXIgPSAxDQp9Ow0KIyAxNDcgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiDQojIDEg
Ii4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiIgMQ0KIyA0MiAiLi4vbG9jYWxlL2NhdGVnb3JpZXMu
ZGVmIg0KZXh0ZXJuIHN0cnVjdCBsb2NhbGVfZGF0YSAqX25sX2N1cnJlbnRfTENfQ09MTEFURTsN
CiMgNjggIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2Rh
dGEgKl9ubF9jdXJyZW50X0xDX0NUWVBFOw0KIyAxMzkgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRl
ZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9ubF9jdXJyZW50X0xDX01PTkVUQVJZOw0K
IyAxOTEgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2Rh
dGEgKl9ubF9jdXJyZW50X0xDX05VTUVSSUM7DQojIDIwNSAiLi4vbG9jYWxlL2NhdGVnb3JpZXMu
ZGVmIg0KZXh0ZXJuIHN0cnVjdCBsb2NhbGVfZGF0YSAqX25sX2N1cnJlbnRfTENfVElNRTsNCiMg
MjUzICIuLi9sb2NhbGUvY2F0ZWdvcmllcy5kZWYiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRh
ICpfbmxfY3VycmVudF9MQ19NRVNTQUdFUzsNCiMgMjY0ICIuLi9sb2NhbGUvY2F0ZWdvcmllcy5k
ZWYiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfY3VycmVudF9MQ19QQVBFUjsNCiMg
MjczICIuLi9sb2NhbGUvY2F0ZWdvcmllcy5kZWYiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRh
ICpfbmxfY3VycmVudF9MQ19OQU1FOw0KIyAyODYgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiIN
CmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9ubF9jdXJyZW50X0xDX0FERFJFU1M7DQojIDMw
NSAiLi4vbG9jYWxlL2NhdGVnb3JpZXMuZGVmIg0KZXh0ZXJuIHN0cnVjdCBsb2NhbGVfZGF0YSAq
X25sX2N1cnJlbnRfTENfVEVMRVBIT05FOw0KIyAzMTYgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRl
ZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9ubF9jdXJyZW50X0xDX01FQVNVUkVNRU5U
Ow0KDQoNCg0KDQoNCg0KDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfY3VycmVudF9M
Q19JREVOVElGSUNBVElPTjsNCiMgMTQ4ICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIiAyDQoNCg0K
ZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IF9ubF9jYXRlZ29yeV9uYW1lc1sxM107DQpleHRlcm4g
Y29uc3Qgc2l6ZV90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzWzEzXTsNCmV4dGVybiBzdHJ1Y3Qg
bG9jYWxlX2RhdGEgKiAqY29uc3QgX25sX2N1cnJlbnRbMTNdOw0KDQoNCmV4dGVybiBjb25zdCBj
aGFyIF9ubF9DX25hbWVbXTsNCmV4dGVybiBjb25zdCBjaGFyIF9ubF9QT1NJWF9uYW1lW107DQoN
Cg0KZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfY29kZXNldFtdOw0KIyAxODIgIi4uL2xvY2FsZS9s
b2NhbGVpbmZvLmgiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfZmluZF9sb2NhbGUg
KGNvbnN0IGNoYXIgKmxvY2FsZV9wYXRoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbG9jYWxlX3BhdGhfbGVuLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKipuYW1l
KTsNCg0KDQpleHRlcm4gdm9pZCBfbmxfbG9hZF9sb2NhbGUgKHN0cnVjdCBsb2FkZWRfbDEwbmZp
bGUgKmZpbGUsIGludCBjYXRlZ29yeSk7DQoNCg0KZXh0ZXJuIHZvaWQgX25sX3VubG9hZF9sb2Nh
bGUgKHN0cnVjdCBsb2NhbGVfZGF0YSAqbG9jYWxlKTsNCg0KDQpleHRlcm4gdm9pZCBfbmxfcmVt
b3ZlX2xvY2FsZSAoaW50IGxvY2FsZSwgc3RydWN0IGxvY2FsZV9kYXRhICpkYXRhKTsNCg0KDQoN
CmV4dGVybiBzdHJ1Y3QgZXJhX2VudHJ5ICpfbmxfZ2V0X2VyYV9lbnRyeSAoY29uc3Qgc3RydWN0
IHRtICp0cCk7DQoNCg0KZXh0ZXJuIHN0cnVjdCBlcmFfZW50cnkgKl9ubF9zZWxlY3RfZXJhX2Vu
dHJ5IChpbnQgY250KTsNCg0KDQpleHRlcm4gY29uc3QgY2hhciAqX25sX2dldF9hbHRfZGlnaXQg
KHVuc2lnbmVkIGludCBudW1iZXIpOw0KDQoNCmV4dGVybiBjb25zdCB3Y2hhcl90ICpfbmxfZ2V0
X3dhbHRfZGlnaXQgKHVuc2lnbmVkIGludCBudW1iZXIpOw0KDQoNCmV4dGVybiBpbnQgX25sX3Bh
cnNlX2FsdF9kaWdpdCAoY29uc3QgY2hhciAqKnN0cnApOw0KDQoNCmV4dGVybiB2b2lkIF9ubF9w
b3N0bG9hZF9jdHlwZSAodm9pZCk7DQpleHRlcm4gdm9pZCBfbmxfcG9zdGxvYWRfdGltZSAodm9p
ZCk7DQojIDQ3ICJzdHJjb2xsLmMiIDINCg0KDQppbnQNCnN0cmNvbGwgKHMxLCBzMikNCiAgICAg
Y29uc3QgY2hhciAqczE7DQogICAgIGNvbnN0IGNoYXIgKnMyOw0KDQoNCg0KDQoNCg0KDQp7DQoN
Cg0KDQoNCiAgdWludF9mYXN0MzJfdCBucnVsZXMgPSAoX25sX2N1cnJlbnRfTENfQ09MTEFURS0+
dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfTlJVTEVTKSAmIDB4ZmZmZildLndvcmQpOw0KDQoN
Cg0KICBjb25zdCB1bnNpZ25lZCBjaGFyICpydWxlc2V0czsNCiAgY29uc3QgaW50MzJfdCAqdGFi
bGU7DQogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHM7DQogIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKmV4dHJhOw0KICBjb25zdCBpbnQzMl90ICppbmRpcmVjdDsNCiAgdWludF9mYXN0MzJfdCBw
YXNzOw0KICBpbnQgcmVzdWx0ID0gMDsNCiAgY29uc3QgdW5zaWduZWQgY2hhciAqdXMxOw0KICBj
b25zdCB1bnNpZ25lZCBjaGFyICp1czI7DQogIHNpemVfdCBzMWxlbjsNCiAgc2l6ZV90IHMybGVu
Ow0KICBpbnQzMl90ICppZHgxYXJyOw0KICBpbnQzMl90ICppZHgyYXJyOw0KICB1bnNpZ25lZCBj
aGFyICpydWxlMWFycjsNCiAgdW5zaWduZWQgY2hhciAqcnVsZTJhcnI7DQogIHNpemVfdCBpZHgx
bWF4Ow0KICBzaXplX3QgaWR4Mm1heDsNCiAgc2l6ZV90IGlkeDFjbnQ7DQogIHNpemVfdCBpZHgy
Y250Ow0KICBzaXplX3QgaWR4MW5vdzsNCiAgc2l6ZV90IGlkeDJub3c7DQogIHNpemVfdCBiYWNr
dzFfc3RvcDsNCiAgc2l6ZV90IGJhY2t3Ml9zdG9wOw0KICBzaXplX3QgYmFja3cxOw0KICBzaXpl
X3QgYmFja3cyOw0KICBpbnQgdmFsMTsNCiAgaW50IHZhbDI7DQogIGludCBwb3NpdGlvbjsNCiAg
aW50IHNlcTFsZW47DQogIGludCBzZXEybGVuOw0KICBpbnQgdXNlX21hbGxvYzsNCg0KIyAxICIu
Li9sb2NhbGUvd2VpZ2h0LmgiIDENCiMgMjEgIi4uL2xvY2FsZS93ZWlnaHQuaCINCnN0YXRpYyBp
bmxpbmUgaW50MzJfdA0KZmluZGlkeCAoY29uc3QgdW5zaWduZWQgY2hhciAqKmNwcCkNCnsNCiAg
aW50X2Zhc3QzMl90IGkgPSB0YWJsZVsqKCpjcHApKytdOw0KICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpjcDsNCiAgY29uc3QgdW5zaWduZWQgY2hhciAqdXNyYzsNCg0KICBpZiAoaSA+PSAwKQ0KDQog
ICAgcmV0dXJuIGk7DQoNCg0KDQogIGNwID0gJmV4dHJhWy1pXTsNCiAgdXNyYyA9ICpjcHA7DQog
IHdoaWxlICgxKQ0KICAgIHsNCiAgICAgIHNpemVfdCBuaGVyZTsNCg0KDQogICAgICBpID0gKigo
Y29uc3QgaW50MzJfdCAqKSBjcCk7DQogICAgICBjcCArPSBzaXplb2YgKGludDMyX3QpOw0KDQoN
Cg0KDQogICAgICBuaGVyZSA9ICpjcCsrOw0KDQogICAgICBpZiAoaSA+PSAwKQ0KICAgICAgICB7
DQoNCg0KDQoNCg0KICAgICAgICAgIHNpemVfdCBjbnQ7DQoNCiAgICAgICAgICBmb3IgKGNudCA9
IDA7IGNudCA8IG5oZXJlOyArK2NudCkNCiAgICAgICAgICAgIGlmIChjcFtjbnRdICE9IHVzcmNb
Y250XSkNCiAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBpZiAoY250ID09IG5oZXJl
KQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICpjcHAgKz0gbmhlcmU7DQogICAgICAg
ICAgICAgIHJldHVybiBpOw0KICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICBjcCArPSBuaGVy
ZTsNCiAgICAgICAgICBpZiAoKDEgKyBuaGVyZSkgJSBfX2FsaWdub2ZfXyAoaW50MzJfdCkgIT0g
MCkNCiAgICAgICAgICAgIGNwICs9IF9fYWxpZ25vZl9fIChpbnQzMl90KSAtICgxICsgbmhlcmUp
ICUgX19hbGlnbm9mX18gKGludDMyX3QpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAg
IHsNCg0KDQogICAgICAgICAgc2l6ZV90IGNudDsNCiAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g
MDsNCg0KICAgICAgICAgIGZvciAoY250ID0gMDsgY250IDwgbmhlcmU7ICsrY250KQ0KICAgICAg
ICAgICAgaWYgKGNwW2NudF0gIT0gdXNyY1tjbnRdKQ0KICAgICAgICAgICAgICBicmVhazsNCg0K
ICAgICAgICAgIGlmIChjbnQgIT0gbmhlcmUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg
IGlmIChjcFtjbnRdID4gdXNyY1tjbnRdKQ0KICAgICAgICAgICAgICAgIHsNCg0KICAgICAgICAg
ICAgICAgICAgY3AgKz0gMiAqIG5oZXJlOw0KICAgICAgICAgICAgICAgICAgaWYgKCgxICsgMiAq
IG5oZXJlKSAlIF9fYWxpZ25vZl9fIChpbnQzMl90KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAg
ICBjcCArPSAoX19hbGlnbm9mX18gKGludDMyX3QpDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAtICgxICsgMiAqIG5oZXJlKSAlIF9fYWxpZ25vZl9fIChpbnQzMl90KSk7DQogICAgICAgICAg
ICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAgICBm
b3IgKGNudCA9IDA7IGNudCA8IG5oZXJlOyArK2NudCkNCiAgICAgICAgICAgICAgICBpZiAoY3Bb
bmhlcmUgKyBjbnRdICE9IHVzcmNbY250XSkNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQog
ICAgICAgICAgICAgIGlmIChjbnQgIT0gbmhlcmUgJiYgY3BbbmhlcmUgKyBjbnRdIDwgdXNyY1tj
bnRdKQ0KICAgICAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAgICAgICAgY3AgKz0gMiAqIG5o
ZXJlOw0KICAgICAgICAgICAgICAgICAgaWYgKCgxICsgMiAqIG5oZXJlKSAlIF9fYWxpZ25vZl9f
IChpbnQzMl90KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICBjcCArPSAoX19hbGlnbm9mX18g
KGludDMyX3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAtICgxICsgMiAqIG5oZXJlKSAl
IF9fYWxpZ25vZl9fIChpbnQzMl90KSk7DQogICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAg
ICAgICAgICAgICAgICB9DQoNCg0KDQogICAgICAgICAgICAgIGZvciAoY250ID0gMDsgY3BbY250
XSA9PSB1c3JjW2NudF07ICsrY250KTsNCg0KICAgICAgICAgICAgICBkbw0KICAgICAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgICAgIG9mZnNldCA8PD0gODsNCiAgICAgICAgICAgICAgICAg
IG9mZnNldCArPSB1c3JjW2NudF0gLSBjcFtjbnRdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgd2hpbGUgKCsrY250IDwgbmhlcmUpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAg
ICAgKmNwcCArPSBuaGVyZTsNCiAgICAgICAgICByZXR1cm4gaW5kaXJlY3RbLWkgKyBvZmZzZXRd
Ow0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgcmV0dXJuIDB4NDMyMTk4NzY7DQp9DQojIDEwMiAi
c3RyY29sbC5jIiAyDQoNCiAgaWYgKG5ydWxlcyA9PSAwKQ0KICAgIHJldHVybiBfX2V4dGVuc2lv
bl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo
czEpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChzMikgJiYgKF9fczFfbGVuID0gc3RybGVuIChz
MSksIF9fczJfbGVuID0gc3RybGVuIChzMiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHMx
KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShzMSkgPT0gMSkgfHwgX19zMV9sZW4gPj0g
NCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoczIpICsgMSkgLSAoc2l6ZV90KShjb25z
dCB2b2lkICopKHMyKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0
IGNoYXIgKikgKHMxKSwgKF9fY29uc3QgY2hhciAqKSAoczIpLCAoX19zMV9sZW4gPCBfX3MyX2xl
biA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHMx
KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoczEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2
b2lkICopKHMxKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHMxKSwgX19zMV9sZW4gPCA0
KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoczIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICop
KChzMikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoczIpID09IDEpID8gKF9fZXh0ZW5z
aW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy
ICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq
KSAoX19jb25zdCBjaGFyICopKHMyKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0
ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSAoczEpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKHMyKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y
ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEp
KVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlb
Ml0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbM10gLSAoKF9fY29u
c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzNdKTsgfSB9IF9fcmVz
dWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIg
PSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKTsgcmVnaXN0
ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKHMxKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9
PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKHMxKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9
PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKHMxKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9
PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy
ICopIChzMSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5f
Y29uc3RhbnRfcCAoczIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChzMikgKyAxKSAtIChz
aXplX3QpKGNvbnN0IHZvaWQgKikoczIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoczIp
LCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzMSkgJiYgKChzaXplX3Qp
KGNvbnN0IHZvaWQgKikoKHMxKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShzMSkgPT0g
MSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVswXSAtICgoX19jb25zdCB1
bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoczIpKVswXSk7IGlmIChfX3MyX2xlbiA+
IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqKSAoX19jb25zdCBjaGFyICopIChzMSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KikgKF9fY29uc3QgY2hhciAqKSAoczIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1
bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChzMSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSAoczIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y
ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEp
KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlb
M10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq
KSAoczEpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAm
JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAm
JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm
JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6
IHN0cmNtcCAoczEsIHMyKSkpKTsgfSk7DQojIDExOCAic3RyY29sbC5jIg0KICBydWxlc2V0cyA9
IChjb25zdCB1bnNpZ25lZCBjaGFyICopDQogICAgKF9ubF9jdXJyZW50X0xDX0NPTExBVEUtPnZh
bHVlc1soKGludCkgKF9OTF9DT0xMQVRFX1JVTEVTRVRTKSAmIDB4ZmZmZildLnN0cmluZyk7DQog
IHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikNCiAgICAoX25sX2N1cnJlbnRfTENfQ09MTEFURS0+
dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfVEFCTEVNQikgJiAweGZmZmYpXS5zdHJpbmcpOw0K
ICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikNCiAgICAoX25sX2N1cnJlbnRfTENf
Q09MTEFURS0+dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfV0VJR0hUTUIpICYgMHhmZmZmKV0u
c3RyaW5nKTsNCiAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQ0KICAgIChfbmxfY3Vy
cmVudF9MQ19DT0xMQVRFLT52YWx1ZXNbKChpbnQpIChfTkxfQ09MTEFURV9FWFRSQU1CKSAmIDB4
ZmZmZildLnN0cmluZyk7DQogIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikNCiAgICAoX25s
X2N1cnJlbnRfTENfQ09MTEFURS0+dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfSU5ESVJFQ1RN
QikgJiAweGZmZmYpXS5zdHJpbmcpOw0KDQogIHVzZV9tYWxsb2MgPSAwOw0KDQogICgodm9pZCkg
KCgoKHVpbnRwdHJfdCkgdGFibGUpICUgX19hbGlnbm9mX18gKHRhYmxlWzBdKSA9PSAwKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoIigodWludHB0cl90KSB0YWJsZSkgJSBfX2FsaWdub2ZfXyAodGFi
bGVbMF0pID09IDAiLCAic3RyY29sbC5jIiwgMTMxLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsNCiAgKCh2b2lkKSAoKCgodWludHB0cl90KSB3ZWlnaHRzKSAlIF9fYWxpZ25vZl9fICh3ZWln
aHRzWzBdKSA9PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIigodWludHB0cl90KSB3ZWlnaHRz
KSAlIF9fYWxpZ25vZl9fICh3ZWlnaHRzWzBdKSA9PSAwIiwgInN0cmNvbGwuYyIsIDEzMiwgX19Q
UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7DQogICgodm9pZCkgKCgoKHVpbnRwdHJfdCkgZXh0cmEp
ICUgX19hbGlnbm9mX18gKGV4dHJhWzBdKSA9PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIigo
dWludHB0cl90KSBleHRyYSkgJSBfX2FsaWdub2ZfXyAoZXh0cmFbMF0pID09IDAiLCAic3RyY29s
bC5jIiwgMTMzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsNCiAgKCh2b2lkKSAoKCgodWlu
dHB0cl90KSBpbmRpcmVjdCkgJSBfX2FsaWdub2ZfXyAoaW5kaXJlY3RbMF0pID09IDApID8gMCA6
IChfX2Fzc2VydF9mYWlsICgiKCh1aW50cHRyX3QpIGluZGlyZWN0KSAlIF9fYWxpZ25vZl9fIChp
bmRpcmVjdFswXSkgPT0gMCIsICJzdHJjb2xsLmMiLCAxMzQsIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOw0KDQoNCiAgczFsZW4gPSBzdHJsZW4gKHMxKTsNCiAgczJsZW4gPSBzdHJsZW4gKHMy
KTsNCg0KDQoNCiAgdXMxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczE7DQogIHVzMiA9IChj
b25zdCB1bnNpZ25lZCBjaGFyICopIHMyOw0KIyAxNTQgInN0cmNvbGwuYyINCiAgaWYgKHMxbGVu
ICsgczJsZW4gPj0gMTYzODQpDQogICAgew0KICAgICAgaWR4MWFyciA9IChpbnQzMl90ICopIG1h
bGxvYyAoKHMxbGVuICsgczJsZW4pICogKHNpemVvZiAoaW50MzJfdCkgKyAxKSk7DQogICAgICBp
ZHgyYXJyID0gJmlkeDFhcnJbczFsZW5dOw0KICAgICAgcnVsZTFhcnIgPSAodW5zaWduZWQgY2hh
ciAqKSAmaWR4MmFycltzMmxlbl07DQogICAgICBydWxlMmFyciA9ICZydWxlMWFycltzMWxlbl07
DQoNCiAgICAgIGlmIChpZHgxYXJyID09ICgodm9pZCAqKTApKQ0KDQoNCg0KDQoNCg0KICAgICAg
ICBnb3RvIHRyeV9zdGFjazsNCiAgICAgIHVzZV9tYWxsb2MgPSAxOw0KICAgIH0NCiAgZWxzZQ0K
ICAgIHsNCiAgICB0cnlfc3RhY2s6DQogICAgICBpZHgxYXJyID0gKGludDMyX3QgKikgX19idWls
dGluX2FsbG9jYSAoczFsZW4gKiBzaXplb2YgKGludDMyX3QpKTsNCiAgICAgIGlkeDJhcnIgPSAo
aW50MzJfdCAqKSBfX2J1aWx0aW5fYWxsb2NhIChzMmxlbiAqIHNpemVvZiAoaW50MzJfdCkpOw0K
ICAgICAgcnVsZTFhcnIgPSAodW5zaWduZWQgY2hhciAqKSBfX2J1aWx0aW5fYWxsb2NhIChzMWxl
bik7DQogICAgICBydWxlMmFyciA9ICh1bnNpZ25lZCBjaGFyICopIF9fYnVpbHRpbl9hbGxvY2Eg
KHMybGVuKTsNCiAgICB9DQoNCiAgaWR4MWNudCA9IDA7DQogIGlkeDJjbnQgPSAwOw0KICBpZHgx
bWF4ID0gMDsNCiAgaWR4Mm1heCA9IDA7DQogIGlkeDFub3cgPSAwOw0KICBpZHgybm93ID0gMDsN
CiAgYmFja3cxX3N0b3AgPSB+MHVsOw0KICBiYWNrdzJfc3RvcCA9IH4wdWw7DQogIGJhY2t3MSA9
IH4wdWw7DQogIGJhY2t3MiA9IH4wdWw7DQogIHNlcTFsZW4gPSAwOw0KICBzZXEybGVuID0gMDsN
CiAgcG9zaXRpb24gPSBydWxlc2V0c1swXSAmIHNvcnRfcG9zaXRpb247DQogIHdoaWxlICgxKQ0K
ICAgIHsNCiAgICAgIHZhbDEgPSAwOw0KICAgICAgdmFsMiA9IDA7DQoNCg0KICAgICAgaWYgKHNl
cTFsZW4gPT0gMCkNCiAgICAgICAgZG8NCiAgICAgICAgICB7DQogICAgICAgICAgICArK3ZhbDE7
DQoNCiAgICAgICAgICAgIGlmIChiYWNrdzFfc3RvcCAhPSB+MHVsKQ0KICAgICAgICAgICAgICB7
DQoNCiAgICAgICAgICAgICAgICBpZiAoYmFja3cxID09IGJhY2t3MV9zdG9wKQ0KICAgICAgICAg
ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlkeDFjbnQgPCBpZHgxbWF4
KQ0KICAgICAgICAgICAgICAgICAgICAgIGlkeDFub3cgPSBpZHgxY250Ow0KICAgICAgICAgICAg
ICAgICAgICBlbHNlDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgaWR4
MW5vdyA9IC0tYmFja3cxOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBiYWNrdzFfc3RvcCA9IGlkeDFtYXg7DQoNCiAg
ICAgICAgICAgICAgICB3aGlsZSAoKnVzMSAhPSAnXDAnKQ0KICAgICAgICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHRtcCA9IGZpbmRpZHggKCZ1czEpOw0KICAgICAg
ICAgICAgICAgICAgICBydWxlMWFycltpZHgxbWF4XSA9IHRtcCA+PiAyNDsNCiAgICAgICAgICAg
ICAgICAgICAgaWR4MWFycltpZHgxbWF4XSA9IHRtcCAmIDB4ZmZmZmZmOw0KICAgICAgICAgICAg
ICAgICAgICBpZHgxY250ID0gaWR4MW1heCsrOw0KDQogICAgICAgICAgICAgICAgICAgIGlmICgo
cnVsZXNldHNbcnVsZTFhcnJbaWR4MWNudF0gKiBucnVsZXNdDQogICAgICAgICAgICAgICAgICAg
ICAgICAgJiBzb3J0X2JhY2t3YXJkKSA9PSAwKQ0KDQogICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgICAgICAgICAgICAgICsraWR4MWNudDsNCiAgICAgICAgICAgICAgICAgIH0N
Cg0KICAgICAgICAgICAgICAgIGlmIChiYWNrdzFfc3RvcCA+PSBpZHgxY250KQ0KICAgICAgICAg
ICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgIGlmIChpZHgxY250ID09IGlkeDFtYXgg
fHwgYmFja3cxX3N0b3AgPiBpZHgxY250KQ0KDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQoNCiAgICAgICAgICAgICAgICAgICAgYmFja3cxX3N0b3AgPSB+MHVsOw0KICAgICAgICAgICAg
ICAgICAgICBpZHgxbm93ID0gaWR4MWNudDsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICBlbHNlDQoNCiAgICAgICAgICAgICAgICAgIGlkeDFub3cgPSBiYWNrdzEgPSBpZHgx
Y250IC0gMTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgd2hpbGUgKChz
ZXExbGVuID0gd2VpZ2h0c1tpZHgxYXJyW2lkeDFub3ddKytdKSA9PSAwKTsNCg0KDQogICAgICBp
ZiAoc2VxMmxlbiA9PSAwKQ0KICAgICAgICBkbw0KICAgICAgICAgIHsNCiAgICAgICAgICAgICsr
dmFsMjsNCg0KICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wICE9IH4wdWwpDQogICAgICAgICAg
ICAgIHsNCg0KICAgICAgICAgICAgICAgIGlmIChiYWNrdzIgPT0gYmFja3cyX3N0b3ApDQogICAg
ICAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaWR4MmNudCA8IGlk
eDJtYXgpDQogICAgICAgICAgICAgICAgICAgICAgaWR4Mm5vdyA9IGlkeDJjbnQ7DQogICAgICAg
ICAgICAgICAgICAgIGVsc2UNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
ICBpZHgybm93ID0gLS1iYWNrdzI7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UN
CiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGJhY2t3Ml9zdG9wID0gaWR4Mm1heDsN
Cg0KICAgICAgICAgICAgICAgIHdoaWxlICgqdXMyICE9ICdcMCcpDQogICAgICAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgICAgIGludDMyX3QgdG1wID0gZmluZGlkeCAoJnVzMik7DQog
ICAgICAgICAgICAgICAgICAgIHJ1bGUyYXJyW2lkeDJtYXhdID0gdG1wID4+IDI0Ow0KICAgICAg
ICAgICAgICAgICAgICBpZHgyYXJyW2lkeDJtYXhdID0gdG1wICYgMHhmZmZmZmY7DQogICAgICAg
ICAgICAgICAgICAgIGlkeDJjbnQgPSBpZHgybWF4Kys7DQoNCiAgICAgICAgICAgICAgICAgICAg
aWYgKChydWxlc2V0c1tydWxlMmFycltpZHgyY250XSAqIG5ydWxlc10NCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmIHNvcnRfYmFja3dhcmQpID09IDApDQoNCiAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgKytpZHgyY250Ow0KICAgICAgICAgICAgICAg
ICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wID49IGlkeDJjbnQpDQogICAg
ICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlkeDJjbnQgPT0gaWR4
Mm1heCB8fCBiYWNrdzJfc3RvcCA+IGlkeDJjbnQpDQoNCiAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBiYWNrdzJfc3RvcCA9IH4wdWw7DQogICAgICAg
ICAgICAgICAgICAgIGlkeDJub3cgPSBpZHgyY250Ow0KICAgICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICAgIGVsc2UNCg0KICAgICAgICAgICAgICAgICAgaWR4Mm5vdyA9IGJhY2t3MiA9
IGlkeDJjbnQgLSAxOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB3aGls
ZSAoKHNlcTJsZW4gPSB3ZWlnaHRzW2lkeDJhcnJbaWR4Mm5vd10rK10pID09IDApOw0KDQoNCiAg
ICAgIGlmIChzZXExbGVuID09IDAgfHwgc2VxMmxlbiA9PSAwKQ0KICAgICAgICB7DQogICAgICAg
ICAgaWYgKHNlcTFsZW4gPT0gc2VxMmxlbikNCg0KDQogICAgICAgICAgICBicmVhazsNCg0KDQoN
CiAgICAgICAgICByZXN1bHQgPSBzZXExbGVuID09IDAgPyAtMSA6IDE7DQogICAgICAgICAgZ290
byBmcmVlX2FuZF9yZXR1cm47DQogICAgICAgIH0NCg0KDQogICAgICBpZiAocG9zaXRpb24gJiYg
dmFsMSAhPSB2YWwyKQ0KICAgICAgICB7DQogICAgICAgICAgcmVzdWx0ID0gdmFsMSAtIHZhbDI7
DQogICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47DQogICAgICAgIH0NCg0KDQogICAgICBk
bw0KICAgICAgICB7DQogICAgICAgICAgaWYgKHdlaWdodHNbaWR4MWFycltpZHgxbm93XV0gIT0g
d2VpZ2h0c1tpZHgyYXJyW2lkeDJub3ddXSkNCiAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAg
ICByZXN1bHQgPSB3ZWlnaHRzW2lkeDFhcnJbaWR4MW5vd11dIC0gd2VpZ2h0c1tpZHgyYXJyW2lk
eDJub3ddXTsNCiAgICAgICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47DQogICAgICAgICAg
ICB9DQoNCg0KICAgICAgICAgICsraWR4MWFycltpZHgxbm93XTsNCiAgICAgICAgICArK2lkeDJh
cnJbaWR4Mm5vd107DQoNCiAgICAgICAgICAtLXNlcTFsZW47DQogICAgICAgICAgLS1zZXEybGVu
Ow0KICAgICAgICB9DQogICAgICB3aGlsZSAoc2VxMWxlbiA+IDAgJiYgc2VxMmxlbiA+IDApOw0K
DQogICAgICBpZiAocG9zaXRpb24gJiYgc2VxMWxlbiAhPSBzZXEybGVuKQ0KICAgICAgICB7DQog
ICAgICAgICAgcmVzdWx0ID0gc2VxMWxlbiAtIHNlcTJsZW47DQogICAgICAgICAgZ290byBmcmVl
X2FuZF9yZXR1cm47DQogICAgICAgIH0NCiAgICB9DQoNCg0KDQogIGZvciAocGFzcyA9IDE7IHBh
c3MgPCBucnVsZXM7ICsrcGFzcykNCiAgICB7DQoNCg0KICAgICAgaWR4MWNudCA9IDA7DQogICAg
ICBpZHgyY250ID0gMDsNCiAgICAgIGJhY2t3MV9zdG9wID0gfjB1bDsNCiAgICAgIGJhY2t3Ml9z
dG9wID0gfjB1bDsNCiAgICAgIGJhY2t3MSA9IH4wdWw7DQogICAgICBiYWNrdzIgPSB+MHVsOw0K
ICAgICAgcG9zaXRpb24gPSBydWxlc2V0c1tydWxlMWFyclswXSAqIG5ydWxlcyArIHBhc3NdICYg
c29ydF9wb3NpdGlvbjsNCg0KICAgICAgd2hpbGUgKDEpDQogICAgICAgIHsNCiAgICAgICAgICB2
YWwxID0gMDsNCiAgICAgICAgICB2YWwyID0gMDsNCg0KDQogICAgICAgICAgaWYgKHNlcTFsZW4g
PT0gMCkNCiAgICAgICAgICAgIGRvDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAr
K3ZhbDE7DQoNCiAgICAgICAgICAgICAgICBpZiAoYmFja3cxX3N0b3AgIT0gfjB1bCkNCiAgICAg
ICAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3cxID09IGJhY2t3
MV9zdG9wKQ0KICAgICAgICAgICAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaWR4MWNudCA8IGlkeDFtYXgpDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlk
eDFub3cgPSBpZHgxY250Ow0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAg
ICAgICAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDFu
b3cgPSB+MHVsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgaWR4MW5vdyA9IC0tYmFja3cxOw0K
ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgYmFja3cxX3N0b3AgPSBpZHgxY250Ow0KDQogICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChpZHgxY250IDwgaWR4MW1heCkNCiAgICAgICAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ1bGVzZXRzW3J1bGUxYXJy
W2lkeDFjbnRdICogbnJ1bGVzICsgcGFzc10NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiBzb3J0X2JhY2t3YXJkKSA9PSAwKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgKytpZHgxY250Ow0KICAgICAgICAgICAgICAgICAg
ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3cxX3N0b3AgPT0gaWR4MWNudCkN
CiAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
ZHgxY250ID09IGlkeDFtYXgpDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3MV9zdG9wID0gfjB1bDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlkeDFub3cgPSBpZHgxY250Kys7DQogICAgICAgICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQoNCiAgICAgICAgICAgICAgICAgICAgICBpZHgx
bm93ID0gYmFja3cxID0gaWR4MWNudCAtIDE7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIHdoaWxlICgoc2VxMWxlbiA9IHdlaWdodHNbaWR4MWFycltp
ZHgxbm93XSsrXSkgPT0gMCk7DQoNCg0KICAgICAgICAgIGlmIChzZXEybGVuID09IDApDQogICAg
ICAgICAgICBkbw0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgKyt2YWwyOw0KDQog
ICAgICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wICE9IH4wdWwpDQogICAgICAgICAgICAgICAg
ICB7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t3MiA9PSBiYWNrdzJfc3RvcCkNCiAg
ICAgICAgICAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlk
eDJjbnQgPCBpZHgybWF4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgybm93ID0gaWR4
MmNudDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgybm93ID0gfjB1bDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxz
ZQ0KICAgICAgICAgICAgICAgICAgICAgIGlkeDJub3cgPSAtLWJhY2t3MjsNCiAgICAgICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgICAgIGJhY2t3Ml9zdG9wID0gaWR4MmNudDsNCg0KICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoaWR4MmNudCA8IGlkeDJtYXgpDQogICAgICAgICAgICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChydWxlc2V0c1tydWxlMmFycltpZHgyY250XSAq
IG5ydWxlcyArIHBhc3NdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgc29ydF9iYWNr
d2FyZCkgPT0gMCkNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICsraWR4MmNudDsNCiAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAg
ICAgICAgICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wID09IGlkeDJjbnQpDQogICAgICAgICAg
ICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4MmNudCA9PSBp
ZHgybWF4KQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAg
ICAgICAgICAgICAgICBiYWNrdzJfc3RvcCA9IH4wdWw7DQogICAgICAgICAgICAgICAgICAgICAg
ICBpZHgybm93ID0gaWR4MmNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICAgICAgZWxzZQ0KDQogICAgICAgICAgICAgICAgICAgICAgaWR4Mm5vdyA9IGJhY2t3
MiA9IGlkeDJjbnQgLSAxOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICB3aGlsZSAoKHNlcTJsZW4gPSB3ZWlnaHRzW2lkeDJhcnJbaWR4Mm5vd10rK10p
ID09IDApOw0KDQoNCiAgICAgICAgICBpZiAoc2VxMWxlbiA9PSAwIHx8IHNlcTJsZW4gPT0gMCkN
CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHNlcTFsZW4gPT0gc2VxMmxlbikNCg0K
DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCg0KDQogICAgICAgICAgICAgIHJlc3VsdCA9IHNl
cTFsZW4gPT0gMCA/IC0xIDogMTsNCiAgICAgICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47
DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiB2YWwxICE9IHZh
bDIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDEgLSB2YWwyOw0K
ICAgICAgICAgICAgICBnb3RvIGZyZWVfYW5kX3JldHVybjsNCiAgICAgICAgICAgIH0NCg0KDQog
ICAgICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHdlaWdodHNbaWR4
MWFycltpZHgxbm93XV0gIT0gd2VpZ2h0c1tpZHgyYXJyW2lkeDJub3ddXSkNCiAgICAgICAgICAg
ICAgICB7DQoNCiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICh3ZWlnaHRzW2lkeDFhcnJbaWR4
MW5vd11dDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB3ZWlnaHRzW2lkeDJhcnJbaWR4
Mm5vd11dKTsNCiAgICAgICAgICAgICAgICAgIGdvdG8gZnJlZV9hbmRfcmV0dXJuOw0KICAgICAg
ICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAgICsraWR4MWFycltpZHgxbm93XTsNCiAgICAg
ICAgICAgICAgKytpZHgyYXJyW2lkeDJub3ddOw0KDQogICAgICAgICAgICAgIC0tc2VxMWxlbjsN
CiAgICAgICAgICAgICAgLS1zZXEybGVuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxl
IChzZXExbGVuID4gMCAmJiBzZXEybGVuID4gMCk7DQoNCiAgICAgICAgICBpZiAocG9zaXRpb24g
JiYgc2VxMWxlbiAhPSBzZXEybGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICByZXN1
bHQgPSBzZXExbGVuIC0gc2VxMmxlbjsNCiAgICAgICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1
cm47DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCg0KIGZyZWVfYW5kX3JldHVy
bjoNCiAgaWYgKHVzZV9tYWxsb2MpDQogICAgZnJlZSAoaWR4MWFycik7DQoNCiAgcmV0dXJuIHJl
c3VsdDsNCn0NCg==


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2002-07-17 20:36 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-17 12:06 other/7114: ICE building strcoll.op from glibc-2.2.5 Geoff Keating
  -- strict thread matches above, loose matches on Subject: below --
2002-07-17 13:36 David Edelsohn
2002-07-17 12:16 Geoff Keating
2002-07-17 10:46 David Edelsohn
2002-07-17  8:46 David Edelsohn
2002-07-17  2:06 Alan Modra
2002-07-17  0:16 Geoff Keating
2002-07-16 21:16 Alan Modra
2002-07-16 18:56 Alan Modra
2002-07-16 10:56 Geoff Keating
2002-07-16 10:46 Geoff Keating
2002-07-15 22:16 Alan Modra
2002-07-15 21:36 Richard Henderson
2002-07-15 18:46 Alan Modra
2002-07-15 16:56 Alan Modra
2002-07-15 12:46 Geoff Keating
2002-07-15  2:36 Alan Modra
2002-06-25  2:16 d.mueller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).