<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>127071</bug_id>
          
          <creation_ts>2014-01-15 15:36:55 -0800</creation_ts>
          <short_desc>CStack Branch: X86-32 Fix LLInt</short_desc>
          <delta_ts>2014-01-17 21:01:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>127086</blocked>
    
    <blocked>127201</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968501</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-01-15 15:36:55 -0800</bug_when>
    <thetext>The C Branch currently doesn&apos;t compile for X86-32.  This is to get it to compile and then run in the LLInt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968506</commentid>
    <comment_count>1</comment_count>
      <attachid>221312</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-01-15 15:51:22 -0800</bug_when>
    <thetext>Created attachment 221312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968558</commentid>
    <comment_count>2</comment_count>
      <attachid>221312</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-15 18:51:33 -0800</bug_when>
    <thetext>Comment on attachment 221312
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=221312&amp;action=review

Thanks for doing all this work.  I think your alignment logic is off (and I’ve made comments where I spotted them).  Basically, you seem to expect the stack to be aligned before a call instruction.  I think the sp should be 8 bytes off alignment just before the call instruction.  The call instruction will push 4 bytes for the return PC, and the callee prologue will push another 4 bytes for the saved cfr.  Thereafter, the sp becomes aligned again.  Can you please take another look through this?

As for the JIT parts, I’m not super familiar with them, but I did what I could by comparing them against the 64-bit version as a trusted version.  You might want to get a second pair of eyes on the JIT parts in case I missed any subtleties.  Thanks.

&gt; Source/JavaScriptCore/jit/JITCall32_64.cpp:198
&gt; +    addPtr(TrustedImm32(sizeof(CallerFrameAndPC)), regT3, stackPointerRegister);

Should regT3 here be regT4 instead?  This is different compared to what I’m seeing in the 64-bit version.

&gt; Source/JavaScriptCore/jit/JITCall32_64.cpp:228
&gt;      emitLoad(JSStack::Callee, regT1, regT0);

This looks like it will trash the result of the 2 loadPtrs above.  Also, the 64-bit version doesn’t have this line.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:-53
&gt; +    emitFunctionPrologue();
&gt;      emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock);
&gt; -    storePtr(callFrameRegister, &amp;m_vm-&gt;topCallFrame);

The 64-bit version of JIT::privateCompileCTINativeCall() just returns vm-&gt;getCTIStub(nativeCallGenerator).  Is there any reason the 32-bit version should behave differently or should be structured differently for this function?

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:518
&gt; +    // FIXME: I don&apos;t think currentReturnThunkPC is used and should be deleted.
&gt; +#  if 0
&gt; +    jit.loadPtr(&amp;vm-&gt;currentReturnThunkPC, GPRInfo::regT2);
&gt; +    jit.storePtr(GPRInfo::regT2, JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, CallFrame::returnPCOffset()));
&gt; +#   else
&gt; +    jit.storePtr(GPRInfo::regT5, JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, CallFrame::returnPCOffset()));
&gt; +#   endif

FIXME to be addressed?  I noticed that this isn’t in the 64-bit code.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:105
&gt; +        subp 8, sp

Is this necessary?  Assuming the sp is currently aligned, we push 2 args, the call pushes the retAddress, and the callee pushes %rbp ... with that, we’re aligned again.  So, I think this sp bump is not needed here.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:109
&gt; +        addp 16, sp

In light of the above, this should be &quot;addp 8, sp”.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:132
&gt; +        push arg4
&gt; +        push arg3
&gt; +        push arg2
&gt; +        push arg1

I think we need to “subp 8, sp” before we push the args here.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:134
&gt; +        addp 16, sp

Accordingly, this should be “addp 24, sp”.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:210
&gt; +    callToJavaScriptPrologue()

See comments for callToJavaScriptPrologue() in LowLevelInterpreter.asm below.  Add the “subp 8, sp” after this line with the comment about this being the alignment adjustment for the VMEntrySentinelFrame which is only 5 Registers in size.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:337
&gt; +        # Put callee frame pointer on stack as arg0, also put it in ecx for &quot;fastcall&quot; targets
&gt; +        move sp, t2 # t2 is ecx
&gt; +        move cfr, [sp] # put caller frame pointer into callee frame since callee prologue can&apos;t
&gt; +        subp 12, sp
&gt; +        push t2

Shouldn’t this be “sub 4, sp” instead of “sub 12, sp”?  The sp is aligned to begin with, we push 1 arg, the call pushes the retAddress, the callee pushes rbp.  That means we’re only 4 bytes off for alignment, not 12.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:344
&gt; +        addp 16, sp

Ditto.  This should be &quot;addp 8, sp” instead of “addp 16, sp”.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:-2114
&gt; -        subp 16 - 8, sp
&gt;          loadi Callee + PayloadOffset[cfr], t1
&gt;          loadp JSFunction::m_executable[t1], t1
&gt; +        checkStackPointerAlignment(t3, 0xdead0001)
&gt;          call executableOffsetToFunction[t1]
&gt; -        addp 16 - 8, sp

The native function expects 1 ExecState* arg.  Hence, before the call, we need to: subtract the sp by 4 for alignment, and push the cfr.  With this 2 and the pushed return PC and cfr to follow, the sp will be aligned again in the callee.  Similarly after the call returns, we need to add 8 to the sp.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:307
&gt;          push t0

I think you should make this part of pushCalleeSaves so that it’s easier to reason about the stack alignment in one place.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:311
&gt;          pushLRAndFP

This question is not directly due to this patch, but since it’s in this area, I thought I’d ask: is the lr register not accessible as a general purpose register on ARM64 like it is on ARM?  If lr is just like any other GPR, why don’t we just fold this ARM64 section into the ARM one, and remove the need for pushLRAndFP.  Similarly for popLRAndFP.  Let me know if I’m wrong about this.  Thanks.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:319
&gt; +    if X86
&gt; +        subp 12, sp
&gt; +    end

You should make this part of pushCalleeSaves instead of doing it here.  Either that or we get rid of pushCalleeSaves and push the registers explicitly here.  Otherwise, it’s one step removed to be able to see whether we have retained stack alignment or not.

At first, looking at this code, I thought we need to &quot;subp 4, sp” instead of “subp 12, sp” because we pushed 3 callee saved regs bringing the total to 12 and needing 4 more bytes for alignment.  And then I realized that we need to add another 8 to compensate for the fact that the 32-bit CallFrameHeader only has 5 Registers in size and that we need to push a VMEntrySentinelFrame soon.

The pushCalleeSaves number of words may vary architecture to architecture, but we’ll always want to subtract the sp by 8 here (for ARM and other 32-bit archs as well) to compensate for the CallFrameHeader being only 5 Registers in size and that we need the stack aligned after we push the VMEntrySentinelFrame.  So, here’s what I propose we do to make things more sane:

1. After we push cfr, the sp should be aligned (as one would expect in the ABI).
2. After we push the callee saved registers, let’s keep the sp aligned.  Hence, in pushCalleeSaves for X86, let’s subtract another 4 bytes from sp.
3. In doCallToJavaScript(), subtract the sp by 8 there before pushing the VMEntrySentinelFrame.  Also add a comment to explain that that 8 bytes adjustment is needed because we need to keep the sp aligned after we push the VMEntrySentinelFrame and the VmEntrySentinelFrame being of the size of a CallFrameHeader is 8 bytes short of alignment.

This way, it’ll be easier to reason about the stack alignment at each step.  Each part takes care of their own requirement.  And if pushCalleeSaves vary for different ports, they only need to worry about their own number of saved registers and align that.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:329
&gt; +    if X86
&gt; +        addp 12, sp
&gt; +    end
&gt; +

You should do this as part of popCalleeSaves. Same as above, add 4 instead of 12.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:332
&gt; +        pop t2

Ditto.  Make this part of popCalleeSaves so that it’s easier to reason about the stack alignment in one place.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:2
&gt; - * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2011, 2012, 2013, 2014 Apple Inc. All rights reserved.

Not needed because the only change is the white space change below.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:-364
&gt;      BEGIN();
&gt; -    

I don’t think this white space only change is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968943</commentid>
    <comment_count>3</comment_count>
      <attachid>221312</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-16 14:34:42 -0800</bug_when>
    <thetext>Comment on attachment 221312
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=221312&amp;action=review

Michael pointed out that the ABI requirement is to have the sp aligned before the call instruction, and the cfr as a result will be off by 8 (and need not be aligned).  Updating / adding some of the review comments based on this new info.  The other review comments still stand.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:105
&gt;&gt; +        subp 8, sp
&gt; 
&gt; Is this necessary?  Assuming the sp is currently aligned, we push 2 args, the call pushes the retAddress, and the callee pushes %rbp ... with that, we’re aligned again.  So, I think this sp bump is not needed here.

Disregard this comment.  The &quot;subp 9, sp&quot; is needed.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:109
&gt;&gt; +        addp 16, sp
&gt; 
&gt; In light of the above, this should be &quot;addp 8, sp”.

Disregard this comment.  The &quot;addp 16, sp&quot; is correct.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:132
&gt;&gt; +        push arg1
&gt; 
&gt; I think we need to “subp 8, sp” before we push the args here.

Disregard this comment.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:134
&gt;&gt; +        addp 16, sp
&gt; 
&gt; Accordingly, this should be “addp 24, sp”.

Disregard this comment.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:210
&gt;&gt; +    callToJavaScriptPrologue()
&gt; 
&gt; See comments for callToJavaScriptPrologue() in LowLevelInterpreter.asm below.  Add the “subp 8, sp” after this line with the comment about this being the alignment adjustment for the VMEntrySentinelFrame which is only 5 Registers in size.

I&apos;m not sure if we need to do any adjustments here.  It depends on what makes sense to go into pushCalleeSaves().  One requirement is that the sp needs to be aligned by the time we make the call to _llint_throw_stack_overflow_error() below.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:337
&gt;&gt; +        push t2
&gt; 
&gt; Shouldn’t this be “sub 4, sp” instead of “sub 12, sp”?  The sp is aligned to begin with, we push 1 arg, the call pushes the retAddress, the callee pushes rbp.  That means we’re only 4 bytes off for alignment, not 12.

Disregard this comment.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:344
&gt;&gt; +        addp 16, sp
&gt; 
&gt; Ditto.  This should be &quot;addp 8, sp” instead of “addp 16, sp”.

Disregard this comment.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:2111
&gt;          loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3

BTW, just above this code, the &quot;load ScopeChain[cfr], t3&quot; is redundant.  The ScopeChain is already in t1 (loaded in the instructions above it).  You can remove the &quot;loadp ScopeChain[cfr], t3&quot; and use t1 instead in the 2 andp and loadp instructions for loading the VM*.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:-2110
&gt; -        subp 16 - 8, sp

You need to push the cfr here as well.  Hence:

subp 12, sp
push cfr

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:-2114
&gt;&gt; -        addp 16 - 8, sp
&gt; 
&gt; The native function expects 1 ExecState* arg.  Hence, before the call, we need to: subtract the sp by 4 for alignment, and push the cfr.  With this 2 and the pushed return PC and cfr to follow, the sp will be aligned again in the callee.  Similarly after the call returns, we need to add 8 to the sp.

Here, you&apos;ll need:
addp 16, sp

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:319
&gt;&gt; +    end
&gt; 
&gt; You should make this part of pushCalleeSaves instead of doing it here.  Either that or we get rid of pushCalleeSaves and push the registers explicitly here.  Otherwise, it’s one step removed to be able to see whether we have retained stack alignment or not.
&gt; 
&gt; At first, looking at this code, I thought we need to &quot;subp 4, sp” instead of “subp 12, sp” because we pushed 3 callee saved regs bringing the total to 12 and needing 4 more bytes for alignment.  And then I realized that we need to add another 8 to compensate for the fact that the 32-bit CallFrameHeader only has 5 Registers in size and that we need to push a VMEntrySentinelFrame soon.
&gt; 
&gt; The pushCalleeSaves number of words may vary architecture to architecture, but we’ll always want to subtract the sp by 8 here (for ARM and other 32-bit archs as well) to compensate for the CallFrameHeader being only 5 Registers in size and that we need the stack aligned after we push the VMEntrySentinelFrame.  So, here’s what I propose we do to make things more sane:
&gt; 
&gt; 1. After we push cfr, the sp should be aligned (as one would expect in the ABI).
&gt; 2. After we push the callee saved registers, let’s keep the sp aligned.  Hence, in pushCalleeSaves for X86, let’s subtract another 4 bytes from sp.
&gt; 3. In doCallToJavaScript(), subtract the sp by 8 there before pushing the VMEntrySentinelFrame.  Also add a comment to explain that that 8 bytes adjustment is needed because we need to keep the sp aligned after we push the VMEntrySentinelFrame and the VmEntrySentinelFrame being of the size of a CallFrameHeader is 8 bytes short of alignment.
&gt; 
&gt; This way, it’ll be easier to reason about the stack alignment at each step.  Each part takes care of their own requirement.  And if pushCalleeSaves vary for different ports, they only need to worry about their own number of saved registers and align that.

Since there is no requirement on the alignment of the cfr, the only requirement is that the sp is aligned by the time you get to the call to llint_throw_stack_overflow_error() in doCallToJavaScriptCore().  I think you should still do all the adjustments in pushCalleeSaves and document the reasons for any padding you add there for alignment.

Thinking about this some more, I feel that we should have pushCalleeSaves as a macro in the LLINT asm files.  Currently, having to look into the offline asm files (in order to figure out what pushCalleeSaves does) makes it harder to reason about whether we&apos;ve met the alignment requirement or not.  Can you retire the pushCalleeSaves and popCalleeSaves instructions and replace them with LLINT macros instead?

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:329
&gt;&gt; +
&gt; 
&gt; You should do this as part of popCalleeSaves. Same as above, add 4 instead of 12.

Same … do this as part of a LLINT popCalleeSaves() macro, but I&apos;m not sure about the amount to align yet.  Need to see what the resultant pushCalleeSaves() and popCalleeSaves() macros look like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969009</commentid>
    <comment_count>4</comment_count>
      <attachid>221432</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-01-16 17:30:37 -0800</bug_when>
    <thetext>Created attachment 221432
Updated patch

(In reply to comment #3)
&gt; (From update of attachment 221312 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=221312&amp;action=review
&gt; 
&gt; Michael pointed out that the ABI requirement is to have the sp aligned before the call instruction, and the cfr as a result will be off by 8 (and need not be aligned).  Updating / adding some of the review comments based on this new info.  The other review comments still stand.
&gt; &gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:210
&gt; &gt;&gt; +    callToJavaScriptPrologue()
&gt; &gt; 
&gt; &gt; See comments for callToJavaScriptPrologue() in LowLevelInterpreter.asm below.  Add the “subp 8, sp” after this line with the comment about this being the alignment adjustment for the VMEntrySentinelFrame which is only 5 Registers in size.
&gt; 
&gt; I&apos;m not sure if we need to do any adjustments here.  It depends on what makes sense to go into pushCalleeSaves().  One requirement is that the sp needs to be aligned by the time we make the call to _llint_throw_stack_overflow_error() below.

Changed the move cfr, sp to subp cfr, 8, sp.

&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:2111
&gt; &gt;          loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
&gt; 
&gt; BTW, just above this code, the &quot;load ScopeChain[cfr], t3&quot; is redundant.  The ScopeChain is already in t1 (loaded in the instructions above it).  You can remove the &quot;loadp ScopeChain[cfr], t3&quot; and use t1 instead in the 2 andp and loadp instructions for loading the VM*.
&gt; 
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:-2110
&gt; &gt; -        subp 16 - 8, sp
&gt; 
&gt; You need to push the cfr here as well.  Hence:
&gt; 
&gt; subp 12, sp
&gt; push cfr

Actually we just did a functionPrologue above, so that isn&apos;t needed.

&gt; &gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:-2114
&gt; &gt;&gt; -        addp 16 - 8, sp
&gt; &gt; 
&gt; &gt; The native function expects 1 ExecState* arg.  Hence, before the call, we need to: subtract the sp by 4 for alignment, and push the cfr.  With this 2 and the pushed return PC and cfr to follow, the sp will be aligned again in the callee.  Similarly after the call returns, we need to add 8 to the sp.
&gt; 
&gt; Here, you&apos;ll need:
&gt; addp 16, sp

Not needed per prior comment.

&gt; &gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:319
&gt; &gt;&gt; +    end
&gt; &gt; 
&gt; &gt; You should make this part of pushCalleeSaves instead of doing it here.  Either that or we get rid of pushCalleeSaves and push the registers explicitly here.  Otherwise, it’s one step removed to be able to see whether we have retained stack alignment or not.
&gt; &gt; 
&gt; &gt; At first, looking at this code, I thought we need to &quot;subp 4, sp” instead of “subp 12, sp” because we pushed 3 callee saved regs bringing the total to 12 and needing 4 more bytes for alignment.  And then I realized that we need to add another 8 to compensate for the fact that the 32-bit CallFrameHeader only has 5 Registers in size and that we need to push a VMEntrySentinelFrame soon.
&gt; &gt; 
&gt; &gt; The pushCalleeSaves number of words may vary architecture to architecture, but we’ll always want to subtract the sp by 8 here (for ARM and other 32-bit archs as well) to compensate for the CallFrameHeader being only 5 Registers in size and that we need the stack aligned after we push the VMEntrySentinelFrame.  So, here’s what I propose we do to make things more sane:
&gt; &gt; 
&gt; &gt; 1. After we push cfr, the sp should be aligned (as one would expect in the ABI).
&gt; &gt; 2. After we push the callee saved registers, let’s keep the sp aligned.  Hence, in pushCalleeSaves for X86, let’s subtract another 4 bytes from sp.
&gt; &gt; 3. In doCallToJavaScript(), subtract the sp by 8 there before pushing the VMEntrySentinelFrame.  Also add a comment to explain that that 8 bytes adjustment is needed because we need to keep the sp aligned after we push the VMEntrySentinelFrame and the VmEntrySentinelFrame being of the size of a CallFrameHeader is 8 bytes short of alignment.
&gt; &gt; 
&gt; &gt; This way, it’ll be easier to reason about the stack alignment at each step.  Each part takes care of their own requirement.  And if pushCalleeSaves vary for different ports, they only need to worry about their own number of saved registers and align that.
&gt; 
&gt; Since there is no requirement on the alignment of the cfr, the only requirement is that the sp is aligned by the time you get to the call to llint_throw_stack_overflow_error() in doCallToJavaScriptCore().  I think you should still do all the adjustments in pushCalleeSaves and document the reasons for any padding you add there for alignment.
&gt;
&gt; Thinking about this some more, I feel that we should have pushCalleeSaves as a macro in the LLINT asm files.  Currently, having to look into the offline asm files (in order to figure out what pushCalleeSaves does) makes it harder to reason about whether we&apos;ve met the alignment requirement or not.  Can you retire the pushCalleeSaves and popCalleeSaves instructions and replace them with LLINT macros instead?

It probably makes sense to break out pushCalleeSaves as individual pushes and corresponding pops for popCalleeSaves.  That is probably best deferred to after landing on trunk as there exists the prerequisite changes to ARM64 push and pop working on pairs of registers.  Files &lt;https://bugs.webkit.org/show_bug.cgi?id=127155&gt; to track this.

&gt; &gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:329
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; You should do this as part of popCalleeSaves. Same as above, add 4 instead of 12.
&gt; 
&gt; Same … do this as part of a LLINT popCalleeSaves() macro, but I&apos;m not sure about the amount to align yet.  Need to see what the resultant pushCalleeSaves() and popCalleeSaves() macros look like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969341</commentid>
    <comment_count>5</comment_count>
      <attachid>221432</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 17:37:43 -0800</bug_when>
    <thetext>Comment on attachment 221432
Updated patch

View in context: https://bugs.webkit.org/attachment.cgi?id=221432&amp;action=review

&gt; Source/JavaScriptCore/assembler/MaxFrameExtentForSlowPathCall.h:50
&gt;  // 6 args on stack (24 bytes) + 8 bytes to align the stack.

This comment is out of date.

&gt; Source/JavaScriptCore/interpreter/ProtoCallFrame.cpp:49
&gt; -    paddedArgsCount = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), paddedArgsCount);
&gt; -    this-&gt;setPaddedArgsCount(paddedArgsCount);
&gt; +    paddedArgsCount = roundArgumentCountToAlignFrame(paddedArgsCount);
&gt; +    this-&gt;setPaddedArgCount(paddedArgsCount);

I find roundArgumentCountToAlignFrame() to be unclear as to what it’s trying to do here.  I’ll upload a patch shortly with a different way to compute this which I think is more clear about the intent.

&gt; Source/JavaScriptCore/llint/LLIntEntrypoint.cpp:122
&gt; -    size_t registerCount = codeBlock-&gt;m_numCalleeRegisters + maxFrameExtentForSlowPathCallInRegisters;
&gt; +    size_t registerCount = codeBlock-&gt;m_numCalleeRegisters;
&gt;      ASSERT(registerCount == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), registerCount));
&gt; +    registerCount += maxFrameExtentForSlowPathCallInRegisters;

This weakens the assertion that was previously there.  I think we can do better.  I’ll upload a patch shortly for my proposal on how.

&gt; Source/JavaScriptCore/runtime/StackAlignment.h:48
&gt; +// Align argument count taking into account the CallFrameHeaderSize may be unaligned
&gt; +inline unsigned roundArgumentCountToAlignFrame(unsigned argumentCount)
&gt; +{
&gt; +    unsigned callFrameHeaderSizeBias = JSStack::CallFrameHeaderSize % 2;
&gt; +    return WTF::roundUpToMultipleOf(stackAlignmentRegisters(), argumentCount + callFrameHeaderSizeBias) - callFrameHeaderSizeBias;
&gt; +}

This function is confusing to me.  2 main issues:
1. Why % 2?  Why not % stackAlignmentRegisters()?  I think this logic will break if stackAlignmentRegisters() is not 2.
2. We’re not clear about the end goal of this alignment exercise?  Hence, it is hard to tell whether we’re doing it right.

I’ll propose an alternative in a patch I’ll upload shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969342</commentid>
    <comment_count>6</comment_count>
      <attachid>221518</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 17:38:40 -0800</bug_when>
    <thetext>Created attachment 221518
proposed patch with changes in areas where I felt we need more clarity. ChangeLog not included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969343</commentid>
    <comment_count>7</comment_count>
      <attachid>221519</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-17 17:39:58 -0800</bug_when>
    <thetext>Created attachment 221519
diff between the 2 patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969373</commentid>
    <comment_count>8</comment_count>
      <attachid>221527</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-01-17 20:49:05 -0800</bug_when>
    <thetext>Created attachment 221527
Patch with updates after conversation with Mark

Fixed the rounding math to use JSStack::CallFrameHeaderSize for argument count rounding and JSStack::CallerFrameAndPCSize for local register count rounding.  What Mark was calling framePointerAlignmentOvershoot is really roundUpToMultipleOf(stackAlignmentRegisters(), JSStack::CallerFrameAndPCSize).  I used that directly in the local register rounding computation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969376</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-01-17 21:01:26 -0800</bug_when>
    <thetext>Committed r162240: &lt;http://trac.webkit.org/changeset/162240&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221312</attachid>
            <date>2014-01-15 15:51:22 -0800</date>
            <delta_ts>2014-01-16 17:30:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>127071.patch</filename>
            <type>text/plain</type>
            <size>33334</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMDk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE0LTAxLTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIENTdGFjayBCcmFuY2g6IFg4Ni0zMiBGaXggTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA3MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZml4ZXMgWDg2LTMyIGNvbXBpbGF0aW9u
IGlzc3Vlcy4KKworICAgICAgICBGaXhlZCB0aGUgMzIgYml0IExMSW50IHRvIHdvcmsgd2l0aCBY
ODYuICBTaW5jZSBYODYgcGFzc2VzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2ssCisgICAgICAgIGNh
bGxzIChlLmcuIExMSW50IENDYWxsMiwgSklUT3BlcmF0aW9uczo6Z2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSksIHJlcXVpcmUgbWFraW5nCisgICAgICAgIGFuIG91dGdvaW5nIGFyZ3VtZW50IGFyZWEg
b24gdGhlIHN0YWNrIGZvciBtYWtlaW5nIHRoZSBjYWxsLgorCisgICAgICAgIE1hZGUgZXhwZWN0
ZWQgY2hhbmdlcyB0byB0aGUgQmFzZWxpbmUgSklUIGNvZGUgYXMgd2VsbC4gIFRoZXNlIGNoYW5n
ZXMgYXJlIHVudGVzdGVkLgorCisgICAgICAgIFRlc3QgWDg2LTMyIHdpdGggTExJbnQgb25seSB0
ZXN0YXBpLiAgVGVzdGVkIFg4Ni02NCB3aXRoIGFsbCBqYXZhc2NyaXB0IHRlc3RzLgorCisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90
aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90
aGlzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW5kKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmFyaXR5Rml4
dXApOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RF
Q0wpOgorCiAyMDE0LTAxLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgcmVlbnRyYW50LWNhY2hpbmcgc29tZXRpbWVzIGZhaWxzIHdpdGggTExJbnQgZGlzYWJs
ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTYyMDk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1
MiwxMiArMzA1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBh
ZGRyZXNzLgotICAgICAgICBtX2ppdC5lbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIi
LgotICAgICAgICBtX2ppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmV0dXJuLgotICAgICAg
ICBtX2ppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMik7
CisgICAgICAgIG1faml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgIG1faml0LnJl
dCgpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE2MjA5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOCwxMCArMjA4LDYgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0cihmcm9tLCBB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJh
bWVIZWFkZXJQdHIoUmVnaXN0ZXJJRCB0bykKLSAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgp
KSwgdG8pOwotICAgIH0KICAgICB2b2lkIGVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2
aXNpb24gMTYyMDk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAi
UmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKICNpbmNsdWRlICJTYW1w
bGluZ1Rvb2wuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgogCiAKQEAgLTU2LDEwICs1Nyw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCiAgICAgZW1pdExvYWQoZHN0LCByZWdUMSwgcmVnVDAp
OwotICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVnVDIpOwotICAg
IGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIpOwogCi0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDIpOworICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKICAgICByZXQoKTsKIH0KIApAQCAtNzMsMjAgKzczLDE2IEBAIHZvaWQgSklUOjplbWl0X29w
X3JldF9vYmplY3Rfb3JfdGhpcyhJbnMKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBub3RPYmplY3QgPSBlbWl0
SnVtcElmTm90T2JqZWN0KHJlZ1QyKTsKIAotICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJh
bWVIZWFkZXJQdHIocmVnVDIpOwotICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4ocmVnVDIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cisg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKIAogICAgIG5vdEpTQ2VsbC5s
aW5rKHRoaXMpOwogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkKHRoaXNS
ZWcsIHJlZ1QxLCByZWdUMCk7CiAKLSAgICBlbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKHJlZ1QyKTsKLSAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyKTsKLQotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKHJlZ1QyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiB9CiAKQEAgLTE1MSw4ICsxNDcsMTIg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogICAgICAgICAvLyBy
ZWdUMjogYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMKIAogICAgICAgICBtb3ZlKHJlZ1QyLCBy
ZWdUMyk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyICsg
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSksIHJlZ1QzKTsKKyAgICAgICAgLy8gcmVnVDEg
bm93IGhhcyB0aGUgcmVxdWlyZWQgZnJhbWUgc2l6ZSBpbiBSZWdpc3RlciB1bml0cworICAgICAg
ICAvLyBSb3VuZCByZWdUMSB0byBuZXh0IG11bHRpcGxlIG9mIHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpIC0gMSksIHJlZ1QzKTsKKyAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW0zMih+KHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkgLSAxKSksIHJlZ1QzKTsKICAgICAgICAgbmVnMzIocmVnVDMpOwot
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoZmlyc3RGcmVlUmVnaXN0ZXIgLSBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplKSwgcmVnVDMpOwogICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1t
MzIoMyksIHJlZ1QzKTsKICAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMyk7
CiAgICAgICAgIC8vIHJlZ1QzOiBuZXdDYWxsRnJhbWUKQEAgLTE4NiwyMSArMTg2LDMyIEBAIHZv
aWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRMb2FkKGFy
Z3VtZW50cywgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3MsIHJlZ1QxLCByZWdUMCwgZmlyc3RGcmVlUmVnaXN0ZXIpOwotICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlZ1Q1KTsKLSAgICBlbWl0TG9hZCh0aGlzVmFsdWUsIHJlZ1Qx
LCByZWdUMCk7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGVtaXRMb2FkKHRoaXNWYWx1ZSwgcmVnVDEsIHJlZ1Q0KTsKICAgICBlbWl0TG9hZChh
cmd1bWVudHMsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2Fk
VmFyYXJncywgcmVnVDUsIHJlZ1QxLCByZWdUMCwgcmVnVDMsIHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCByZXR1cm5WYWx1ZUdQUiwgcmVnVDEsIHJlZ1Q0
LCByZWdUMywgcmVnVDIpOwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QzKTsKIAogICAg
IGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CisKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QzLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiB9CiAKIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogewotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGlvbihvcGVyYXRpb25DYWxsRXZhbCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25DYWxsRXZhbCwgcmVnVDEpOworCisgICAgSnVtcCBub0V4Y2VwdGlvbiA9IGVt
aXRFeGNlcHRpb25DaGVjayhJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBl
eGNlcHRpb25DaGVjayhqdW1wKCkpOworCisgICAgbm9FeGNlcHRpb24ubGluayh0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSkpOwotICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAorICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2sp
OwogICAgIApAQCAtMjExLDggKzIyMiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoSW5zdHJ1CiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgbG9hZFB0cihB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6
Q2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOworICAgIGxvYWRQdHIo
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6
OkNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QxKTsKKwogICAgIGVtaXRM
b2FkKEpTU3RhY2s6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TmFrZWRDYWxsKG1f
dm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgc2FtcGxlQ29kZUJs
b2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI1MSwxOCArMjY3LDE3IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKICAgICAgICAgfQogICAgIAotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVy
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMyk7Cisg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3Vu
dCksIHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCwgcmVnVDMpKTsKLSAgICB9IC8v
IHJlZ1QzIGhvbGRzIG5ld0NhbGxGcmFtZSB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQu
CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSk7CisgICAgfSAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2Rl
SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIHRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50LCBjYWxsRnJhbWVSZWdpc3Rl
cikpOwogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVnVDEsIHJlZ1Qw
IGhvbGRzIGNhbGxlZS4KIAotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KHJlZ1QzLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICBlbWl0U3RvcmUo
SlNTdGFjazo6Q2FsbGVlLCByZWdUMSwgcmVnVDAsIHJlZ1QzKTsKLSAgICBtb3ZlKHJlZ1QzLCBj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpD
YWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CkBAIC0yODEs
MTAgKzI5NiwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAg
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKICAgICBtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZU9mZnNldDsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVnVDEpOwotICAgIGVtaXRQ
dXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2Nv
cGUpKSwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6U2NvcGVDaGFpbiAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKwogICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVt
aXROYWtlZENhbGwoKTsKIAorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CisKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGluc3RydWN0aW9uKTsKIH0KQEAgLTI5OSwxMiArMzE4LDE1IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0g
bGlua0NhbGxUaHVua0dlbmVyYXRvckZvcigKKyAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ig
PSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCiAgICAgICAgIG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKICAgICAgICAgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5h
a2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKIAorICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisKICAgICBzYW1wbGVDb2RlQmxvY2so
bV9jb2RlQmxvY2spOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDE2MjA5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFy
b2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00OSw4ICs0OSw4IEBAIEpJVDo6
Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKIHsKICAgICBDYWxsIG5hdGl2ZUNh
bGw7CiAKKyAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGVtaXRQdXRJbW1lZGlhdGVU
b0NhbGxGcmFtZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxvY2spOwotICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCAmbV92bS0+dG9wQ2FsbEZyYW1lKTsKIAogI2lmIENQVShYODYpCiAg
ICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1l
IHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KQEAgLTU5LDE3ICs1OSwxMiBAQCBKSVQ6OkNv
ZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKIAot
ICAgIHBlZWsocmVnVDEpOwotICAgIGVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKHJl
Z1QxKTsKLQogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGVjeCwgZWR4LCAuLi4p
OwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwogICAgIG1v
dmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4KTsKIAogICAgIHN1YlB0cihU
cnVzdGVkSW1tMzIoMTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAv
LyBBbGlnbiBzdGFjayBhZnRlciBjYWxsLgogCi0gICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVn
aXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lk
IGxvYWRpbmcgZnJvbSBzdGFjay4KLQogICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCiAgICAgbmF0
aXZlQ2FsbCA9IGNhbGwoKTsKIApAQCAtODEsOSArNzYsNiBAQCBKSVQ6OkNvZGVSZWYgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
SlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0UHV0Q2VsbFRvQ2Fs
bEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKIAotICAgIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKLSAgICBl
bWl0UHV0UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihyZWdUMyk7Ci0KICNpZiBDUFUoTUlQUykK
ICAgICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3IgKHVudXNlZCkgMTYgYnl0ZXMgKDgtYnl0
ZSBhbGlnbmVkKSBmb3IgNCBhcmd1bWVudHMuCiAgICAgc3ViUHRyKFRydXN0ZWRJbW0zMigxNiks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTk0LDcgKzg2LDYgQEAgSklUOjpDb2RlUmVmIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIGFy
Z3VtZW50R1BSMCk7CiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNr
OjpDYWxsZWUsIGFyZ3VtZW50R1BSMSk7Ci0gICAgbW92ZShyZWdUMiwgY2FsbEZyYW1lUmVnaXN0
ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxv
YWRpbmcgZnJvbSBzdGFjay4KICAgICBsb2FkUHRyKEFkZHJlc3MoYXJndW1lbnRHUFIxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKIAogICAgIC8v
IGNhbGwgdGhlIGZ1bmN0aW9uCkBAIC0xNzEsNyArMTYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW5kKEluc3RydWN0aW9uKiBjdXJyZQogewogICAgIEFTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0
KCkpKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE2MjA5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4MCw5ICsyODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29y
X3RoaXMoSW5zCiAgICAgbG9hZFB0cihBZGRyZXNzKHJldHVyblZhbHVlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgbm90T2JqZWN0ID0gZW1pdEp1bXBJ
Zk5vdE9iamVjdChyZWdUMik7CiAKLSAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAg
ICBlbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QxKTsKLQogICAgIC8v
IFJldHVybi4KICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
NjIwOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNzc4LDcgKzE3NzgsMTEgQEAgYXNtICgKICIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIEhJREVfU1lNQk9MKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICJcbiIKIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkgIjoiICJcbiIKLSAgICAibW92ICVlYnAsIDQoJWVzcClcbiIKKyAgICAibW92ICglZXNwKSwg
JWVheFxuIgorICAgICJwdXNoICVlYnBcbiIKKyAgICAibGVhbCAtNCglZXNwKSwgJWVzcFxuIgor
ICAgICJwdXNoICVlYnBcbiIKKyAgICAicHVzaCAlZWF4XG4iCiAgICAgImptcCAiIExPQ0FMX1JF
RkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNjIwOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9u
KgogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVy
cygpLAotICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdHJ1ZSk7CisgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRy
dWUpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkBAIC01MjMs
NyArNTIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAg
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMo
KSwKLSAgICAgICAgY2FsbEZyYW1lUmVnaXN0ZXIsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksCisgICAgICAgIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksCiAgICAgICAgIHJl
Z1QxLCB0cnVlLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgZGlyZWN0ID8gRGlyZWN0IDogTm90
RGlyZWN0KTsKICAgICAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAxNjIwOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3MSw5ICs0NzEsMTAg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXAoVk0qIHZtKQogIyAgaWYgQ1BVKFg4
NikKICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgorICAgIGpp
dC5sc2hpZnQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKGxvZ1N0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5uZWczMihKU0lu
dGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJh
bWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQubG9hZDMyKEpTSW50
ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNT
dGFjazo6QXJndW1lbnRDb3VudCAqIDgpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGpp
dC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEpT
SW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LmFkZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVz
dGVkSW1tMzIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSksIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMik7CiAKICAgICAvLyBNb3ZlIGN1cnJlbnQgZnJhbWUgZG93biByZWdUMCBudW1iZXIgb2Yg
c2xvdHMKQEAgLTQ4NSw4ICs0ODYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1
cChWTSogdm0pCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgp
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwogICAgIGppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigxKSwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QyKS5saW5rVG8oY29weUxvb3AsICZqaXQpOwogCi0gICAgLy8gRmlsbCBpbiBy
ZWdUMCBtaXNzaW5nIGFyZyBzbG90cyB3aXRoIHVuZGVmaW5lZAorICAgIC8vIEZpbGwgaW4gcmVn
VDAgLSAxIG1pc3NpbmcgYXJnIHNsb3RzIHdpdGggdW5kZWZpbmVkCiAgICAgaml0Lm1vdmUoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5hZGQz
MihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDEpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIp
OwogICAgIEpTSW50ZXJmYWNlSklUOjpMYWJlbCBmaWxsVW5kZWZpbmVkTG9vcChqaXQubGFiZWwo
KSk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QxKTsKICAgICBqaXQuc3RvcmUzMihKU0ludGVyZmFjZUpJVDo6cmVnVDEs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpUaW1lc0VpZ2h0KSk7CkBAIC00OTYsMTAg
KzQ5OCwyNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSogdm0pCiAgICAg
aml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJ
VDo6cmVnVDMpOwogICAgIGppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigxKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKS5s
aW5rVG8oZmlsbFVuZGVmaW5lZExvb3AsICZqaXQpOwogCi0gICAgLy8gQWRqdXN0IGNhbGwgZnJh
bWUgcmVnaXN0ZXIgdG8gYWNjb3VudCBmb3IgbWlzc2luZyBhcmdzCi0gICAgaml0LmxzaGlmdDMy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMyksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
Ci0gICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgLy8gQWRqdXN0IGNhbGwgZnJhbWUgcmVnaXN0ZXIgYW5k
IHN0YWNrIHBvaW50ZXIgdG8gYWNjb3VudCBmb3IgbWlzc2luZyBhcmdzCisgICAgaml0Lm1vdmUo
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOworICAgIGppdC5s
c2hpZnQzMihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDMpLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDEpOworICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFj
ZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisgICAgLy8g
U2F2ZSB0aGUgb3JpZ2luYWwgcmV0dXJuIFBDLgorICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
OjpyZXR1cm5QQ09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpyZWdUMSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChKU0ludGVyZmFjZUpJVDo6
cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OlRpbWVzRWlnaHQp
KTsKKyAgICAKKyAgICAvLyBJbnN0YWxsIHRoZSBuZXcgcmV0dXJuIFBDLgorICAgIC8vIEZJWE1F
OiBJIGRvbid0IHRoaW5rIGN1cnJlbnRSZXR1cm5UaHVua1BDIGlzIHVzZWQgYW5kIHNob3VsZCBi
ZSBkZWxldGVkLgorIyAgaWYgMAorICAgIGppdC5sb2FkUHRyKCZ2bS0+Y3VycmVudFJldHVyblRo
dW5rUEMsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDIs
IEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSk7CisjICAgZWxzZQorICAgIGppdC5zdG9y
ZVB0cihHUFJJbmZvOjpyZWdUNSwgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VK
SVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKKyMg
ICBlbmRpZgorICAgIAogIyAgaWYgQ1BVKFg4NikKICAgICBqaXQucHVzaChKU0ludGVyZmFjZUpJ
VDo6cmVnVDQpOwogIyAgZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludERhdGEuY3BwCShyZXZpc2lvbiAxNjIwOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lk
IERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBBU1NFUlQoSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSA9PSBDYWxsRnJhbWVIZWFkZXJTbG90cyk7CiAKICAgICBBU1NFUlQo
IUNhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKEpTU3RhY2s6OkNh
bGxlckZyYW1lQW5kUENTaXplID09IDIpOworICAgIEFTU0VSVChKU1N0YWNrOjpDYWxsZXJGcmFt
ZUFuZFBDU2l6ZSA9PSAoUHRyU2l6ZSAqIDIpIC8gU2xvdFNpemUpOwogICAgIEFTU0VSVChDYWxs
RnJhbWU6OnJldHVyblBDT2Zmc2V0KCkgPT0gQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgp
ICsgUHRyU2l6ZSk7CiAgICAgQVNTRVJUKEpTU3RhY2s6OkNvZGVCbG9jayAqIHNpemVvZihSZWdp
c3RlcikgPT0gQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpICsgUHRyU2l6ZSk7CiAgICAgQVNT
RVJUKEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIpID09IEpTU3RhY2s6OkNv
ZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgKyBTbG90U2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQkocmV2aXNpb24gMTYyMDk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci0jIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEwMiw5ICsxMDIsMTEgQEAgbWFjcm8gY0NhbGwyKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKQogICAg
ICAgICBtb3ZlIGFyZzIsIGExCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYK
LSAgICAgICAgcG9rZSBhcmcxLCAwCi0gICAgICAgIHBva2UgYXJnMiwgMQorICAgICAgICBzdWJw
IDgsIHNwCisgICAgICAgIHB1c2ggYXJnMgorICAgICAgICBwdXNoIGFyZzEKICAgICAgICAgY2Fs
bCBmdW5jdGlvbgorICAgICAgICBhZGRwIDE2LCBzcAogICAgIGVsc2lmIFNINAogICAgICAgICBz
ZXRhcmdzIGFyZzEsIGFyZzIKICAgICAgICAgY2FsbCBmdW5jdGlvbgpAQCAtMTI0LDExICsxMjYs
MTIgQEAgbWFjcm8gY0NhbGw0KGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLAogICAgICAgICBt
b3ZlIGFyZzQsIGEzCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYKLSAgICAg
ICAgcG9rZSBhcmcxLCAwCi0gICAgICAgIHBva2UgYXJnMiwgMQotICAgICAgICBwb2tlIGFyZzMs
IDIKLSAgICAgICAgcG9rZSBhcmc0LCAzCisgICAgICAgIHB1c2ggYXJnNAorICAgICAgICBwdXNo
IGFyZzMKKyAgICAgICAgcHVzaCBhcmcyCisgICAgICAgIHB1c2ggYXJnMQogICAgICAgICBjYWxs
IGZ1bmN0aW9uCisgICAgICAgIGFkZHAgMTYsIHNwCiAgICAgZWxzaWYgU0g0CiAgICAgICAgIHNl
dGFyZ3MgYXJnMSwgYXJnMiwgYXJnMywgYXJnNAogICAgICAgICBjYWxsIGZ1bmN0aW9uCkBAIC0x
NDIsMjEgKzE0NSwyMCBAQCBlbmQKIG1hY3JvIGNhbGxTbG93UGF0aChzbG93UGF0aCkKICAgICBj
Q2FsbDIoc2xvd1BhdGgsIGNmciwgUEMpCiAgICAgbW92ZSB0MCwgUEMKLSAgICBtb3ZlIHQxLCBj
ZnIKIGVuZAogCiBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgaWYgWDg2
CiAgICAgICAgIGNvbnN0IGVudHJ5ID0gdDQKLSAgICAgICAgY29uc3Qgdm0gPSB0MgorICAgICAg
ICBjb25zdCB2bSA9IHQzCiAgICAgICAgIGNvbnN0IHByb3RvQ2FsbEZyYW1lID0gdDUKIAogICAg
ICAgICBjb25zdCBwcmV2aW91c0NGUiA9IHQwCiAgICAgICAgIGNvbnN0IHByZXZpb3VzUEMgPSB0
MQogICAgICAgICBjb25zdCB0ZW1wMSA9IHQwICMgU2FtZSBhcyBwcmV2aW91c0NGUgogICAgICAg
ICBjb25zdCB0ZW1wMiA9IHQxICMgU2FtZSBhcyBwcmV2aW91c1BDCi0gICAgICAgIGNvbnN0IHRl
bXAzID0gdDIgIyBzYW1lIGFzIHZtVG9wQ2FsbEZyYW1lCi0gICAgICAgIGNvbnN0IHRlbXA0ID0g
dDMKKyAgICAgICAgY29uc3QgdGVtcDMgPSB0MgorICAgICAgICBjb25zdCB0ZW1wNCA9IHQzICMg
c2FtZSBhcyB2bQogICAgIGVsc2lmIEFSTSBvciBBUk12N19UUkFESVRJT05BTAogICAgICAgICBj
b25zdCBlbnRyeSA9IGEwCiAgICAgICAgIGNvbnN0IHZtID0gYTEKQEAgLTIwNSwzMCArMjA3LDE3
IEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlQ2FsbCkKICAgICAgICAgY29uc3QgdGVt
cDQgPSB0OQogICAgIGVuZAogCisgICAgY2FsbFRvSmF2YVNjcmlwdFByb2xvZ3VlKCkKKwogICAg
IGlmIFg4NgotICAgICAgICBsb2FkcCBbc3BdLCBwcmV2aW91c1BDCi0gICAgICAgIG1vdmUgY2Zy
LCBwcmV2aW91c0NGUgotICAgIGVuZAotICAgIGlmIFg4NgotICAgICAgICBsb2FkcCAyMFtzcF0s
IGVudHJ5Ci0gICAgICAgIGxvYWRwIDI0W3NwXSwgdm0KLSAgICAgICAgbG9hZHAgMjhbc3BdLCBw
cm90b0NhbGxGcmFtZQorICAgICAgICBsb2FkcCAzNltzcF0sIHZtCisgICAgICAgIGxvYWRwIDMy
W3NwXSwgZW50cnkKICAgICBlbHNlCiAgICAgICAgIG1vdmUgY2ZyLCBwcmV2aW91c0NGUgogICAg
ICAgICBtb3ZlIHRvcE9mU3RhY2ssIGNmcgogICAgIGVuZAotICAgIGNhbGxUb0phdmFTY3JpcHRQ
cm9sb2d1ZSgpCi0gICAgCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodGVtcDIsIDB4
YmFkMGRjMDEpCiAKLSAgICAjIFRoZSBqc1N0YWNrTGltaXQgd2FzIHByZXZpb3VzbHkgY29tcHV0
ZWQgaW4gVk1FbnRyeVNjb3BlIHVzaW5nIGFuCi0gICAgIyBlc3RpbWF0ZWQgc3RhY2tQb2ludGVy
QXRWTUVudHJ5IHZhbHVlLiBBZGp1c3QgdGhlIGpzU3RhY2tMaW1pdCBieQotICAgICMgdGhlIGRl
bHRhIGJldHdlZW4gdGhlIGFjdHVhbCBzdGFja1BvaW50ZXJBdFZNRW50cnkgYW5kIHRoZSBlc3Rp
bWF0ZQotICAgICMgdGhhdCB3ZSB1c2VkIHByZXZpb3VzbHkuCi0gICAgc3VicCBWTTo6c3RhY2tQ
b2ludGVyQXRWTUVudHJ5W3ZtXSwgc3AsIHRlbXAyCi0gICAgc3VicCBWTTo6bV9qc1N0YWNrTGlt
aXRbdm1dLCB0ZW1wMiwgdGVtcDIKLSAgICBzdG9yZXAgdGVtcDIsIFZNOjptX2pzU3RhY2tMaW1p
dFt2bV0KLSAgICBzdG9yZXAgc3AsIFZNOjpzdGFja1BvaW50ZXJBdFZNRW50cnlbdm1dCisgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodGVtcDIsIDB4YmFkMGRjMDEpCiAKICAgICAjIFRo
ZSBzdGFjayByZXNlcnZlZCB6b25lIGVuc3VyZXMgdGhhdCB3ZSBoYXZlIGFkZXF1YXRlIHNwYWNl
IGZvciB0aGUKICAgICAjIFZNRW50cnlTZW50aW5lbEZyYW1lLiBQcm9jZWVkIHdpdGggYWxsb2Nh
dGluZyBhbmQgaW5pdGlhbGl6aW5nIHRoZQpAQCAtMjQwLDkgKzIyOSwxNyBAQCBtYWNybyBkb0Nh
bGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0s
IHRlbXAyCiAgICAgc3RvcmVwIHRlbXAyLCBTY29wZUNoYWluW2Nmcl0KICAgICBzdG9yZXAgMSwg
Q29kZUJsb2NrW2Nmcl0KKyAgICBpZiBYODYKKyAgICAgICAgbG9hZHAgMjhbc3BdLCBwcmV2aW91
c1BDCisgICAgICAgIGxvYWRwIDI0W3NwXSwgcHJldmlvdXNDRlIKKyAgICBlbmQKICAgICBzdG9y
ZXAgcHJldmlvdXNQQywgUmV0dXJuUENbY2ZyXQogICAgIHN0b3JlcCBwcmV2aW91c0NGUiwgQ2Fs
bGVyRnJhbWVbY2ZyXQogCisgICAgaWYgWDg2CisgICAgICAgIGxvYWRwIDQwW3NwXSwgcHJvdG9D
YWxsRnJhbWUKKyAgICBlbmQKKwogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdD
b3VudFtwcm90b0NhbGxGcmFtZV0sIHRlbXAyCiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90
cywgdGVtcDIsIHRlbXAyCiAgICAgbHNoaWZ0cCAzLCB0ZW1wMgpAQCAtMjYxLDcgKzI1OCw2IEBA
IG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlQ2FsbCkKICAgICAjIHVwIHRocm93aW5nIGEg
U3RhY2tPdmVyZmxvd0Vycm9yLgogICAgIGVuZAogCi0gICAgc3RvcmVwIDAsIFZNOjpzdGFja1Bv
aW50ZXJBdFZNRW50cnlbdm1dCiAgICAgY0NhbGwyKF9sbGludF90aHJvd19zdGFja19vdmVyZmxv
d19lcnJvciwgdm0sIHByb3RvQ2FsbEZyYW1lKQogICAgIGNhbGxUb0phdmFTY3JpcHRFcGlsb2d1
ZSgpCiAgICAgcmV0CkBAIC0zMTUsOSArMzExLDkgQEAgbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0
KG1ha2VDYWxsKQogICAgIGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIGNmcgogCiAuY2FsbGVlRnJh
bWVQb3BwZWQ6Ci0gICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHRlbXAyICMgVk0KLSAgICBsb2FkcCBT
Y29wZUNoYWluW2Nmcl0sIHRlbXAzICMgcHJldmlvdXMgdG9wQ2FsbEZyYW1lCi0gICAgc3RvcmVw
IHRlbXAzLCBWTTo6dG9wQ2FsbEZyYW1lW3RlbXAyXQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0
ZW1wMyAjIFZNCisgICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0ZW1wNCAjIHByZXZpb3VzIHRv
cENhbGxGcmFtZQorICAgIHN0b3JlcCB0ZW1wNCwgVk06OnRvcENhbGxGcmFtZVt0ZW1wM10KIAog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRlbXAzLCAweGJhZDBkYzA0KQogCkBAIC0z
MjYsMTkgKzMyMiwyOSBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiBlbmQK
IAogbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1wKQorICAgIGFkZHAgOCwgc3AK
ICAgICBjYWxsIGVudHJ5CisgICAgc3VicCA4LCBzcAogZW5kCiAKIG1hY3JvIG1ha2VIb3N0RnVu
Y3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAgIG1vdmUgZW50cnksIHRlbXAKICAgICBpZiBYODYK
LSAgICAgICAgIyBQdXQgY2ZyIG9uIHN0YWNrIGFzIGFyZzAsIGFsc28gcHV0IGl0IGluIGVjeCBm
b3IgImZhc3RjYWxsIiB0YXJnZXRzCi0gICAgICAgIHBva2UgY2ZyLCAwCi0gICAgICAgIG1vdmUg
Y2ZyLCB0MgorICAgICAgICAjIFB1dCBjYWxsZWUgZnJhbWUgcG9pbnRlciBvbiBzdGFjayBhcyBh
cmcwLCBhbHNvIHB1dCBpdCBpbiBlY3ggZm9yICJmYXN0Y2FsbCIgdGFyZ2V0cworICAgICAgICBt
b3ZlIHNwLCB0MiAjIHQyIGlzIGVjeAorICAgICAgICBtb3ZlIGNmciwgW3NwXSAjIHB1dCBjYWxs
ZXIgZnJhbWUgcG9pbnRlciBpbnRvIGNhbGxlZSBmcmFtZSBzaW5jZSBjYWxsZWUgcHJvbG9ndWUg
Y2FuJ3QKKyAgICAgICAgc3VicCAxMiwgc3AKKyAgICAgICAgcHVzaCB0MgogICAgIGVsc2UKLSAg
ICAgICAgbW92ZSBjZnIsIGEwCisgICAgICAgIG1vdmUgc3AsIGEwCisgICAgICAgIGFkZHAgOCwg
c3AKICAgICBlbmQKICAgICBjYWxsIHRlbXAKKyAgICBpZiBYODYKKyAgICAgICAgYWRkcCAxNiwg
c3AKKyAgICBlbHNlCisgICAgICAgIHN1YnAgOCwgc3AKKyAgICBlbmQKIGVuZAogCiBfaGFuZGxl
VW5jYXVnaHRFeGNlcHRpb246CkBAIC0zNTIsOSArMzU4LDkgQEAgX2hhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uOgogICAgICMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIgQyBmcmFtZS4KICAgICBsb2Fk
cCBDYWxsZXJGcmFtZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgY2ZyCiAKLSAgICBsb2FkcCBDYWxs
ZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzICMgVk0udG9wQ2FsbEZyYW1lCi0gICAgbG9hZHAg
U2NvcGVDaGFpbiArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDUKLSAgICBzdG9yZXAgdDUsIFt0M10K
KyAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzICMgVk0KKyAgICBsb2Fk
cCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0NSAjIHByZXZpb3VzIHRvcENhbGxG
cmFtZQorICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10KIAogICAgIGNhbGxUb0ph
dmFTY3JpcHRFcGlsb2d1ZSgpCiAgICAgcmV0CkBAIC0zODcsMTQgKzM5MywxMiBAQCBlbmQKIG1h
Y3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKICAgICBzdG9yZXAgUEMsIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIGNDYWxsMihzbG93UGF0aCwgY2ZyLCBQ
QykKLSAgICBtb3ZlIHQxLCBjZnIKICAgICBhY3Rpb24odDApCiBlbmQKIAogbWFjcm8gY2FsbFdh
dGNoZG9nVGltZXJIYW5kbGVyKHRocm93SGFuZGxlcikKICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50
Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIGNDYWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRs
ZV93YXRjaGRvZ190aW1lciwgY2ZyLCBQQykKLSAgICBtb3ZlIHQxLCBjZnIKICAgICBidHBueiB0
MCwgdGhyb3dIYW5kbGVyCiAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJd
LCBQQwogZW5kCkBAIC0yMTA3LDExICsyMTExLDEwIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9s
aW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCAr
IFdlYWtTZXQ6Om1fdm1bdDNdLCB0MwogICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZy
YW1lW3QzXQogICAgICAgICBtb3ZlIGNmciwgdDIgICMgdDIgPSBlY3gKLSAgICAgICAgc3VicCAx
NiAtIDgsIHNwCiAgICAgICAgIGxvYWRpIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDEK
ICAgICAgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlW3QxXSwgdDEKKyAgICAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodDMsIDB4ZGVhZDAwMDEpCiAgICAgICAgIGNhbGwg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdCi0gICAgICAgIGFkZHAgMTYgLSA4LCBzcAog
ICAgICAgICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHQzCiAgICAgICAgIGFuZHAgTWFya2VkQmxv
Y2tNYXNrLCB0MwogICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV93ZWFrU2V0ICsgV2Vha1Nl
dDo6bV92bVt0M10sIHQzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTYyMDk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMCw4ICsyMDAsMTIgQEAgbWFjcm8gZG9DYWxsVG9K
YXZhU2NyaXB0KG1ha2VDYWxsKQogICAgIGptcCAuY29weUFyZ3NMb29wCiAKIC5jb3B5QXJnc0Rv
bmU6Ci0gICAgbW92ZSBzcCwgdGVtcDIKLSAgICBzdG9yZXAgdGVtcDIsIFZNOjp0b3BDYWxsRnJh
bWVbdm1dCisgICAgaWYgQVJNNjQKKyAgICAgICAgbW92ZSBzcCwgdGVtcDIKKyAgICAgICAgc3Rv
cmVwIHRlbXAyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQorICAgIGVsc2UKKyAgICAgICAgc3RvcmVw
IHNwLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQorICAgIGVuZAogCiAgICAgbW92ZSAweGZmZmYwMDAw
MDAwMDAwMDAsIGNzcjEKICAgICBhZGRwIDIsIGNzcjEsIGNzcjIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDE2MjA5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjM0LDI4ICsyMzQsMjQg
QEAgbWFjcm8gcHJlc2VydmVDYWxsZXJQQ0FuZENGUigpCiAgICAgaWYgQ19MT09QIG9yIEFSTSBv
ciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTIG9yIFNINAogICAgICAgICBwdXNo
IGxyCiAgICAgICAgIHB1c2ggY2ZyCi0gICAgICAgIG1vdmUgc3AsIGNmcgogICAgIGVsc2lmIFg4
NiBvciBYODZfNjQKICAgICAgICAgcHVzaCBjZnIKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAg
ZWxzaWYgQVJNNjQKICAgICAgICAgcHVzaExSQW5kRlAKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAg
ICAgZWxzZQogICAgICAgICBlcnJvcgogICAgIGVuZAorICAgIG1vdmUgc3AsIGNmcgogZW5kCiAK
IG1hY3JvIHJlc3RvcmVDYWxsZXJQQ0FuZENGUigpCisgICAgbW92ZSBjZnIsIHNwCiAgICAgaWYg
Q19MT09QIG9yIEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTIG9yIFNI
NAotICAgICAgICBtb3ZlIGNmciwgc3AKICAgICAgICAgcG9wIGNmcgogICAgICAgICBwb3AgbHIK
ICAgICBlbHNpZiBYODYgb3IgWDg2XzY0Ci0gICAgICAgIG1vdmUgY2ZyLCBzcAogICAgICAgICBw
b3AgY2ZyCiAgICAgZWxzaWYgQVJNNjQKLSAgICAgICAgbW92ZSBjZnIsIHNwCiAgICAgICAgIHBv
cExSQW5kRlAKICAgICBlbmQKIGVuZApAQCAtMzA2LDEwICszMDIsMTEgQEAgbWFjcm8gZnVuY3Rp
b25FcGlsb2d1ZSgpCiBlbmQKIAogbWFjcm8gY2FsbFRvSmF2YVNjcmlwdFByb2xvZ3VlKCkKLSAg
ICBpZiBYODYgb3IgWDg2XzY0CisgICAgaWYgWDg2XzY0CiAgICAgICAgIHB1c2ggY2ZyCi0gICAg
ICAgIG1vdmUgc3AsIGNmcgogICAgICAgICBwdXNoIHQwCisgICAgZWxzaWYgWDg2CisgICAgICAg
IHB1c2ggY2ZyCiAgICAgZWxzaWYgQVJNNjQKICAgICAgICAgcHVzaExSQW5kRlAKICAgICBlbHNp
ZiBDX0xPT1Agb3IgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIE1JUFMKQEAg
LTMxNywxNSArMzE0LDI0IEBAIG1hY3JvIGNhbGxUb0phdmFTY3JpcHRQcm9sb2d1ZSgpCiAgICAg
ICAgIHB1c2ggY2ZyCiAgICAgZW5kCiAgICAgcHVzaENhbGxlZVNhdmVzCisgICAgaWYgWDg2Cisg
ICAgICAgIHN1YnAgMTIsIHNwCisgICAgZW5kCiBlbmQKIAogbWFjcm8gY2FsbFRvSmF2YVNjcmlw
dEVwaWxvZ3VlKCkKICAgICBhZGRwIENhbGxGcmFtZUhlYWRlclNsb3RzICogOCwgY2ZyLCBzcAog
ICAgIGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIGNmcgogCisgICAgaWYgWDg2CisgICAgICAgIGFk
ZHAgMTIsIHNwCisgICAgZW5kCisKICAgICBwb3BDYWxsZWVTYXZlcwotICAgIGlmIFg4NiBvciBY
ODZfNjQKLSAgICAgICAgcG9wIHQ2CisgICAgaWYgWDg2XzY0CisgICAgICAgIHBvcCB0MgorICAg
ICAgICBwb3AgY2ZyCisgICAgZWxzaWYgWDg2CiAgICAgICAgIHBvcCBjZnIKICAgICBlbHNpZiBB
Uk02NAogICAgICAgICBwb3BMUkFuZEZQCkBAIC0zMzYsMTUgKzM0MiwxNSBAQCBtYWNybyBjYWxs
VG9KYXZhU2NyaXB0RXBpbG9ndWUoKQogZW5kCiAKIG1hY3JvIG1vdmVTdGFja1BvaW50ZXJGb3JD
b2RlQmxvY2soY29kZUJsb2NrLCBzY3JhdGNoKQotICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1D
YWxsZWVSZWdpc3RlcnNbY29kZUJsb2NrXSwgdDIKLSAgICBsc2hpZnRwIDMsIHQyCi0gICAgYWRk
cCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgdDIKLSAgICBzdWJwIGNmciwgdDIsIHNw
CisgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bUNhbGxlZVJlZ2lzdGVyc1tjb2RlQmxvY2tdLCBz
Y3JhdGNoCisgICAgbHNoaWZ0cCAzLCBzY3JhdGNoCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCwgc2NyYXRjaAorICAgIHN1YnAgY2ZyLCBzY3JhdGNoLCBzcAogZW5kCiAK
IG1hY3JvIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQotICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCB0MQotICAgIG1vdmVTdGFja1BvaW50ZXJGb3JDb2RlQmxvY2sodDEsIHQyKQorICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MgorICAgIG1vdmVTdGFja1BvaW50ZXJGb3JDb2RlQmxv
Y2sodDIsIHQ0KQogZW5kCiAKIG1hY3JvIHRyYWNlRXhlY3V0aW9uKCkKQEAgLTU5MCw2ICs1OTYs
MTAgQEAgX3Nhbml0aXplU3RhY2tGb3JWTToKICAgICAgICAgY29uc3QgemVyb1ZhbHVlID0gdDIK
ICAgICBlbmQKIAorICAgIGlmIFg4NgorICAgICAgICBsb2FkcCA0W3NwXSwgdm0KKyAgICBlbmQK
KwogICAgIGxvYWRwIFZNOjptX2xhc3RTdGFja1RvcFt2bV0sIGFkZHJlc3MKICAgICBicGJlcSBz
cCwgYWRkcmVzcywgLnplcm9GaWxsRG9uZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE2MjA5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2MSw3ICszNjEsNiBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfbmVnYXRlKQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2FkZCkK
IHsKICAgICBCRUdJTigpOwotICAgIAogICAgIEpTVmFsdWUgdjEgPSBPUF9DKDIpLmpzVmFsdWUo
KTsKICAgICBKU1ZhbHVlIHYyID0gT1BfQygzKS5qc1ZhbHVlKCk7CiAgICAgCg==
</data>
<flag name="review"
          id="245197"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221432</attachid>
            <date>2014-01-16 17:30:37 -0800</date>
            <delta_ts>2014-01-17 20:49:05 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>127071-2.patch</filename>
            <type>text/plain</type>
            <size>23646</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE0LTAxLTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIENTdGFjayBCcmFuY2g6IFg4Ni0zMiBGaXggTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA3MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZml4ZXMgWDg2LTMyIGNvbXBpbGF0aW9u
IGlzc3VlcyBpbiBKSVRDYWxsMzJfNjQuY3BwIGFuZCBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cC4KKworICAgICAgICBGaXhlZCB0aGUgMzIgYml0IExMSW50IHRvIHdvcmsgd2l0aCBYODYuICBT
aW5jZSBYODYgcGFzc2VzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2ssCisgICAgICAgIGNhbGxzIChl
LmcuIExMSW50IENDYWxsMiwgSklUT3BlcmF0aW9uczo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkg
bmVlZCB0byBtYWtlIGFuCisgICAgICAgIG91dGdvaW5nIGFyZ3VtZW50IGFyZWEgb24gdGhlIHN0
YWNrLCBwb3B1bGF0ZSB0aGUgYXJndW1lbnRzIGFuZCB0aGVuIG1ha2UgdGhlIGNhbGwuCisKKyAg
ICAgICAgVGVzdGVkIG9uIFg4Ni0zMiB3aXRoIExMSW50IG9ubHkgdGVzdGFwaS4gIFRlc3RlZCBv
biBYODYtNjQgd2l0aCBhbGwgamF2YXNjcmlwdCB0ZXN0cy4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oOgorICAgICAgICAqIGludGVycHJldGVy
L1Byb3RvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvdG9DYWxsRnJhbWU6OmluaXQp
OgorICAgICAgICAqIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6
OlByb3RvQ2FsbEZyYW1lOjpzZXRQYWRkZWRBcmdDb3VudCk6CisgICAgICAgICogaml0L0pJVENh
bGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgorICAgICAgICAq
IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpmcmFtZVJl
Z2lzdGVyQ291bnRGb3IpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL1N0
YWNrQWxpZ25tZW50Lmg6CisgICAgICAgIChKU0M6OnJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25G
cmFtZSk6CisKIDIwMTQtMDEtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBKU0MgbGF5b3V0IHRlc3RzIHNob3VsZCBydW4gd2l0aCB0aGUgRlRMCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAxNjIwOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhG
cmFtZUV4dGVudEZvclNsbwogCiAjZWxpZiBDUFUoWDg2KQogLy8gNiBhcmdzIG9uIHN0YWNrICgy
NCBieXRlcykgKyA4IGJ5dGVzIHRvIGFsaWduIHRoZSBzdGFjay4KLXN0YXRpYyBjb25zdCBzaXpl
X3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSAzMjsKK3N0YXRpYyBjb25zdCBzaXpl
X3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSAyNDsKIAogI2VsaWYgQ1BVKEFSTTY0
KQogLy8gQWxsIGFyZ3MgaW4gcmVnaXN0ZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxNjIw
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHZvaWQgUHJvdG9DYWxsRnJhbWU6
OmluaXQoQ29kZUJsb2NrKiBjb2QKICAgICAgICAgICAgIHBhZGRlZEFyZ3NDb3VudCA9IG51bVBh
cmFtZXRlcnM7CiAgICAgfQogICAgIC8vIFJvdW5kIHVwIHBhZGRlZEFyZ3NDb3VudCB0byBrZWVw
IHRoZSBzdGFjayBmcmFtZSBzaXplIGFsaWduZWQuCi0gICAgcGFkZGVkQXJnc0NvdW50ID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHBhZGRlZEFy
Z3NDb3VudCk7Ci0gICAgdGhpcy0+c2V0UGFkZGVkQXJnc0NvdW50KHBhZGRlZEFyZ3NDb3VudCk7
CisgICAgcGFkZGVkQXJnc0NvdW50ID0gcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKHBh
ZGRlZEFyZ3NDb3VudCk7CisgICAgdGhpcy0+c2V0UGFkZGVkQXJnQ291bnQocGFkZGVkQXJnc0Nv
dW50KTsKICAgICB0aGlzLT5jbGVhckN1cnJlbnRWUEMoKTsKICAgICB0aGlzLT5zZXRUaGlzVmFs
dWUodGhpc1ZhbHVlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9Qcm90b0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9Qcm90b0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNjIwOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCBzdHJ1Y3QgUHJvdG9DYWxsRnJhbWUgewogICAgIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIGFyZ0NvdW50QW5kQ29kZU9y
aWdpblZhbHVlLnBheWxvYWQoKTsgfQogICAgIGludCBhcmd1bWVudENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSAtIDE7IH0KICAgICB2b2lkIHNldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBhcmdDb3VudEFuZENvZGVPcmln
aW5WYWx1ZS5wYXlsb2FkKCkgPSBjb3VudDsgfQotICAgIHZvaWQgc2V0UGFkZGVkQXJnc0NvdW50
KHNpemVfdCBhcmdDb3VudCkgeyBwYWRkZWRBcmdDb3VudCA9IGFyZ0NvdW50OyB9CisgICAgdm9p
ZCBzZXRQYWRkZWRBcmdDb3VudChzaXplX3QgYXJnQ291bnQpIHsgcGFkZGVkQXJnQ291bnQgPSBh
cmdDb3VudDsgfQogCiAgICAgdm9pZCBjbGVhckN1cnJlbnRWUEMoKSB7IGFyZ0NvdW50QW5kQ29k
ZU9yaWdpblZhbHVlLnRhZygpID0gMDsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTYyMDk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgs
OSArMTk4LDE5IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KIAog
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlv
bkNhbGxFdmFsKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDEpOworCisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2FsbEV2
YWwsIHJlZ1QxKTsKKworICAgIEp1bXAgbm9FeGNlcHRpb24gPSBlbWl0RXhjZXB0aW9uQ2hlY2so
SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZXhjZXB0aW9uQ2hlY2soanVt
cCgpKTsKKworICAgIG5vRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
KTsKLSAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIApAQCAtMjk5LDcgKzMw
OSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRvckZvcigKKyAgICBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCiAgICAgICAgIG9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKICAg
ICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2MjA5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE3NzgsNyArMTc3OCwxMSBAQCBhc20gKAogIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgogSElERV9TWU1CT0woZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSkgIlxuIgogU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAi
OiIgIlxuIgotICAgICJtb3YgJWVicCwgNCglZXNwKVxuIgorICAgICJtb3YgKCVlc3ApLCAlZWF4
XG4iCisgICAgInB1c2ggJWVicFxuIgorICAgICJsZWFsIC00KCVlc3ApLCAlZXNwXG4iCisgICAg
InB1c2ggJWVicFxuIgorICAgICJwdXNoICVlYXhcbiIKICAgICAiam1wICIgTE9DQUxfUkVGRVJF
TkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCiApOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDE2MjA5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3
OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCks
Ci0gICAgICAgIGNhbGxGcmFtZVJlZ2lzdGVyLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0cnVlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdHJ1ZSk7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTUyMyw3ICs1
MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAot
ICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwKICAgICAgICAgcmVnVDEs
IHRydWUsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJl
Y3QpOwogICAgIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAxNjIwOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkK
ICAgICBBU1NFUlQoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSA9PSBDYWxsRnJhbWVIZWFk
ZXJTbG90cyk7CiAKICAgICBBU1NFUlQoIUNhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
Ci0gICAgQVNTRVJUKEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplID09IDIpOworICAgIEFT
U0VSVChKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSA9PSAoUHRyU2l6ZSAqIDIpIC8gU2xv
dFNpemUpOwogICAgIEFTU0VSVChDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkgPT0gQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpICsgUHRyU2l6ZSk7CiAgICAgQVNTRVJUKEpTU3RhY2s6
OkNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPT0gQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNl
dCgpICsgUHRyU2l6ZSk7CiAgICAgQVNTRVJUKEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2Yo
UmVnaXN0ZXIpID09IEpTU3RhY2s6OkNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgKyBTbG90
U2l6ZSk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhW
TSYgdm0pCiAjZWxpZiBDUFUoQVJNKSB8fCBDUFUoU0g0KQogICAgIEFTU0VSVChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCA9PSAxNik7CiAjZWxpZiBDUFUoWDg2KSB8fCBDUFUoTUlQUykK
LSAgICBBU1NFUlQobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPT0gMzIpOworICAgIEFT
U0VSVChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9PSAyNCk7CiAjZW5kaWYKICAgICBB
U1NFUlQoU3RyaW5nVHlwZSA9PSA1KTsKICAgICBBU1NFUlQoT2JqZWN0VHlwZSA9PSAxNyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNw
cAkocmV2aXNpb24gMTYyMDk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw4ICsxMTcsOSBAQCB2b2lkIHNl
dEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvCiAKIHVuc2lnbmVkIGZyYW1lUmVnaXN0
ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBzaXplX3QgcmVnaXN0ZXJD
b3VudCA9IGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzOworICAgIHNpemVfdCByZWdpc3RlckNvdW50ID0gY29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKICAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgcmVn
aXN0ZXJDb3VudCkpOworICAgIHJlZ2lzdGVyQ291bnQgKz0gbWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGxJblJlZ2lzdGVyczsKICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE2MjA5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDIsOSArMTAyLDExIEBAIG1hY3JvIGNDYWxsMihmdW5jdGlvbiwgYXJn
MSwgYXJnMikKICAgICAgICAgbW92ZSBhcmcyLCBhMQogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAg
ICAgZWxzaWYgWDg2Ci0gICAgICAgIHBva2UgYXJnMSwgMAotICAgICAgICBwb2tlIGFyZzIsIDEK
KyAgICAgICAgc3VicCA4LCBzcAorICAgICAgICBwdXNoIGFyZzIKKyAgICAgICAgcHVzaCBhcmcx
CiAgICAgICAgIGNhbGwgZnVuY3Rpb24KKyAgICAgICAgYWRkcCAxNiwgc3AKICAgICBlbHNpZiBT
SDQKICAgICAgICAgc2V0YXJncyBhcmcxLCBhcmcyCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KQEAg
LTEyNCwxMSArMTI2LDEyIEBAIG1hY3JvIGNDYWxsNChmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJn
MywKICAgICAgICAgbW92ZSBhcmc0LCBhMwogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAgICAgZWxz
aWYgWDg2Ci0gICAgICAgIHBva2UgYXJnMSwgMAotICAgICAgICBwb2tlIGFyZzIsIDEKLSAgICAg
ICAgcG9rZSBhcmczLCAyCi0gICAgICAgIHBva2UgYXJnNCwgMworICAgICAgICBwdXNoIGFyZzQK
KyAgICAgICAgcHVzaCBhcmczCisgICAgICAgIHB1c2ggYXJnMgorICAgICAgICBwdXNoIGFyZzEK
ICAgICAgICAgY2FsbCBmdW5jdGlvbgorICAgICAgICBhZGRwIDE2LCBzcAogICAgIGVsc2lmIFNI
NAogICAgICAgICBzZXRhcmdzIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQKICAgICAgICAgY2FsbCBm
dW5jdGlvbgpAQCAtMTQyLDIxICsxNDUsMjAgQEAgZW5kCiBtYWNybyBjYWxsU2xvd1BhdGgoc2xv
d1BhdGgpCiAgICAgY0NhbGwyKHNsb3dQYXRoLCBjZnIsIFBDKQogICAgIG1vdmUgdDAsIFBDCi0g
ICAgbW92ZSB0MSwgY2ZyCiBlbmQKIAogbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxs
KQogICAgIGlmIFg4NgogICAgICAgICBjb25zdCBlbnRyeSA9IHQ0Ci0gICAgICAgIGNvbnN0IHZt
ID0gdDIKKyAgICAgICAgY29uc3Qgdm0gPSB0MwogICAgICAgICBjb25zdCBwcm90b0NhbGxGcmFt
ZSA9IHQ1CiAKICAgICAgICAgY29uc3QgcHJldmlvdXNDRlIgPSB0MAogICAgICAgICBjb25zdCBw
cmV2aW91c1BDID0gdDEKICAgICAgICAgY29uc3QgdGVtcDEgPSB0MCAjIFNhbWUgYXMgcHJldmlv
dXNDRlIKICAgICAgICAgY29uc3QgdGVtcDIgPSB0MSAjIFNhbWUgYXMgcHJldmlvdXNQQwotICAg
ICAgICBjb25zdCB0ZW1wMyA9IHQyICMgc2FtZSBhcyB2bVRvcENhbGxGcmFtZQotICAgICAgICBj
b25zdCB0ZW1wNCA9IHQzCisgICAgICAgIGNvbnN0IHRlbXAzID0gdDIKKyAgICAgICAgY29uc3Qg
dGVtcDQgPSB0MyAjIHNhbWUgYXMgdm0KICAgICBlbHNpZiBBUk0gb3IgQVJNdjdfVFJBRElUSU9O
QUwKICAgICAgICAgY29uc3QgZW50cnkgPSBhMAogICAgICAgICBjb25zdCB2bSA9IGExCkBAIC0y
MDUsMzAgKzIwNywxNyBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAg
ICAgIGNvbnN0IHRlbXA0ID0gdDkKICAgICBlbmQKIAorICAgIGNhbGxUb0phdmFTY3JpcHRQcm9s
b2d1ZSgpCisKICAgICBpZiBYODYKLSAgICAgICAgbG9hZHAgW3NwXSwgcHJldmlvdXNQQwotICAg
ICAgICBtb3ZlIGNmciwgcHJldmlvdXNDRlIKLSAgICBlbmQKLSAgICBpZiBYODYKLSAgICAgICAg
bG9hZHAgMjBbc3BdLCBlbnRyeQotICAgICAgICBsb2FkcCAyNFtzcF0sIHZtCi0gICAgICAgIGxv
YWRwIDI4W3NwXSwgcHJvdG9DYWxsRnJhbWUKKyAgICAgICAgbG9hZHAgMzZbc3BdLCB2bQorICAg
ICAgICBsb2FkcCAzMltzcF0sIGVudHJ5CiAgICAgZWxzZQogICAgICAgICBtb3ZlIGNmciwgcHJl
dmlvdXNDRlIKICAgICAgICAgbW92ZSB0b3BPZlN0YWNrLCBjZnIKICAgICBlbmQKLSAgICBjYWxs
VG9KYXZhU2NyaXB0UHJvbG9ndWUoKQotICAgIAotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KHRlbXAyLCAweGJhZDBkYzAxKQogCi0gICAgIyBUaGUganNTdGFja0xpbWl0IHdhcyBwcmV2
aW91c2x5IGNvbXB1dGVkIGluIFZNRW50cnlTY29wZSB1c2luZyBhbgotICAgICMgZXN0aW1hdGVk
IHN0YWNrUG9pbnRlckF0Vk1FbnRyeSB2YWx1ZS4gQWRqdXN0IHRoZSBqc1N0YWNrTGltaXQgYnkK
LSAgICAjIHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBhY3R1YWwgc3RhY2tQb2ludGVyQXRWTUVudHJ5
IGFuZCB0aGUgZXN0aW1hdGUKLSAgICAjIHRoYXQgd2UgdXNlZCBwcmV2aW91c2x5LgotICAgIHN1
YnAgVk06OnN0YWNrUG9pbnRlckF0Vk1FbnRyeVt2bV0sIHNwLCB0ZW1wMgotICAgIHN1YnAgVk06
Om1fanNTdGFja0xpbWl0W3ZtXSwgdGVtcDIsIHRlbXAyCi0gICAgc3RvcmVwIHRlbXAyLCBWTTo6
bV9qc1N0YWNrTGltaXRbdm1dCi0gICAgc3RvcmVwIHNwLCBWTTo6c3RhY2tQb2ludGVyQXRWTUVu
dHJ5W3ZtXQorICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRlbXAyLCAweGJhZDBkYzAx
KQogCiAgICAgIyBUaGUgc3RhY2sgcmVzZXJ2ZWQgem9uZSBlbnN1cmVzIHRoYXQgd2UgaGF2ZSBh
ZGVxdWF0ZSBzcGFjZSBmb3IgdGhlCiAgICAgIyBWTUVudHJ5U2VudGluZWxGcmFtZS4gUHJvY2Vl
ZCB3aXRoIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyB0aGUKQEAgLTI0MCw5ICsyMjksMTcg
QEAgbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNOjp0b3BD
YWxsRnJhbWVbdm1dLCB0ZW1wMgogICAgIHN0b3JlcCB0ZW1wMiwgU2NvcGVDaGFpbltjZnJdCiAg
ICAgc3RvcmVwIDEsIENvZGVCbG9ja1tjZnJdCisgICAgaWYgWDg2CisgICAgICAgIGxvYWRwIDI4
W3NwXSwgcHJldmlvdXNQQworICAgICAgICBsb2FkcCAyNFtzcF0sIHByZXZpb3VzQ0ZSCisgICAg
ZW5kCiAgICAgc3RvcmVwIHByZXZpb3VzUEMsIFJldHVyblBDW2Nmcl0KICAgICBzdG9yZXAgcHJl
dmlvdXNDRlIsIENhbGxlckZyYW1lW2Nmcl0KIAorICAgIGlmIFg4NgorICAgICAgICBsb2FkcCA0
MFtzcF0sIHByb3RvQ2FsbEZyYW1lCisgICAgZW5kCisKICAgICBsb2FkaSBQcm90b0NhbGxGcmFt
ZTo6cGFkZGVkQXJnQ291bnRbcHJvdG9DYWxsRnJhbWVdLCB0ZW1wMgogICAgIGFkZHAgQ2FsbEZy
YW1lSGVhZGVyU2xvdHMsIHRlbXAyLCB0ZW1wMgogICAgIGxzaGlmdHAgMywgdGVtcDIKQEAgLTI1
Myw3ICsyNTAsNyBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgIyBi
ZWZvcmUgd2Ugc3RhcnQgY29weWluZyB0aGUgYXJncyBmcm9tIHRoZSBwcm90b0NhbGxGcmFtZSBi
ZWxvdy4KICAgICBicGFlcSB0ZW1wMSwgVk06Om1fanNTdGFja0xpbWl0W3ZtXSwgLnN0YWNrSGVp
Z2h0T0sKIAotICAgIG1vdmUgY2ZyLCBzcAorICAgIHN1YnAgY2ZyLCA4LCBzcAogCiAgICAgaWYg
Q19MT09QCiAgICAgIyBGSVhNRTogTmVlZCB0byBjYWxsIHN0YWNrIGNoZWNrIGhlcmUgdG8gc2Vl
IGlmIHdlIGNhbiBncm93IHRoZSBzdGFjay4KQEAgLTI2MSw3ICsyNTgsNiBAQCBtYWNybyBkb0Nh
bGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgIyB1cCB0aHJvd2luZyBhIFN0YWNrT3ZlcmZs
b3dFcnJvci4KICAgICBlbmQKIAotICAgIHN0b3JlcCAwLCBWTTo6c3RhY2tQb2ludGVyQXRWTUVu
dHJ5W3ZtXQogICAgIGNDYWxsMihfbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IsIHZt
LCBwcm90b0NhbGxGcmFtZSkKICAgICBjYWxsVG9KYXZhU2NyaXB0RXBpbG9ndWUoKQogICAgIHJl
dApAQCAtMzA1LDQwICszMDEsNDggQEAgbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxs
KQogLmNvcHlBcmdzRG9uZToKICAgICBzdG9yZXAgc3AsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCiAK
LSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0ZW1wMywgMHhiYWQwZGMwMikKLQotICAg
IG1ha2VDYWxsKGVudHJ5LCB0ZW1wMSkKLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KHRlbXAzLCAweGJhZDBkYzAzKQorICAgIG1ha2VDYWxsKGVudHJ5LCB0ZW1wMSwgdGVtcDIpCiAK
ICAgICBicGVxIENvZGVCbG9ja1tjZnJdLCAxLCAuY2FsbGVlRnJhbWVQb3BwZWQKICAgICBsb2Fk
cCBDYWxsZXJGcmFtZVtjZnJdLCBjZnIKIAogLmNhbGxlZUZyYW1lUG9wcGVkOgotICAgIGxvYWRw
IENhbGxlZVtjZnJdLCB0ZW1wMiAjIFZNCi0gICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0ZW1w
MyAjIHByZXZpb3VzIHRvcENhbGxGcmFtZQotICAgIHN0b3JlcCB0ZW1wMywgVk06OnRvcENhbGxG
cmFtZVt0ZW1wMl0KLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRlbXAzLCAweGJh
ZDBkYzA0KQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0ZW1wMyAjIFZNCisgICAgbG9hZHAgU2Nv
cGVDaGFpbltjZnJdLCB0ZW1wNCAjIHByZXZpb3VzIHRvcENhbGxGcmFtZQorICAgIHN0b3JlcCB0
ZW1wNCwgVk06OnRvcENhbGxGcmFtZVt0ZW1wM10KIAogICAgIGNhbGxUb0phdmFTY3JpcHRFcGls
b2d1ZSgpCiAgICAgcmV0CiBlbmQKIAotbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0
ZW1wKQorbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1wLCB1bnVzZWQpCisgICAg
YWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCh0MiwgMHhiYWQwZGMwMikKICAgICBjYWxsIGVudHJ5CisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQodDIsIDB4YmFkMGRjMDMpCisgICAgc3VicCBDYWxsZXJGcmFtZUFuZFBDU2l6
ZSwgc3AKIGVuZAogCi1tYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCkKLSAg
ICBtb3ZlIGVudHJ5LCB0ZW1wCittYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVt
cDEsIHRlbXAyKQorICAgIG1vdmUgZW50cnksIHRlbXAxCiAgICAgaWYgWDg2Ci0gICAgICAgICMg
UHV0IGNmciBvbiBzdGFjayBhcyBhcmcwLCBhbHNvIHB1dCBpdCBpbiBlY3ggZm9yICJmYXN0Y2Fs
bCIgdGFyZ2V0cwotICAgICAgICBwb2tlIGNmciwgMAotICAgICAgICBtb3ZlIGNmciwgdDIKKyAg
ICAgICAgIyBQdXQgY2FsbGVlIGZyYW1lIHBvaW50ZXIgb24gc3RhY2sgYXMgYXJnMCwgYWxzbyBw
dXQgaXQgaW4gZWN4IGZvciAiZmFzdGNhbGwiIHRhcmdldHMKKyAgICAgICAgbW92ZSAwLCB0ZW1w
MgorICAgICAgICBtb3ZlIHRlbXAyLCA0W3NwXSAjIHB1dCAwIGluIFJldHVyblBDCisgICAgICAg
IG1vdmUgY2ZyLCBbc3BdICMgcHV0IGNhbGxlciBmcmFtZSBwb2ludGVyIGludG8gY2FsbGVlIGZy
YW1lIHNpbmNlIGNhbGxlZSBwcm9sb2d1ZSBjYW4ndAorICAgICAgICBtb3ZlIHNwLCB0MiAjIHQy
IGlzIGVjeAorICAgICAgICBwdXNoIHRlbXAyICMgUHVzaCBkdW1teSBhcmcxCisgICAgICAgIHB1
c2ggdDIKICAgICBlbHNlCi0gICAgICAgIG1vdmUgY2ZyLCBhMAorICAgICAgICBtb3ZlIHNwLCBh
MAorICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgIGVuZAorICAgIGNh
bGwgdGVtcDEKKyAgICBpZiBYODYKKyAgICAgICAgYWRkcCA4LCBzcAorICAgIGVsc2UKKyAgICAg
ICAgc3VicCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKICAgICBlbmQKLSAgICBjYWxsIHRlbXAK
IGVuZAogCiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CkBAIC0zNTIsOSArMzU2LDkgQEAgX2hh
bmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgICMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIgQyBm
cmFtZS4KICAgICBsb2FkcCBDYWxsZXJGcmFtZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgY2ZyCiAK
LSAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzICMgVk0udG9wQ2FsbEZy
YW1lCi0gICAgbG9hZHAgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDUKLSAgICBz
dG9yZXAgdDUsIFt0M10KKyAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQz
ICMgVk0KKyAgICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0NSAjIHBy
ZXZpb3VzIHRvcENhbGxGcmFtZQorICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10K
IAogICAgIGNhbGxUb0phdmFTY3JpcHRFcGlsb2d1ZSgpCiAgICAgcmV0CkBAIC0zODcsMTQgKzM5
MSwxMiBAQCBlbmQKIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKICAg
ICBzdG9yZXAgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIGNDYWxsMihz
bG93UGF0aCwgY2ZyLCBQQykKLSAgICBtb3ZlIHQxLCBjZnIKICAgICBhY3Rpb24odDApCiBlbmQK
IAogbWFjcm8gY2FsbFdhdGNoZG9nVGltZXJIYW5kbGVyKHRocm93SGFuZGxlcikKICAgICBzdG9y
ZWkgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIGNDYWxsMihfbGxpbnRf
c2xvd19wYXRoX2hhbmRsZV93YXRjaGRvZ190aW1lciwgY2ZyLCBQQykKLSAgICBtb3ZlIHQxLCBj
ZnIKICAgICBidHBueiB0MCwgdGhyb3dIYW5kbGVyCiAgICAgbG9hZGkgQXJndW1lbnRDb3VudCAr
IFRhZ09mZnNldFtjZnJdLCBQQwogZW5kCkBAIC0yMTAyLDE5ICsyMTA0LDIwIEBAIG1hY3JvIG5h
dGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICBzdG9yZWkgQ2VsbFRhZywgU2Nv
cGVDaGFpbiArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVpIHQxLCBTY29wZUNoYWluICsgUGF5
bG9hZE9mZnNldFtjZnJdCiAgICAgaWYgWDg2Ci0gICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2Zy
XSwgdDMKLSAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgICAgIGxvYWRwIE1h
cmtlZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKKyAgICAgICAgc3Vi
cCA4LCBzcCAjIGFsaWduIHN0YWNrIHBvaW50ZXIKKyAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01h
c2ssIHQxCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0Ojpt
X3ZtW3QxXSwgdDMKICAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0M10KICAg
ICAgICAgbW92ZSBjZnIsIHQyICAjIHQyID0gZWN4Ci0gICAgICAgIHN1YnAgMTYgLSA4LCBzcAor
ICAgICAgICBzdG9yZXAgdDIsIFtzcF0KICAgICAgICAgbG9hZGkgQ2FsbGVlICsgUGF5bG9hZE9m
ZnNldFtjZnJdLCB0MQogICAgICAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVbdDFd
LCB0MQorICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0MywgMHhkZWFkMDAwMSkK
ICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KLSAgICAgICAgYWRk
cCAxNiAtIDgsIHNwCiAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2ZyXSwgdDMKICAgICAgICAg
YW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCiAgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3dl
YWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKKyAgICAgICAgYWRkcCA4LCBzcAogICAgIGVs
c2lmIEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTIG9yIFNINAogICAg
ICAgICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHQzCiAgICAgICAgIGFuZHAgTWFya2VkQmxvY2tN
YXNrLCB0MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE2MjA5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMDAsOCArMjAwLDEyIEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlw
dChtYWtlQ2FsbCkKICAgICBqbXAgLmNvcHlBcmdzTG9vcAogCiAuY29weUFyZ3NEb25lOgotICAg
IG1vdmUgc3AsIHRlbXAyCi0gICAgc3RvcmVwIHRlbXAyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQor
ICAgIGlmIEFSTTY0CisgICAgICAgIG1vdmUgc3AsIHRlbXAyCisgICAgICAgIHN0b3JlcCB0ZW1w
MiwgVk06OnRvcENhbGxGcmFtZVt2bV0KKyAgICBlbHNlCisgICAgICAgIHN0b3JlcCBzcCwgVk06
OnRvcENhbGxGcmFtZVt2bV0KKyAgICBlbmQKIAogICAgIG1vdmUgMHhmZmZmMDAwMDAwMDAwMDAw
LCBjc3IxCiAgICAgYWRkcCAyLCBjc3IxLCBjc3IyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNjIw
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDcgQEAgY29uc3QgQ2Fs
bEZyYW1lSGVhZGVyU2xvdHMgPSA2CiBlbHNlCiBjb25zdCBQdHJTaXplID0gNAogY29uc3QgQ2Fs
bEZyYW1lSGVhZGVyU2xvdHMgPSA1Citjb25zdCBDYWxsRnJhbWVBbGlnblNsb3RzID0gMQogZW5k
CiBjb25zdCBTbG90U2l6ZSA9IDgKIApAQCAtNzgsNyArNzksNyBAQCBjb25zdCBtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCA9IDAKIGVsc2lmIEFSTSBvciBBUk12N19UUkFESVRJT05BTCBv
ciBBUk12NyBvciBTSDQKIGNvbnN0IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMTYK
IGVsc2lmIFg4NiBvciBNSVBTCi1jb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9
IDMyCitjb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDI0CiBlbmQKIAogIyBX
YXRjaHBvaW50IHN0YXRlcwpAQCAtMjM0LDI4ICsyMzUsMjQgQEAgbWFjcm8gcHJlc2VydmVDYWxs
ZXJQQ0FuZENGUigpCiAgICAgaWYgQ19MT09QIG9yIEFSTSBvciBBUk12NyBvciBBUk12N19UUkFE
SVRJT05BTCBvciBNSVBTIG9yIFNINAogICAgICAgICBwdXNoIGxyCiAgICAgICAgIHB1c2ggY2Zy
Ci0gICAgICAgIG1vdmUgc3AsIGNmcgogICAgIGVsc2lmIFg4NiBvciBYODZfNjQKICAgICAgICAg
cHVzaCBjZnIKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAgZWxzaWYgQVJNNjQKICAgICAgICAg
cHVzaExSQW5kRlAKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAgZWxzZQogICAgICAgICBlcnJv
cgogICAgIGVuZAorICAgIG1vdmUgc3AsIGNmcgogZW5kCiAKIG1hY3JvIHJlc3RvcmVDYWxsZXJQ
Q0FuZENGUigpCisgICAgbW92ZSBjZnIsIHNwCiAgICAgaWYgQ19MT09QIG9yIEFSTSBvciBBUk12
NyBvciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTIG9yIFNINAotICAgICAgICBtb3ZlIGNmciwg
c3AKICAgICAgICAgcG9wIGNmcgogICAgICAgICBwb3AgbHIKICAgICBlbHNpZiBYODYgb3IgWDg2
XzY0Ci0gICAgICAgIG1vdmUgY2ZyLCBzcAogICAgICAgICBwb3AgY2ZyCiAgICAgZWxzaWYgQVJN
NjQKLSAgICAgICAgbW92ZSBjZnIsIHNwCiAgICAgICAgIHBvcExSQW5kRlAKICAgICBlbmQKIGVu
ZApAQCAtMzA2LDEwICszMDMsMTEgQEAgbWFjcm8gZnVuY3Rpb25FcGlsb2d1ZSgpCiBlbmQKIAog
bWFjcm8gY2FsbFRvSmF2YVNjcmlwdFByb2xvZ3VlKCkKLSAgICBpZiBYODYgb3IgWDg2XzY0Cisg
ICAgaWYgWDg2XzY0CiAgICAgICAgIHB1c2ggY2ZyCi0gICAgICAgIG1vdmUgc3AsIGNmcgogICAg
ICAgICBwdXNoIHQwCisgICAgZWxzaWYgWDg2CisgICAgICAgIHB1c2ggY2ZyCiAgICAgZWxzaWYg
QVJNNjQKICAgICAgICAgcHVzaExSQW5kRlAKICAgICBlbHNpZiBDX0xPT1Agb3IgQVJNIG9yIEFS
TXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIE1JUFMKQEAgLTMxNywxNSArMzE1LDI0IEBAIG1h
Y3JvIGNhbGxUb0phdmFTY3JpcHRQcm9sb2d1ZSgpCiAgICAgICAgIHB1c2ggY2ZyCiAgICAgZW5k
CiAgICAgcHVzaENhbGxlZVNhdmVzCisgICAgaWYgWDg2CisgICAgICAgIHN1YnAgMTIsIHNwCisg
ICAgZW5kCiBlbmQKIAogbWFjcm8gY2FsbFRvSmF2YVNjcmlwdEVwaWxvZ3VlKCkKICAgICBhZGRw
IENhbGxGcmFtZUhlYWRlclNsb3RzICogOCwgY2ZyLCBzcAogICAgIGxvYWRwIENhbGxlckZyYW1l
W2Nmcl0sIGNmcgogCisgICAgaWYgWDg2CisgICAgICAgIGFkZHAgMTIsIHNwCisgICAgZW5kCisK
ICAgICBwb3BDYWxsZWVTYXZlcwotICAgIGlmIFg4NiBvciBYODZfNjQKLSAgICAgICAgcG9wIHQ2
CisgICAgaWYgWDg2XzY0CisgICAgICAgIHBvcCB0MgorICAgICAgICBwb3AgY2ZyCisgICAgZWxz
aWYgWDg2CiAgICAgICAgIHBvcCBjZnIKICAgICBlbHNpZiBBUk02NAogICAgICAgICBwb3BMUkFu
ZEZQCkBAIC0zMzYsMTUgKzM0MywxNSBAQCBtYWNybyBjYWxsVG9KYXZhU2NyaXB0RXBpbG9ndWUo
KQogZW5kCiAKIG1hY3JvIG1vdmVTdGFja1BvaW50ZXJGb3JDb2RlQmxvY2soY29kZUJsb2NrLCBz
Y3JhdGNoKQotICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1DYWxsZWVSZWdpc3RlcnNbY29kZUJs
b2NrXSwgdDIKLSAgICBsc2hpZnRwIDMsIHQyCi0gICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCwgdDIKLSAgICBzdWJwIGNmciwgdDIsIHNwCisgICAgbG9hZGkgQ29kZUJsb2Nr
OjptX251bUNhbGxlZVJlZ2lzdGVyc1tjb2RlQmxvY2tdLCBzY3JhdGNoCisgICAgbHNoaWZ0cCAz
LCBzY3JhdGNoCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgc2NyYXRj
aAorICAgIHN1YnAgY2ZyLCBzY3JhdGNoLCBzcAogZW5kCiAKIG1hY3JvIHJlc3RvcmVTdGFja1Bv
aW50ZXJBZnRlckNhbGwoKQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQotICAgIG1vdmVT
dGFja1BvaW50ZXJGb3JDb2RlQmxvY2sodDEsIHQyKQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCB0MgorICAgIG1vdmVTdGFja1BvaW50ZXJGb3JDb2RlQmxvY2sodDIsIHQ0KQogZW5kCiAKIG1h
Y3JvIHRyYWNlRXhlY3V0aW9uKCkKQEAgLTQzOCw3ICs0NDUsOSBAQCBtYWNybyBwcm9sb2d1ZShj
b2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgcHJlc2VydmVDYWxsZXJQQ0FuZENGUigpCiAK
ICAgICBpZiBFWEVDVVRJT05fVFJBQ0lORworICAgICAgICBzdWJwIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLCBzcAogICAgICAgICBjYWxsU2xvd1BhdGgodHJhY2VTbG93UGF0aCkKKyAg
ICAgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgc3AKICAgICBlbmQKICAg
ICBjb2RlQmxvY2tHZXR0ZXIodDEpCiBpZiBDX0xPT1AKQEAgLTU5MCw2ICs1OTksMTAgQEAgX3Nh
bml0aXplU3RhY2tGb3JWTToKICAgICAgICAgY29uc3QgemVyb1ZhbHVlID0gdDIKICAgICBlbmQK
IAorICAgIGlmIFg4NgorICAgICAgICBsb2FkcCA0W3NwXSwgdm0KKyAgICBlbmQKKwogICAgIGxv
YWRwIFZNOjptX2xhc3RTdGFja1RvcFt2bV0sIGFkZHJlc3MKICAgICBicGJlcSBzcCwgYWRkcmVz
cywgLnplcm9GaWxsRG9uZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0FsaWdubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9uIDE2MjA5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgU3RhY2tBbGlnbm1lbnRfaAogCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM5LDYgKzQwLDEzIEBAIGlubGluZSB1bnNpZ25lZCBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygKICAgICByZXR1cm4gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC8g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIH0KIAorLy8gQWxpZ24gYXJndW1lbnQgY291bnQgdGFr
aW5nIGludG8gYWNjb3VudCB0aGUgQ2FsbEZyYW1lSGVhZGVyU2l6ZSBtYXkgYmUgdW5hbGlnbmVk
CitpbmxpbmUgdW5zaWduZWQgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKHVuc2lnbmVk
IGFyZ3VtZW50Q291bnQpCit7CisgICAgdW5zaWduZWQgY2FsbEZyYW1lSGVhZGVyU2l6ZUJpYXMg
PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICUgMjsKKyAgICByZXR1cm4gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGFyZ3VtZW50Q291bnQg
KyBjYWxsRnJhbWVIZWFkZXJTaXplQmlhcykgLSBjYWxsRnJhbWVIZWFkZXJTaXplQmlhczsKK30K
KwogaW5saW5lIHVuc2lnbmVkIGxvZ1N0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkKIHsKICAgICBy
ZXR1cm4gV1RGOjpmYXN0TG9nMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKTsK
</data>
<flag name="review"
          id="245349"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221518</attachid>
            <date>2014-01-17 17:38:40 -0800</date>
            <delta_ts>2014-01-17 20:49:05 -0800</delta_ts>
            <desc>proposed patch with changes in areas where I felt we need more clarity. ChangeLog not included.</desc>
            <filename>x86-32bit.patch</filename>
            <type>text/plain</type>
            <size>24410</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDE2MjEwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMjMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAvLyB0aGF0IGNhbiBiZSB1c2VkIGZvciBvdXRnb2luZyBhcmdzIHdoZW4gY2FsbGluZyBhIHNs
b3cgcGF0aCBDIGZ1bmN0aW9uCiAvLyBmcm9tIEpTIGNvZGUuCiAKKy8vIDMyLWJpdCBBQkkgcmVx
dWlyZXMgdGhhdCB0aGUgc3RhY2sgcG9pbnRlciBiZSBhbGlnbmVkIGJlZm9yZSBhIGNhbGwKKy8v
IGluc3RydWN0aW9uLiBBZnRlciB0aGUgY2FsbCwgdGhlIHJldHVybiBQQyBwb2ludGVyIGFuZCBw
cmV2aW91cyBmcmFtZQorLy8gcG9pbnRlciBpcyBwdXNoZWQgb24gdGhlIHN0YWNrLCBhbmQgdGhl
IG5ldyBmcmFtZSBwb2ludGVyIGlzIHRvIGJlIHNldCB0bworLy8gdGhlIHN0YWNrIHBvaW50ZXIg
YXQgdGhhdCBwb2ludC4KKy8vCisvLyBUaGF0IG1lYW5zIHRoZSBmcmFtZSBwb2ludGVyIHdpbGwg
b3ZlcnNob290IHN0YWNrIGFsaWdubWVudCBieSB0aGUgc2l6ZQorLy8gb2YgMiBwb2ludGVycyBv
ciA4IGJ5dGVzLgorLy8KKy8vIFRoZSBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCB2YWx1
ZSBuZWVkcyB0byBiZSBzZXQgc3VjaCB0aGF0IGdpdmVuOgorLy8KKy8vICAgICBuZXdTdGFja1Bv
aW50ZXJJblJlZ2lzdGVycyA9IHN0YWNrUG9pbnRlckluUmVnaXN0ZXJzCisvLyAgICAgICAgICsg
ZnJhbWVQb2ludGVyT3ZlcnNob290KCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbElu
UmVnaXN0ZXJzCisvLworLy8gLi4uIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSB0cnVlOgorLy8KKy8v
ICAgICBuZXdTdGFja1BvaW50ZXJJblJlZ2lzdGVycyA9PSByb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50KCksIG5ld1N0YWNrUG9pbnRlckluUmVnaXN0ZXJzKQorCiAjaWYgRU5BQkxF
KExMSU5UX0NfTE9PUCkKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwgPSAwOwogCkBAIC00Nyw4ICs2NCw4IEBAIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
RnJhbWVFeHRlbnRGb3JTbG8KIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwgPSAwOwogCiAjZWxpZiBDUFUoWDg2KQotLy8gNiBhcmdzIG9uIHN0YWNrICgy
NCBieXRlcykgKyA4IGJ5dGVzIHRvIGFsaWduIHRoZSBzdGFjay4KLXN0YXRpYyBjb25zdCBzaXpl
X3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSAzMjsKKy8vIDYgYXJncyBvbiBzdGFj
ayAoMjQgYnl0ZXMpLgorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCA9IDI0OwogCiAjZWxpZiBDUFUoQVJNNjQpCiAvLyBBbGwgYXJncyBpbiByZWdpc3Rl
cnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9Q
cm90b0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE2MjEwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9Qcm90b0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsOSArNDUsMTkgQEAgdm9pZCBQcm90b0NhbGxG
cmFtZTo6aW5pdChDb2RlQmxvY2sqIGNvZAogICAgICAgICBpZiAocGFkZGVkQXJnc0NvdW50IDwg
bnVtUGFyYW1ldGVycykKICAgICAgICAgICAgIHBhZGRlZEFyZ3NDb3VudCA9IG51bVBhcmFtZXRl
cnM7CiAgICAgfQotICAgIC8vIFJvdW5kIHVwIHBhZGRlZEFyZ3NDb3VudCB0byBrZWVwIHRoZSBz
dGFjayBmcmFtZSBzaXplIGFsaWduZWQuCi0gICAgcGFkZGVkQXJnc0NvdW50ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHBhZGRlZEFyZ3NDb3Vu
dCk7Ci0gICAgdGhpcy0+c2V0UGFkZGVkQXJnc0NvdW50KHBhZGRlZEFyZ3NDb3VudCk7CisKKyAg
ICAvLyBJbiBkb0NhbGxUb0phdmFTY3JpcHQoKSwgd2UnbGwgcHVzaCB0aGUgZm9sbG93aW5nIG9u
dG8gdGhlIHN0YWNrIChpbiBvcmRlcik6CisgICAgLy8gICAgIDEuIHRoZSBWTUVudHJ5U2VudGlu
ZWxGcmFtZQorICAgIC8vICAgICAyLiBwYWRkZWRBcmdzQ291bnQgUmVnaXN0ZXJzCisgICAgLy8g
ICAgIDMuIHRoZSBjYWxsZWUgQ2FsbEZyYW1lSGVhZGVyCisgICAgLy8gV2UgbmVlZCB0byBwYWQg
dGhlIGFyZ3VtZW50cyBzdWNoIHRoYXQgdGhlIHN1bSBvZiBwYWRkZWRBcmdzQ291bnQgYW5kIHRo
ZQorICAgIC8vIDIgQ2FsbEZyYW1lSGVhZGVyU2l6ZSB3aWxsIHJlc3VsdCBpbiBhIHN0YWNrIHBv
c2l0aW9uIHRvIG1hdGNoZXMgdGhlIHJlcXVpcmVkCisgICAgLy8gQ2FsbEZyYW1lIHBvaW50ZXIg
YWxpZ25tZW50LgorICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVIZWFkZXJSZWdpc3RlcnMgPSAyICog
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICBwYWRkZWRBcmdzQ291bnQgPSByb3Vu
ZFVwRm9yRnJhbWVQb2ludGVyQWxpZ25tZW50KHBhZGRlZEFyZ3NDb3VudCArIHRvdGFsRnJhbWVI
ZWFkZXJSZWdpc3RlcnMpCisgICAgICAgIC0gdG90YWxGcmFtZUhlYWRlclJlZ2lzdGVyczsKKwor
ICAgIHRoaXMtPnNldFBhZGRlZEFyZ0NvdW50KHBhZGRlZEFyZ3NDb3VudCk7CiAgICAgdGhpcy0+
Y2xlYXJDdXJyZW50VlBDKCk7CiAgICAgdGhpcy0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1ZSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9D
YWxsRnJhbWUuaAkocmV2aXNpb24gMTYyMTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgc3RydWN0IFByb3RvQ2FsbEZyYW1lIHsKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSBjb25zdCB7IHJldHVybiBhcmdDb3VudEFuZENvZGVPcmlnaW5WYWx1ZS5wYXlsb2Fk
KCk7IH0KICAgICBpbnQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9CiAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhpbnQgY291bnQpIHsgYXJnQ291bnRBbmRDb2RlT3JpZ2luVmFsdWUucGF5bG9hZCgp
ID0gY291bnQ7IH0KLSAgICB2b2lkIHNldFBhZGRlZEFyZ3NDb3VudChzaXplX3QgYXJnQ291bnQp
IHsgcGFkZGVkQXJnQ291bnQgPSBhcmdDb3VudDsgfQorICAgIHZvaWQgc2V0UGFkZGVkQXJnQ291
bnQoc2l6ZV90IGFyZ0NvdW50KSB7IHBhZGRlZEFyZ0NvdW50ID0gYXJnQ291bnQ7IH0KIAogICAg
IHZvaWQgY2xlYXJDdXJyZW50VlBDKCkgeyBhcmdDb3VudEFuZENvZGVPcmlnaW5WYWx1ZS50YWco
KSA9IDA7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHJldmlzaW9uIDE2MjEwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDkgKzE5OCwxOSBAQCB2b2lk
IEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAKIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25DYWxsRXZhbCk7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKKworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNhbGxFdmFsLCByZWdUMSk7CisKKyAg
ICBKdW1wIG5vRXhjZXB0aW9uID0gZW1pdEV4Y2VwdGlvbkNoZWNrKEludmVydGVkRXhjZXB0aW9u
Q2hlY2spOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGV4Y2VwdGlvbkNoZWNrKGp1bXAoKSk7CisKKyAgICBub0V4
Y2VwdGlvbi5saW5rKHRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgZW1pdEdldENh
bGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgc2FtcGxlQ29k
ZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI5OSw3ICszMDksNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3JGb3IoCisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
ID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAogICAgICAgICBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCiAgICAgICAgIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjIxMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzc4LDcg
KzE3NzgsMTEgQEAgYXNtICgKICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0
dXJuVmFsdWUpICJcbiIKIEhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIK
IFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibW92
ICVlYnAsIDQoJWVzcClcbiIKKyAgICAibW92ICglZXNwKSwgJWVheFxuIgorICAgICJwdXNoICVl
YnBcbiIKKyAgICAibGVhbCAtNCglZXNwKSwgJWVzcFxuIgorICAgICJwdXNoICVlYnBcbiIKKyAg
ICAicHVzaCAlZWF4XG4iCiAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAxNjIxMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzgsNyArNDc4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAotICAgICAgICBjYWxsRnJh
bWVSZWdpc3RlciwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgdHJ1ZSk7CisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRydWUpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkBAIC01MjMsNyArNTIzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zm
c2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKLSAgICAgICAgY2FsbEZyYW1l
UmVnaXN0ZXIsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksCisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksCiAgICAgICAgIHJlZ1QxLCB0cnVlLCBtX2NvZGVCbG9j
ay0+ZWNtYU1vZGUoKSwgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAgICAKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMTYyMTA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcg
QEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgQVNTRVJUKEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUgPT0gQ2FsbEZyYW1lSGVhZGVyU2xvdHMpOwogCiAgICAg
QVNTRVJUKCFDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwotICAgIEFTU0VSVChKU1N0
YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSA9PSAyKTsKKyAgICBBU1NFUlQoSlNTdGFjazo6Q2Fs
bGVyRnJhbWVBbmRQQ1NpemUgPT0gKFB0clNpemUgKiAyKSAvIFNsb3RTaXplKTsKICAgICBBU1NF
UlQoQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpID09IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVP
ZmZzZXQoKSArIFB0clNpemUpOwogICAgIEFTU0VSVChKU1N0YWNrOjpDb2RlQmxvY2sgKiBzaXpl
b2YoUmVnaXN0ZXIpID09IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSArIFB0clNpemUpOwog
ICAgIEFTU0VSVChKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBKU1N0
YWNrOjpDb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpICsgU2xvdFNpemUpOwpAQCAtMTMwLDcg
KzEzMCw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogI2VsaWYgQ1BV
KEFSTSkgfHwgQ1BVKFNINCkKICAgICBBU1NFUlQobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwgPT0gMTYpOwogI2VsaWYgQ1BVKFg4NikgfHwgQ1BVKE1JUFMpCi0gICAgQVNTRVJUKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID09IDMyKTsKKyAgICBBU1NFUlQobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwgPT0gMjQpOwogI2VuZGlmCiAgICAgQVNTRVJUKFN0cmluZ1R5cGUg
PT0gNSk7CiAgICAgQVNTRVJUKE9iamVjdFR5cGUgPT0gMTcpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJldmlzaW9uIDE2MjEw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTcsOCArMTE3LDExIEBAIHZvaWQgc2V0RW50cnlwb2ludChWTSYg
dm0sIENvZGVCbG9jayogY28KIAogdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQogeworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKKyAgICAgICAgPT0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKSkpOwogICAgIHNpemVfdCByZWdpc3Rl
ckNvdW50ID0gY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnM7Ci0gICAgQVNTRVJUKHJlZ2lzdGVyQ291bnQgPT0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHJlZ2lz
dGVyQ291bnQpKTsKKyAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCArIGZyYW1lUG9pbnRlckFsaWdu
bWVudE92ZXJzaG9vdCgpCisgICAgICAgID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpLCByZWdpc3RlckNvdW50ICsgZnJhbWVQb2ludGVyQWxpZ25t
ZW50T3ZlcnNob290KCkpKTsKICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE2MjEwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMDIsOSArMTAyLDExIEBAIG1hY3JvIGNDYWxsMihmdW5jdGlvbiwgYXJnMSwg
YXJnMikKICAgICAgICAgbW92ZSBhcmcyLCBhMQogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAgICAg
ZWxzaWYgWDg2Ci0gICAgICAgIHBva2UgYXJnMSwgMAotICAgICAgICBwb2tlIGFyZzIsIDEKKyAg
ICAgICAgc3VicCA4LCBzcAorICAgICAgICBwdXNoIGFyZzIKKyAgICAgICAgcHVzaCBhcmcxCiAg
ICAgICAgIGNhbGwgZnVuY3Rpb24KKyAgICAgICAgYWRkcCAxNiwgc3AKICAgICBlbHNpZiBTSDQK
ICAgICAgICAgc2V0YXJncyBhcmcxLCBhcmcyCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KQEAgLTEy
NCwxMSArMTI2LDEyIEBAIG1hY3JvIGNDYWxsNChmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywK
ICAgICAgICAgbW92ZSBhcmc0LCBhMwogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAgICAgZWxzaWYg
WDg2Ci0gICAgICAgIHBva2UgYXJnMSwgMAotICAgICAgICBwb2tlIGFyZzIsIDEKLSAgICAgICAg
cG9rZSBhcmczLCAyCi0gICAgICAgIHBva2UgYXJnNCwgMworICAgICAgICBwdXNoIGFyZzQKKyAg
ICAgICAgcHVzaCBhcmczCisgICAgICAgIHB1c2ggYXJnMgorICAgICAgICBwdXNoIGFyZzEKICAg
ICAgICAgY2FsbCBmdW5jdGlvbgorICAgICAgICBhZGRwIDE2LCBzcAogICAgIGVsc2lmIFNINAog
ICAgICAgICBzZXRhcmdzIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQKICAgICAgICAgY2FsbCBmdW5j
dGlvbgpAQCAtMTQyLDIxICsxNDUsMjAgQEAgZW5kCiBtYWNybyBjYWxsU2xvd1BhdGgoc2xvd1Bh
dGgpCiAgICAgY0NhbGwyKHNsb3dQYXRoLCBjZnIsIFBDKQogICAgIG1vdmUgdDAsIFBDCi0gICAg
bW92ZSB0MSwgY2ZyCiBlbmQKIAogbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsKQog
ICAgIGlmIFg4NgogICAgICAgICBjb25zdCBlbnRyeSA9IHQ0Ci0gICAgICAgIGNvbnN0IHZtID0g
dDIKKyAgICAgICAgY29uc3Qgdm0gPSB0MwogICAgICAgICBjb25zdCBwcm90b0NhbGxGcmFtZSA9
IHQ1CiAKICAgICAgICAgY29uc3QgcHJldmlvdXNDRlIgPSB0MAogICAgICAgICBjb25zdCBwcmV2
aW91c1BDID0gdDEKICAgICAgICAgY29uc3QgdGVtcDEgPSB0MCAjIFNhbWUgYXMgcHJldmlvdXND
RlIKICAgICAgICAgY29uc3QgdGVtcDIgPSB0MSAjIFNhbWUgYXMgcHJldmlvdXNQQwotICAgICAg
ICBjb25zdCB0ZW1wMyA9IHQyICMgc2FtZSBhcyB2bVRvcENhbGxGcmFtZQotICAgICAgICBjb25z
dCB0ZW1wNCA9IHQzCisgICAgICAgIGNvbnN0IHRlbXAzID0gdDIKKyAgICAgICAgY29uc3QgdGVt
cDQgPSB0MyAjIHNhbWUgYXMgdm0KICAgICBlbHNpZiBBUk0gb3IgQVJNdjdfVFJBRElUSU9OQUwK
ICAgICAgICAgY29uc3QgZW50cnkgPSBhMAogICAgICAgICBjb25zdCB2bSA9IGExCkBAIC0yMDUs
MzAgKzIwNywxNyBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgICAg
IGNvbnN0IHRlbXA0ID0gdDkKICAgICBlbmQKIAorICAgIGNhbGxUb0phdmFTY3JpcHRQcm9sb2d1
ZSgpCisKICAgICBpZiBYODYKLSAgICAgICAgbG9hZHAgW3NwXSwgcHJldmlvdXNQQwotICAgICAg
ICBtb3ZlIGNmciwgcHJldmlvdXNDRlIKLSAgICBlbmQKLSAgICBpZiBYODYKLSAgICAgICAgbG9h
ZHAgMjBbc3BdLCBlbnRyeQotICAgICAgICBsb2FkcCAyNFtzcF0sIHZtCi0gICAgICAgIGxvYWRw
IDI4W3NwXSwgcHJvdG9DYWxsRnJhbWUKKyAgICAgICAgbG9hZHAgMzZbc3BdLCB2bQorICAgICAg
ICBsb2FkcCAzMltzcF0sIGVudHJ5CiAgICAgZWxzZQogICAgICAgICBtb3ZlIGNmciwgcHJldmlv
dXNDRlIKICAgICAgICAgbW92ZSB0b3BPZlN0YWNrLCBjZnIKICAgICBlbmQKLSAgICBjYWxsVG9K
YXZhU2NyaXB0UHJvbG9ndWUoKQotICAgIAotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KHRlbXAyLCAweGJhZDBkYzAxKQogCi0gICAgIyBUaGUganNTdGFja0xpbWl0IHdhcyBwcmV2aW91
c2x5IGNvbXB1dGVkIGluIFZNRW50cnlTY29wZSB1c2luZyBhbgotICAgICMgZXN0aW1hdGVkIHN0
YWNrUG9pbnRlckF0Vk1FbnRyeSB2YWx1ZS4gQWRqdXN0IHRoZSBqc1N0YWNrTGltaXQgYnkKLSAg
ICAjIHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBhY3R1YWwgc3RhY2tQb2ludGVyQXRWTUVudHJ5IGFu
ZCB0aGUgZXN0aW1hdGUKLSAgICAjIHRoYXQgd2UgdXNlZCBwcmV2aW91c2x5LgotICAgIHN1YnAg
Vk06OnN0YWNrUG9pbnRlckF0Vk1FbnRyeVt2bV0sIHNwLCB0ZW1wMgotICAgIHN1YnAgVk06Om1f
anNTdGFja0xpbWl0W3ZtXSwgdGVtcDIsIHRlbXAyCi0gICAgc3RvcmVwIHRlbXAyLCBWTTo6bV9q
c1N0YWNrTGltaXRbdm1dCi0gICAgc3RvcmVwIHNwLCBWTTo6c3RhY2tQb2ludGVyQXRWTUVudHJ5
W3ZtXQorICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRlbXAyLCAweGJhZDBkYzAxKQog
CiAgICAgIyBUaGUgc3RhY2sgcmVzZXJ2ZWQgem9uZSBlbnN1cmVzIHRoYXQgd2UgaGF2ZSBhZGVx
dWF0ZSBzcGFjZSBmb3IgdGhlCiAgICAgIyBWTUVudHJ5U2VudGluZWxGcmFtZS4gUHJvY2VlZCB3
aXRoIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyB0aGUKQEAgLTI0MCw5ICsyMjksMTcgQEAg
bWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNOjp0b3BDYWxs
RnJhbWVbdm1dLCB0ZW1wMgogICAgIHN0b3JlcCB0ZW1wMiwgU2NvcGVDaGFpbltjZnJdCiAgICAg
c3RvcmVwIDEsIENvZGVCbG9ja1tjZnJdCisgICAgaWYgWDg2CisgICAgICAgIGxvYWRwIDI4W3Nw
XSwgcHJldmlvdXNQQworICAgICAgICBsb2FkcCAyNFtzcF0sIHByZXZpb3VzQ0ZSCisgICAgZW5k
CiAgICAgc3RvcmVwIHByZXZpb3VzUEMsIFJldHVyblBDW2Nmcl0KICAgICBzdG9yZXAgcHJldmlv
dXNDRlIsIENhbGxlckZyYW1lW2Nmcl0KIAorICAgIGlmIFg4NgorICAgICAgICBsb2FkcCA0MFtz
cF0sIHByb3RvQ2FsbEZyYW1lCisgICAgZW5kCisKICAgICBsb2FkaSBQcm90b0NhbGxGcmFtZTo6
cGFkZGVkQXJnQ291bnRbcHJvdG9DYWxsRnJhbWVdLCB0ZW1wMgogICAgIGFkZHAgQ2FsbEZyYW1l
SGVhZGVyU2xvdHMsIHRlbXAyLCB0ZW1wMgogICAgIGxzaGlmdHAgMywgdGVtcDIKQEAgLTI1Myw3
ICsyNTAsNyBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgIyBiZWZv
cmUgd2Ugc3RhcnQgY29weWluZyB0aGUgYXJncyBmcm9tIHRoZSBwcm90b0NhbGxGcmFtZSBiZWxv
dy4KICAgICBicGFlcSB0ZW1wMSwgVk06Om1fanNTdGFja0xpbWl0W3ZtXSwgLnN0YWNrSGVpZ2h0
T0sKIAotICAgIG1vdmUgY2ZyLCBzcAorICAgIHN1YnAgY2ZyLCA4LCBzcAogCiAgICAgaWYgQ19M
T09QCiAgICAgIyBGSVhNRTogTmVlZCB0byBjYWxsIHN0YWNrIGNoZWNrIGhlcmUgdG8gc2VlIGlm
IHdlIGNhbiBncm93IHRoZSBzdGFjay4KQEAgLTI2MSw3ICsyNTgsNiBAQCBtYWNybyBkb0NhbGxU
b0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgIyB1cCB0aHJvd2luZyBhIFN0YWNrT3ZlcmZsb3dF
cnJvci4KICAgICBlbmQKIAotICAgIHN0b3JlcCAwLCBWTTo6c3RhY2tQb2ludGVyQXRWTUVudHJ5
W3ZtXQogICAgIGNDYWxsMihfbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IsIHZtLCBw
cm90b0NhbGxGcmFtZSkKICAgICBjYWxsVG9KYXZhU2NyaXB0RXBpbG9ndWUoKQogICAgIHJldApA
QCAtMzA1LDQwICszMDEsNDggQEAgbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsKQog
LmNvcHlBcmdzRG9uZToKICAgICBzdG9yZXAgc3AsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCiAKLSAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0ZW1wMywgMHhiYWQwZGMwMikKLQotICAgIG1h
a2VDYWxsKGVudHJ5LCB0ZW1wMSkKLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRl
bXAzLCAweGJhZDBkYzAzKQorICAgIG1ha2VDYWxsKGVudHJ5LCB0ZW1wMSwgdGVtcDIpCiAKICAg
ICBicGVxIENvZGVCbG9ja1tjZnJdLCAxLCAuY2FsbGVlRnJhbWVQb3BwZWQKICAgICBsb2FkcCBD
YWxsZXJGcmFtZVtjZnJdLCBjZnIKIAogLmNhbGxlZUZyYW1lUG9wcGVkOgotICAgIGxvYWRwIENh
bGxlZVtjZnJdLCB0ZW1wMiAjIFZNCi0gICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0ZW1wMyAj
IHByZXZpb3VzIHRvcENhbGxGcmFtZQotICAgIHN0b3JlcCB0ZW1wMywgVk06OnRvcENhbGxGcmFt
ZVt0ZW1wMl0KLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHRlbXAzLCAweGJhZDBk
YzA0KQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0ZW1wMyAjIFZNCisgICAgbG9hZHAgU2NvcGVD
aGFpbltjZnJdLCB0ZW1wNCAjIHByZXZpb3VzIHRvcENhbGxGcmFtZQorICAgIHN0b3JlcCB0ZW1w
NCwgVk06OnRvcENhbGxGcmFtZVt0ZW1wM10KIAogICAgIGNhbGxUb0phdmFTY3JpcHRFcGlsb2d1
ZSgpCiAgICAgcmV0CiBlbmQKIAotbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1w
KQorbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1wLCB1bnVzZWQpCisgICAgYWRk
cCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCh0MiwgMHhiYWQwZGMwMikKICAgICBjYWxsIGVudHJ5CisgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQodDIsIDB4YmFkMGRjMDMpCisgICAgc3VicCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwg
c3AKIGVuZAogCi1tYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCkKLSAgICBt
b3ZlIGVudHJ5LCB0ZW1wCittYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcDEs
IHRlbXAyKQorICAgIG1vdmUgZW50cnksIHRlbXAxCiAgICAgaWYgWDg2Ci0gICAgICAgICMgUHV0
IGNmciBvbiBzdGFjayBhcyBhcmcwLCBhbHNvIHB1dCBpdCBpbiBlY3ggZm9yICJmYXN0Y2FsbCIg
dGFyZ2V0cwotICAgICAgICBwb2tlIGNmciwgMAotICAgICAgICBtb3ZlIGNmciwgdDIKKyAgICAg
ICAgIyBQdXQgY2FsbGVlIGZyYW1lIHBvaW50ZXIgb24gc3RhY2sgYXMgYXJnMCwgYWxzbyBwdXQg
aXQgaW4gZWN4IGZvciAiZmFzdGNhbGwiIHRhcmdldHMKKyAgICAgICAgbW92ZSAwLCB0ZW1wMgor
ICAgICAgICBtb3ZlIHRlbXAyLCA0W3NwXSAjIHB1dCAwIGluIFJldHVyblBDCisgICAgICAgIG1v
dmUgY2ZyLCBbc3BdICMgcHV0IGNhbGxlciBmcmFtZSBwb2ludGVyIGludG8gY2FsbGVlIGZyYW1l
IHNpbmNlIGNhbGxlZSBwcm9sb2d1ZSBjYW4ndAorICAgICAgICBtb3ZlIHNwLCB0MiAjIHQyIGlz
IGVjeAorICAgICAgICBwdXNoIHRlbXAyICMgUHVzaCBkdW1teSBhcmcxCisgICAgICAgIHB1c2gg
dDIKICAgICBlbHNlCi0gICAgICAgIG1vdmUgY2ZyLCBhMAorICAgICAgICBtb3ZlIHNwLCBhMAor
ICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgIGVuZAorICAgIGNhbGwg
dGVtcDEKKyAgICBpZiBYODYKKyAgICAgICAgYWRkcCA4LCBzcAorICAgIGVsc2UKKyAgICAgICAg
c3VicCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKICAgICBlbmQKLSAgICBjYWxsIHRlbXAKIGVu
ZAogCiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CkBAIC0zNTIsOSArMzU2LDkgQEAgX2hhbmRs
ZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgICMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIgQyBmcmFt
ZS4KICAgICBsb2FkcCBDYWxsZXJGcmFtZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgY2ZyCiAKLSAg
ICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzICMgVk0udG9wQ2FsbEZyYW1l
Ci0gICAgbG9hZHAgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDUKLSAgICBzdG9y
ZXAgdDUsIFt0M10KKyAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzICMg
Vk0KKyAgICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0NSAjIHByZXZp
b3VzIHRvcENhbGxGcmFtZQorICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10KIAog
ICAgIGNhbGxUb0phdmFTY3JpcHRFcGlsb2d1ZSgpCiAgICAgcmV0CkBAIC0zODcsMTQgKzM5MSwx
MiBAQCBlbmQKIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKICAgICBz
dG9yZXAgUEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIGNDYWxsMihzbG93
UGF0aCwgY2ZyLCBQQykKLSAgICBtb3ZlIHQxLCBjZnIKICAgICBhY3Rpb24odDApCiBlbmQKIAog
bWFjcm8gY2FsbFdhdGNoZG9nVGltZXJIYW5kbGVyKHRocm93SGFuZGxlcikKICAgICBzdG9yZWkg
UEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIGNDYWxsMihfbGxpbnRfc2xv
d19wYXRoX2hhbmRsZV93YXRjaGRvZ190aW1lciwgY2ZyLCBQQykKLSAgICBtb3ZlIHQxLCBjZnIK
ICAgICBidHBueiB0MCwgdGhyb3dIYW5kbGVyCiAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRh
Z09mZnNldFtjZnJdLCBQQwogZW5kCkBAIC0yMTAyLDE5ICsyMTA0LDIwIEBAIG1hY3JvIG5hdGl2
ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICBzdG9yZWkgQ2VsbFRhZywgU2NvcGVD
aGFpbiArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVpIHQxLCBTY29wZUNoYWluICsgUGF5bG9h
ZE9mZnNldFtjZnJdCiAgICAgaWYgWDg2Ci0gICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2ZyXSwg
dDMKLSAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgICAgIGxvYWRwIE1hcmtl
ZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKKyAgICAgICAgc3VicCA4
LCBzcCAjIGFsaWduIHN0YWNrIHBvaW50ZXIKKyAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ss
IHQxCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0OjptX3Zt
W3QxXSwgdDMKICAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0M10KICAgICAg
ICAgbW92ZSBjZnIsIHQyICAjIHQyID0gZWN4Ci0gICAgICAgIHN1YnAgMTYgLSA4LCBzcAorICAg
ICAgICBzdG9yZXAgdDIsIFtzcF0KICAgICAgICAgbG9hZGkgQ2FsbGVlICsgUGF5bG9hZE9mZnNl
dFtjZnJdLCB0MQogICAgICAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVbdDFdLCB0
MQorICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0MywgMHhkZWFkMDAwMSkKICAg
ICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KLSAgICAgICAgYWRkcCAx
NiAtIDgsIHNwCiAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2ZyXSwgdDMKICAgICAgICAgYW5k
cCBNYXJrZWRCbG9ja01hc2ssIHQzCiAgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3dlYWtT
ZXQgKyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKKyAgICAgICAgYWRkcCA4LCBzcAogICAgIGVsc2lm
IEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTIG9yIFNINAogICAgICAg
ICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHQzCiAgICAgICAgIGFuZHAgTWFya2VkQmxvY2tNYXNr
LCB0MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE2MjEwNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMDAsOCArMjAwLDEyIEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlwdCht
YWtlQ2FsbCkKICAgICBqbXAgLmNvcHlBcmdzTG9vcAogCiAuY29weUFyZ3NEb25lOgotICAgIG1v
dmUgc3AsIHRlbXAyCi0gICAgc3RvcmVwIHRlbXAyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQorICAg
IGlmIEFSTTY0CisgICAgICAgIG1vdmUgc3AsIHRlbXAyCisgICAgICAgIHN0b3JlcCB0ZW1wMiwg
Vk06OnRvcENhbGxGcmFtZVt2bV0KKyAgICBlbHNlCisgICAgICAgIHN0b3JlcCBzcCwgVk06OnRv
cENhbGxGcmFtZVt2bV0KKyAgICBlbmQKIAogICAgIG1vdmUgMHhmZmZmMDAwMDAwMDAwMDAwLCBj
c3IxCiAgICAgYWRkcCAyLCBjc3IxLCBjc3IyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNjIxMDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4LDcgQEAgY29uc3QgQ2FsbEZy
YW1lSGVhZGVyU2xvdHMgPSA2CiBlbHNlCiBjb25zdCBQdHJTaXplID0gNAogY29uc3QgQ2FsbEZy
YW1lSGVhZGVyU2xvdHMgPSA1Citjb25zdCBDYWxsRnJhbWVBbGlnblNsb3RzID0gMQogZW5kCiBj
b25zdCBTbG90U2l6ZSA9IDgKIApAQCAtNzgsNyArNzksNyBAQCBjb25zdCBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCA9IDAKIGVsc2lmIEFSTSBvciBBUk12N19UUkFESVRJT05BTCBvciBB
Uk12NyBvciBTSDQKIGNvbnN0IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMTYKIGVs
c2lmIFg4NiBvciBNSVBTCi1jb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDMy
Citjb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDI0CiBlbmQKIAogIyBXYXRj
aHBvaW50IHN0YXRlcwpAQCAtMjM0LDI4ICsyMzUsMjQgQEAgbWFjcm8gcHJlc2VydmVDYWxsZXJQ
Q0FuZENGUigpCiAgICAgaWYgQ19MT09QIG9yIEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJ
T05BTCBvciBNSVBTIG9yIFNINAogICAgICAgICBwdXNoIGxyCiAgICAgICAgIHB1c2ggY2ZyCi0g
ICAgICAgIG1vdmUgc3AsIGNmcgogICAgIGVsc2lmIFg4NiBvciBYODZfNjQKICAgICAgICAgcHVz
aCBjZnIKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAgZWxzaWYgQVJNNjQKICAgICAgICAgcHVz
aExSQW5kRlAKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAgZWxzZQogICAgICAgICBlcnJvcgog
ICAgIGVuZAorICAgIG1vdmUgc3AsIGNmcgogZW5kCiAKIG1hY3JvIHJlc3RvcmVDYWxsZXJQQ0Fu
ZENGUigpCisgICAgbW92ZSBjZnIsIHNwCiAgICAgaWYgQ19MT09QIG9yIEFSTSBvciBBUk12NyBv
ciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTIG9yIFNINAotICAgICAgICBtb3ZlIGNmciwgc3AK
ICAgICAgICAgcG9wIGNmcgogICAgICAgICBwb3AgbHIKICAgICBlbHNpZiBYODYgb3IgWDg2XzY0
Ci0gICAgICAgIG1vdmUgY2ZyLCBzcAogICAgICAgICBwb3AgY2ZyCiAgICAgZWxzaWYgQVJNNjQK
LSAgICAgICAgbW92ZSBjZnIsIHNwCiAgICAgICAgIHBvcExSQW5kRlAKICAgICBlbmQKIGVuZApA
QCAtMzA2LDEwICszMDMsMTEgQEAgbWFjcm8gZnVuY3Rpb25FcGlsb2d1ZSgpCiBlbmQKIAogbWFj
cm8gY2FsbFRvSmF2YVNjcmlwdFByb2xvZ3VlKCkKLSAgICBpZiBYODYgb3IgWDg2XzY0CisgICAg
aWYgWDg2XzY0CiAgICAgICAgIHB1c2ggY2ZyCi0gICAgICAgIG1vdmUgc3AsIGNmcgogICAgICAg
ICBwdXNoIHQwCisgICAgZWxzaWYgWDg2CisgICAgICAgIHB1c2ggY2ZyCiAgICAgZWxzaWYgQVJN
NjQKICAgICAgICAgcHVzaExSQW5kRlAKICAgICBlbHNpZiBDX0xPT1Agb3IgQVJNIG9yIEFSTXY3
IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIE1JUFMKQEAgLTMxNywxNSArMzE1LDI0IEBAIG1hY3Jv
IGNhbGxUb0phdmFTY3JpcHRQcm9sb2d1ZSgpCiAgICAgICAgIHB1c2ggY2ZyCiAgICAgZW5kCiAg
ICAgcHVzaENhbGxlZVNhdmVzCisgICAgaWYgWDg2CisgICAgICAgIHN1YnAgMTIsIHNwCisgICAg
ZW5kCiBlbmQKIAogbWFjcm8gY2FsbFRvSmF2YVNjcmlwdEVwaWxvZ3VlKCkKICAgICBhZGRwIENh
bGxGcmFtZUhlYWRlclNsb3RzICogOCwgY2ZyLCBzcAogICAgIGxvYWRwIENhbGxlckZyYW1lW2Nm
cl0sIGNmcgogCisgICAgaWYgWDg2CisgICAgICAgIGFkZHAgMTIsIHNwCisgICAgZW5kCisKICAg
ICBwb3BDYWxsZWVTYXZlcwotICAgIGlmIFg4NiBvciBYODZfNjQKLSAgICAgICAgcG9wIHQ2Cisg
ICAgaWYgWDg2XzY0CisgICAgICAgIHBvcCB0MgorICAgICAgICBwb3AgY2ZyCisgICAgZWxzaWYg
WDg2CiAgICAgICAgIHBvcCBjZnIKICAgICBlbHNpZiBBUk02NAogICAgICAgICBwb3BMUkFuZEZQ
CkBAIC0zMzYsMTUgKzM0MywxNSBAQCBtYWNybyBjYWxsVG9KYXZhU2NyaXB0RXBpbG9ndWUoKQog
ZW5kCiAKIG1hY3JvIG1vdmVTdGFja1BvaW50ZXJGb3JDb2RlQmxvY2soY29kZUJsb2NrLCBzY3Jh
dGNoKQotICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1DYWxsZWVSZWdpc3RlcnNbY29kZUJsb2Nr
XSwgdDIKLSAgICBsc2hpZnRwIDMsIHQyCi0gICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCwgdDIKLSAgICBzdWJwIGNmciwgdDIsIHNwCisgICAgbG9hZGkgQ29kZUJsb2NrOjpt
X251bUNhbGxlZVJlZ2lzdGVyc1tjb2RlQmxvY2tdLCBzY3JhdGNoCisgICAgbHNoaWZ0cCAzLCBz
Y3JhdGNoCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgc2NyYXRjaAor
ICAgIHN1YnAgY2ZyLCBzY3JhdGNoLCBzcAogZW5kCiAKIG1hY3JvIHJlc3RvcmVTdGFja1BvaW50
ZXJBZnRlckNhbGwoKQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQotICAgIG1vdmVTdGFj
a1BvaW50ZXJGb3JDb2RlQmxvY2sodDEsIHQyKQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0
MgorICAgIG1vdmVTdGFja1BvaW50ZXJGb3JDb2RlQmxvY2sodDIsIHQ0KQogZW5kCiAKIG1hY3Jv
IHRyYWNlRXhlY3V0aW9uKCkKQEAgLTQzOCw3ICs0NDUsOSBAQCBtYWNybyBwcm9sb2d1ZShjb2Rl
QmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgcHJlc2VydmVDYWxsZXJQQ0FuZENGUigpCiAKICAg
ICBpZiBFWEVDVVRJT05fVFJBQ0lORworICAgICAgICBzdWJwIG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsLCBzcAogICAgICAgICBjYWxsU2xvd1BhdGgodHJhY2VTbG93UGF0aCkKKyAgICAg
ICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgc3AKICAgICBlbmQKICAgICBj
b2RlQmxvY2tHZXR0ZXIodDEpCiBpZiBDX0xPT1AKQEAgLTU5MCw2ICs1OTksMTAgQEAgX3Nhbml0
aXplU3RhY2tGb3JWTToKICAgICAgICAgY29uc3QgemVyb1ZhbHVlID0gdDIKICAgICBlbmQKIAor
ICAgIGlmIFg4NgorICAgICAgICBsb2FkcCA0W3NwXSwgdm0KKyAgICBlbmQKKwogICAgIGxvYWRw
IFZNOjptX2xhc3RTdGFja1RvcFt2bV0sIGFkZHJlc3MKICAgICBicGJlcSBzcCwgYWRkcmVzcywg
Lnplcm9GaWxsRG9uZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0FsaWdubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9uIDE2MjEwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDM4IEBAIGlubGluZSB1bnNpZ25lZCBzdGFja0FsaWdubWVudFJlZ2lzdGVycygKICAgICByZXR1
cm4gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIH0KIAor
Ly8gMzItYml0IEFCSSByZXF1aXJlcyB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGJlIGFsaWduZWQg
YmVmb3JlIGEgY2FsbAorLy8gaW5zdHJ1Y3Rpb24uIEFmdGVyIHRoZSBjYWxsLCB0aGUgcmV0dXJu
IFBDIHBvaW50ZXIgYW5kIHByZXZpb3VzIGZyYW1lCisvLyBwb2ludGVyIGlzIHB1c2hlZCBvbiB0
aGUgc3RhY2ssIGFuZCB0aGUgbmV3IGZyYW1lIHBvaW50ZXIgaXMgdG8gYmUgc2V0IHRvCisvLyB0
aGUgc3RhY2sgcG9pbnRlciBhdCB0aGF0IHBvaW50LgorLy8KKy8vIFRoYXQgbWVhbnMgdGhlIGZy
YW1lIHBvaW50ZXIgd2lsbCBvdmVyc2hvb3Qgc3RhY2sgYWxpZ25tZW50IGJ5IHRoZSBzaXplCisv
LyBvZiAyIHBvaW50ZXJzIG9yIDEgSlNDOjpSZWdpc3Rlci4KKworaW5saW5lIHVuc2lnbmVkIGZy
YW1lUG9pbnRlckFsaWdubWVudE92ZXJzaG9vdCgpCit7CisjaWYgRU5BQkxFKEpTVkFMVUU2NCkK
KyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIDE7CisjZW5kaWYKK30KKworaW5saW5l
IHVuc2lnbmVkIHJvdW5kVXBGb3JGcmFtZVBvaW50ZXJBbGlnbm1lbnQodW5zaWduZWQgbnVtUmVn
aXN0ZXJzKQoreworI2lmIEVOQUJMRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBudW1SZWdpc3RlcnMpOwor
I2Vsc2UKKyAgICB1bnNpZ25lZCByb3VuZGVkRG93bk51bVJlZ2lzdGVycyA9IG51bVJlZ2lzdGVy
cyAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCk7CisgICAgdW5zaWduZWQgb3ZlcnNob290ID0g
bnVtUmVnaXN0ZXJzIC0gcm91bmRlZERvd25OdW1SZWdpc3RlcnM7CisgICAgaWYgKG92ZXJzaG9v
dCA9PSBmcmFtZVBvaW50ZXJBbGlnbm1lbnRPdmVyc2hvb3QoKSkKKyAgICAgICAgcmV0dXJuIG51
bVJlZ2lzdGVyczsKKworICAgIHVuc2lnbmVkIHBhZGRlZE51bVJlZ2lzdGVycyA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBudW1SZWdpc3RlcnMp
OworICAgIHJldHVybiBwYWRkZWROdW1SZWdpc3RlcnMgKyBmcmFtZVBvaW50ZXJBbGlnbm1lbnRP
dmVyc2hvb3QoKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgdW5zaWduZWQgbG9nU3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKQogewogICAgIHJldHVybiBXVEY6OmZhc3RMb2cyKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>221519</attachid>
            <date>2014-01-17 17:39:58 -0800</date>
            <delta_ts>2014-01-17 20:49:05 -0800</delta_ts>
            <desc>diff between the 2 patches</desc>
            <filename>x86-32bit.diff</filename>
            <type>application/octet-stream</type>
            <size>9458</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">MSw0NWQwCjwgSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPCA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CjwgLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjE3
MykKPCArKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQo8
IEBAIC0xLDMgKzEsNDAgQEAKPCArMjAxNC0wMS0xNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2Zm
QGFwcGxlLmNvbT4KPCArCjwgKyAgICAgICAgQ1N0YWNrIEJyYW5jaDogWDg2LTMyIEZpeCBMTElu
dAo8ICsgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcw
NzEKPCArCjwgKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCjwgKwo8ICsgICAg
ICAgIFRoaXMgZml4ZXMgWDg2LTMyIGNvbXBpbGF0aW9uIGlzc3VlcyBpbiBKSVRDYWxsMzJfNjQu
Y3BwIGFuZCBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcC4KPCArCjwgKyAgICAgICAgRml4ZWQg
dGhlIDMyIGJpdCBMTEludCB0byB3b3JrIHdpdGggWDg2LiAgU2luY2UgWDg2IHBhc3NlcyBhcmd1
bWVudHMgb24gdGhlIHN0YWNrLAo8ICsgICAgICAgIGNhbGxzIChlLmcuIExMSW50IENDYWxsMiwg
SklUT3BlcmF0aW9uczo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgbmVlZCB0byBtYWtlIGFuCjwg
KyAgICAgICAgb3V0Z29pbmcgYXJndW1lbnQgYXJlYSBvbiB0aGUgc3RhY2ssIHBvcHVsYXRlIHRo
ZSBhcmd1bWVudHMgYW5kIHRoZW4gbWFrZSB0aGUgY2FsbC4KPCArCjwgKyAgICAgICAgVGVzdGVk
IG9uIFg4Ni0zMiB3aXRoIExMSW50IG9ubHkgdGVzdGFwaS4gIFRlc3RlZCBvbiBYODYtNjQgd2l0
aCBhbGwgamF2YXNjcmlwdCB0ZXN0cy4KPCArCjwgKyAgICAgICAgKiBhc3NlbWJsZXIvTWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaDoKPCArICAgICAgICAqIGludGVycHJldGVyL1Byb3Rv
Q2FsbEZyYW1lLmNwcDoKPCArICAgICAgICAoSlNDOjpQcm90b0NhbGxGcmFtZTo6aW5pdCk6Cjwg
KyAgICAgICAgKiBpbnRlcnByZXRlci9Qcm90b0NhbGxGcmFtZS5oOgo8ICsgICAgICAgIChKU0M6
OlByb3RvQ2FsbEZyYW1lOjpzZXRQYWRkZWRBcmdDb3VudCk6CjwgKyAgICAgICAgKiBqaXQvSklU
Q2FsbDMyXzY0LmNwcDoKPCArICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6Cjwg
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgo8ICsgICAgICAgICog
aml0L0pJVE9wZXJhdGlvbnMuY3BwOgo8ICsgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgo8ICsgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgo8ICsg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgo8ICsgICAgICAgICogbGxpbnQv
TExJbnREYXRhLmNwcDoKPCArICAgICAgICAoSlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2Vy
dGlvbnMpOgo8ICsgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDoKPCArICAgICAg
ICAoSlNDOjpMTEludDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKPCArICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgo8ICsgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbToKPCArICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc206CjwgKyAgICAgICAgKiBydW50aW1lL1N0YWNrQWxpZ25tZW50Lmg6CjwgKyAgICAgICAg
KEpTQzo6cm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKToKPCArCjwgIDIwMTQtMDEtMTYg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KPCAgCjwgICAgICAgICAgSlNDIGxheW91
dCB0ZXN0cyBzaG91bGQgcnVuIHdpdGggdGhlIEZUTAo0OGMzCjwgLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaAkocmV2aXNp
b24gMTYyMDk3KQotLS0KPiAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAxNjIxMDcpCjUwYzUsMzAKPCBA
QCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1lRXh0ZW50Rm9yU2xv
Ci0tLQo+IEBAIC0zNSw2ICszNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKPiAgLy8gdGhhdCBjYW4g
YmUgdXNlZCBmb3Igb3V0Z29pbmcgYXJncyB3aGVuIGNhbGxpbmcgYSBzbG93IHBhdGggQyBmdW5j
dGlvbgo+ICAvLyBmcm9tIEpTIGNvZGUuCj4gIAo+ICsvLyAzMi1iaXQgQUJJIHJlcXVpcmVzIHRo
YXQgdGhlIHN0YWNrIHBvaW50ZXIgYmUgYWxpZ25lZCBiZWZvcmUgYSBjYWxsCj4gKy8vIGluc3Ry
dWN0aW9uLiBBZnRlciB0aGUgY2FsbCwgdGhlIHJldHVybiBQQyBwb2ludGVyIGFuZCBwcmV2aW91
cyBmcmFtZQo+ICsvLyBwb2ludGVyIGlzIHB1c2hlZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgbmV3
IGZyYW1lIHBvaW50ZXIgaXMgdG8gYmUgc2V0IHRvCj4gKy8vIHRoZSBzdGFjayBwb2ludGVyIGF0
IHRoYXQgcG9pbnQuCj4gKy8vCj4gKy8vIFRoYXQgbWVhbnMgdGhlIGZyYW1lIHBvaW50ZXIgd2ls
bCBvdmVyc2hvb3Qgc3RhY2sgYWxpZ25tZW50IGJ5IHRoZSBzaXplCj4gKy8vIG9mIDIgcG9pbnRl
cnMgb3IgOCBieXRlcy4KPiArLy8KPiArLy8gVGhlIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBzdWNoIHRoYXQgZ2l2ZW46Cj4gKy8vCj4gKy8vICAg
ICBuZXdTdGFja1BvaW50ZXJJblJlZ2lzdGVycyA9IHN0YWNrUG9pbnRlckluUmVnaXN0ZXJzCj4g
Ky8vICAgICAgICAgKyBmcmFtZVBvaW50ZXJPdmVyc2hvb3QoKSArIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMKPiArLy8KPiArLy8gLi4uIHRoZSBmb2xsb3dpbmcgd2ls
bCBiZSB0cnVlOgo+ICsvLwo+ICsvLyAgICAgbmV3U3RhY2tQb2ludGVySW5SZWdpc3RlcnMgPT0g
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudCgpLCBuZXdTdGFja1BvaW50ZXJJblJl
Z2lzdGVycykKPiArCj4gICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQo+ICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMDsKPiAgCj4gQEAgLTQ3LDgg
KzY0LDggQEAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZUV4dGVudEZvclNsbwo+ICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMDsKNTNjMzMK
PCAgLy8gNiBhcmdzIG9uIHN0YWNrICgyNCBieXRlcykgKyA4IGJ5dGVzIHRvIGFsaWduIHRoZSBz
dGFjay4KLS0tCj4gLS8vIDYgYXJncyBvbiBzdGFjayAoMjQgYnl0ZXMpICsgOCBieXRlcyB0byBh
bGlnbiB0aGUgc3RhY2suCjU0YTM1Cj4gKy8vIDYgYXJncyBvbiBzdGFjayAoMjQgYnl0ZXMpLgo2
MWM0Mgo8IC0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJh
bWUuY3BwCShyZXZpc2lvbiAxNjIwOTcpCi0tLQo+IC0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxNjIxMDcpCjYzYzQ0LDUz
CjwgQEAgLTQ1LDggKzQ1LDggQEAgdm9pZCBQcm90b0NhbGxGcmFtZTo6aW5pdChDb2RlQmxvY2sq
IGNvZAotLS0KPiBAQCAtMjcsNiArMjcsNyBAQAo+ICAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUu
aCIKPiAgCj4gICNpbmNsdWRlICJDb2RlQmxvY2suaCIKPiArI2luY2x1ZGUgIkpTU3RhY2suaCIK
PiAgI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCj4gIAo+ICBuYW1lc3BhY2UgSlNDIHsKPiBA
QCAtNDQsOSArNDUsMTkgQEAgdm9pZCBQcm90b0NhbGxGcmFtZTo6aW5pdChDb2RlQmxvY2sqIGNv
ZAo+ICAgICAgICAgIGlmIChwYWRkZWRBcmdzQ291bnQgPCBudW1QYXJhbWV0ZXJzKQo2NmM1Ngo8
ICAgICAgLy8gUm91bmQgdXAgcGFkZGVkQXJnc0NvdW50IHRvIGtlZXAgdGhlIHN0YWNrIGZyYW1l
IHNpemUgYWxpZ25lZC4KLS0tCj4gLSAgICAvLyBSb3VuZCB1cCBwYWRkZWRBcmdzQ291bnQgdG8g
a2VlcCB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBhbGlnbmVkLgo2OWM1OSw3MAo8ICsgICAgcGFkZGVk
QXJnc0NvdW50ID0gcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKHBhZGRlZEFyZ3NDb3Vu
dCk7Ci0tLQo+ICsKPiArICAgIC8vIEluIGRvQ2FsbFRvSmF2YVNjcmlwdCgpLCB3ZSdsbCBwdXNo
IHRoZSBmb2xsb3dpbmcgb250byB0aGUgc3RhY2sgKGluIG9yZGVyKToKPiArICAgIC8vICAgICAx
LiB0aGUgVk1FbnRyeVNlbnRpbmVsRnJhbWUKPiArICAgIC8vICAgICAyLiBwYWRkZWRBcmdzQ291
bnQgUmVnaXN0ZXJzCj4gKyAgICAvLyAgICAgMy4gdGhlIGNhbGxlZSBDYWxsRnJhbWVIZWFkZXIK
PiArICAgIC8vIFdlIG5lZWQgdG8gcGFkIHRoZSBhcmd1bWVudHMgc3VjaCB0aGF0IHRoZSBzdW0g
b2YgcGFkZGVkQXJnc0NvdW50IGFuZCB0aGUKPiArICAgIC8vIDIgQ2FsbEZyYW1lSGVhZGVyU2l6
ZSB3aWxsIHJlc3VsdCBpbiBhIHN0YWNrIHBvc2l0aW9uIHRvIG1hdGNoZXMgdGhlIHJlcXVpcmVk
Cj4gKyAgICAvLyBDYWxsRnJhbWUgcG9pbnRlciBhbGlnbm1lbnQuCj4gKyAgICB1bnNpZ25lZCB0
b3RhbEZyYW1lSGVhZGVyUmVnaXN0ZXJzID0gMiAqIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emU7Cj4gKyAgICBwYWRkZWRBcmdzQ291bnQgPSByb3VuZFVwRm9yRnJhbWVQb2ludGVyQWxpZ25t
ZW50KHBhZGRlZEFyZ3NDb3VudCArIHRvdGFsRnJhbWVIZWFkZXJSZWdpc3RlcnMpCj4gKyAgICAg
ICAgLSB0b3RhbEZyYW1lSGVhZGVyUmVnaXN0ZXJzOwo+ICsKNzZjNzcKPCAtLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE2MjA5
NykKLS0tCj4gLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9Qcm90b0NhbGxG
cmFtZS5oCShyZXZpc2lvbiAxNjIxMDcpCjg5YzkwCjwgLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTYyMDk3KQotLS0KPiAtLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNjIxMDcpCjEy
NGMxMjUKPCAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTYyMDk3KQotLS0KPiAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTYyMTA3KQoxNDhjMTQ5CjwgLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE2MjA5
NykKLS0tCj4gLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDE2MjEwNykKMTc3YzE3OAo8IC0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMTYyMDk3KQotLS0KPiAtLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDE2MjEwNykK
MTk5YzIwMAo8IC0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50
LmNwcAkocmV2aXNpb24gMTYyMDk3KQotLS0KPiAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJldmlzaW9uIDE2MjEwNykKMjAxYzIwMgo8IEBAIC0x
MTcsOCArMTE3LDkgQEAgdm9pZCBzZXRFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjbwot
LS0KPiBAQCAtMTE3LDggKzExNywxMSBAQCB2b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvCjIwNSwyMDhjMjA2LDIxMQo8IC0gICAgc2l6ZV90IHJlZ2lzdGVyQ291bnQgPSBj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGxJblJlZ2lzdGVyczsKPCArICAgIHNpemVfdCByZWdpc3RlckNvdW50ID0gY29kZUJsb2Nr
LT5tX251bUNhbGxlZVJlZ2lzdGVyczsKPCAgICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCByZWdpc3Rl
ckNvdW50KSk7CjwgKyAgICByZWdpc3RlckNvdW50ICs9IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnM7Ci0tLQo+ICsgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQo+ICsgICAgICAgID09IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykpKTsKPiAgICAgIHNpemVf
dCByZWdpc3RlckNvdW50ID0gY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnM7Cj4gLSAgICBBU1NFUlQocmVnaXN0
ZXJDb3VudCA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSwgcmVnaXN0ZXJDb3VudCkpOwo+ICsgICAgQVNTRVJUKHJlZ2lzdGVyQ291bnQgKyBmcmFt
ZVBvaW50ZXJBbGlnbm1lbnRPdmVyc2hvb3QoKQo+ICsgICAgICAgID09IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCByZWdpc3RlckNvdW50ICsgZnJh
bWVQb2ludGVyQWxpZ25tZW50T3ZlcnNob290KCkpKTsKMjE0YzIxNwo8IC0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24g
MTYyMDk3KQotLS0KPiAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE2MjEwNykKNDcyYzQ3NQo8IC0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MTYyMDk3KQotLS0KPiAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE2MjEwNykKNDk3YzUwMAo8IC0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE2MjA5
NykKLS0tCj4gLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMTYyMTA3KQo2MzljNjQyCjwgLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9uIDE2MjA5NykKLS0tCj4gLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9u
IDE2MjEwNykKNjQxLDY0OWM2NDQKPCBAQCAtMjcsNiArMjcsNyBAQAo8ICAjZGVmaW5lIFN0YWNr
QWxpZ25tZW50X2gKPCAgCjwgICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCjwgKyNpbmNsdWRlICJK
U1N0YWNrLmgiCjwgICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgo8ICAKPCAgbmFtZXNwYWNl
IEpTQyB7CjwgQEAgLTM5LDYgKzQwLDEzIEBAIGlubGluZSB1bnNpZ25lZCBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygKLS0tCj4gQEAgLTM5LDYgKzM5LDM4IEBAIGlubGluZSB1bnNpZ25lZCBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygKNjUzLDY1NGM2NDgsNjY1CjwgKy8vIEFsaWduIGFyZ3VtZW50
IGNvdW50IHRha2luZyBpbnRvIGFjY291bnQgdGhlIENhbGxGcmFtZUhlYWRlclNpemUgbWF5IGJl
IHVuYWxpZ25lZAo8ICtpbmxpbmUgdW5zaWduZWQgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZy
YW1lKHVuc2lnbmVkIGFyZ3VtZW50Q291bnQpCi0tLQo+ICsvLyAzMi1iaXQgQUJJIHJlcXVpcmVz
IHRoYXQgdGhlIHN0YWNrIHBvaW50ZXIgYmUgYWxpZ25lZCBiZWZvcmUgYSBjYWxsCj4gKy8vIGlu
c3RydWN0aW9uLiBBZnRlciB0aGUgY2FsbCwgdGhlIHJldHVybiBQQyBwb2ludGVyIGFuZCBwcmV2
aW91cyBmcmFtZQo+ICsvLyBwb2ludGVyIGlzIHB1c2hlZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUg
bmV3IGZyYW1lIHBvaW50ZXIgaXMgdG8gYmUgc2V0IHRvCj4gKy8vIHRoZSBzdGFjayBwb2ludGVy
IGF0IHRoYXQgcG9pbnQuCj4gKy8vCj4gKy8vIFRoYXQgbWVhbnMgdGhlIGZyYW1lIHBvaW50ZXIg
d2lsbCBvdmVyc2hvb3Qgc3RhY2sgYWxpZ25tZW50IGJ5IHRoZSBzaXplCj4gKy8vIG9mIDIgcG9p
bnRlcnMgb3IgMSBKU0M6OlJlZ2lzdGVyLgo+ICsKPiAraW5saW5lIHVuc2lnbmVkIGZyYW1lUG9p
bnRlckFsaWdubWVudE92ZXJzaG9vdCgpCj4gK3sKPiArI2lmIEVOQUJMRShKU1ZBTFVFNjQpCj4g
KyAgICByZXR1cm4gMDsKPiArI2Vsc2UKPiArICAgIHJldHVybiAxOwo+ICsjZW5kaWYKPiArfQo+
ICsKPiAraW5saW5lIHVuc2lnbmVkIHJvdW5kVXBGb3JGcmFtZVBvaW50ZXJBbGlnbm1lbnQodW5z
aWduZWQgbnVtUmVnaXN0ZXJzKQo2NTYsNjU3YzY2Nyw2NzcKPCArICAgIHVuc2lnbmVkIGNhbGxG
cmFtZUhlYWRlclNpemVCaWFzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAlIDI7Cjwg
KyAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCksIGFyZ3VtZW50Q291bnQgKyBjYWxsRnJhbWVIZWFkZXJTaXplQmlhcykgLSBjYWxsRnJh
bWVIZWFkZXJTaXplQmlhczsKLS0tCj4gKyNpZiBFTkFCTEUoSlNWQUxVRTY0KQo+ICsgICAgcmV0
dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBu
dW1SZWdpc3RlcnMpOwo+ICsjZWxzZQo+ICsgICAgdW5zaWduZWQgcm91bmRlZERvd25OdW1SZWdp
c3RlcnMgPSBudW1SZWdpc3RlcnMgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpOwo+ICsgICAg
dW5zaWduZWQgb3ZlcnNob290ID0gbnVtUmVnaXN0ZXJzIC0gcm91bmRlZERvd25OdW1SZWdpc3Rl
cnM7Cj4gKyAgICBpZiAob3ZlcnNob290ID09IGZyYW1lUG9pbnRlckFsaWdubWVudE92ZXJzaG9v
dCgpKQo+ICsgICAgICAgIHJldHVybiBudW1SZWdpc3RlcnM7Cj4gKwo+ICsgICAgdW5zaWduZWQg
cGFkZGVkTnVtUmVnaXN0ZXJzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50UmVnaXN0ZXJzKCksIG51bVJlZ2lzdGVycyk7Cj4gKyAgICByZXR1cm4gcGFkZGVkTnVtUmVn
aXN0ZXJzICsgZnJhbWVQb2ludGVyQWxpZ25tZW50T3ZlcnNob290KCk7Cj4gKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221527</attachid>
            <date>2014-01-17 20:49:05 -0800</date>
            <delta_ts>2014-01-17 20:53:52 -0800</delta_ts>
            <desc>Patch with updates after conversation with Mark</desc>
            <filename>127071-3.patch</filename>
            <type>text/plain</type>
            <size>25155</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE0LTAxLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIENTdGFjayBCcmFuY2g6IFg4Ni0zMiBGaXggTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA3MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZml4ZXMgWDg2LTMyIGNvbXBpbGF0aW9u
IGlzc3VlcyBpbiBKSVRDYWxsMzJfNjQuY3BwIGFuZCBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cC4KKworICAgICAgICBGaXhlZCB0aGUgMzIgYml0IExMSW50IHRvIHdvcmsgd2l0aCBYODYuICBT
aW5jZSBYODYgcGFzc2VzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2ssCisgICAgICAgIGNhbGxzIChl
LmcuIExMSW50IENDYWxsMiwgSklUT3BlcmF0aW9uczo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkg
bmVlZCB0byBtYWtlIGFuCisgICAgICAgIG91dGdvaW5nIGFyZ3VtZW50IGFyZWEgb24gdGhlIHN0
YWNrLCBwb3B1bGF0ZSB0aGUgYXJndW1lbnRzIGFuZCB0aGVuIG1ha2UgdGhlIGNhbGwuCisKKyAg
ICAgICAgTXVjaCBvZiB0aGUgYXJndW1lbnQgYW5kIGNhbGwgbG9naWMgaXMgYmFzZWQgb24gdGhl
IGFsaWdubWVudCBvZiB0aGUgc3RhY2sgcG9pbnRlcgorICAgICAgICBhbmQgY2FsbCBmcmFtZSBy
ZWdpc3Rlci4gIFRoZSBzdGFjayBwb2ludGVyIGF0IHRoZSB0aW1lIG9mIGEgY2FsbCBuZWVkcyB0
byBiZQorICAgICAgICBzdGFja0FsaWdubWVudEJ5dGVzKCkgKDE2IGJ5dGUpIGFsaWduZWQuICBU
aGUgY2FsbCBmcmFtZSByZWdpc3Rlciwgd2hpY2ggcG9pbnRzIGF0CisgICAgICAgIHRoZSBjdXJy
ZW50IGNhbGwgZnJhbWUgd2lsbCBiZSBhdCBhbiBhbGlnbm1lbnQgdGhhdCBpcyBzdGFja0FsaWdu
bWVudEJ5dGVzKCkgbWludXMKKyAgICAgICAgd2hhdCBnZXRzIHB1c2hlZCBvbiB0aGUgc3RhY2sg
YXMgcGFydCBvZiB0aGUgY2FsbCwgaS5lLiB0aGUgY2FsbGVyIFBDIGFuZCBjYWxsZXIKKyAgICAg
ICAgZnJhbWUgcG9pbnRlci4gIEZvciB1cyB0aGlzIGlzIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplICogc2l6ZW9mKFJlZ2lzdGVyKS4KKworICAgICAgICBVc2luZyByb3VuZExvY2FsUmVn
aXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldCgpIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9y
CisgICAgICAgIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsIG5lZWRpbmcgYWRkaXRpb25h
bCBieXRlcyB0byBwYWQgb3V0IHRoZSBzdGFjaworICAgICAgICB0byBiZSBhbGlnbmVkLgorCisg
ICAgICAgIFRlc3RlZCBvbiBYODYtMzIgd2l0aCBMTEludCBvbmx5IHRlc3RhcGkuICBUZXN0ZWQg
b24gWDg2LTY0IHdpdGggYWxsIGphdmFzY3JpcHQgdGVzdHMuCisKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9Qcm90b0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OlByb3RvQ2FsbEZyYW1lOjppbml0
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9Qcm90b0NhbGxGcmFtZS5oOgorICAgICAgICAoSlND
OjpQcm90b0NhbGxGcmFtZTo6c2V0UGFkZGVkQXJnQ291bnQpOgorICAgICAgICAqIGppdC9KSVRD
YWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAg
KiBsbGludC9MTEludEVudHJ5cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9T
dGFja0FsaWdubWVudC5oOgorICAgICAgICAoSlNDOjpyb3VuZEFyZ3VtZW50Q291bnRUb0FsaWdu
RnJhbWUpOgorICAgICAgICAoSlNDOjpyb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9p
bnRlck9mZnNldCk6CisKIDIwMTQtMDEtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBKU0MgbGF5b3V0IHRlc3RzIHNob3VsZCBydW4gd2l0aCB0aGUgRlRMCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAxNjIyMzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhGcmFtZUV4dGVudEZvclNsbwogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCA9IDA7CiAKICNlbGlmIENQVShYODYpCi0vLyA2IGFyZ3Mgb24gc3Rh
Y2sgKDI0IGJ5dGVzKSArIDggYnl0ZXMgdG8gYWxpZ24gdGhlIHN0YWNrLgotc3RhdGljIGNvbnN0
IHNpemVfdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDMyOworLy8gNiBhcmdzIG9u
IHN0YWNrICgyNCBieXRlcykuCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsID0gMjQ7CiAKICNlbGlmIENQVShBUk02NCkKIC8vIEFsbCBhcmdzIGluIHJl
Z2lzdGVycy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9Qcm90b0Nh
bGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTYyMjMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsOCArNDUsOCBAQCB2b2lkIFByb3RvQ2FsbEZyYW1lOjppbml0KENvZGVCbG9jayogY29k
CiAgICAgICAgICAgICBwYWRkZWRBcmdzQ291bnQgPSBudW1QYXJhbWV0ZXJzOwogICAgIH0KICAg
ICAvLyBSb3VuZCB1cCBwYWRkZWRBcmdzQ291bnQgdG8ga2VlcCB0aGUgc3RhY2sgZnJhbWUgc2l6
ZSBhbGlnbmVkLgotICAgIHBhZGRlZEFyZ3NDb3VudCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBwYWRkZWRBcmdzQ291bnQpOwotICAgIHRoaXMt
PnNldFBhZGRlZEFyZ3NDb3VudChwYWRkZWRBcmdzQ291bnQpOworICAgIHBhZGRlZEFyZ3NDb3Vu
dCA9IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShwYWRkZWRBcmdzQ291bnQpOworICAg
IHRoaXMtPnNldFBhZGRlZEFyZ0NvdW50KHBhZGRlZEFyZ3NDb3VudCk7CiAgICAgdGhpcy0+Y2xl
YXJDdXJyZW50VlBDKCk7CiAgICAgdGhpcy0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1ZSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxs
RnJhbWUuaAkocmV2aXNpb24gMTYyMjMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAg
c3RydWN0IFByb3RvQ2FsbEZyYW1lIHsKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSBjb25zdCB7IHJldHVybiBhcmdDb3VudEFuZENvZGVPcmlnaW5WYWx1ZS5wYXlsb2FkKCk7
IH0KICAgICBpbnQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgLSAxOyB9CiAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhpbnQgY291bnQpIHsgYXJnQ291bnRBbmRDb2RlT3JpZ2luVmFsdWUucGF5bG9hZCgpID0g
Y291bnQ7IH0KLSAgICB2b2lkIHNldFBhZGRlZEFyZ3NDb3VudChzaXplX3QgYXJnQ291bnQpIHsg
cGFkZGVkQXJnQ291bnQgPSBhcmdDb3VudDsgfQorICAgIHZvaWQgc2V0UGFkZGVkQXJnQ291bnQo
c2l6ZV90IGFyZ0NvdW50KSB7IHBhZGRlZEFyZ0NvdW50ID0gYXJnQ291bnQ7IH0KIAogICAgIHZv
aWQgY2xlYXJDdXJyZW50VlBDKCkgeyBhcmdDb3VudEFuZENvZGVPcmlnaW5WYWx1ZS50YWcoKSA9
IDA7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAJKHJldmlzaW9uIDE2MjIzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDkgKzE5OCwxOSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAKIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25DYWxsRXZhbCk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKKworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNhbGxFdmFsLCByZWdUMSk7CisKKyAgICBK
dW1wIG5vRXhjZXB0aW9uID0gZW1pdEV4Y2VwdGlvbkNoZWNrKEludmVydGVkRXhjZXB0aW9uQ2hl
Y2spOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGV4Y2VwdGlvbkNoZWNrKGp1bXAoKSk7CisKKyAgICBub0V4Y2Vw
dGlvbi5saW5rKHRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgZW1pdEdldENhbGxl
ckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgc2FtcGxlQ29kZUJs
b2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI5OSw3ICszMDksNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3JGb3IoCisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0g
bGlua1RodW5rR2VuZXJhdG9yRm9yKAogICAgICAgICBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Qg
PyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCiAgICAgICAgIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjIyMzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzc4LDcgKzE3
NzgsMTEgQEAgYXNtICgKICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKIEhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIFNZ
TUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibW92ICVl
YnAsIDQoJWVzcClcbiIKKyAgICAibW92ICglZXNwKSwgJWVheFxuIgorICAgICJwdXNoICVlYnBc
biIKKyAgICAibGVhbCAtNCglZXNwKSwgJWVzcFxuIgorICAgICJwdXNoICVlYnBcbiIKKyAgICAi
cHVzaCAlZWF4XG4iCiAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVy
blZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAx
NjIyMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZz
ZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAotICAgICAgICBjYWxsRnJhbWVS
ZWdpc3RlciwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgdHJ1ZSk7CisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRydWUpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CkBAIC01MjMsNyArNTIzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKLSAgICAgICAgY2FsbEZyYW1lUmVn
aXN0ZXIsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMiksCisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksCiAgICAgICAgIHJlZ1QxLCB0cnVlLCBtX2NvZGVCbG9jay0+
ZWNtYU1vZGUoKSwgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAgICAKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMTYyMjMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAg
dm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgQVNTRVJUKEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemUgPT0gQ2FsbEZyYW1lSGVhZGVyU2xvdHMpOwogCiAgICAgQVNT
RVJUKCFDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwotICAgIEFTU0VSVChKU1N0YWNr
OjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSA9PSAyKTsKKyAgICBBU1NFUlQoSlNTdGFjazo6Q2FsbGVy
RnJhbWVBbmRQQ1NpemUgPT0gKFB0clNpemUgKiAyKSAvIFNsb3RTaXplKTsKICAgICBBU1NFUlQo
Q2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpID09IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSArIFB0clNpemUpOwogICAgIEFTU0VSVChKU1N0YWNrOjpDb2RlQmxvY2sgKiBzaXplb2Yo
UmVnaXN0ZXIpID09IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSArIFB0clNpemUpOwogICAg
IEFTU0VSVChKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBKU1N0YWNr
OjpDb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpICsgU2xvdFNpemUpOwpAQCAtMTMwLDcgKzEz
MCw3IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogI2VsaWYgQ1BVKEFS
TSkgfHwgQ1BVKFNINCkKICAgICBBU1NFUlQobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwg
PT0gMTYpOwogI2VsaWYgQ1BVKFg4NikgfHwgQ1BVKE1JUFMpCi0gICAgQVNTRVJUKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsID09IDMyKTsKKyAgICBBU1NFUlQobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwgPT0gMjQpOwogI2VuZGlmCiAgICAgQVNTRVJUKFN0cmluZ1R5cGUgPT0g
NSk7CiAgICAgQVNTRVJUKE9iamVjdFR5cGUgPT0gMTcpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJldmlzaW9uIDE2MjIzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsOSArMTE3LDkgQEAgdm9pZCBzZXRFbnRyeXBvaW50KFZNJiB2bSwg
Q29kZUJsb2NrKiBjbwogCiB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7Ci0gICAgc2l6ZV90IHJlZ2lzdGVyQ291bnQgPSBjb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lz
dGVyczsKLSAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgcmVnaXN0ZXJDb3VudCkpOwotICAgIHJldHVy
biByZWdpc3RlckNvdW50OworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKSkpOworCisgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3Rl
ckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24g
MTYyMjMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMiw5ICsxMDIsMTEg
QEAgbWFjcm8gY0NhbGwyKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKQogICAgICAgICBtb3ZlIGFyZzIs
IGExCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYKLSAgICAgICAgcG9rZSBh
cmcxLCAwCi0gICAgICAgIHBva2UgYXJnMiwgMQorICAgICAgICBzdWJwIDgsIHNwCisgICAgICAg
IHB1c2ggYXJnMgorICAgICAgICBwdXNoIGFyZzEKICAgICAgICAgY2FsbCBmdW5jdGlvbgorICAg
ICAgICBhZGRwIDE2LCBzcAogICAgIGVsc2lmIFNINAogICAgICAgICBzZXRhcmdzIGFyZzEsIGFy
ZzIKICAgICAgICAgY2FsbCBmdW5jdGlvbgpAQCAtMTI0LDExICsxMjYsMTIgQEAgbWFjcm8gY0Nh
bGw0KGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLAogICAgICAgICBtb3ZlIGFyZzQsIGEzCiAg
ICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYKLSAgICAgICAgcG9rZSBhcmcxLCAw
Ci0gICAgICAgIHBva2UgYXJnMiwgMQotICAgICAgICBwb2tlIGFyZzMsIDIKLSAgICAgICAgcG9r
ZSBhcmc0LCAzCisgICAgICAgIHB1c2ggYXJnNAorICAgICAgICBwdXNoIGFyZzMKKyAgICAgICAg
cHVzaCBhcmcyCisgICAgICAgIHB1c2ggYXJnMQogICAgICAgICBjYWxsIGZ1bmN0aW9uCisgICAg
ICAgIGFkZHAgMTYsIHNwCiAgICAgZWxzaWYgU0g0CiAgICAgICAgIHNldGFyZ3MgYXJnMSwgYXJn
MiwgYXJnMywgYXJnNAogICAgICAgICBjYWxsIGZ1bmN0aW9uCkBAIC0xNDIsMjEgKzE0NSwyMCBA
QCBlbmQKIG1hY3JvIGNhbGxTbG93UGF0aChzbG93UGF0aCkKICAgICBjQ2FsbDIoc2xvd1BhdGgs
IGNmciwgUEMpCiAgICAgbW92ZSB0MCwgUEMKLSAgICBtb3ZlIHQxLCBjZnIKIGVuZAogCiBtYWNy
byBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAgICAgaWYgWDg2CiAgICAgICAgIGNvbnN0
IGVudHJ5ID0gdDQKLSAgICAgICAgY29uc3Qgdm0gPSB0MgorICAgICAgICBjb25zdCB2bSA9IHQz
CiAgICAgICAgIGNvbnN0IHByb3RvQ2FsbEZyYW1lID0gdDUKIAogICAgICAgICBjb25zdCBwcmV2
aW91c0NGUiA9IHQwCiAgICAgICAgIGNvbnN0IHByZXZpb3VzUEMgPSB0MQogICAgICAgICBjb25z
dCB0ZW1wMSA9IHQwICMgU2FtZSBhcyBwcmV2aW91c0NGUgogICAgICAgICBjb25zdCB0ZW1wMiA9
IHQxICMgU2FtZSBhcyBwcmV2aW91c1BDCi0gICAgICAgIGNvbnN0IHRlbXAzID0gdDIgIyBzYW1l
IGFzIHZtVG9wQ2FsbEZyYW1lCi0gICAgICAgIGNvbnN0IHRlbXA0ID0gdDMKKyAgICAgICAgY29u
c3QgdGVtcDMgPSB0MgorICAgICAgICBjb25zdCB0ZW1wNCA9IHQzICMgc2FtZSBhcyB2bQogICAg
IGVsc2lmIEFSTSBvciBBUk12N19UUkFESVRJT05BTAogICAgICAgICBjb25zdCBlbnRyeSA9IGEw
CiAgICAgICAgIGNvbnN0IHZtID0gYTEKQEAgLTIwNSwzMCArMjA3LDE3IEBAIG1hY3JvIGRvQ2Fs
bFRvSmF2YVNjcmlwdChtYWtlQ2FsbCkKICAgICAgICAgY29uc3QgdGVtcDQgPSB0OQogICAgIGVu
ZAogCisgICAgY2FsbFRvSmF2YVNjcmlwdFByb2xvZ3VlKCkKKwogICAgIGlmIFg4NgotICAgICAg
ICBsb2FkcCBbc3BdLCBwcmV2aW91c1BDCi0gICAgICAgIG1vdmUgY2ZyLCBwcmV2aW91c0NGUgot
ICAgIGVuZAotICAgIGlmIFg4NgotICAgICAgICBsb2FkcCAyMFtzcF0sIGVudHJ5Ci0gICAgICAg
IGxvYWRwIDI0W3NwXSwgdm0KLSAgICAgICAgbG9hZHAgMjhbc3BdLCBwcm90b0NhbGxGcmFtZQor
ICAgICAgICBsb2FkcCAzNltzcF0sIHZtCisgICAgICAgIGxvYWRwIDMyW3NwXSwgZW50cnkKICAg
ICBlbHNlCiAgICAgICAgIG1vdmUgY2ZyLCBwcmV2aW91c0NGUgogICAgICAgICBtb3ZlIHRvcE9m
U3RhY2ssIGNmcgogICAgIGVuZAotICAgIGNhbGxUb0phdmFTY3JpcHRQcm9sb2d1ZSgpCi0gICAg
Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodGVtcDIsIDB4YmFkMGRjMDEpCiAKLSAg
ICAjIFRoZSBqc1N0YWNrTGltaXQgd2FzIHByZXZpb3VzbHkgY29tcHV0ZWQgaW4gVk1FbnRyeVNj
b3BlIHVzaW5nIGFuCi0gICAgIyBlc3RpbWF0ZWQgc3RhY2tQb2ludGVyQXRWTUVudHJ5IHZhbHVl
LiBBZGp1c3QgdGhlIGpzU3RhY2tMaW1pdCBieQotICAgICMgdGhlIGRlbHRhIGJldHdlZW4gdGhl
IGFjdHVhbCBzdGFja1BvaW50ZXJBdFZNRW50cnkgYW5kIHRoZSBlc3RpbWF0ZQotICAgICMgdGhh
dCB3ZSB1c2VkIHByZXZpb3VzbHkuCi0gICAgc3VicCBWTTo6c3RhY2tQb2ludGVyQXRWTUVudHJ5
W3ZtXSwgc3AsIHRlbXAyCi0gICAgc3VicCBWTTo6bV9qc1N0YWNrTGltaXRbdm1dLCB0ZW1wMiwg
dGVtcDIKLSAgICBzdG9yZXAgdGVtcDIsIFZNOjptX2pzU3RhY2tMaW1pdFt2bV0KLSAgICBzdG9y
ZXAgc3AsIFZNOjpzdGFja1BvaW50ZXJBdFZNRW50cnlbdm1dCisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQodGVtcDIsIDB4YmFkMGRjMDEpCiAKICAgICAjIFRoZSBzdGFjayByZXNlcnZl
ZCB6b25lIGVuc3VyZXMgdGhhdCB3ZSBoYXZlIGFkZXF1YXRlIHNwYWNlIGZvciB0aGUKICAgICAj
IFZNRW50cnlTZW50aW5lbEZyYW1lLiBQcm9jZWVkIHdpdGggYWxsb2NhdGluZyBhbmQgaW5pdGlh
bGl6aW5nIHRoZQpAQCAtMjQwLDkgKzIyOSwxNyBAQCBtYWNybyBkb0NhbGxUb0phdmFTY3JpcHQo
bWFrZUNhbGwpCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0sIHRlbXAyCiAgICAgc3Rv
cmVwIHRlbXAyLCBTY29wZUNoYWluW2Nmcl0KICAgICBzdG9yZXAgMSwgQ29kZUJsb2NrW2Nmcl0K
KyAgICBpZiBYODYKKyAgICAgICAgbG9hZHAgMjhbc3BdLCBwcmV2aW91c1BDCisgICAgICAgIGxv
YWRwIDI0W3NwXSwgcHJldmlvdXNDRlIKKyAgICBlbmQKICAgICBzdG9yZXAgcHJldmlvdXNQQywg
UmV0dXJuUENbY2ZyXQogICAgIHN0b3JlcCBwcmV2aW91c0NGUiwgQ2FsbGVyRnJhbWVbY2ZyXQog
CisgICAgaWYgWDg2CisgICAgICAgIGxvYWRwIDQwW3NwXSwgcHJvdG9DYWxsRnJhbWUKKyAgICBl
bmQKKwogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdDb3VudFtwcm90b0NhbGxG
cmFtZV0sIHRlbXAyCiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywgdGVtcDIsIHRlbXAy
CiAgICAgbHNoaWZ0cCAzLCB0ZW1wMgpAQCAtMjUzLDcgKzI1MCw3IEBAIG1hY3JvIGRvQ2FsbFRv
SmF2YVNjcmlwdChtYWtlQ2FsbCkKICAgICAjIGJlZm9yZSB3ZSBzdGFydCBjb3B5aW5nIHRoZSBh
cmdzIGZyb20gdGhlIHByb3RvQ2FsbEZyYW1lIGJlbG93LgogICAgIGJwYWVxIHRlbXAxLCBWTTo6
bV9qc1N0YWNrTGltaXRbdm1dLCAuc3RhY2tIZWlnaHRPSwogCi0gICAgbW92ZSBjZnIsIHNwCisg
ICAgc3VicCBjZnIsIDgsIHNwCiAKICAgICBpZiBDX0xPT1AKICAgICAjIEZJWE1FOiBOZWVkIHRv
IGNhbGwgc3RhY2sgY2hlY2sgaGVyZSB0byBzZWUgaWYgd2UgY2FuIGdyb3cgdGhlIHN0YWNrLgpA
QCAtMjYxLDcgKzI1OCw2IEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNjcmlwdChtYWtlQ2FsbCkKICAg
ICAjIHVwIHRocm93aW5nIGEgU3RhY2tPdmVyZmxvd0Vycm9yLgogICAgIGVuZAogCi0gICAgc3Rv
cmVwIDAsIFZNOjpzdGFja1BvaW50ZXJBdFZNRW50cnlbdm1dCiAgICAgY0NhbGwyKF9sbGludF90
aHJvd19zdGFja19vdmVyZmxvd19lcnJvciwgdm0sIHByb3RvQ2FsbEZyYW1lKQogICAgIGNhbGxU
b0phdmFTY3JpcHRFcGlsb2d1ZSgpCiAgICAgcmV0CkBAIC0zMDUsNDAgKzMwMSw0OCBAQCBtYWNy
byBkb0NhbGxUb0phdmFTY3JpcHQobWFrZUNhbGwpCiAuY29weUFyZ3NEb25lOgogICAgIHN0b3Jl
cCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0KIAotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KHRlbXAzLCAweGJhZDBkYzAyKQotCi0gICAgbWFrZUNhbGwoZW50cnksIHRlbXAxKQotCi0g
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodGVtcDMsIDB4YmFkMGRjMDMpCisgICAgbWFr
ZUNhbGwoZW50cnksIHRlbXAxLCB0ZW1wMikKIAogICAgIGJwZXEgQ29kZUJsb2NrW2Nmcl0sIDEs
IC5jYWxsZWVGcmFtZVBvcHBlZAogICAgIGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIGNmcgogCiAu
Y2FsbGVlRnJhbWVQb3BwZWQ6Ci0gICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHRlbXAyICMgVk0KLSAg
ICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHRlbXAzICMgcHJldmlvdXMgdG9wQ2FsbEZyYW1lCi0g
ICAgc3RvcmVwIHRlbXAzLCBWTTo6dG9wQ2FsbEZyYW1lW3RlbXAyXQotCi0gICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQodGVtcDMsIDB4YmFkMGRjMDQpCisgICAgbG9hZHAgQ2FsbGVlW2Nm
cl0sIHRlbXAzICMgVk0KKyAgICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHRlbXA0ICMgcHJldmlv
dXMgdG9wQ2FsbEZyYW1lCisgICAgc3RvcmVwIHRlbXA0LCBWTTo6dG9wQ2FsbEZyYW1lW3RlbXAz
XQogCiAgICAgY2FsbFRvSmF2YVNjcmlwdEVwaWxvZ3VlKCkKICAgICByZXQKIGVuZAogCi1tYWNy
byBtYWtlSmF2YVNjcmlwdENhbGwoZW50cnksIHRlbXApCittYWNybyBtYWtlSmF2YVNjcmlwdENh
bGwoZW50cnksIHRlbXAsIHVudXNlZCkKKyAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBz
cAorICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQyLCAweGJhZDBkYzAyKQogICAgIGNh
bGwgZW50cnkKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0MiwgMHhiYWQwZGMwMykK
KyAgICBzdWJwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogZW5kCiAKLW1hY3JvIG1ha2VIb3N0
RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQotICAgIG1vdmUgZW50cnksIHRlbXAKK21hY3JvIG1h
a2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wMSwgdGVtcDIpCisgICAgbW92ZSBlbnRyeSwg
dGVtcDEKICAgICBpZiBYODYKLSAgICAgICAgIyBQdXQgY2ZyIG9uIHN0YWNrIGFzIGFyZzAsIGFs
c28gcHV0IGl0IGluIGVjeCBmb3IgImZhc3RjYWxsIiB0YXJnZXRzCi0gICAgICAgIHBva2UgY2Zy
LCAwCi0gICAgICAgIG1vdmUgY2ZyLCB0MgorICAgICAgICAjIFB1dCBjYWxsZWUgZnJhbWUgcG9p
bnRlciBvbiBzdGFjayBhcyBhcmcwLCBhbHNvIHB1dCBpdCBpbiBlY3ggZm9yICJmYXN0Y2FsbCIg
dGFyZ2V0cworICAgICAgICBtb3ZlIDAsIHRlbXAyCisgICAgICAgIG1vdmUgdGVtcDIsIDRbc3Bd
ICMgcHV0IDAgaW4gUmV0dXJuUEMKKyAgICAgICAgbW92ZSBjZnIsIFtzcF0gIyBwdXQgY2FsbGVy
IGZyYW1lIHBvaW50ZXIgaW50byBjYWxsZWUgZnJhbWUgc2luY2UgY2FsbGVlIHByb2xvZ3VlIGNh
bid0CisgICAgICAgIG1vdmUgc3AsIHQyICMgdDIgaXMgZWN4CisgICAgICAgIHB1c2ggdGVtcDIg
IyBQdXNoIGR1bW15IGFyZzEKKyAgICAgICAgcHVzaCB0MgogICAgIGVsc2UKLSAgICAgICAgbW92
ZSBjZnIsIGEwCisgICAgICAgIG1vdmUgc3AsIGEwCisgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVB
bmRQQ1NpemUsIHNwCisgICAgZW5kCisgICAgY2FsbCB0ZW1wMQorICAgIGlmIFg4NgorICAgICAg
ICBhZGRwIDgsIHNwCisgICAgZWxzZQorICAgICAgICBzdWJwIENhbGxlckZyYW1lQW5kUENTaXpl
LCBzcAogICAgIGVuZAotICAgIGNhbGwgdGVtcAogZW5kCiAKIF9oYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKQEAgLTM1Miw5ICszNTYsOSBAQCBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAg
IyByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciBDIGZyYW1lLgogICAgIGxvYWRwIENhbGxlckZyYW1l
ICsgUGF5bG9hZE9mZnNldFtjZnJdLCBjZnIKIAotICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRP
ZmZzZXRbY2ZyXSwgdDMgIyBWTS50b3BDYWxsRnJhbWUKLSAgICBsb2FkcCBTY29wZUNoYWluICsg
UGF5bG9hZE9mZnNldFtjZnJdLCB0NQotICAgIHN0b3JlcCB0NSwgW3QzXQorICAgIGxvYWRwIENh
bGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMgIyBWTQorICAgIGxvYWRwIFNjb3BlQ2hhaW4g
KyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQ1ICMgcHJldmlvdXMgdG9wQ2FsbEZyYW1lCisgICAgc3Rv
cmVwIHQ1LCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQogCiAgICAgY2FsbFRvSmF2YVNjcmlwdEVwaWxv
Z3VlKCkKICAgICByZXQKQEAgLTM4NywxNCArMzkxLDEyIEBAIGVuZAogbWFjcm8gY2FsbENhbGxT
bG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQogICAgIHN0b3JlcCBQQywgQXJndW1lbnRDb3VudCAr
IFRhZ09mZnNldFtjZnJdCiAgICAgY0NhbGwyKHNsb3dQYXRoLCBjZnIsIFBDKQotICAgIG1vdmUg
dDEsIGNmcgogICAgIGFjdGlvbih0MCkKIGVuZAogCiBtYWNybyBjYWxsV2F0Y2hkb2dUaW1lckhh
bmRsZXIodGhyb3dIYW5kbGVyKQogICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09m
ZnNldFtjZnJdCiAgICAgY0NhbGwyKF9sbGludF9zbG93X3BhdGhfaGFuZGxlX3dhdGNoZG9nX3Rp
bWVyLCBjZnIsIFBDKQotICAgIG1vdmUgdDEsIGNmcgogICAgIGJ0cG56IHQwLCB0aHJvd0hhbmRs
ZXIKICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiBlbmQKQEAg
LTIxMDIsMTkgKzIxMDQsMjAgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJs
ZU9mZgogICAgIHN0b3JlaSBDZWxsVGFnLCBTY29wZUNoYWluICsgVGFnT2Zmc2V0W2Nmcl0KICAg
ICBzdG9yZWkgdDEsIFNjb3BlQ2hhaW4gKyBQYXlsb2FkT2Zmc2V0W2Nmcl0KICAgICBpZiBYODYK
LSAgICAgICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0MwotICAgICAgICBhbmRwIE1hcmtlZEJs
b2NrTWFzaywgdDMKLSAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCArIFdlYWtT
ZXQ6Om1fdm1bdDNdLCB0MworICAgICAgICBzdWJwIDgsIHNwICMgYWxpZ24gc3RhY2sgcG9pbnRl
cgorICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDEKKyAgICAgICAgbG9hZHAgTWFya2Vk
QmxvY2s6Om1fd2Vha1NldCArIFdlYWtTZXQ6Om1fdm1bdDFdLCB0MwogICAgICAgICBzdG9yZXAg
Y2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQogICAgICAgICBtb3ZlIGNmciwgdDIgICMgdDIgPSBl
Y3gKLSAgICAgICAgc3VicCAxNiAtIDgsIHNwCisgICAgICAgIHN0b3JlcCB0MiwgW3NwXQogICAg
ICAgICBsb2FkaSBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQxCiAgICAgICAgIGxvYWRw
IEpTRnVuY3Rpb246Om1fZXhlY3V0YWJsZVt0MV0sIHQxCisgICAgICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KHQzLCAweGRlYWQwMDAxKQogICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZz
ZXRUb0Z1bmN0aW9uW3QxXQotICAgICAgICBhZGRwIDE2IC0gOCwgc3AKICAgICAgICAgbG9hZHAg
U2NvcGVDaGFpbltjZnJdLCB0MwogICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKICAg
ICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCArIFdlYWtTZXQ6Om1fdm1bdDNdLCB0
MworICAgICAgICBhZGRwIDgsIHNwCiAgICAgZWxzaWYgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RS
QURJVElPTkFMIG9yIE1JUFMgb3IgU0g0CiAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2ZyXSwg
dDMKICAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMTYyMjMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMCw4ICsyMDAs
MTIgQEAgbWFjcm8gZG9DYWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsKQogICAgIGptcCAuY29weUFy
Z3NMb29wCiAKIC5jb3B5QXJnc0RvbmU6Ci0gICAgbW92ZSBzcCwgdGVtcDIKLSAgICBzdG9yZXAg
dGVtcDIsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCisgICAgaWYgQVJNNjQKKyAgICAgICAgbW92ZSBz
cCwgdGVtcDIKKyAgICAgICAgc3RvcmVwIHRlbXAyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQorICAg
IGVsc2UKKyAgICAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQorICAgIGVuZAog
CiAgICAgbW92ZSAweGZmZmYwMDAwMDAwMDAwMDAsIGNzcjEKICAgICBhZGRwIDIsIGNzcjEsIGNz
cjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE2MjIzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsNiArMzgsNyBAQCBjb25zdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDYKIGVsc2UK
IGNvbnN0IFB0clNpemUgPSA0CiBjb25zdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDUKK2NvbnN0
IENhbGxGcmFtZUFsaWduU2xvdHMgPSAxCiBlbmQKIGNvbnN0IFNsb3RTaXplID0gOAogCkBAIC03
OCw3ICs3OSw3IEBAIGNvbnN0IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMAogZWxz
aWYgQVJNIG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIEFSTXY3IG9yIFNINAogY29uc3QgbWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSAxNgogZWxzaWYgWDg2IG9yIE1JUFMKLWNvbnN0IG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMzIKK2NvbnN0IG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsID0gMjQKIGVuZAogCiAjIFdhdGNocG9pbnQgc3RhdGVzCkBAIC0yMzQsMjgg
KzIzNSwyNCBAQCBtYWNybyBwcmVzZXJ2ZUNhbGxlclBDQW5kQ0ZSKCkKICAgICBpZiBDX0xPT1Ag
b3IgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIE1JUFMgb3IgU0g0CiAgICAg
ICAgIHB1c2ggbHIKICAgICAgICAgcHVzaCBjZnIKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAg
ZWxzaWYgWDg2IG9yIFg4Nl82NAogICAgICAgICBwdXNoIGNmcgotICAgICAgICBtb3ZlIHNwLCBj
ZnIKICAgICBlbHNpZiBBUk02NAogICAgICAgICBwdXNoTFJBbmRGUAotICAgICAgICBtb3ZlIHNw
LCBjZnIKICAgICBlbHNlCiAgICAgICAgIGVycm9yCiAgICAgZW5kCisgICAgbW92ZSBzcCwgY2Zy
CiBlbmQKIAogbWFjcm8gcmVzdG9yZUNhbGxlclBDQW5kQ0ZSKCkKKyAgICBtb3ZlIGNmciwgc3AK
ICAgICBpZiBDX0xPT1Agb3IgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIE1J
UFMgb3IgU0g0Ci0gICAgICAgIG1vdmUgY2ZyLCBzcAogICAgICAgICBwb3AgY2ZyCiAgICAgICAg
IHBvcCBscgogICAgIGVsc2lmIFg4NiBvciBYODZfNjQKLSAgICAgICAgbW92ZSBjZnIsIHNwCiAg
ICAgICAgIHBvcCBjZnIKICAgICBlbHNpZiBBUk02NAotICAgICAgICBtb3ZlIGNmciwgc3AKICAg
ICAgICAgcG9wTFJBbmRGUAogICAgIGVuZAogZW5kCkBAIC0zMDYsMTAgKzMwMywxMSBAQCBtYWNy
byBmdW5jdGlvbkVwaWxvZ3VlKCkKIGVuZAogCiBtYWNybyBjYWxsVG9KYXZhU2NyaXB0UHJvbG9n
dWUoKQotICAgIGlmIFg4NiBvciBYODZfNjQKKyAgICBpZiBYODZfNjQKICAgICAgICAgcHVzaCBj
ZnIKLSAgICAgICAgbW92ZSBzcCwgY2ZyCiAgICAgICAgIHB1c2ggdDAKKyAgICBlbHNpZiBYODYK
KyAgICAgICAgcHVzaCBjZnIKICAgICBlbHNpZiBBUk02NAogICAgICAgICBwdXNoTFJBbmRGUAog
ICAgIGVsc2lmIENfTE9PUCBvciBBUk0gb3IgQVJNdjcgb3IgQVJNdjdfVFJBRElUSU9OQUwgb3Ig
TUlQUwpAQCAtMzE3LDE1ICszMTUsMjQgQEAgbWFjcm8gY2FsbFRvSmF2YVNjcmlwdFByb2xvZ3Vl
KCkKICAgICAgICAgcHVzaCBjZnIKICAgICBlbmQKICAgICBwdXNoQ2FsbGVlU2F2ZXMKKyAgICBp
ZiBYODYKKyAgICAgICAgc3VicCAxMiwgc3AKKyAgICBlbmQKIGVuZAogCiBtYWNybyBjYWxsVG9K
YXZhU2NyaXB0RXBpbG9ndWUoKQogICAgIGFkZHAgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgKiA4LCBj
ZnIsIHNwCiAgICAgbG9hZHAgQ2FsbGVyRnJhbWVbY2ZyXSwgY2ZyCiAKKyAgICBpZiBYODYKKyAg
ICAgICAgYWRkcCAxMiwgc3AKKyAgICBlbmQKKwogICAgIHBvcENhbGxlZVNhdmVzCi0gICAgaWYg
WDg2IG9yIFg4Nl82NAotICAgICAgICBwb3AgdDYKKyAgICBpZiBYODZfNjQKKyAgICAgICAgcG9w
IHQyCisgICAgICAgIHBvcCBjZnIKKyAgICBlbHNpZiBYODYKICAgICAgICAgcG9wIGNmcgogICAg
IGVsc2lmIEFSTTY0CiAgICAgICAgIHBvcExSQW5kRlAKQEAgLTMzNiwxNSArMzQzLDE1IEBAIG1h
Y3JvIGNhbGxUb0phdmFTY3JpcHRFcGlsb2d1ZSgpCiBlbmQKIAogbWFjcm8gbW92ZVN0YWNrUG9p
bnRlckZvckNvZGVCbG9jayhjb2RlQmxvY2ssIHNjcmF0Y2gpCi0gICAgbG9hZGkgQ29kZUJsb2Nr
OjptX251bUNhbGxlZVJlZ2lzdGVyc1tjb2RlQmxvY2tdLCB0MgotICAgIGxzaGlmdHAgMywgdDIK
LSAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLCB0MgotICAgIHN1YnAgY2Zy
LCB0Miwgc3AKKyAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtQ2FsbGVlUmVnaXN0ZXJzW2NvZGVC
bG9ja10sIHNjcmF0Y2gKKyAgICBsc2hpZnRwIDMsIHNjcmF0Y2gKKyAgICBhZGRwIG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsLCBzY3JhdGNoCisgICAgc3VicCBjZnIsIHNjcmF0Y2gsIHNw
CiBlbmQKIAogbWFjcm8gcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0gICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHQxCi0gICAgbW92ZVN0YWNrUG9pbnRlckZvckNvZGVCbG9jayh0MSwg
dDIpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCisgICAgbW92ZVN0YWNrUG9pbnRlckZv
ckNvZGVCbG9jayh0MiwgdDQpCiBlbmQKIAogbWFjcm8gdHJhY2VFeGVjdXRpb24oKQpAQCAtNDM4
LDcgKzQ0NSw5IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAg
ICBwcmVzZXJ2ZUNhbGxlclBDQW5kQ0ZSKCkKIAogICAgIGlmIEVYRUNVVElPTl9UUkFDSU5HCisg
ICAgICAgIHN1YnAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHNwCiAgICAgICAgIGNh
bGxTbG93UGF0aCh0cmFjZVNsb3dQYXRoKQorICAgICAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLCBzcAogICAgIGVuZAogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKIGlmIENf
TE9PUApAQCAtNTkwLDYgKzU5OSwxMCBAQCBfc2FuaXRpemVTdGFja0ZvclZNOgogICAgICAgICBj
b25zdCB6ZXJvVmFsdWUgPSB0MgogICAgIGVuZAogCisgICAgaWYgWDg2CisgICAgICAgIGxvYWRw
IDRbc3BdLCB2bQorICAgIGVuZAorCiAgICAgbG9hZHAgVk06Om1fbGFzdFN0YWNrVG9wW3ZtXSwg
YWRkcmVzcwogICAgIGJwYmVxIHNwLCBhZGRyZXNzLCAuemVyb0ZpbGxEb25lCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAkocmV2aXNp
b24gMTYyMjMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTdGFja0FsaWdu
bWVudF9oCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNTdGFjay5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzksNiAr
NDAsMjAgQEAgaW5saW5lIHVuc2lnbmVkIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKAogICAgIHJl
dHVybiBzdGFja0FsaWdubWVudEJ5dGVzKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQog
CisvLyBBbGlnbiBhcmd1bWVudCBjb3VudCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBDYWxsRnJh
bWVIZWFkZXJTaXplIG1heSBiZQorLy8gYW4gInVuYWxpZ25lZCIgY291bnQgb2YgcmVnaXN0ZXJz
LgoraW5saW5lIHVuc2lnbmVkIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZSh1bnNpZ25l
ZCBhcmd1bWVudENvdW50KQoreworICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgYXJndW1lbnRDb3VudCArIEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemUpIC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKK30KKworLy8g
QWxpZ24gbG9jYWwgcmVnaXN0ZXIgY291bnQgdG8gbWFrZSB0aGUgbGFzdCBsb2NhbCBlbmQgb24g
YSBzdGFjayBhbGlnbmVkIGFkZHJlc3MgZ2l2ZW4gdGhlCisvLyBDYWxsRnJhbWUgaXMgYXQgYW4g
YWRkcmVzcyB0aGF0IGlzIHN0YWNrIGFsaWduZWQgbWludXMgSlNTdGFjazo6Q2FsbGVyRnJhbWVB
bmRQQ1NpemUKK2lubGluZSB1bnNpZ25lZCByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1l
UG9pbnRlck9mZnNldCh1bnNpZ25lZCBsb2NhbFJlZ2lzdGVyQ291bnQpCit7CisgICAgcmV0dXJu
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBsb2Nh
bFJlZ2lzdGVyQ291bnQgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgLSBKU1N0YWNr
OjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKK30KKwogaW5saW5lIHVuc2lnbmVkIGxvZ1N0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkKIHsKICAgICByZXR1cm4gV1RGOjpmYXN0TG9nMihzdGFja0FsaWdu
bWVudFJlZ2lzdGVycygpKTsK
</data>
<flag name="review"
          id="245461"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>