<?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>125849</bug_id>
          
          <creation_ts>2013-12-17 03:17:03 -0800</creation_ts>
          <short_desc>Change JSStack::topOfStack() (and peers) to point to the last slot instead of past it.</short_desc>
          <delta_ts>2013-12-23 16:39:49 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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>
          <dependson>126181</dependson>
    
    <dependson>126184</dependson>
    
    <dependson>126186</dependson>
    
    <dependson>126188</dependson>
    
    <dependson>126191</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>eflews.bot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960446</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 03:17:03 -0800</bug_when>
    <thetext>Currently, the JSStack assumes a stack pointer (topOfStack) that points past the end of the top CallFrame.  This is not consistent with the C stack convention of the stack pointer pointing to the last allocated slot on the stack i.e. last slot in the top frame.  Will change the JSStack to match the C stack convention.  This has a side effect of simplifying code that interact with the stack (whether we use the C stack of a separate stack for the JSStack).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960450</commentid>
    <comment_count>1</comment_count>
      <attachid>219408</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 03:33:14 -0800</bug_when>
    <thetext>Created attachment 219408
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960468</commentid>
    <comment_count>2</comment_count>
      <attachid>219408</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-17 05:17:45 -0800</bug_when>
    <thetext>Comment on attachment 219408
the patch.

Attachment 219408 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/44318280</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960500</commentid>
    <comment_count>3</comment_count>
      <attachid>219408</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 07:37:44 -0800</bug_when>
    <thetext>Comment on attachment 219408
the patch.

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3389
&gt; +size_t CodeBlock::frameExtentSizeInRegisters()

Does this return exactly The same thing as frameRegisterCount?

&gt; Source/JavaScriptCore/interpreter/JSStackInlines.h:71
&gt; +        neededRegisters += codeBlock-&gt;frameExtentSizeInRegisters();

Isn&apos;t this wrong for DFG code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960503</commentid>
    <comment_count>4</comment_count>
      <attachid>219408</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 07:52:00 -0800</bug_when>
    <thetext>Comment on attachment 219408
the patch.

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

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3389
&gt;&gt; +size_t CodeBlock::frameExtentSizeInRegisters()
&gt; 
&gt; Does this return exactly The same thing as frameRegisterCount?

Yes.  Exactly the same.  I would prefer to return frameRegisterCount(), but I’ve heard a differing opinion that we should route it through virtualRegisterForLocal() for the reason that if we change the layout of locals (e.g. pag with something else that we don’t consider locals), then virtualRegisterForLocal() will encapsulate that change.  I would argue that if we were to add some other fields besides locals, we should update the frameRegisterCount() as well, or encapsulate it here in this CodeBlock function.  Any preferences given the options?  I’d be happy to change it to return frameRegisterCount() directly (which I consider to be more intuitive).

&gt;&gt; Source/JavaScriptCore/interpreter/JSStackInlines.h:71
&gt;&gt; +        neededRegisters += codeBlock-&gt;frameExtentSizeInRegisters();
&gt; 
&gt; Isn&apos;t this wrong for DFG code?

How so?  CodeBlock::frameExtentSizeInRegisters() is computed from CodeBlock::frameRegisterCount(), which in turn is computed from jitCode()-&gt;dfgCommon()-&gt;frameRegisterCount if jitType() is DFGJIT.  Or are you referring to something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960505</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 07:56:26 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 219408 [details])
&gt; Attachment 219408 [details] did not pass efl-wk2-ews (efl-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/44318280

This efl-wk2-ews failure is due to an internal compiler error on the bot.  It’s not an issue with the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960513</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 08:21:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 219408 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219408&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3389
&gt; &gt;&gt; +size_t CodeBlock::frameExtentSizeInRegisters()
&gt; &gt; 
&gt; &gt; Does this return exactly The same thing as frameRegisterCount?
&gt; 
&gt; Yes.  Exactly the same.  I would prefer to return frameRegisterCount(), but I’ve heard a differing opinion that we should route it through virtualRegisterForLocal() for the reason that if we change the layout of locals (e.g. pag with something else that we don’t consider locals), then virtualRegisterForLocal() will encapsulate that change.

OK, got it.  In which case this change is an obvious violation of YAGNI and is based on false premises.

1) We have no plans to pad locals.

2) Even if we had such plans, they would be very far off and so having a bunch of crufty code where you&apos;ve got two methods that return the same exact value is just going to be hurting the project.  We don&apos;t land refactorings that make code more complex in order to support hypothetical far-off-in-the-future functionality.

3) Even if we padded locals, we would absolutely change frameRegisterCount() to account for that padding.  That is the meaning of frameRegisterCount().  It has nothing to do with the number of locals.  It is the amount of the stack that a code block uses.  A code block&apos;s stack usage is measured from wherever FP points.

So, please, lets not do this.

&gt; I would argue that if we were to add some other fields besides locals, we should update the frameRegisterCount() as well

Yes.  We would obviously do that.  Anything else would be insane.

&gt; , or encapsulate it here in this CodeBlock function.  Any preferences given the options?  I’d be happy to change it to return frameRegisterCount() directly (which I consider to be more intuitive).

Yes, please call it directly.

Sorry that I didn&apos;t catch this in our previous discussions.

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/interpreter/JSStackInlines.h:71
&gt; &gt;&gt; +        neededRegisters += codeBlock-&gt;frameExtentSizeInRegisters();
&gt; &gt; 
&gt; &gt; Isn&apos;t this wrong for DFG code?
&gt; 
&gt; How so?  CodeBlock::frameExtentSizeInRegisters() is computed from CodeBlock::frameRegisterCount(), which in turn is computed from jitCode()-&gt;dfgCommon()-&gt;frameRegisterCount if jitType() is DFGJIT.  Or are you referring to something else?

Aren&apos;t you doing a stack check?

There are at least two notions of frame register count:

A) The amount you need to check.

B) The place where you put SP.

In DFG, (A) may be greater than (B).

frameRegisterCount() returns the second one (where to put SP).  Therefore, it&apos;s not appropriate for stack checks.

As an aside, why does this do a stack check?  Maybe the callee should always do the stack check and then you won&apos;t have this problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960518</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 08:35:50 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 219408 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219408&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3389
&gt; &gt; &gt;&gt; +size_t CodeBlock::frameExtentSizeInRegisters()
&gt; &gt; &gt; 
&gt; &gt; &gt; Does this return exactly The same thing as frameRegisterCount?
&gt; &gt; 
&gt; &gt; Yes.  Exactly the same.  ...
&gt; 
&gt; Yes, please call it directly.

Just to make sure I’m understanding you correctly, we’ll still have a CodeBlock::frameExtentSizeInRegisters().  For this patch, it returns CodeBlock::frameRegisterCount().  But shortly thereafter, I will be changing it to factor in maxFrameExtentForSlowPathCall.


&gt; &gt; &gt;&gt; Source/JavaScriptCore/interpreter/JSStackInlines.h:71
&gt; &gt; &gt;&gt; +        neededRegisters += codeBlock-&gt;frameExtentSizeInRegisters();
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t this wrong for DFG code?
&gt; &gt; 
&gt; &gt; How so?  CodeBlock::frameExtentSizeInRegisters() is computed from CodeBlock::frameRegisterCount(), which in turn is computed from jitCode()-&gt;dfgCommon()-&gt;frameRegisterCount if jitType() is DFGJIT.  Or are you referring to something else?
&gt; 
&gt; Aren&apos;t you doing a stack check?
&gt; 
&gt; There are at least two notions of frame register count:
&gt; 
&gt; A) The amount you need to check.
&gt; 
&gt; B) The place where you put SP.
&gt; 
&gt; In DFG, (A) may be greater than (B).
&gt; 
&gt; frameRegisterCount() returns the second one (where to put SP).  Therefore, it&apos;s not appropriate for stack checks.

Ok, this is interesting.  Why is it not OK to set the SP to the same value as the first one (the worst case)?  Is it for space usage efficiency, or is there some other reason?

&gt; As an aside, why does this do a stack check?  Maybe the callee should always do the stack check and then you won&apos;t have this problem?

My understanding is that this entryCheck() simplifies the work for the callToJavaScript() thunk.  It ensures that we have enough stack capacity so that callToJavaScript() is guaranteed to be successful and need not do its own checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960544</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 09:39:05 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 219408 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219408&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3389
&gt; &gt; &gt; &gt;&gt; +size_t CodeBlock::frameExtentSizeInRegisters()
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Does this return exactly The same thing as frameRegisterCount?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes.  Exactly the same.  ...
&gt; &gt; 
&gt; &gt; Yes, please call it directly.
&gt; 
&gt; Just to make sure I’m understanding you correctly, we’ll still have a CodeBlock::frameExtentSizeInRegisters().  For this patch, it returns CodeBlock::frameRegisterCount().  But shortly thereafter, I will be changing it to factor in maxFrameExtentForSlowPathCall.

The *entire point* of frameRegisterCount() is that it should already include maxFrameExtentForSlowPathCall.

Also, you&apos;re fooling yourself if you think that you can compute maxFrameExtentForSlowPathCall for all of our engines.  You certainly can&apos;t compute it for the FTL.

maxFrameExtentForSlowPathCall cannot be part of CodeBlock and cannot be added by CodeBlock methods to any other value because CodeBlock must be able to encapsulate things for which maxFrameExtentForSlowPathCall is not defined (like FTL).

maxFrameExtentForSlowPathCall should be part of the JIT&apos;s and DFG&apos;s calculation of frameRegisterCount().  I think we&apos;ve now made this point multiple times.  The *entire point* of frameRegisterCount() is to encapsulate maxFrameExtentForSlowPathCall for those engines where such a thing is well-defined (namely JIT and DFG).

So please, please, please don&apos;t introduce yet another method for the purpose of adding maxFrameExtentForSlowPathCall to frameRegisterCount.  The *whole point* of adding a thing called &quot;frameRegisterCount&quot; was to make a placeholder for encapsulating maxFrameExtentForSlowPathCall.  If you then start adding yet another thing, with yet another name, to encapsulate maxFrameExtentForSlowPathCall then you&apos;re just making the code unnecessarily complex.

That, and what you&apos;re doing is *just plain wrong*.  There is no such thing as maxFrameExtentForSlowPathCall for the FTL and there never will be.  CodeBlocks may encapsulate FTL compilations.  Therefore, CodeBlock should not refer to maxFrameExtentForSlowPathCall.  Any mention of maxFrameExtentForSlowPathCall anywhere in CodeBlock.h or CodeBlock.cpp will smell fishy.

&gt; 
&gt; 
&gt; &gt; &gt; &gt;&gt; Source/JavaScriptCore/interpreter/JSStackInlines.h:71
&gt; &gt; &gt; &gt;&gt; +        neededRegisters += codeBlock-&gt;frameExtentSizeInRegisters();
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Isn&apos;t this wrong for DFG code?
&gt; &gt; &gt; 
&gt; &gt; &gt; How so?  CodeBlock::frameExtentSizeInRegisters() is computed from CodeBlock::frameRegisterCount(), which in turn is computed from jitCode()-&gt;dfgCommon()-&gt;frameRegisterCount if jitType() is DFGJIT.  Or are you referring to something else?
&gt; &gt; 
&gt; &gt; Aren&apos;t you doing a stack check?
&gt; &gt; 
&gt; &gt; There are at least two notions of frame register count:
&gt; &gt; 
&gt; &gt; A) The amount you need to check.
&gt; &gt; 
&gt; &gt; B) The place where you put SP.
&gt; &gt; 
&gt; &gt; In DFG, (A) may be greater than (B).
&gt; &gt; 
&gt; &gt; frameRegisterCount() returns the second one (where to put SP).  Therefore, it&apos;s not appropriate for stack checks.
&gt; 
&gt; Ok, this is interesting.  Why is it not OK to set the SP to the same value as the first one (the worst case)?  Is it for space usage efficiency, or is there some other reason?

Because that would be inefficient. An optimizing compiler should set SP once - at the top of the prologue - and never change it. It should make calls from wherever it had set SP in the prologue. If it sets SP to some pessimistically large value then you&apos;re wasting stack space, leading to degraded cache locality and higher likelihood of conservative GC pathologies.

&gt; 
&gt; &gt; As an aside, why does this do a stack check?  Maybe the callee should always do the stack check and then you won&apos;t have this problem?
&gt; 
&gt; My understanding is that this entryCheck() simplifies the work for the callToJavaScript() thunk.  It ensures that we have enough stack capacity so that callToJavaScript() is guaranteed to be successful and need not do its own checks.

Then why can&apos;t it just do the minimum amount of checking needed to prove that callToJavaScript() won&apos;t access garbage memory?  I don&apos;t understand why it has to know anything about the callee codeBlock&apos;s stack usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960546</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 09:52:20 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; The *entire point* of frameRegisterCount() is that it should already include maxFrameExtentForSlowPathCall.

*This* is the piece of detail I was lacking, and I was getting differing info from other discussions with different folks.  I’m proceed with this being the plan.


&gt; &gt; &gt; frameRegisterCount() returns the second one (where to put SP).  Therefore, it&apos;s not appropriate for stack checks.
&gt; &gt; 
&gt; &gt; Ok, this is interesting.  Why is it not OK to set the SP to the same value as the first one (the worst case)?  Is it for space usage efficiency, or is there some other reason?
&gt; 
&gt; Because that would be inefficient. An optimizing compiler should set SP once - at the top of the prologue - and never change it. It should make calls from wherever it had set SP in the prologue. If it sets SP to some pessimistically large value then you&apos;re wasting stack space, leading to degraded cache locality and higher likelihood of conservative GC pathologies.

I thought as much but didn’t want to assume just in case there are other reasons (maybe DFG implementation idiosyncrasies).  Good to know that there is no non-obvious reasons.


&gt; &gt; &gt; As an aside, why does this do a stack check?  Maybe the callee should always do the stack check and then you won&apos;t have this problem?
&gt; &gt; 
&gt; &gt; My understanding is that this entryCheck() simplifies the work for the callToJavaScript() thunk.  It ensures that we have enough stack capacity so that callToJavaScript() is guaranteed to be successful and need not do its own checks.
&gt; 
&gt; Then why can&apos;t it just do the minimum amount of checking needed to prove that callToJavaScript() won&apos;t access garbage memory?  I don&apos;t understand why it has to know anything about the callee codeBlock&apos;s stack usage.

I was just implementing the equivalence of the pre-existing code.  I will dig deeper and see if I can rework this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960576</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-17 10:49:03 -0800</bug_when>
    <thetext>&gt; &gt; Then why can&apos;t it just do the minimum amount of checking needed to prove that callToJavaScript() won&apos;t access garbage memory?  I don&apos;t understand why it has to know anything about the callee codeBlock&apos;s stack usage.

&gt; I was just implementing the equivalence of the pre-existing code.  I will dig deeper and see if I can rework this code.

Currently, only function code emits a stack check. If we want to remove the stack check from callToJavaScript (and I think we do), then we need to add stack checks to program and eval code. This is an easy refactoring, and I think we should do it.

We don&apos;t need to do a stack check for the callToJavaScript frame. It&apos;s a simple stack frame with a fixed size. If calling callToJavaScript overflows the stack, we have already lost, because calling any other C/C++ function would have done the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962590</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-23 14:43:02 -0800</bug_when>
    <thetext>Because it has expressed that fixing this bug all in one shot results in a patch that is difficult to follow, I will proceed with the fix in small incremental fixes to make it easier for the reviewer.  The work starts now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219408</attachid>
            <date>2013-12-17 03:33:14 -0800</date>
            <delta_ts>2013-12-17 09:45:19 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-125849.patch</filename>
            <type>text/plain</type>
            <size>34002</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDEzLTEyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGFuZ2UgZnJhbWUgZXh0ZW50cyB0byBwb2ludCB0byB0aGUgbGFzdCBzbG90IGluIHRoZSBmcmFt
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTg0
OS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFJl
bmFtZWQgQ2FsbEZyYW1lOjpmcmFtZUV4dGVudCgpIHRvIHRvcE9mRnJhbWUoKS4KKyAgICAgICAg
LSBDYWxsRnJhbWU6OnRvcE9mRnJhbWUoKSBub3cgcG9pbnRzIHRvIHRoZSBsYXN0IHNsb3QgaW4g
dGhlIGZyYW1lCisgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgb25lIHBhc3QgdGhlIGVuZCBvZiB0
aGUgZnJhbWUuIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoCisgICAgICAgICAgaG93IHRoZSBDIHN0
YWNrIHdvdWxkIGV4cGVjdCBpdCB0byBiZS4KKworICAgICAgICAtIFJlbmFtZWQgc29tZSBKU1N0
YWNrIGZ1bmN0aW9ucyB0byBtb3JlIGFwcHJvcHJpYXRlIG5hbWVzOgorICAgICAgICAgIDEuIGdy
b3cgPT0+IGdyb3dUby4KKyAgICAgICAgICAyLiBzaHJpbmsgPT0+IHNocmlua1RvLgorICAgICAg
ICAgIDMuIGdldEJhc2VPZlN0YWNrID09PiBiYXNlT2ZTdGFjay4KKyAgICAgICAgICA0LiBnZXRU
b3BPZlN0YWNrID09PiB0b3BPZlN0YWNrLgorICAgICAgICAgIDUuIHJlbGVhc2VFeGNlc3NDYXBh
Y2l0eSA9PT4gcmVsZWFzZUNvbW1pdHRlZENhcGFjaXR5LgorICAgICAgICAgIDYuIGdldFRvcE9m
RnJhbWUgPT0+IHRvcE9mRnJhbWVGb3IuCisgICAgICAgICAgNy4gZ2V0U3RhcnRPZkZyYW1lID09
PiBzdGFydE9mRnJhbWVGb3IuCisKKyAgICAgICAgLSBNaXNjIGZpeGVzIGluIEpTU3RhY2s6Cisg
ICAgICAgICAgLSBGZW5jZXMgbm93IHdvcmsgaW4gSlNTdGFjazo6cHVzaEZyYW1lKCkgYW5kIHBv
cEZyYW1lKCkgYWdhaW4uCisgICAgICAgICAgLSBGaXhlZCBleGNlc3MgY2FwYWNpdHkgY29tcHV0
YXRpb24gaW4gc2hyaW5rVG8oKS4KKworICAgICAgICAtIFNpbXBsaWZpZWQgc29tZSBzdGFjayBj
aGVja3MgYnkgdXNpbmcgQ2FsbEZyYW1lOjp0b3BPZkZyYW1lKCkgaW5zdGVhZAorICAgICAgICAg
IG9mIGRvaW5nIGEgY29tcHV0YXRpb24gYXQgdGhlIHN0YWNrIGNoZWNrIHNpdGVzIHVzaW5nIGZy
YW1lUmVnaXN0ZXJDb3VudCgpLgorICAgICAgICAgIFdlIGNhbiBlbmhhbmNlIHRvcEZvRnJhbWUo
KSAoaW4gdGhlIGpzQ1N0YWNrIGJyYW5jaCkgdG8gYWxzbyBhY2NvdW50IGZvcgorICAgICAgICAg
IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsIGFuZCBhbGlnbm1lbnQgcGFkZGluZyBsYXRl
ci4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZnJhbWVFeHRlbnRTaXplSW5SZWdpc3RlcnMpOgorICAgICAgICAtIEN1cnJlbnRs
eSwgdGhpcyBqdXN0IHJldHVybnMgdGhlIGVxdWl2YWxlbnQgb2YgZnJhbWVSZWdpc3RlckNvdW50
KCksCisgICAgICAgICAgYnV0IGV2ZW50dWFsbHksIHdlJ2xsIHdhbnQgaXQgdG8gaGFuZGxlIHRo
ZSBhZGRpdGlvbiBvZiB0aGUKKyAgICAgICAgICBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCBhbmQgYWxpZ25tZW50IHBhZGRpbmcgYXMgd2VsbC4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCk6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
dG9wT2ZGcmFtZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpzaXplQW5kQWxsb2NGcmFtZUZvclZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6
SlNTdGFjayk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6On5KU1N0YWNrKToKKyAgICAgICAgKEpT
Qzo6SlNTdGFjazo6Z3Jvd1RvU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpnYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnNhbml0aXplU3Rh
Y2spOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpyZWxlYXNlQ29tbWl0dGVkQ2FwYWNpdHkpOgor
ICAgICAgICAoSlNDOjpKU1N0YWNrOjpkaXNhYmxlRXJyb3JTdGFja1Jlc2VydmUpOgorICAgICAg
ICAqIGludGVycHJldGVyL0pTU3RhY2suaDoKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6YmFzZU9m
U3RhY2spOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpjb250YWluc0FkZHJlc3MpOgorICAgICAg
ICAqIGludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OnRvcE9mRnJhbWVGb3IpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjp0b3BPZlN0YWNrKToKKyAg
ICAgICAgKEpTQzo6SlNTdGFjazo6c3RhcnRPZkZyYW1lRm9yKToKKyAgICAgICAgKEpTQzo6SlNT
dGFjazo6ZW50cnlDaGVjayk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnB1c2hGcmFtZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RhY2s6OnBvcEZyYW1lKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6
c2hyaW5rVG8pOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpncm93VG8pOgorICAgICAgICAoSlND
OjpKU1N0YWNrOjp1cGRhdGVTdGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6aW5z
dGFsbEZlbmNlKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6dmFsaWRhdGVGZW5jZSk6CisgICAg
ICAgIChKU0M6OkpTU3RhY2s6Omluc3RhbGxUcmFwc0FmdGVyRnJhbWUpOgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgIC0gRml4ZWQgY2FsbFRvSmF2YVNjcmlw
dCgpIHRvIGV4cGVjdCB0b3BPZlN0YWNrIHRvIHBvaW50IHRvIHRoZSBsYXN0CisgICAgICAgICAg
c2xvdCBpbiB0aGUgdG9wQ2FsbEZyYW1lIGluc3RlYWQgb2YgdGhlIHNsb3QgcGFzdCB0aGUgZW5k
IG9mIHRoZQorICAgICAgICAgIGZyYW1lLgorCisgICAgICAgICogcnVudGltZS9Db21tb25TbG93
UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKToK
KwogMjAxMy0xMi0xNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEF2b2lkIGluZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBjdXN0b20gZ2V0dGVycwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDE2MDY2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzg2LDYgKzMzODYsMTIgQEAgdW5zaWduZWQgQ29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogICAgIH0KIH0KIAorc2l6ZV90IENvZGVCbG9jazo6ZnJh
bWVFeHRlbnRTaXplSW5SZWdpc3RlcnMoKQoreworICAgIHNpemVfdCBleHRlbnQgPSAtdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50KCkgLSAxKS5vZmZzZXQoKTsKKyAg
ICByZXR1cm4gZXh0ZW50OworfQorCiBzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5l
Q29kZVNpemUoKQogewogICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6
OkNvZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1fdm0gb3IgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjA2NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkwMSw2ICs5MDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICB1bnNpZ25lZCBmcmFt
ZVJlZ2lzdGVyQ291bnQoKTsKKyAgICBzaXplX3QgZnJhbWVFeHRlbnRTaXplSW5SZWdpc3RlcnMo
KTsKIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUu
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZp
c2lvbiAxNjA2NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRy
eShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0
IGtlcHQgcnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgogICAgIAogICAgIHVuc2lnbmVkIGZy
YW1lU2l6ZSA9IGppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRp
b25BbmRFeGl0KCk7Ci0gICAgaWYgKCF2bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhl
Yy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVTaXplKS5vZmZzZXQo
KV0pKSB7CisgICAgaWYgKCF2bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3Jvd1RvKCZleGVjLT5y
ZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemUgLSAxKS5vZmZzZXQo
KV0pKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBk
YXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7
CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE2MDY2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsMTEgKzExNiwxMSBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAg
cmV0dXJuIENvZGVPcmlnaW4obG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwogfQogCi1SZWdp
c3RlciogQ2FsbEZyYW1lOjpmcmFtZUV4dGVudEludGVybmFsKCkKK1JlZ2lzdGVyKiBDYWxsRnJh
bWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0
aGlzLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICByZXR1cm4gcmVn
aXN0ZXJzKCkgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPmZyYW1lUmVnaXN0
ZXJDb3VudCgpKS5vZmZzZXQoKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJzKCkgLSBjb2RlQmxvY2st
PmZyYW1lRXh0ZW50U2l6ZUluUmVnaXN0ZXJzKCk7CiB9CiAKIEpTR2xvYmFsT2JqZWN0KiBDYWxs
RnJhbWU6OnZtRW50cnlHbG9iYWxPYmplY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTYwNjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzcsMTQgKzE3NywxNCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIENvZGVPcmln
aW4oMCkgaWYgd2UncmUgaW4gbmF0aXZlIGNvZGUuCiAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbigpOwogCi0gICAgICAgIFJlZ2lzdGVyKiBmcmFtZUV4dGVudCgpCisgICAgICAgIFJlZ2lz
dGVyKiB0b3BPZkZyYW1lKCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzVk1FbnRyeVNl
bnRpbmVsKCkgfHwgIWNvZGVCbG9jaygpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWdpc3Rl
cnMoKSAtIDE7Ci0gICAgICAgICAgICByZXR1cm4gZnJhbWVFeHRlbnRJbnRlcm5hbCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiByZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIHJldHVybiB0b3BP
ZkZyYW1lSW50ZXJuYWwoKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBSZWdpc3RlciogZnJh
bWVFeHRlbnRJbnRlcm5hbCgpOworICAgICAgICBSZWdpc3RlciogdG9wT2ZGcmFtZUludGVybmFs
KCk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVu
dFZQQygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE2MDY2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBDYWxsRnJhbWUqIHNpemVBbmRBbGxvY0ZyYW1lRm9yVmFyYXJncyhDCiAg
ICAgaWYgKCFhcmd1bWVudHMpIHsgLy8gZi5hcHBseSh4LCBhcmd1bWVudHMpLCB3aXRoIGFyZ3Vt
ZW50cyB1bm1vZGlmaWVkLgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKICAgICAgICAg
Q2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgZmlyc3RGcmVlUmVnaXN0ZXIgLSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSAxKTsKLSAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgKyAxIHx8ICFz
dGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgeworICAgICAgICBpZiAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyArIDEgfHwg
IXN0YWNrLT5ncm93VG8obmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CkBAIC0xNjYsNyArMTY2LDcgQEAgQ2FsbEZyYW1lKiBzaXplQW5kQWxsb2NGcmFtZUZvclZhcmFy
Z3MoQwogCiAgICAgaWYgKGFyZ3VtZW50cy5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
IENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyIC0gMSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgLSAxKTsKLSAgICAgICAgaWYgKCFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJl
Z2lzdGVycygpKSkgeworICAgICAgICBpZiAoIXN0YWNrLT5ncm93VG8obmV3Q2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSkpIHsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlv
bihjYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xODIsNyArMTgyLDcgQEAgQ2FsbEZyYW1l
KiBzaXplQW5kQWxsb2NGcmFtZUZvclZhcmFyZ3MoQwogICAgICAgICBBcmd1bWVudHMqIGFyZ3NP
YmplY3QgPSBhc0FyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgICAgICB1bnNpZ25lZCBhcmdDb3Vu
dCA9IGFyZ3NPYmplY3QtPmxlbmd0aChjYWxsRnJhbWUpOwogICAgICAgICBDYWxsRnJhbWUqIG5l
d0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBm
aXJzdEZyZWVSZWdpc3RlciAtIENhbGxGcmFtZTo6b2Zmc2V0Rm9yKGFyZ0NvdW50ICsgMSkpOwot
ICAgICAgICBpZiAoYXJnQ291bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2st
Pmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKKyAgICAgICAgaWYgKGFyZ0NvdW50
ID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNrLT5ncm93VG8obmV3Q2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihjYWxsRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xOTMsNyArMTkzLDcgQEAgQ2FsbEZy
YW1lKiBzaXplQW5kQWxsb2NGcmFtZUZvclZhcmFyZ3MoQwogICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkoYXJndW1lbnRzKTsKICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBhcnJh
eS0+bGVuZ3RoKCk7CiAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1l
OjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyIC0gQ2Fs
bEZyYW1lOjpvZmZzZXRGb3IoYXJnQ291bnQgKyAxKSk7Ci0gICAgICAgIGlmIChhcmdDb3VudCA+
IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJl
Z2lzdGVycygpKSkgeworICAgICAgICBpZiAoYXJnQ291bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3Vt
ZW50cyB8fCAhc3RhY2stPmdyb3dUbyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgewogICAg
ICAgICAgICAgY2FsbEZyYW1lLT52bSgpLnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgY3JlYXRl
U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KQEAgLTIwMyw3ICsyMDMsNyBAQCBDYWxsRnJhbWUqIHNpemVBbmRBbGxvY0ZyYW1l
Rm9yVmFyYXJncyhDCiAgICAgSlNPYmplY3QqIGFyZ09iamVjdCA9IGFzT2JqZWN0KGFyZ3VtZW50
cyk7CiAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBhcmdPYmplY3QtPmdldChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKICAg
ICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlciAtIENhbGxGcmFtZTo6b2Zmc2V0Rm9yKGFy
Z0NvdW50ICsgMSkpOwotICAgIGlmIChhcmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRz
IHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgeworICAgIGlmIChh
cmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFjay0+Z3Jvd1RvKG5ld0Nh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7CiAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4
Y2VwdGlvbihjYWxsRnJhbWUsICBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTkwNCw3ICs5MDQsNyBAQCBmYWlsZWRKU09O
UDoKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVy
LmdldCgpKTsKICAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUodm0ud2F0Y2hk
b2cpOwogCi0gICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKS0+ZXhl
Y3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSwgbV9zdGFjay5nZXRUb3BPZlN0YWNrKCkpOworICAg
ICAgICByZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUoJnZtLCAm
cHJvdG9DYWxsRnJhbWUsIG1fc3RhY2sudG9wT2ZTdGFjaygpKTsKICAgICB9CiAKICAgICBpZiAo
TGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCkBAIC05Njgs
OSArOTY4LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogCiAg
ICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgICAgIGlmIChpc0pTQ2FsbCkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSwgbV9zdGFjay5n
ZXRUb3BPZlN0YWNrKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5leGVjdXRlKCZ2bSwgJnBy
b3RvQ2FsbEZyYW1lLCBtX3N0YWNrLnRvcE9mU3RhY2soKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjYWxsVG9OYXRpdmVGdW5jdGlvbihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0udG9wQ2Fs
bEZyYW1lLCAmcHJvdG9DYWxsRnJhbWUsIG1fc3RhY2suZ2V0VG9wT2ZTdGFjaygpKSk7CisgICAg
ICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbFRvTmF0aXZlRnVuY3Rpb24ocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKSwgJnZtLnRvcENh
bGxGcmFtZSwgJnByb3RvQ2FsbEZyYW1lLCBtX3N0YWNrLnRvcE9mU3RhY2soKSkpOwogICAgIH0K
IAogICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIo
KSkKQEAgLTEwMzYsOSArMTAzNiw5IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNv
bnN0cnVjdCgKIAogICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlLgogICAgICAgICBpZiAoaXNK
U0NvbnN0cnVjdCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCktPmV4ZWN1dGUoJnZt
LCAmcHJvdG9DYWxsRnJhbWUsIG1fc3RhY2suZ2V0VG9wT2ZTdGFjaygpKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yQ29uc3RydWN0KCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUsIG1fc3Rh
Y2sudG9wT2ZTdGFjaygpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBK
U1ZhbHVlOjpkZWNvZGUoY2FsbFRvTmF0aXZlRnVuY3Rpb24ocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0udG9wQ2FsbEZyYW1lLCAmcHJv
dG9DYWxsRnJhbWUsIG1fc3RhY2suZ2V0VG9wT2ZTdGFjaygpKSk7CisgICAgICAgICAgICByZXN1
bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbFRvTmF0aXZlRnVuY3Rpb24ocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0udG9wQ2FsbEZyYW1l
LCAmcHJvdG9DYWxsRnJhbWUsIG1fc3RhY2sudG9wT2ZTdGFjaygpKSk7CiAKICAgICAgICAgICAg
IGlmICghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CkBAIC0xMTA4LDcgKzExMDgsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAgICAgICAgIFNhbXBsaW5nVG9vbDo6
Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CiAgICAgICAgIFdhdGNoZG9n
OjpTY29wZSB3YXRjaGRvZ1Njb3BlKHZtLndhdGNoZG9nKTsKIAotICAgICAgICByZXN1bHQgPSBj
bG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+ZXhl
Y3V0ZSgmdm0sIGNsb3N1cmUucHJvdG9DYWxsRnJhbWUsIG1fc3RhY2suZ2V0VG9wT2ZTdGFjaygp
KTsKKyAgICAgICAgcmVzdWx0ID0gY2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsKCktPmV4ZWN1dGUoJnZtLCBjbG9zdXJlLnByb3RvQ2FsbEZyYW1lLCBt
X3N0YWNrLnRvcE9mU3RhY2soKSk7CiAgICAgfQogCiAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBw
cm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgICAgICBTYW1wbGluZ1Rv
b2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwogICAgICAgICBXYXRj
aGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZSh2bS53YXRjaGRvZyk7CiAKLSAgICAgICAgcmVzdWx0
ID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpLT5leGVjdXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1l
LCBtX3N0YWNrLmdldFRvcE9mU3RhY2soKSk7CisgICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVy
YXRlZEpJVENvZGUoKS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSwgbV9zdGFjay50b3BP
ZlN0YWNrKCkpOwogICAgIH0KIAogICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2
bS5lbmFibGVkUHJvZmlsZXIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDE2MDY2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCBKU1N0YWNrOjpKU1N0YWNrKFZNJiB2bSwgc2l6ZV90IGNhcGFjaXR5CiAgICAgdXBk
YXRlU3RhY2tMaW1pdChoaWdoQWRkcmVzcygpKTsKICAgICBtX2NvbW1pdEVuZCA9IGhpZ2hBZGRy
ZXNzKCk7CiAgICAgCi0gICAgbV9sYXN0U3RhY2tUb3AgPSBnZXRCYXNlT2ZTdGFjaygpOworICAg
IG1fbGFzdFN0YWNrVG9wID0gYmFzZU9mU3RhY2soKTsKIAogICAgIGRpc2FibGVFcnJvclN0YWNr
UmVzZXJ2ZSgpOwogCkBAIC02Miw2MSArNjIsNjIgQEAgSlNTdGFjazo6SlNTdGFjayhWTSYgdm0s
IHNpemVfdCBjYXBhY2l0eQogCiBKU1N0YWNrOjp+SlNTdGFjaygpCiB7Ci0gICAgdm9pZCogaGln
aEFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjaGFyKj4obV9y
ZXNlcnZhdGlvbi5iYXNlKCkpICsgbV9yZXNlcnZhdGlvbi5zaXplKCkpOwotICAgIG1fcmVzZXJ2
YXRpb24uZGVjb21taXQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9jb21taXRFbmQpLCByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihoaWdoQWRkcmVzcykgLSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihtX2NvbW1pdEVuZCkpOwotICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KC0ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaGlnaEFkZHJlc3MpIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9jb21taXRFbmQpKSk7CisgICAgc2l6ZV90IHN0YWNrQ2FwYWNpdHkgPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihiYXNlT2ZTdGFjaygpKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fY29tbWl0RW5kKTsKKyAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fY29tbWl0RW5kKSwgc3RhY2tDYXBhY2l0eSk7CisgICAgYWRk
VG9Db21taXR0ZWRCeXRlQ291bnQoLXN0YWNrQ2FwYWNpdHkpOwogICAgIG1fcmVzZXJ2YXRpb24u
ZGVhbGxvY2F0ZSgpOwogfQogCi1ib29sIEpTU3RhY2s6Omdyb3dTbG93Q2FzZShSZWdpc3Rlciog
bmV3RW5kKQorYm9vbCBKU1N0YWNrOjpncm93VG9TbG93Q2FzZShSZWdpc3RlciogbmV3VG9wT2ZT
dGFjaykKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgY29tbWl0dGVkIGVub3VnaCBtZW1v
cnkgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QsCiAgICAgLy8ganVzdCB1cGRhdGUgdGhlIGVuZCBw
b2ludGVyIGFuZCByZXR1cm4uCi0gICAgaWYgKG5ld0VuZCA+PSBtX2NvbW1pdEVuZCkgewotICAg
ICAgICB1cGRhdGVTdGFja0xpbWl0KG5ld0VuZCk7CisgICAgaWYgKG5ld1RvcE9mU3RhY2sgPj0g
bV9jb21taXRFbmQpIHsKKyAgICAgICAgdXBkYXRlU3RhY2tMaW1pdChuZXdUb3BPZlN0YWNrKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gQ29tcHV0ZSB0aGUgY2h1bmsg
c2l6ZSBvZiBhZGRpdGlvbmFsIG1lbW9yeSB0byBjb21taXQsIGFuZCBzZWUgaWYgd2UKICAgICAv
LyBoYXZlIGl0IGlzIHN0aWxsIHdpdGhpbiBvdXIgYnVkZ2V0LiBJZiBub3QsIHdlJ2xsIGZhaWwg
dG8gZ3JvdyBhbmQKICAgICAvLyByZXR1cm4gZmFsc2UuCi0gICAgbG9uZyBkZWx0YSA9IHJvdW5k
VXBBbGxvY2F0aW9uU2l6ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgLSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdFbmQpLCBjb21taXRTaXplKTsKLSAgICBpZiAocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpIC0gZGVsdGEgPD0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4obV91c2VhYmxlRW5kKSkKKyAgICBsb25nIGRlbHRhID0gcm91bmRVcEFsbG9j
YXRpb25TaXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG5ld1RvcE9mU3RhY2spLCBjb21taXRTaXplKTsKKyAgICBjaGFyKiBu
ZXdDb21taXRFbmQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgLSBkZWx0
YTsKKyAgICBpZiAobmV3Q29tbWl0RW5kIDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV91c2Vh
YmxlRW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gT3RoZXJ3aXNlLCB0aGUg
Z3Jvd3RoIGlzIHN0aWxsIHdpdGhpbiBvdXIgYnVkZ2V0LiBHbyBhaGVhZCBhbmQgY29tbWl0CiAg
ICAgLy8gaXQgYW5kIHJldHVybiB0cnVlLgotICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSAtIGRlbHRhLCBkZWx0YSk7CisgICAgbV9y
ZXNlcnZhdGlvbi5jb21taXQobmV3Q29tbWl0RW5kLCBkZWx0YSk7CiAgICAgYWRkVG9Db21taXR0
ZWRCeXRlQ291bnQoZGVsdGEpOwotICAgIG1fY29tbWl0RW5kID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgLSBkZWx0
YSk7Ci0gICAgdXBkYXRlU3RhY2tMaW1pdChuZXdFbmQpOworICAgIG1fY29tbWl0RW5kID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8UmVnaXN0ZXIqPihuZXdDb21taXRFbmQpOworICAgIHVwZGF0ZVN0
YWNrTGltaXQobmV3VG9wT2ZTdGFjayk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSlNT
dGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZh
dGl2ZVJvb3RzKQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChnZXRCYXNlT2ZTdGFjaygp
LCBnZXRUb3BPZlN0YWNrKCkpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZCh0b3BPZlN0YWNr
KCksIGJhc2VPZlN0YWNrKCkpOwogfQogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRp
bmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogewotICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChnZXRCYXNlT2ZTdGFjaygpLCBnZXRUb3BPZlN0YWNrKCks
IGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRk
KGJhc2VPZlN0YWNrKCksIHRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tz
KTsKIH0KIAogdm9pZCBKU1N0YWNrOjpzYW5pdGl6ZVN0YWNrKCkKIHsKLSAgICBBU1NFUlQoZ2V0
VG9wT2ZTdGFjaygpIDw9IGdldEJhc2VPZlN0YWNrKCkpOworICAgIEFTU0VSVCh0b3BPZlN0YWNr
KCkgPD0gYmFzZU9mU3RhY2soKSk7CiAgICAgCi0gICAgaWYgKG1fbGFzdFN0YWNrVG9wIDwgZ2V0
VG9wT2ZTdGFjaygpKSB7CisgICAgaWYgKG1fbGFzdFN0YWNrVG9wIDwgdG9wT2ZTdGFjaygpKSB7
CiAgICAgICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9sYXN0U3Rh
Y2tUb3ApOwotICAgICAgICBjaGFyKiBlbmQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnZXRU
b3BPZlN0YWNrKCkpOworICAgICAgICBjaGFyKiBlbmQgPSByZWludGVycHJldF9jYXN0PGNoYXIq
Pih0b3BPZlN0YWNrKCkpOwogICAgICAgICBtZW1zZXQoYmVnaW4sIDAsIGVuZCAtIGJlZ2luKTsK
ICAgICB9CiAgICAgCi0gICAgbV9sYXN0U3RhY2tUb3AgPSBnZXRUb3BPZlN0YWNrKCk7CisgICAg
bV9sYXN0U3RhY2tUb3AgPSB0b3BPZlN0YWNrKCk7CiB9CiAKLXZvaWQgSlNTdGFjazo6cmVsZWFz
ZUV4Y2Vzc0NhcGFjaXR5KCkKK3ZvaWQgSlNTdGFjazo6cmVsZWFzZUNvbW1pdHRlZENhcGFjaXR5
KCkKIHsKICAgICBwdHJkaWZmX3QgZGVsdGEgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
aGlnaEFkZHJlc3MoKSkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9jb21taXRFbmQp
OwogICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQobV9jb21taXRFbmQsIGRlbHRhKTsKQEAgLTE1
OCw4ICsxNTksOCBAQCB2b2lkIEpTU3RhY2s6OmRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpCiAg
ICAgLy8gZW5hYmxlZCB0aGUgcmVzZXJ2ZSB3YXMgbm90IHByZXZpb3VzbHkgaW4gdXNlLiBIZW5j
ZSwgaXQgaXMgc2FmZSB0bwogICAgIC8vIHNocmluayBiYWNrIHRvIHRoYXQgbV91c2VhYmxlRW5k
LgogICAgIGlmIChtX2VuZCA8IG1fdXNlYWJsZUVuZCkgewotICAgICAgICBBU1NFUlQobV90b3BD
YWxsRnJhbWUtPmZyYW1lRXh0ZW50KCkgPj0gbV91c2VhYmxlRW5kKTsKLSAgICAgICAgc2hyaW5r
KG1fdXNlYWJsZUVuZCk7CisgICAgICAgIEFTU0VSVChtX3RvcENhbGxGcmFtZS0+dG9wT2ZGcmFt
ZSgpID49IG1fdXNlYWJsZUVuZCk7CisgICAgICAgIHNocmlua1RvKG1fdXNlYWJsZUVuZCk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmgJKHJldmlzaW9uIDE2MDY2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDIxICs4NCwyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAgICAgICAgIHZv
aWQgc2FuaXRpemVTdGFjaygpOwogCi0gICAgICAgIFJlZ2lzdGVyKiBnZXRCYXNlT2ZTdGFjaygp
IGNvbnN0CisgICAgICAgIFJlZ2lzdGVyKiBiYXNlT2ZTdGFjaygpIGNvbnN0CiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBoaWdoQWRkcmVzcygpIC0gMTsKKyAgICAgICAgICAgIHJldHVy
biBoaWdoQWRkcmVzcygpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBoaWdoQWRkcmVzcygpIC0gbG93QWRkcmVzcygpOyB9CiAKLSAgICAgICAgYm9v
bCBncm93KFJlZ2lzdGVyKik7CisgICAgICAgIGJvb2wgZ3Jvd1RvKFJlZ2lzdGVyKik7CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IGNvbW1pdHRlZEJ5dGVDb3VudCgpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICAgICAgUmVnaXN0ZXIq
IGdldFRvcE9mRnJhbWUoQ2FsbEZyYW1lKik7Ci0gICAgICAgIFJlZ2lzdGVyKiBnZXRTdGFydE9m
RnJhbWUoQ2FsbEZyYW1lKik7Ci0gICAgICAgIFJlZ2lzdGVyKiBnZXRUb3BPZlN0YWNrKCk7Cisg
ICAgICAgIFJlZ2lzdGVyKiB0b3BPZkZyYW1lRm9yKENhbGxGcmFtZSopOworICAgICAgICBSZWdp
c3RlciogdG9wT2ZTdGFjaygpOwogCiAgICAgICAgIGJvb2wgZW50cnlDaGVjayhjbGFzcyBDb2Rl
QmxvY2sqLCBpbnQpOwogCkBAIC0xMDYsNyArMTA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBwb3BGcmFtZShDYWxsRnJhbWUqKTsKIAotICAgICAgICBib29sIGNvbnRhaW5z
QWRkcmVzcyhSZWdpc3RlciogYWRkcmVzcykgeyByZXR1cm4gKGxvd0FkZHJlc3MoKSA8PSBhZGRy
ZXNzICYmIGFkZHJlc3MgPD0gaGlnaEFkZHJlc3MoKSk7IH0KKyAgICAgICAgYm9vbCBjb250YWlu
c0FkZHJlc3MoUmVnaXN0ZXIqIGFkZHJlc3MpIHsgcmV0dXJuIChsb3dBZGRyZXNzKCkgPD0gYWRk
cmVzcyAmJiBhZGRyZXNzIDwgaGlnaEFkZHJlc3MoKSk7IH0KIAogICAgICAgICB2b2lkIGVuYWJs
ZUVycm9yU3RhY2tSZXNlcnZlKCk7CiAgICAgICAgIHZvaWQgZGlzYWJsZUVycm9yU3RhY2tSZXNl
cnZlKCk7CkBAIC0xNDAsMTMgKzEzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUo
REVCVUdfSlNTVEFDSykKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZ2VuZXJhdGVGZW5jZVZhbHVl
KHNpemVfdCBhcmdJbmRleCk7CiAgICAgICAgIHZvaWQgaW5zdGFsbFRyYXBzQWZ0ZXJGcmFtZShD
YWxsRnJhbWUqKTsKKyAgICAgICAgUmVnaXN0ZXIqIHN0YXJ0T2ZGcmFtZUZvcihDYWxsRnJhbWUq
KTsKICNlbHNlCiAgICAgICAgIHZvaWQgaW5zdGFsbFRyYXBzQWZ0ZXJGcmFtZShDYWxsRnJhbWUq
KSB7IH0KICNlbmRpZgogCi0gICAgICAgIGJvb2wgZ3Jvd1Nsb3dDYXNlKFJlZ2lzdGVyKik7Ci0g
ICAgICAgIHZvaWQgc2hyaW5rKFJlZ2lzdGVyKik7Ci0gICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vz
c0NhcGFjaXR5KCk7CisgICAgICAgIGJvb2wgZ3Jvd1RvU2xvd0Nhc2UoUmVnaXN0ZXIqKTsKKyAg
ICAgICAgdm9pZCBzaHJpbmtUbyhSZWdpc3RlciopOworICAgICAgICB2b2lkIHJlbGVhc2VDb21t
aXR0ZWRDYXBhY2l0eSgpOwogICAgICAgICB2b2lkIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxv
bmcpOwogCiAgICAgICAgIHZvaWQgdXBkYXRlU3RhY2tMaW1pdChSZWdpc3RlciogbmV3RW5kKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNr
SW5saW5lcy5oCShyZXZpc2lvbiAxNjA2NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjcgKzMzLDI5
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6OmdldFRv
cE9mRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkKK2lubGluZSBSZWdpc3RlciogSlNTdGFjazo6dG9w
T2ZGcmFtZUZvcihDYWxsRnJhbWUqIGZyYW1lKQogewogICAgIGlmIChVTkxJS0VMWSghZnJhbWUp
KQotICAgICAgICByZXR1cm4gZ2V0QmFzZU9mU3RhY2soKTsKLSAgICByZXR1cm4gZnJhbWUtPmZy
YW1lRXh0ZW50KCk7CisgICAgICAgIHJldHVybiBiYXNlT2ZTdGFjaygpOworICAgIHJldHVybiBm
cmFtZS0+dG9wT2ZGcmFtZSgpOwogfQogCi1pbmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6OmdldFRv
cE9mU3RhY2soKQoraW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjp0b3BPZlN0YWNrKCkKIHsKLSAg
ICByZXR1cm4gZ2V0VG9wT2ZGcmFtZShtX3RvcENhbGxGcmFtZSk7CisgICAgcmV0dXJuIHRvcE9m
RnJhbWVGb3IobV90b3BDYWxsRnJhbWUpOwogfQogCi1pbmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6
OmdldFN0YXJ0T2ZGcmFtZShDYWxsRnJhbWUqIGZyYW1lKQorI2lmIEVOQUJMRShERUJVR19KU1NU
QUNLKQoraW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjpzdGFydE9mRnJhbWVGb3IoQ2FsbEZyYW1l
KiBmcmFtZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZnJhbWUtPmNhbGxlckZy
YW1lU2tpcHBpbmdWTUVudHJ5U2VudGluZWwoKTsKLSAgICByZXR1cm4gZ2V0VG9wT2ZGcmFtZShj
YWxsZXJGcmFtZSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGZyYW1lLT5jYWxsZXJG
cmFtZSgpOworICAgIHJldHVybiB0b3BPZkZyYW1lRm9yKGNhbGxlckZyYW1lKTsKIH0KKyNlbmRp
ZgogCiBpbmxpbmUgYm9vbCBKU1N0YWNrOjplbnRyeUNoZWNrKGNsYXNzIENvZGVCbG9jayogY29k
ZUJsb2NrLCBpbnQgYXJnc0NvdW50KQogewotICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBnZXRUb3BP
ZlN0YWNrKCk7CisgICAgUmVnaXN0ZXIqIG9sZFRvcE9mU3RhY2sgPSB0b3BPZlN0YWNrKCk7CiAK
ICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHBhcmFtZXRl
cnM6CiAgICAgc2l6ZV90IHBhZGRlZEFyZ3NDb3VudCA9IGFyZ3NDb3VudDsKQEAgLTYzLDE4ICs2
NSwxNyBAQCBpbmxpbmUgYm9vbCBKU1N0YWNrOjplbnRyeUNoZWNrKGNsYXNzIENvCiAgICAgICAg
ICAgICBwYWRkZWRBcmdzQ291bnQgPSBudW1QYXJhbWV0ZXJzOwogICAgIH0KIAotICAgIFJlZ2lz
dGVyKiBuZXdDYWxsRnJhbWVTbG90ID0gb2xkRW5kIC0gcGFkZGVkQXJnc0NvdW50IC0gKDIgKiBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSArIDE7Ci0KKyAgICAvLyBXZSBuZWVkIDIgQ2Fs
bEZyYW1lSGVhZGVyczogMSBmb3IgdGhlIFZNU2VudGluZWwgZnJhbWUsIDEgZm9yIHRoZSBuZXcg
RnJhbWUuCisgICAgc2l6ZV90IG5lZWRlZFJlZ2lzdGVycyA9IHBhZGRlZEFyZ3NDb3VudCArICgy
ICogSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CisgICAgaWYgKGNvZGVCbG9jaykKKyAg
ICAgICAgbmVlZGVkUmVnaXN0ZXJzICs9IGNvZGVCbG9jay0+ZnJhbWVFeHRlbnRTaXplSW5SZWdp
c3RlcnMoKTsKICNpZiBFTkFCTEUoREVCVUdfSlNTVEFDSykKLSAgICBuZXdDYWxsRnJhbWVTbG90
IC09IEpTU3RhY2s6OkZlbmNlU2l6ZTsKKyAgICBuZWVkZWRSZWdpc3RlcnMgKz0gSlNTdGFjazo6
RmVuY2VTaXplOwogI2VuZGlmCi0KLSAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3Q2FsbEZyYW1l
U2xvdDsKLSAgICBpZiAoISFjb2RlQmxvY2spCi0gICAgICAgIG5ld0VuZCArPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZzZXQoKTsK
KyAgICBSZWdpc3RlciogbmV3VG9wT2ZTdGFjayA9IG9sZFRvcE9mU3RhY2sgLSBuZWVkZWRSZWdp
c3RlcnM7CiAKICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBuZWVkZWQgc3RhY2sgY2Fw
YWNpdHkgdG8gcHVzaCB0aGUgbmV3IGZyYW1lOgotICAgIGlmICghZ3JvdyhuZXdFbmQpKQorICAg
IGlmICghZ3Jvd1RvKG5ld1RvcE9mU3RhY2spKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTgzLDcgKzg0LDcgQEAgaW5saW5lIGJvb2wgSlNTdGFjazo6ZW50
cnlDaGVjayhjbGFzcyBDbwogaW5saW5lIENhbGxGcmFtZSogSlNTdGFjazo6cHVzaEZyYW1lKGNs
YXNzIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgaW50IGFyZ3NDb3VudCwg
SlNPYmplY3QqIGNhbGxlZSkKIHsKICAgICBBU1NFUlQoISFzY29wZSk7Ci0gICAgUmVnaXN0ZXIq
IG9sZEVuZCA9IGdldFRvcE9mU3RhY2soKTsKKyAgICBSZWdpc3Rlciogb2xkVG9wT2ZTdGFjayA9
IHRvcE9mU3RhY2soKTsKIAogICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNl
IGZvciB0aGUgcGFyYW1ldGVyczoKICAgICBzaXplX3QgcGFkZGVkQXJnc0NvdW50ID0gYXJnc0Nv
dW50OwpAQCAtOTMsMjIgKzk0LDI1IEBAIGlubGluZSBDYWxsRnJhbWUqIEpTU3RhY2s6OnB1c2hG
cmFtZShjbGEKICAgICAgICAgICAgIHBhZGRlZEFyZ3NDb3VudCA9IG51bVBhcmFtZXRlcnM7CiAg
ICAgfQogCi0gICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZVNsb3QgPSBvbGRFbmQgLSBwYWRkZWRB
cmdzQ291bnQgLSAoMiAqIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpICsgMTsKKyAgICBz
aXplX3QgbmVlZGVkUmVnaXN0ZXJzRm9yU2VudGluZWwgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOworICAgIFJlZ2lzdGVyKiBuZXdWTVNlbnRpbmVsRnJhbWVTbG90ID0gb2xkVG9wT2ZT
dGFjayAtIG5lZWRlZFJlZ2lzdGVyc0ZvclNlbnRpbmVsOwogCisgICAgc2l6ZV90IG5lZWRlZFJl
Z2lzdGVyc0Zvck5ld0ZyYW1lID0gbmVlZGVkUmVnaXN0ZXJzRm9yU2VudGluZWwgKyBwYWRkZWRB
cmdzQ291bnQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogI2lmIEVOQUJMRShERUJV
R19KU1NUQUNLKQotICAgIG5ld0NhbGxGcmFtZVNsb3QgLT0gSlNTdGFjazo6RmVuY2VTaXplOwor
ICAgIG5lZWRlZFJlZ2lzdGVyc0Zvck5ld0ZyYW1lICs9IEpTU3RhY2s6OkZlbmNlU2l6ZTsKICNl
bmRpZgorICAgIFJlZ2lzdGVyKiBuZXdDYWxsRnJhbWVTbG90ID0gb2xkVG9wT2ZTdGFjayAtIG5l
ZWRlZFJlZ2lzdGVyc0Zvck5ld0ZyYW1lOwogCi0gICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG5ld0Nh
bGxGcmFtZVNsb3Q7Ci0gICAgaWYgKCEhY29kZUJsb2NrKQotICAgICAgICBuZXdFbmQgKz0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoY29kZUJsb2NrLT5mcmFtZVJlZ2lzdGVyQ291bnQoKSkub2Zm
c2V0KCk7CisgICAgUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2sgPSBuZXdDYWxsRnJhbWVTbG90Owor
ICAgIGlmIChjb2RlQmxvY2spCisgICAgICAgIG5ld1RvcE9mU3RhY2sgLT0gY29kZUJsb2NrLT5m
cmFtZUV4dGVudFNpemVJblJlZ2lzdGVycygpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2
ZSB0aGUgbmVlZGVkIHN0YWNrIGNhcGFjaXR5IHRvIHB1c2ggdGhlIG5ldyBmcmFtZToKLSAgICBp
ZiAoIWdyb3cobmV3RW5kKSkKKyAgICBpZiAoIWdyb3dUbyhuZXdUb3BPZlN0YWNrKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBDb21wdXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgVk0g
c2VudGluZWwgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlvbjoKLSAgICBDYWxsRnJhbWUqIG5ld1ZN
RW50cnlTZW50aW5lbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobmV3Q2FsbEZyYW1lU2xvdCAr
IHBhZGRlZEFyZ3NDb3VudCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOworICAgIENh
bGxGcmFtZSogbmV3Vk1FbnRyeVNlbnRpbmVsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShuZXdW
TVNlbnRpbmVsRnJhbWVTbG90KTsKICAgICBBU1NFUlQoISFuZXdWTUVudHJ5U2VudGluZWxGcmFt
ZSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgZnJhbWUgZm9yIHRo
aXMgaW52b2NhdGlvbjoKQEAgLTE1OSwzMiArMTYzLDMyIEBAIGlubGluZSB2b2lkIEpTU3RhY2s6
OnBvcEZyYW1lKENhbGxGcmFtZSoKICAgICAvLyB0aGlzIGNhc2UsIHdlJ3JlIHNocmlua2luZyBh
bGwgdGhlIHdheSB0byB0aGUgYmVnaW5uaW5nIHNpbmNlIHRoZXJlCiAgICAgLy8gYXJlIG5vIG1v
cmUgZnJhbWVzIG9uIHRoZSBzdGFjay4KICAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICBz
aHJpbmsoZ2V0QmFzZU9mU3RhY2soKSk7CisgICAgICAgIHNocmlua1RvKGJhc2VPZlN0YWNrKCkp
OwogCiAgICAgaW5zdGFsbFRyYXBzQWZ0ZXJGcmFtZShjYWxsZXJGcmFtZSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpTU3RhY2s6OnNocmluayhSZWdpc3RlciogbmV3RW5kKQoraW5saW5lIHZvaWQgSlNT
dGFjazo6c2hyaW5rVG8oUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCiB7Ci0gICAgaWYgKG5ld0Vu
ZCA+PSBtX2VuZCkKKyAgICBpZiAobmV3VG9wT2ZTdGFjayA+PSBtX2VuZCkKICAgICAgICAgcmV0
dXJuOwotICAgIHVwZGF0ZVN0YWNrTGltaXQobmV3RW5kKTsKLSAgICBpZiAobV9lbmQgPT0gZ2V0
QmFzZU9mU3RhY2soKSAmJiAobV9jb21taXRFbmQgLSBnZXRCYXNlT2ZTdGFjaygpKSA+PSBtYXhF
eGNlc3NDYXBhY2l0eSkKLSAgICAgICAgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CisgICAgdXBk
YXRlU3RhY2tMaW1pdChuZXdUb3BPZlN0YWNrKTsKKyAgICBpZiAobV9lbmQgPT0gYmFzZU9mU3Rh
Y2soKSAmJiAoYmFzZU9mU3RhY2soKSAtIG1fY29tbWl0RW5kKSA+PSBtYXhFeGNlc3NDYXBhY2l0
eSkKKyAgICAgICAgcmVsZWFzZUNvbW1pdHRlZENhcGFjaXR5KCk7CiB9CiAKLWlubGluZSBib29s
IEpTU3RhY2s6Omdyb3coUmVnaXN0ZXIqIG5ld0VuZCkKK2lubGluZSBib29sIEpTU3RhY2s6Omdy
b3dUbyhSZWdpc3RlciogbmV3VG9wT2ZTdGFjaykKIHsKLSAgICBpZiAobmV3RW5kID49IG1fZW5k
KQorICAgIGlmIChuZXdUb3BPZlN0YWNrID49IG1fZW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZ3Jvd1Nsb3dDYXNlKG5ld0VuZCk7CisgICAgcmV0dXJuIGdyb3dUb1Nsb3dD
YXNlKG5ld1RvcE9mU3RhY2spOwogfQogCi1pbmxpbmUgdm9pZCBKU1N0YWNrOjp1cGRhdGVTdGFj
a0xpbWl0KFJlZ2lzdGVyKiBuZXdFbmQpCitpbmxpbmUgdm9pZCBKU1N0YWNrOjp1cGRhdGVTdGFj
a0xpbWl0KFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQogewotICAgIG1fZW5kID0gbmV3RW5kOwor
ICAgIG1fZW5kID0gbmV3VG9wT2ZTdGFjazsKICNpZiBVU0UoU0VQQVJBVEVfQ19BTkRfSlNfU1RB
Q0spCi0gICAgbV92bS5zZXRKU1N0YWNrTGltaXQobmV3RW5kKTsKKyAgICBtX3ZtLnNldEpTU3Rh
Y2tMaW1pdChuZXdUb3BPZlN0YWNrKTsKICNlbmRpZgogfQogCkBAIC0yMDIsMTEgKzIwNiwxMSBA
QCBpbmxpbmUgSlNWYWx1ZSBKU1N0YWNrOjpnZW5lcmF0ZUZlbmNlVmFsCiAvLyAyLiBXaGVuIHB1
c2hGcmFtZSgpIGlzIGNhbGxlZCwgdGhlIGZlbmNlIGlzIGluc3RhbGxlZCBhZnRlciB0aGUgbWF4
IGV4dGVudAogLy8gICAgb2YgdGhlIHByZXZpb3VzIHRvcENhbGxGcmFtZSBhbmQgdGhlIGxhc3Qg
YXJnIG9mIHRoZSBuZXcgZnJhbWU6CiAvLwotLy8gICAgICAgICAgICAgICAgICAgICB8IC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyBMb3cgbWVtb3J5OiAgICAgICAg
IHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIC8vICAgICAgICAgICAg
ICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogLy8gICAg
ICAgICAgICAgICAgICAgICB8IEZyYW1lIEhlYWRlciBvZiBwcmV2aW91cyBmcmFtZSAgICAgICB8
Ci0vLyAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLXwKIC8vICAgIHRvcENhbGxGcmFtZSAtLT4gfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAvLyAgICAgICAgICAgICAgICAgICAgIHwgTG9jYWxz
IG9mIHByZXZpb3VzIGZyYW1lICAgICAgICAgICAgIHwKIC8vICAgICAgICAgICAgICAgICAgICAg
fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogLy8gICAgICAgICAgICAg
ICAgICAgICB8ICoqKiB0aGUgRmVuY2UgKioqICAgICAgICAgICAgICAgICAgICB8CkBAIC0yMTYs
OSArMjIwLDEwIEBAIGlubGluZSBKU1ZhbHVlIEpTU3RhY2s6OmdlbmVyYXRlRmVuY2VWYWwKIC8v
ICAgICAgICAgICAgICAgICAgICAgfCBBcmdzIG9mIG5ldyBmcmFtZSAgICAgICAgICAgICAgICAg
ICAgfAogLy8gICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS18CiAvLyAgICAgICAgICAgICAgICAgICAgIHwgRnJhbWUgSGVhZGVyIG9mIG5l
dyBmcmFtZSAgICAgICAgICAgIHwKKy8vICAgICAgICAgICBmcmFtZSAtLT4gfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogLy8gICAgICAgICAgICAgICAgICAgICB8LS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0vLyAgICAgICAgICAgZnJhbWUg
LS0+IHwgTG9jYWxzIG9mIG5ldyBmcmFtZSAgICAgICAgICAgICAgICAgIHwKLS8vICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8g
ICAgICAgICAgICAgICAgICAgICB8IExvY2FscyBvZiBuZXcgZnJhbWUgICAgICAgICAgICAgICAg
ICB8CisvLyBIaWdoIG1lbW9yeTogICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKIC8vCiAvLyAzLiBJbiBwb3BGcmFtZSgpIGFuZCBlbHNld2hlcmUsIHdlIGNh
biBjYWxsIEpTU3RhY2s6OnZhbGlkYXRlRmVuY2UoKSB0bwogLy8gICAgYXNzZXJ0IHRoYXQgdGhl
IGZlbmNlIGNvbnRhaW5zIHRoZSB2YWx1ZXMgd2UgZXhwZWN0LgpAQCAtMjI3LDEwICsyMzIsMTEg
QEAgaW5saW5lIHZvaWQgSlNTdGFjazo6aW5zdGFsbEZlbmNlKENhbGxGcgogewogICAgIFVOVVNF
RF9QQVJBTShmdW5jdGlvbik7CiAgICAgVU5VU0VEX1BBUkFNKGxpbmVObyk7Ci0gICAgUmVnaXN0
ZXIqIHN0YXJ0T2ZGcmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisgICAgUmVnaXN0ZXIq
IHN0YXJ0T2ZGcmFtZSA9IHN0YXJ0T2ZGcmFtZUZvcihmcmFtZSk7CiAKICAgICAvLyBUaGUgbGFz
dCBhcmdJbmRleCBpcyBhdDoKLSAgICBzaXplX3QgbWF4SW5kZXggPSBmcmFtZS0+YXJnSW5kZXhG
b3JSZWdpc3RlcihzdGFydE9mRnJhbWUpICsgMTsKKyAgICBzaXplX3QgbWF4SW5kZXggPSBmcmFt
ZS0+YXJnSW5kZXhGb3JSZWdpc3RlcihzdGFydE9mRnJhbWUpOworICAgIEFTU0VSVChtYXhJbmRl
eCA+PSBGZW5jZVNpemUpOwogICAgIHNpemVfdCBzdGFydEluZGV4ID0gbWF4SW5kZXggLSBGZW5j
ZVNpemU7CiAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBtYXhJbmRleDsgKytp
KSB7CiAgICAgICAgIEpTVmFsdWUgZmVuY2VWYWx1ZSA9IGdlbmVyYXRlRmVuY2VWYWx1ZShpKTsK
QEAgLTI0Myw4ICsyNDksOSBAQCBpbmxpbmUgdm9pZCBKU1N0YWNrOjp2YWxpZGF0ZUZlbmNlKENh
bGxGCiAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKICAgICBVTlVTRURfUEFSQU0obGluZU5v
KTsKICAgICBBU1NFUlQoISFmcmFtZS0+c2NvcGUoKSk7Ci0gICAgUmVnaXN0ZXIqIHN0YXJ0T2ZG
cmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7Ci0gICAgc2l6ZV90IG1heEluZGV4ID0gZnJh
bWUtPmFyZ0luZGV4Rm9yUmVnaXN0ZXIoc3RhcnRPZkZyYW1lKSArIDE7CisgICAgUmVnaXN0ZXIq
IHN0YXJ0T2ZGcmFtZSA9IHN0YXJ0T2ZGcmFtZUZvcihmcmFtZSk7CisgICAgc2l6ZV90IG1heElu
ZGV4ID0gZnJhbWUtPmFyZ0luZGV4Rm9yUmVnaXN0ZXIoc3RhcnRPZkZyYW1lKTsKKyAgICBBU1NF
UlQobWF4SW5kZXggPj0gRmVuY2VTaXplKTsKICAgICBzaXplX3Qgc3RhcnRJbmRleCA9IG1heElu
ZGV4IC0gRmVuY2VTaXplOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbWF4
SW5kZXg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGZlbmNlVmFsdWUgPSBnZW5lcmF0ZUZlbmNl
VmFsdWUoaSk7CkBAIC0yNTksMjMgKzI2NiwyMyBAQCBpbmxpbmUgdm9pZCBKU1N0YWNrOjp2YWxp
ZGF0ZUZlbmNlKENhbGxGCiAvLyByZWdpb24gaXMgcmVhZCBhbmQgY29uc3VtZWQgd2l0aG91dCBw
cm9wZXIgaW5pdGlhbGl6YXRpb24uIEFmdGVyIHRoZSB0cmFwCiAvLyB3b3JkcyBhcmUgaW5zdGFs
bGVkLCB0aGUgc3RhY2sgbG9va3MgbGlrZSB0aGlzOgogLy8KLS8vICAgICAgICAgICAgICAgICAg
ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gIExvdyBtZW1vcnk6ICAgICAg
ICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICB8CiAvLyAgICAgICAgICAgICAgICAgICAg
IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKIC8vICAgICAgICAgICAgICAgICAgICAg
fCBGcmFtZSBIZWFkZXIgb2YgZnJhbWUgICAgICAgfAotLy8gICAgICAgICAgICAgICAgICAgICB8
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAvLyAgICB0b3BDYWxsRnJhbWUgLS0+IHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgfC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogLy8gICAgICAgICAgICAgICAgICAgICB8IExv
Y2FscyBvZiBmcmFtZSAgICAgICAgICAgICB8CiAvLyAgICAgICAgICAgICAgICAgICAgIHwtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKIC8vICAgICAgICAgICAgICAgICAgICAgfCAqKiog
VHJhcCB3b3JkcyAqKiogICAgICAgICAgfAogLy8gICAgICAgICAgICAgICAgICAgICB8LS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAvLyAgICAgICAgICAgICAgICAgICAgIHwgVW51c2Vk
IHNwYWNlIC4uLiAgICAgICAgICAgIHwKLS8vICAgICAgICAgICAgICAgICAgICAgfCAuLi4gICAg
ICAgICAgICAgICAgICAgICAgICAgfAorLy8gIEhpZ2ggbWVtb3J5OiAgICAgICB8IC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICB8CiAKIGlubGluZSB2b2lkIEpTU3RhY2s6Omluc3RhbGxUcmFw
c0FmdGVyRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkKIHsKLSAgICBSZWdpc3RlciogdG9wT2ZGcmFt
ZSA9IGdldFRvcE9mRnJhbWUoZnJhbWUpOworICAgIFJlZ2lzdGVyKiB0b3BPZkZyYW1lID0gdG9w
T2ZGcmFtZUZvcihmcmFtZSk7CiAgICAgY29uc3QgaW50IHNpemVPZlRyYXAgPSA2NDsKLSAgICBp
bnQzMl90KiBzdGFydE9mVHJhcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHRvcE9mRnJh
bWUpOworICAgIGludDMyX3QqIHN0YXJ0T2ZUcmFwID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90
Kj4odG9wT2ZGcmFtZSkgLSAxOwogICAgIGludDMyX3QqIGVuZE9mVHJhcCA9IHN0YXJ0T2ZUcmFw
IC0gc2l6ZU9mVHJhcDsKICAgICBpbnQzMl90KiBlbmRPZkNvbW1pdGVkTWVtb3J5ID0gcmVpbnRl
cnByZXRfY2FzdDxpbnQzMl90Kj4obV9jb21taXRFbmQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2MDY2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0YWNrQ2hlY2so
RQogCiAgICAgSlNTdGFjayYgc3RhY2sgPSB2bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCk7CiAKLSAg
ICBpZiAoVU5MSUtFTFkoIXN0YWNrLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGNvZGVCbG9jay0+ZnJhbWVSZWdpc3RlckNvdW50KCkpLm9mZnNldCgpXSkp
KQorICAgIGlmIChVTkxJS0VMWSghc3RhY2suZ3Jvd1RvKGV4ZWMtPnRvcE9mRnJhbWUoKSkpKQog
ICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oY2FsbGVyRnJhbWUsIGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsZXJGcmFtZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE2MDY2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyOCw4ICs0MjgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAg
ICBkYXRhTG9nRigiTnVtIHZhcnMgPSAldS5cbiIsIGV4ZWMtPmNvZGVCbG9jaygpLT5tX251bVZh
cnMpOwogICAgIGRhdGFMb2dGKCJDdXJyZW50IGVuZCBpcyBhdCAlcC5cbiIsIGV4ZWMtPnZtKCku
aW50ZXJwcmV0ZXItPnN0YWNrKCkuZW5kKCkpOwogI2VuZGlmCi0gICAgQVNTRVJUKCFleGVjLT52
bSgpLmludGVycHJldGVyLT5zdGFjaygpLmNvbnRhaW5zQWRkcmVzcygmZXhlYy0+cmVnaXN0ZXJz
KClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzKS5vZmZzZXQoKV0pKTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmludGVycHJldGVy
LT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGV4ZWMtPmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykub2Zmc2V0KCldKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoIXZtLmludGVycHJldGVyLT5zdGFjaygpLmdyb3dUbyhleGVjLT50
b3BPZkZyYW1lKCkpKSkgewogICAgICAgICBleGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKICAg
ICAgICAgQ29tbW9uU2xvd1BhdGhzOjppbnRlcnByZXRlclRocm93SW5DYWxsZXIoZXhlYywgY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKICAgICAgICAgcGMgPSByZXR1cm5Ub1Rocm93
Rm9yVGhyb3duRXhjZXB0aW9uKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9u
IDE2MDY2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgbWFjcm8gZG9D
YWxsVG9KYXZhU2NyaXB0KG1ha2VDYWxsLCBkb1JldAogICAgICAgICBtb3ZlIHRvcE9mU3RhY2ss
IGNmcgogICAgIGVuZAogCi0gICAgc3VicCAoQ2FsbEZyYW1lSGVhZGVyU2xvdHMtMSkqOCwgY2Zy
CisgICAgc3VicCBDYWxsRnJhbWVIZWFkZXJTbG90cyo4LCBjZnIKICAgICBzdG9yZXAgMCwgQXJn
dW1lbnRDb3VudCs0W2Nmcl0KICAgICBzdG9yZXAgMCwgQXJndW1lbnRDb3VudFtjZnJdCiAgICAg
c3RvcmVwIDAsIENhbGxlZSs0W2Nmcl0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNjA2NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIG1hY3JvIGRvQ2FsbFRvSmF2YVNj
cmlwdChtYWtlQ2FsbCwgZG9SZXQKICAgICBmdW5jdGlvblByb2xvZ3VlKGV4dHJhU3RhY2tTcGFj
ZSkKIAogICAgIG1vdmUgdG9wT2ZTdGFjaywgY2ZyCi0gICAgc3VicCAoQ2FsbEZyYW1lSGVhZGVy
U2xvdHMtMSkqOCwgY2ZyCisgICAgc3VicCBDYWxsRnJhbWVIZWFkZXJTbG90cyo4LCBjZnIKICAg
ICBzdG9yZXAgMCwgQXJndW1lbnRDb3VudFtjZnJdCiAgICAgc3RvcmVwIHZtVG9wQ2FsbEZyYW1l
LCBDYWxsZWVbY2ZyXQogICAgIGxvYWRwIFt2bVRvcENhbGxGcmFtZV0sIHRlbXAxCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2
aXNpb24gMTYwNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgQUxXQVlTX0lOTElORSBp
bnQgYXJpdHlDaGVja0ZvcihFeGVjU3RhdAogICAgIGludCBwYWRkZWRNaXNzaW5nQXJndW1lbnRD
b3VudCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
LCBtaXNzaW5nQXJndW1lbnRDb3VudCk7CiAKICNpZiBVU0UoU0VQQVJBVEVfQ19BTkRfSlNfU1RB
Q0spCi0gICAgaWYgKCFzdGFjay0+Z3JvdyhleGVjLT5yZWdpc3RlcnMoKSAtIHBhZGRlZE1pc3Np
bmdBcmd1bWVudENvdW50KSkKKyAgICBpZiAoIXN0YWNrLT5ncm93VG8oZXhlYy0+cmVnaXN0ZXJz
KCkgLSBwYWRkZWRNaXNzaW5nQXJndW1lbnRDb3VudCkpCiAgICAgICAgIHJldHVybiAtMTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YWNrKTsK
</data>
<flag name="review"
          id="243025"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="243030"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>