<?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>118482</bug_id>
          
          <creation_ts>2013-07-08 13:45:24 -0700</creation_ts>
          <short_desc>fourthTier: Change JSStack to use macro to determine stack growth direction</short_desc>
          <delta_ts>2013-11-05 09:02:10 -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>RESOLVED</bug_status>
          <resolution>WONTFIX</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>116888</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>906898</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-08 13:45:24 -0700</bug_when>
    <thetext>Part of changing JSC to use the C Stack &lt;https://bugs.webkit.org/show_bug.cgi?id=116888&gt;.

This patch is to change the direction of the stack direction in JSStack class to be controlled by #ifdef.  Changes to some related classes need to be made as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906910</commentid>
    <comment_count>1</comment_count>
      <attachid>206266</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-08 14:17:45 -0700</bug_when>
    <thetext>Created attachment 206266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906925</commentid>
    <comment_count>2</comment_count>
      <attachid>206266</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-08 15:06:08 -0700</bug_when>
    <thetext>Comment on attachment 206266
Patch

Is it clear that this should be done under #if checks?  This means that we will have a *ton* of code behind such checks.  Seems like it might be better to do this as a giant patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906926</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-08 15:09:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 206266 [details])
&gt; Is it clear that this should be done under #if checks?  This means that we will have a *ton* of code behind such checks.  Seems like it might be better to do this as a giant patch.

Geoff and I talked about this some and agreed that we&apos;d do a lot of smaller patches.  I actually don&apos;t think there will be lots of #ifdef code.  This code abstracts much of the placement of slots relative to the frame pointer.   Therefore I suspect that other code will require both &quot;grows up&quot; and &quot;grows down&quot; code paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906964</commentid>
    <comment_count>4</comment_count>
      <attachid>206266</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-07-08 17:27:17 -0700</bug_when>
    <thetext>Comment on attachment 206266
Patch

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

Let&apos;s not #ifdef like this.

I believe we can use math to avoid a mega-patch. I&apos;ll try to give some examples. This has the advantage of being able to test code incrementally / continuously.

But if we can&apos;t use math, let&apos;s use a mega-patch.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:230
&gt; +        static int argumentOffset(int argument) { return s_firstArgumentOffset + argument; }

Should be something like &quot;return (JSStack::callFrameHeaderSize + 1 + argument) * s_argumentDirection;&quot;.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:231
&gt; +        static int argumentOffsetIncludingThis(int argument) { return s_thisArgumentOffset + argument; }

Should be something like &quot;return (JSStack::callFrameHeaderSize + argument) * s_argumentDirection;&quot;.

&gt; Source/JavaScriptCore/interpreter/JSStack.cpp:145
&gt;  void JSStack::gatherConservativeRoots(ConservativeRoots&amp; conservativeRoots)
&gt;  {
&gt; -    conservativeRoots.add(begin(), getTopOfStack());
&gt; +#if ENABLE(JSC_STACK_GROWS_DOWN)
&gt; +    conservativeRoots.add(getTopOfStack(), highAddress());
&gt; +#else
&gt; +    conservativeRoots.add(lowAddress(), getTopOfStack());
&gt; +#endif
&gt;  }
&gt;  
&gt;  void JSStack::gatherConservativeRoots(ConservativeRoots&amp; conservativeRoots, JITStubRoutineSet&amp; jitStubRoutines, DFGCodeBlocks&amp; dfgCodeBlocks)
&gt;  {
&gt; -    conservativeRoots.add(begin(), getTopOfStack(), jitStubRoutines, dfgCodeBlocks);
&gt; +#if ENABLE(JSC_STACK_GROWS_DOWN)
&gt; +    conservativeRoots.add(getTopOfStack(), highAddress(), jitStubRoutines, dfgCodeBlocks);
&gt; +#else
&gt; +    conservativeRoots.add(lowAddress(), getTopOfStack(), jitStubRoutines, dfgCodeBlocks);
&gt; +#endif
&gt;  }

These should use a helper function that swaps begin and end if they&apos;re out of order. We already need this for the C stack (see MachineThreads::gatherFromCurrentThread), so perhaps it should be built into ConservativeRoots::add.

&gt; Source/JavaScriptCore/interpreter/JSStack.h:70
&gt; +#if ENABLE(JSC_STACK_GROWS_DOWN)
&gt; +            ArgumentCount = 6,
&gt; +            CallerFrame = 5,
&gt; +            Callee = 4,
&gt; +            ScopeChain = 3,
&gt; +            ReturnPC = 2, // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
&gt; +            CodeBlock = 1,
&gt; +#else
&gt;              ArgumentCount = -6,
&gt;              CallerFrame = -5,
&gt;              Callee = -4,
&gt;              ScopeChain = -3,
&gt;              ReturnPC = -2, // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
&gt;              CodeBlock = -1,
&gt; +#endif

These should multiply by a constant like argumentDirection or callFrameDirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906968</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-08 17:43:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 206266 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=206266&amp;action=review
&gt; 
&gt; Let&apos;s not #ifdef like this.
&gt; 
&gt; I believe we can use math to avoid a mega-patch. I&apos;ll try to give some examples. This has the advantage of being able to test code incrementally / continuously.
&gt; 
&gt; But if we can&apos;t use math, let&apos;s use a mega-patch.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/CallFrame.h:230
&gt; &gt; +        static int argumentOffset(int argument) { return s_firstArgumentOffset + argument; }
&gt; 
&gt; Should be something like &quot;return (JSStack::callFrameHeaderSize + 1 + argument) * s_argumentDirection;&quot;.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/CallFrame.h:231
&gt; &gt; +        static int argumentOffsetIncludingThis(int argument) { return s_thisArgumentOffset + argument; }
&gt; 
&gt; Should be something like &quot;return (JSStack::callFrameHeaderSize + argument) * s_argumentDirection;&quot;.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/JSStack.cpp:145
&gt; &gt;  void JSStack::gatherConservativeRoots(ConservativeRoots&amp; conservativeRoots)
&gt; &gt;  {
&gt; &gt; -    conservativeRoots.add(begin(), getTopOfStack());
&gt; &gt; +#if ENABLE(JSC_STACK_GROWS_DOWN)
&gt; &gt; +    conservativeRoots.add(getTopOfStack(), highAddress());
&gt; &gt; +#else
&gt; &gt; +    conservativeRoots.add(lowAddress(), getTopOfStack());
&gt; &gt; +#endif
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  void JSStack::gatherConservativeRoots(ConservativeRoots&amp; conservativeRoots, JITStubRoutineSet&amp; jitStubRoutines, DFGCodeBlocks&amp; dfgCodeBlocks)
&gt; &gt;  {
&gt; &gt; -    conservativeRoots.add(begin(), getTopOfStack(), jitStubRoutines, dfgCodeBlocks);
&gt; &gt; +#if ENABLE(JSC_STACK_GROWS_DOWN)
&gt; &gt; +    conservativeRoots.add(getTopOfStack(), highAddress(), jitStubRoutines, dfgCodeBlocks);
&gt; &gt; +#else
&gt; &gt; +    conservativeRoots.add(lowAddress(), getTopOfStack(), jitStubRoutines, dfgCodeBlocks);
&gt; &gt; +#endif
&gt; &gt;  }
&gt; 
&gt; These should use a helper function that swaps begin and end if they&apos;re out of order. We already need this for the C stack (see MachineThreads::gatherFromCurrentThread), so perhaps it should be built into ConservativeRoots::add.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/JSStack.h:70
&gt; &gt; +#if ENABLE(JSC_STACK_GROWS_DOWN)
&gt; &gt; +            ArgumentCount = 6,
&gt; &gt; +            CallerFrame = 5,
&gt; &gt; +            Callee = 4,
&gt; &gt; +            ScopeChain = 3,
&gt; &gt; +            ReturnPC = 2, // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
&gt; &gt; +            CodeBlock = 1,
&gt; &gt; +#else
&gt; &gt;              ArgumentCount = -6,
&gt; &gt;              CallerFrame = -5,
&gt; &gt;              Callee = -4,
&gt; &gt;              ScopeChain = -3,
&gt; &gt;              ReturnPC = -2, // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
&gt; &gt;              CodeBlock = -1,
&gt; &gt; +#endif
&gt; 
&gt; These should multiply by a constant like argumentDirection or callFrameDirection.

I thought about using a sign constant.  That eliminate much of the #ifdef&apos;s, but the stack committing and recommitting still needs separate paths.

The reason I went down the #ifdef path is that I wanted the final code, that is after we change the direction to be at least as clean as the current code.  I don&apos;t think we&apos;ll want to change the direction again. The difference in the two approaches is what the clean up patch looks like.  With the #ifdef&apos;s, we know what code gets eliminated.  The arithmetic approach requires either placing FIXME comments or remembering OOB.

Been discussing this with Phil and he thinks that this is the least of our worries.  The llint will have to add a negate instruction for register offsets when it reads them from the byte codes. Negation also has to happen for the JITs, but that is done in the generating code.

I&apos;ll post a patch based on arithmetic for comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906983</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-07-08 19:49:00 -0700</bug_when>
    <thetext>&gt; Been discussing this with Phil and he thinks that this is the least of our worries.  The llint will have to add a negate instruction for register offsets when it reads them from the byte codes. Negation also has to happen for the JITs, but that is done in the generating code.

Or we could change the encoded operands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907245</commentid>
    <comment_count>7</comment_count>
      <attachid>206359</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-09 17:23:13 -0700</bug_when>
    <thetext>Created attachment 206359
Updated patch

Limited the #ifdef&apos;s to JSStack files.  The ifdef&apos;s are needed due to doing arithmetic or comparisons with pointers or size_t type values.  In both cases, we can&apos;t use the multiply by -1 or 1 trick.  In some cases, we could create an #ifdef&apos;ed help function to do &lt;= comparisons or pointer arithmetic, but I felt that would obfuscate the reading of the code.

If this patch isn&apos;t acceptable, then I think it is mega patch time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909091</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-16 18:20:30 -0700</bug_when>
    <thetext>Given what was discussed and the difficulty of making several small patches, we will work on one large patch to change the stack growth direction.  That patch will be tracked in https://bugs.webkit.org/show_bug.cgi?id=118758 - &quot;fourthTier: Change JSStack to grow from high to low addresses&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947202</commentid>
    <comment_count>9</comment_count>
      <attachid>206359</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-11-05 09:02:10 -0800</bug_when>
    <thetext>Comment on attachment 206359
Updated patch

Cleared review? from attachment 206359 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206266</attachid>
            <date>2013-07-08 14:17:45 -0700</date>
            <delta_ts>2013-07-09 17:23:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>118482.patch</filename>
            <type>text/plain</type>
            <size>19801</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNDYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDEzLTA3LTA4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGZvdXJ0aFRpZXI6IENoYW5nZSBKU1N0YWNrIHRvIHVzZSBtYWNybyB0byBkZXRlcm1pbmUg
c3RhY2sgZ3Jvd3RoIGRpcmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgI2lmZGVmIHBhdGhzIHRvIEpTU3RhY2sgZm9yIGdyb3dpbmcg
dGhlIHN0YWNrIGZyb20gaGlnaGVyIHRvIGxvd2VyIGFkZHJlc3Nlcy4KKyAgICAgICAgSWZkZWYn
ZWQgbGFyZ2VyIHNlY3Rpb25zIG9mIGNvZGUgd2l0aCB0aGUgaW50ZW50aW9uIHRoYXQgdGhlIG9y
aWdpbmFsLCBzdGFjay1ncm93cy11cCwKKyAgICAgICAgY29kZSB3aWxsIGJlIHJlbW92ZWQgYWxv
bmcgd2l0aCB0aGUgdHJhbnNpdGlvbmFsICNpZmRlZi4gIEFkZGVkIHNvbWUgbmV3IGNvbnN0cnVj
dHMgdG8KKyAgICAgICAgSlNTdGFjayBpbiB0aGUgcHJvY2VzcywgbGlrZSBsb3dBZGRyZXNzKCkg
YW5kIGhpZ2hBZGRyZXNzKCkgd2hpY2ggYXJlIHRoZSBhZGRyZXNzIHJhbmdlcworICAgICAgICBv
ZiB0aGUgY3VycmVudGx5IHJlc2VydmVkIHN0YWNrIHNwYWNlLgorCisgICAgICAgICogaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aW5pdCk6CisgICAg
ICAgIChFeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3VtZW50T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMp
OgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ0luZGV4Rm9yUmVnaXN0ZXIpOgorICAgICAg
ICAqIGludGVycHJldGVyL0pTU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpKU1N0
YWNrKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6fkpTU3RhY2spOgorICAgICAgICAoSlNDOjpK
U1N0YWNrOjpncm93U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnJlbGVhc2VFeGNlc3NDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAgICAgICAoSlNDOjpKU1N0YWNr
OjpnZXRCYXNlT2ZTdGFjayk6CisgICAgICAgIChKU1N0YWNrKToKKyAgICAgICAgKEpTQzo6SlNT
dGFjazo6Z2V0TGltaXRPZlN0YWNrKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RhY2s6OmNvbnRhaW5zQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkpT
U3RhY2s6Omxvd0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpoaWdoQWRkcmVzcyk6
CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnJlc2VydmF0aW9uRW5kKToKKyAgICAgICAgKEpTQzo6
SlNTdGFjazo6c2hyaW5rKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6Z3Jvdyk6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6
Z2V0VG9wT2ZGcmFtZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnB1c2hGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpTU3RhY2s6OnBvcEZyYW1lKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6aW5z
dGFsbFRyYXBzQWZ0ZXJGcmFtZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorCiAyMDEzLTA3
LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGll
cjogR3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZCgpIG1ha2VzIG5vIHNlbnNlIGFueW1vcmUsIGFu
ZCBuZWl0aGVyIGRvZXMgTm9wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTIzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsy
MDgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lLCBpbnQgYXJnYywgSlNPYmplY3QqIGNhbGxlZSkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKGNhbGxlckZyYW1lKTsgLy8gVXNlIG5vQ2FsbGVyKCkgcmF0aGVyIHRoYW4gMCBmb3Ig
dGhlIG91dGVyIGhvc3QgY2FsbCBmcmFtZSBjYWxsZXIuCi0gICAgICAgICAgICBBU1NFUlQoY2Fs
bGVyRnJhbWUgPT0gbm9DYWxsZXIoKSB8fCBjYWxsZXJGcmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFt
ZUZsYWcoKS0+c3RhY2soKS0+ZW5kKCkgPj0gdGhpcyk7CisgICAgICAgICAgICBBU1NFUlQoY2Fs
bGVyRnJhbWUgPT0gbm9DYWxsZXIoKSB8fCBjYWxsZXJGcmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFt
ZUZsYWcoKS0+c3RhY2soKS0+Y29udGFpbnNBZGRyZXNzKHRoaXMpKTsKIAogICAgICAgICAgICAg
c2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBzZXRTY29wZShzY29wZSk7CkBA
IC0yMjYsOCArMjI2LDEzIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gQWNjZXNzIHRv
IGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUg
dG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9CiAgICAg
ICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRo
aXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9CisjaWYgRU5BQkxFKEpTQ19T
VEFDS19HUk9XU19ET1dOKQorICAgICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0KGludCBh
cmd1bWVudCkgeyByZXR1cm4gc19maXJzdEFyZ3VtZW50T2Zmc2V0ICsgYXJndW1lbnQ7IH0KKyAg
ICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoaW50IGFyZ3VtZW50
KSB7IHJldHVybiBzX3RoaXNBcmd1bWVudE9mZnNldCArIGFyZ3VtZW50OyB9CisjZWxzZQogICAg
ICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0KGludCBhcmd1bWVudCkgeyByZXR1cm4gc19m
aXJzdEFyZ3VtZW50T2Zmc2V0IC0gYXJndW1lbnQ7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoaW50IGFyZ3VtZW50KSB7IHJldHVybiBzX3RoaXNBcmd1
bWVudE9mZnNldCAtIGFyZ3VtZW50OyB9CisjZW5kaWYKIAogICAgICAgICAvLyBJbiB0aGUgZm9s
bG93aW5nIChhcmd1bWVudCgpIGFuZCBzZXRBcmd1bWVudCgpKSwgdGhlICdhcmd1bWVudCcKICAg
ICAgICAgLy8gcGFyYW1ldGVyIGlzIHRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnRzIG9mIHRoZSB0
YXJnZXQgZnVuY3Rpb24gb2YKQEAgLTI4Myw4ICsyODgsMTMgQEAgbmFtZXNwYWNlIEpTQyAgewog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEhvc3RDYWxsRnJh
bWVGbGFnID0gMTsKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgc190aGlzQXJndW1lbnRPZmZzZXQgPSAxICsgSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzX2ZpcnN0QXJndW1lbnRP
ZmZzZXQgPSBzX3RoaXNBcmd1bWVudE9mZnNldCArIDE7CisjZWxzZQogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHNfdGhpc0FyZ3VtZW50T2Zmc2V0ID0gLTEgLSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNfZmlyc3RBcmd1bWVudE9mZnNl
dCA9IHNfdGhpc0FyZ3VtZW50T2Zmc2V0IC0gMTsKKyNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwog
ICAgICAgICBKU1N0YWNrKiBzdGFjaygpOwpAQCAtMzA0LDExICszMTQsMTkgQEAgbmFtZXNwYWNl
IEpTQyAgewogICAgICAgICAgICAgLy8gICA9PT4gb2Zmc2V0ID0gcmVnIC0gZnJhbWU7CiAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gcmVnIC0gdGhpcy0+cmVnaXN0ZXJzKCk7CiAKKyNpZiBFTkFC
TEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgICAgICAgICAvLyBUaGUgb2Zmc2V0IGlzIGRl
ZmluZWQgKGJhc2VkIG9uIGFyZ3VtZW50T2Zmc2V0KCkpIHRvIGJlOgorICAgICAgICAgICAgLy8g
ICAgICAgb2Zmc2V0ID0gc19maXJzdEFyZ3VtZW50T2Zmc2V0ICsgYXJnSW5kZXg7CisgICAgICAg
ICAgICAvLyBIZW5jZToKKyAgICAgICAgICAgIC8vICAgICAgIGFyZ0luZGV4ID0gb2Zmc2V0IC0g
c19maXJzdEFyZ3VtZW50T2Zmc2V0OworICAgICAgICAgICAgc2l6ZV90IGFyZ0luZGV4ID0gb2Zm
c2V0IC0gc19maXJzdEFyZ3VtZW50T2Zmc2V0OworI2Vsc2UKICAgICAgICAgICAgIC8vIFRoZSBv
ZmZzZXQgaXMgZGVmaW5lZCAoYmFzZWQgb24gYXJndW1lbnRPZmZzZXQoKSkgdG8gYmU6CiAgICAg
ICAgICAgICAvLyAgICAgICBvZmZzZXQgPSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBhcmdJbmRl
eDsKICAgICAgICAgICAgIC8vIEhlbmNlOgogICAgICAgICAgICAgLy8gICAgICAgYXJnSW5kZXgg
PSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBvZmZzZXQ7CiAgICAgICAgICAgICBzaXplX3QgYXJn
SW5kZXggPSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBvZmZzZXQ7CisjZW5kaWYKICAgICAgICAg
ICAgIHJldHVybiBhcmdJbmRleDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCShyZXZpc2lvbiAxNTIzNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDggKzUwLDEzIEBAIEpTU3RhY2s6OkpTU3RhY2soVk0mIHZtLCBzaXplX3QgY2Fw
YWNpdHkKICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwog
CiAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShyb3VuZFVwQWxs
b2NhdGlvblNpemUoY2FwYWNpdHkgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXplKSwgT1NB
bGxvY2F0b3I6OkpTVk1TdGFja1BhZ2VzKTsKLSAgICBtX2VuZCA9IHN0YXRpY19jYXN0PFJlZ2lz
dGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwotICAgIG1fY29tbWl0RW5kID0gc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisjaWYgRU5BQkxFKEpTQ19TVEFD
S19HUk9XU19ET1dOKQorICAgIG1fZW5kID0gaGlnaEFkZHJlc3MoKTsKKyAgICBtX2NvbW1pdEVu
ZCA9IGhpZ2hBZGRyZXNzKCk7CisjZWxzZQorICAgIG1fZW5kID0gbG93QWRkcmVzcygpOworICAg
IG1fY29tbWl0RW5kID0gbG93QWRkcmVzcygpOworI2VuZGlmCiAKICAgICBkaXNhYmxlRXJyb3JT
dGFja1Jlc2VydmUoKTsKIApAQCAtNjAsMTQgKzY1LDQzIEBAIEpTU3RhY2s6OkpTU3RhY2soVk0m
IHZtLCBzaXplX3QgY2FwYWNpdHkKIAogSlNTdGFjazo6fkpTU3RhY2soKQogeworI2lmIEVOQUJM
RShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICB2b2lkKiBoaWdoQWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPHZvaWQqPihzdGF0aWNfY2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNl
KCkpICsgbV9yZXNlcnZhdGlvbi5zaXplKCkpOworICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQo
cmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCo+KG1fY29tbWl0RW5kKSwgcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaGlnaEFkZHJlc3MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9j
b21taXRFbmQpKTsKKyAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudCgtKHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHZvaWQqPihtX2NvbW1pdEVuZCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGhp
Z2hBZGRyZXNzKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29tbWl0RW5kKSkpOwor
I2Vsc2UKICAgICB2b2lkKiBiYXNlID0gbV9yZXNlcnZhdGlvbi5iYXNlKCk7CiAgICAgbV9yZXNl
cnZhdGlvbi5kZWNvbW1pdChiYXNlLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1p
dEVuZCkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihiYXNlKSk7CiAgICAgYWRkVG9Db21t
aXR0ZWRCeXRlQ291bnQoLShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkg
LSByZWludGVycHJldF9jYXN0PGludHB0cl90PihiYXNlKSkpOworI2VuZGlmCiAgICAgbV9yZXNl
cnZhdGlvbi5kZWFsbG9jYXRlKCk7CiB9CiAKIGJvb2wgSlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKFJl
Z2lzdGVyKiBuZXdFbmQpCiB7CisjaWYgRU5BQkxFKEpTQ19TVEFDS19HUk9XU19ET1dOKQorICAg
IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBjb21taXR0ZWQgZW5vdWdoIG1lbW9yeSB0byBzYXRpc2Z5
IHRoaXMgcmVxdWVzdCwKKyAgICAvLyBqdXN0IHVwZGF0ZSB0aGUgZW5kIHBvaW50ZXIgYW5kIHJl
dHVybi4KKyAgICBpZiAobmV3RW5kID49IG1fY29tbWl0RW5kKSB7CisgICAgICAgIG1fZW5kID0g
bmV3RW5kOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRo
ZSBjaHVuayBzaXplIG9mIGFkZGl0aW9uYWwgbWVtb3J5IHRvIGNvbW1pdCwgYW5kIHNlZSBpZiB3
ZQorICAgIC8vIGhhdmUgaXQgaXMgc3RpbGwgd2l0aGluIG91ciBidWRnZXQuIElmIG5vdCwgd2Un
bGwgZmFpbCB0byBncm93IGFuZAorICAgIC8vIHJldHVybiBmYWxzZS4KKyAgICBsb25nIGRlbHRh
ID0gcm91bmRVcEFsbG9jYXRpb25TaXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0
RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld0VuZCksIGNvbW1pdFNpemUpOworICAg
IGlmIChyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgLSBkZWx0YSA8IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fdXNlYWJsZUVuZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIE90aGVyd2lzZSwgdGhlIGdyb3d0aCBpcyBzdGlsbCB3aXRoaW4gb3VyIGJ1ZGdl
dC4gR28gYWhlYWQgYW5kIGNvbW1pdAorICAgIC8vIGl0IGFuZCByZXR1cm4gdHJ1ZS4KKyAgICBt
X3Jlc2VydmF0aW9uLmNvbW1pdChtX2NvbW1pdEVuZCAtIGRlbHRhLCBkZWx0YSk7CisgICAgYWRk
VG9Db21taXR0ZWRCeXRlQ291bnQoZGVsdGEpOworICAgIG1fY29tbWl0RW5kID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVu
ZCkgLSBkZWx0YSk7CisgICAgbV9lbmQgPSBuZXdFbmQ7CisgICAgcmV0dXJuIHRydWU7CisjZWxz
ZQogICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBjb21taXR0ZWQgZW5vdWdoIG1lbW9yeSB0byBz
YXRpc2Z5IHRoaXMgcmVxdWVzdCwKICAgICAvLyBqdXN0IHVwZGF0ZSB0aGUgZW5kIHBvaW50ZXIg
YW5kIHJldHVybi4KICAgICBpZiAobmV3RW5kIDw9IG1fY29tbWl0RW5kKSB7CkBAIC04OSwyNCAr
MTIzLDQwIEBAIGJvb2wgSlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKFJlZ2lzdGVyKiBuZXcKICAgICBt
X2NvbW1pdEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEpOwogICAgIG1fZW5kID0gbmV3RW5kOwog
ICAgIHJldHVybiB0cnVlOworI2VuZGlmCiB9CiAKIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewotICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCkpOworI2lmIEVO
QUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoZ2V0
VG9wT2ZTdGFjaygpLCBoaWdoQWRkcmVzcygpKTsKKyNlbHNlCisgICAgY29uc2VydmF0aXZlUm9v
dHMuYWRkKGxvd0FkZHJlc3MoKSwgZ2V0VG9wT2ZTdGFjaygpKTsKKyNlbmRpZgogfQogCiB2b2lk
IEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29k
ZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVn
aW4oKSwgZ2V0VG9wT2ZTdGFjaygpLCBqaXRTdHViUm91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOwor
I2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICBjb25zZXJ2YXRpdmVSb290cy5h
ZGQoZ2V0VG9wT2ZTdGFjaygpLCBoaWdoQWRkcmVzcygpLCBqaXRTdHViUm91dGluZXMsIGRmZ0Nv
ZGVCbG9ja3MpOworI2Vsc2UKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQobG93QWRkcmVzcygp
LCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisjZW5k
aWYKIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQogewotICAgIHB0
cmRpZmZfdCBkZWx0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2NvbW1pdEVuZCkg
LSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwotICAg
IG1fcmVzZXJ2YXRpb24uZGVjb21taXQobV9yZXNlcnZhdGlvbi5iYXNlKCksIGRlbHRhKTsKKyNp
ZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgcHRyZGlmZl90IGRlbHRhID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhpZ2hBZGRyZXNzKCkpIC0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG1fY29tbWl0RW5kKTsKKyAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KG1f
Y29tbWl0RW5kLCBkZWx0YSk7CisgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoLWRlbHRhKTsK
KyAgICBtX2NvbW1pdEVuZCA9IGhpZ2hBZGRyZXNzKCk7CisjZWxzZQorICAgIHB0cmRpZmZfdCBk
ZWx0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obG93QWRkcmVzcygpKTsKKyAgICBtX3Jlc2VydmF0aW9uLmRl
Y29tbWl0KGxvd0FkZHJlc3MoKSwgZGVsdGEpOwogICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50
KC1kZWx0YSk7CiAgICAgbV9jb21taXRFbmQgPSBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVz
ZXJ2YXRpb24uYmFzZSgpKTsKKyNlbmRpZgogfQogCiB2b2lkIEpTU3RhY2s6OmluaXRpYWxpemVU
aHJlYWRpbmcoKQpAQCAtMTM0LDYgKzE4NCwyMCBAQCB2b2lkIEpTU3RhY2s6OmVuYWJsZUVycm9y
U3RhY2tSZXNlcnZlKCkKIAogdm9pZCBKU1N0YWNrOjpkaXNhYmxlRXJyb3JTdGFja1Jlc2VydmUo
KQogeworI2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICBjaGFyKiB1c2VhYmxl
RW5kID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzZXJ2YXRpb25FbmQoKSkgKyBjb21taXRT
aXplOworICAgIG1fdXNlYWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4o
dXNlYWJsZUVuZCk7CisKKyAgICAvLyBCeSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgd2UgYXJlIGd1
YXJhbnRlZWQgdG8gYmUgZGVzdHJ1Y3RpbmcgdGhlIGxhc3QKKyAgICAvLyBJbnRlcnByZXRlcjo6
RXJyb3JIYW5kbGluZ01vZGUgdGhhdCBlbmFibGVkIHRoaXMgcmVzZXJ2ZSBpbiB0aGUgZmlyc3QK
KyAgICAvLyBwbGFjZS4gVGhhdCBtZWFucyB0aGUgc3RhY2sgc3BhY2UgYmV5b25kIG1fdXNlYWJs
ZUVuZCBiZWZvcmUgd2UKKyAgICAvLyBlbmFibGVkIHRoZSByZXNlcnZlIHdhcyBub3QgcHJldmlv
dXNseSBpbiB1c2UuIEhlbmNlLCBpdCBpcyBzYWZlIHRvCisgICAgLy8gc2hyaW5rIGJhY2sgdG8g
dGhhdCBtX3VzZWFibGVFbmQuCisgICAgaWYgKG1fZW5kIDwgbV91c2VhYmxlRW5kKSB7CisgICAg
ICAgIEFTU0VSVChtX3RvcENhbGxGcmFtZS0+ZnJhbWVFeHRlbnQoKSA+PSBtX3VzZWFibGVFbmQp
OworICAgICAgICBzaHJpbmsobV91c2VhYmxlRW5kKTsKKyAgICB9CisjZWxzZQogICAgIGNoYXIq
IHVzZWFibGVFbmQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXNlcnZhdGlvbkVuZCgpKSAt
IGNvbW1pdFNpemU7CiAgICAgbV91c2VhYmxlRW5kID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UmVn
aXN0ZXIqPih1c2VhYmxlRW5kKTsKIApAQCAtMTQ2LDYgKzIxMCw3IEBAIHZvaWQgSlNTdGFjazo6
ZGlzYWJsZUVycm9yU3RhY2tSZXNlcnZlKCkKICAgICAgICAgQVNTRVJUKG1fdG9wQ2FsbEZyYW1l
LT5mcmFtZUV4dGVudCgpIDw9IG1fdXNlYWJsZUVuZCk7CiAgICAgICAgIHNocmluayhtX3VzZWFi
bGVFbmQpOwogICAgIH0KKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTUy
Mzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1Ymxp
YzoKICAgICAgICAgZW51bSBDYWxsRnJhbWVIZWFkZXJFbnRyeSB7CiAgICAgICAgICAgICBDYWxs
RnJhbWVIZWFkZXJTaXplID0gNiwKLQorI2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikK
KyAgICAgICAgICAgIEFyZ3VtZW50Q291bnQgPSA2LAorICAgICAgICAgICAgQ2FsbGVyRnJhbWUg
PSA1LAorICAgICAgICAgICAgQ2FsbGVlID0gNCwKKyAgICAgICAgICAgIFNjb3BlQ2hhaW4gPSAz
LAorICAgICAgICAgICAgUmV0dXJuUEMgPSAyLCAvLyBUaGlzIGlzIGVpdGhlciBhbiBJbnN0cnVj
dGlvbiogb3IgYSBwb2ludGVyIGludG8gSklUIGdlbmVyYXRlZCBjb2RlIHN0b3JlZCBhcyBhbiBJ
bnN0cnVjdGlvbiouCisgICAgICAgICAgICBDb2RlQmxvY2sgPSAxLAorI2Vsc2UKICAgICAgICAg
ICAgIEFyZ3VtZW50Q291bnQgPSAtNiwKICAgICAgICAgICAgIENhbGxlckZyYW1lID0gLTUsCiAg
ICAgICAgICAgICBDYWxsZWUgPSAtNCwKICAgICAgICAgICAgIFNjb3BlQ2hhaW4gPSAtMywKICAg
ICAgICAgICAgIFJldHVyblBDID0gLTIsIC8vIFRoaXMgaXMgZWl0aGVyIGFuIEluc3RydWN0aW9u
KiBvciBhIHBvaW50ZXIgaW50byBKSVQgZ2VuZXJhdGVkIGNvZGUgc3RvcmVkIGFzIGFuIEluc3Ry
dWN0aW9uKi4KICAgICAgICAgICAgIENvZGVCbG9jayA9IC0xLAorI2VuZGlmCiAgICAgICAgIH07
CiAKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkZWZhdWx0Q2FwYWNpdHkgPSA1MTIgKiAx
MDI0OwpAQCAtNzMsOSArODEsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICAgICAgdm9pZCBn
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5l
U2V0JiwgREZHQ29kZUJsb2NrcyYpOwogCi0gICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9
Ci0gICAgICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVuZCgpIC0gYmVnaW4oKTsgfQorICAgICAg
ICBSZWdpc3RlciogZ2V0QmFzZU9mU3RhY2soKSBjb25zdAorICAgICAgICB7CisjaWYgRU5BQkxF
KEpTQ19TVEFDS19HUk9XU19ET1dOKQorICAgICAgICAgICAgcmV0dXJuIGhpZ2hBZGRyZXNzKCk7
CisjZWxzZQorICAgICAgICAgICAgcmV0dXJuIGxvd0FkZHJlc3MoKTsKKyNlbmRpZgorICAgICAg
ICB9CisKKyAgICAgICAgUmVnaXN0ZXIqIGdldExpbWl0T2ZTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kOyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gaGlnaEFkZHJl
c3MoKSAtIGxvd0FkZHJlc3MoKTsgfQogCiAgICAgICAgIGJvb2wgZ3JvdyhSZWdpc3RlciopOwog
ICAgICAgICAKQEAgLTk2LDYgKzExMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgcG9wRnJhbWUoQ2FsbEZyYW1lKik7CiAKKyAgICAgICAgYm9vbCBjb250YWluc0FkZHJlc3Mo
UmVnaXN0ZXIqIGFkZHJlc3MpIHsgcmV0dXJuIChsb3dBZGRyZXNzKCkgPD0gYWRkcmVzcyAmJiBh
ZGRyZXNzIDw9IGhpZ2hBZGRyZXNzKCkpOyB9CisKICAgICAgICAgdm9pZCBlbmFibGVFcnJvclN0
YWNrUmVzZXJ2ZSgpOwogICAgICAgICB2b2lkIGRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOwog
CkBAIC0xMDksMTEgKzEyNywyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAvLyAhRU5BQkxF
KERFQlVHX0pTU1RBQ0spCiAKICAgICBwcml2YXRlOgorI2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JP
V1NfRE9XTikKKyAgICAgICAgUmVnaXN0ZXIqIGxvd0FkZHJlc3MoKSBjb25zdCB7IHJldHVybiBt
X2VuZDsgfQorICAgICAgICBSZWdpc3RlciogaGlnaEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+KHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSkgKyBtX3Jlc2VydmF0aW9uLnNpemUoKSk7IH0KKyNlbHNlCisgICAgICAg
IFJlZ2lzdGVyKiBsb3dBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9w
dHI8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KKyAgICAgICAgUmVnaXN0ZXIq
IGhpZ2hBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKyNlbmRpZgorCiAgICAgICAg
IFJlZ2lzdGVyKiByZXNlcnZhdGlvbkVuZCgpIGNvbnN0CiAgICAgICAgIHsKKyNpZiBFTkFCTEUo
SlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisjZWxzZQogICAgICAgICAg
ICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7
CiAgICAgICAgICAgICBjaGFyKiByZXNlcnZhdGlvbkVuZCA9IGJhc2UgKyBtX3Jlc2VydmF0aW9u
LnNpemUoKTsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rl
cio+KHJlc2VydmF0aW9uRW5kKTsKKyNlbmRpZgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoREVC
VUdfSlNTVEFDSykKQEAgLTEzOSwxNiArMTY5LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
aW5saW5lIHZvaWQgSlNTdGFjazo6c2hyaW5rKFJlZ2lzdGVyKiBuZXdFbmQpCiAgICAgeworI2lm
IEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICAgICAgaWYgKG5ld0VuZCA8PSBtX2Vu
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lbmQgPSBuZXdFbmQ7CisgICAgICAg
IGlmIChtX2VuZCA9PSBoaWdoQWRkcmVzcygpICYmIChnZXRCYXNlT2ZTdGFjaygpIC0gbV9jb21t
aXRFbmQpID49IG1heEV4Y2Vzc0NhcGFjaXR5KQorICAgICAgICAgICAgcmVsZWFzZUV4Y2Vzc0Nh
cGFjaXR5KCk7CisjZWxzZQogICAgICAgICBpZiAobmV3RW5kID49IG1fZW5kKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX2VuZCA9IG5ld0VuZDsKLSAgICAgICAgaWYgKG1fZW5kID09
IG1fcmVzZXJ2YXRpb24uYmFzZSgpICYmIChtX2NvbW1pdEVuZCAtIGJlZ2luKCkpID49IG1heEV4
Y2Vzc0NhcGFjaXR5KQorICAgICAgICBpZiAobV9lbmQgPT0gbG93QWRkcmVzcygpICYmIChtX2Nv
bW1pdEVuZCAtIGdldEJhc2VPZlN0YWNrKCkpID49IG1heEV4Y2Vzc0NhcGFjaXR5KQogICAgICAg
ICAgICAgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CisjZW5kaWYKICAgICB9CiAKICAgICBpbmxp
bmUgYm9vbCBKU1N0YWNrOjpncm93KFJlZ2lzdGVyKiBuZXdFbmQpCiAgICAgeworI2lmIEVOQUJM
RShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICAgICAgaWYgKG5ld0VuZCA+PSBtX2VuZCkKKyNl
bHNlCiAgICAgICAgIGlmIChuZXdFbmQgPD0gbV9lbmQpCisjZW5kaWYKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICByZXR1cm4gZ3Jvd1Nsb3dDYXNlKG5ld0VuZCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDE1MjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9KU1N0YWNrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogaW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjpnZXRUb3BPZkZyYW1l
KENhbGxGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFmcmFtZSkpCi0gICAgICAg
IHJldHVybiBiZWdpbigpOworICAgICAgICByZXR1cm4gZ2V0QmFzZU9mU3RhY2soKTsKICAgICBy
ZXR1cm4gZnJhbWUtPmZyYW1lRXh0ZW50KCk7CiB9CiAKQEAgLTY1LDEzICs2NSwyNyBAQCBpbmxp
bmUgQ2FsbEZyYW1lKiBKU1N0YWNrOjpwdXNoRnJhbWUoQ2FsCiAgICAgICAgICAgICBwYWRkZWRB
cmdzQ291bnQgPSBudW1QYXJhbWV0ZXJzOwogICAgIH0KIAorI2lmIEVOQUJMRShKU0NfU1RBQ0tf
R1JPV1NfRE9XTikKKyAgICBSZWdpc3RlciogbmV3Q2FsbEZyYW1lU2xvdCA9IG9sZEVuZCAtIHBh
ZGRlZEFyZ3NDb3VudCAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyNpZiBFTkFC
TEUoREVCVUdfSlNTVEFDSykKKyAgICBuZXdDYWxsRnJhbWVTbG90IC09IEpTU3RhY2s6OkZlbmNl
U2l6ZTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG5ld0NhbGxGcmFtZVNsb3Q7
CisgICAgaWYgKCEhY29kZUJsb2NrKQorICAgICAgICBuZXdFbmQgLT0gY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsKKyNlbHNlCiAgICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZVNsb3Qg
PSBvbGRFbmQgKyBwYWRkZWRBcmdzQ291bnQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworCiAjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCiAgICAgbmV3Q2FsbEZyYW1lU2xvdCArPSBK
U1N0YWNrOjpGZW5jZVNpemU7CiAjZW5kaWYKKwogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBuZXdD
YWxsRnJhbWVTbG90OwogICAgIGlmICghIWNvZGVCbG9jaykKICAgICAgICAgbmV3RW5kICs9IGNv
ZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisjZW5kaWYKIAogICAgIC8vIEVuc3VyZSB0
aGF0IHdlIGhhdmUgdGhlIG5lZWRlZCBzdGFjayBjYXBhY2l0eSB0byBwdXNoIHRoZSBuZXcgZnJh
bWU6CiAgICAgaWYgKCFncm93KG5ld0VuZCkpCkBAIC0xMjEsNyArMTM1LDcgQEAgaW5saW5lIHZv
aWQgSlNTdGFjazo6cG9wRnJhbWUoQ2FsbEZyYW1lKgogICAgIC8vIHRoaXMgY2FzZSwgd2UncmUg
c2hyaW5raW5nIGFsbCB0aGUgd2F5IHRvIHRoZSBiZWdpbm5pbmcgc2luY2UgdGhlcmUKICAgICAv
LyBhcmUgbm8gbW9yZSBmcmFtZXMgb24gdGhlIHN0YWNrLgogICAgIGlmICghY2FsbGVyRnJhbWUp
Ci0gICAgICAgIHNocmluayhiZWdpbigpKTsKKyAgICAgICAgc2hyaW5rKGdldEJhc2VPZlN0YWNr
KCkpOwogCiAgICAgaW5zdGFsbFRyYXBzQWZ0ZXJGcmFtZShjYWxsZXJGcmFtZSk7CiB9CkBAIC0y
MTMsMTcgKzIyNywzMCBAQCBpbmxpbmUgdm9pZCBKU1N0YWNrOjppbnN0YWxsVHJhcHNBZnRlckZy
CiAgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUgPSBnZXRUb3BPZkZyYW1lKGZyYW1lKTsKICAgICBj
b25zdCBpbnQgc2l6ZU9mVHJhcCA9IDY0OwogICAgIGludDMyX3QqIHN0YXJ0T2ZUcmFwID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQzMl90Kj4odG9wT2ZGcmFtZSk7CisjaWYgRU5BQkxFKEpTQ19TVEFD
S19HUk9XU19ET1dOKQorICAgIGludDMyX3QqIGVuZE9mVHJhcCA9IHN0YXJ0T2ZUcmFwIC0gc2l6
ZU9mVHJhcDsKKyNlbHNlCiAgICAgaW50MzJfdCogZW5kT2ZUcmFwID0gc3RhcnRPZlRyYXAgKyBz
aXplT2ZUcmFwOworI2VuZGlmCiAgICAgaW50MzJfdCogZW5kT2ZDb21taXRlZE1lbW9yeSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KG1fY29tbWl0RW5kKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSdyZSBub3QgZXhjZWVkaW5nIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1lbW9yeSB0byB3
cml0ZSB0bzoKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgaWYgKGVuZE9m
VHJhcCA8IGVuZE9mQ29tbWl0ZWRNZW1vcnkpCisjZWxzZQogICAgIGlmIChlbmRPZlRyYXAgPiBl
bmRPZkNvbW1pdGVkTWVtb3J5KQorI2VuZGlmCiAgICAgICAgIGVuZE9mVHJhcCA9IGVuZE9mQ29t
bWl0ZWRNZW1vcnk7CiAKICAgICAvLyBMYXkgdGhlIHRyYXBzOgogICAgIGludDMyX3QqIHAgPSBz
dGFydE9mVHJhcDsKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgd2hpbGUg
KHAgPiBlbmRPZlRyYXApCisgICAgICAgICpwLS0gPSAweGFiYWRjYWZlOyAvLyBBIGJhZCB3b3Jk
IHRvIHRyaWdnZXIgYSBjcmFzaCBpZiBkZXJlZidlZC4KKyNlbHNlCiAgICAgd2hpbGUgKHAgPCBl
bmRPZlRyYXApCiAgICAgICAgICpwKysgPSAweGFiYWRjYWZlOyAvLyBBIGJhZCB3b3JkIHRvIHRy
aWdnZXIgYSBjcmFzaCBpZiBkZXJlZidlZC4KKyNlbmRpZgogfQogI2VuZGlmIC8vIEVOQUJMRShE
RUJVR19KU1NUQUNLKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1MjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNyw3ICs0
MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBkYXRhTG9nRigi
TnVtIHZhcnMgPSAldS5cbiIsIGV4ZWMtPmNvZGVCbG9jaygpLT5tX251bVZhcnMpOwogICAgIGRh
dGFMb2dGKCJDdXJyZW50IGVuZCBpcyBhdCAlcC5cbiIsIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXIt
PnN0YWNrKCkuZW5kKCkpOwogI2VuZGlmCi0gICAgQVNTRVJUKCZleGVjLT5yZWdpc3RlcnMoKVtl
eGVjLT5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnNdID4gZXhlYy0+dm0oKS5pbnRl
cnByZXRlci0+c3RhY2soKS5lbmQoKSk7CisgICAgQVNTRVJUKCFleGVjLT52bSgpLmludGVycHJl
dGVyLT5zdGFjaygpLmNvbnRhaW5zQWRkcmVzcygmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpOwogICAgIGlmIChVTkxJS0VMWSghdm0u
aW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJs
b2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpKSB7CiAgICAgICAgIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAgICAgICBleGVjID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTI0NjMpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA3LTA4ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IENoYW5n
ZSBKU1N0YWNrIHRvIHVzZSBtYWNybyB0byBkZXRlcm1pbmUgc3RhY2sgZ3Jvd3RoIGRpcmVjdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDgy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQg
RU5BQkxFX0pTQ19TVEFDS19HUk9XU19ET1dOICNpZmRlZiB0byBlbmFibGUgdGhlIEpTQyBzdGFj
ayB0byBncm93IGZyb20gaGlnaGVyIHRvIGxvd2VyIGFkZHJlc3Nlcy4KKworICAgICAgICAqIHd0
Zi9QbGF0Zm9ybS5oOgorCiAyMDEzLTA3LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IDMyLWJpdCBidWlsZC4KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZv
cm0uaAkocmV2aXNpb24gMTUyMzc4KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29y
a2luZyBjb3B5KQpAQCAtNzQxLDYgKzc0MSwxMCBAQAogI2VuZGlmCiAjZW5kaWYgLyogIWRlZmlu
ZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KSAq
LwogCisjaWYgIWRlZmluZWQoRU5BQkxFX0pTQ19TVEFDS19HUk9XU19ET1dOKQorI2RlZmluZSBF
TkFCTEVfSlNDX1NUQUNLX0dST1dTX0RPV04gMAorI2VuZGlmCisKIC8qIERpc2FibGUgdGhlIEpJ
VCBvbiB2ZXJzaW9ucyBvZiBHQ0MgcHJpb3IgdG8gNC4xICovCiAjaWYgIWRlZmluZWQoRU5BQkxF
X0pJVCkgJiYgQ09NUElMRVIoR0NDKSAmJiAhR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgMSwgMCkK
ICNkZWZpbmUgRU5BQkxFX0pJVCAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206359</attachid>
            <date>2013-07-09 17:23:13 -0700</date>
            <delta_ts>2013-11-05 09:02:10 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>118482-2.patch</filename>
            <type>text/plain</type>
            <size>19309</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDEzLTA3LTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGZvdXJ0aFRpZXI6IENoYW5nZSBKU1N0YWNrIHRvIHVzZSBtYWNybyB0byBkZXRlcm1pbmUg
c3RhY2sgZ3Jvd3RoIGRpcmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgI2lmZGVmIHBhdGhzIHRvIEpTU3RhY2sgZm9yIGdyb3dpbmcg
dGhlIHN0YWNrIGZyb20gaGlnaGVyIHRvIGxvd2VyIGFkZHJlc3Nlcy4gIE11Y2ggb2YgdGhlCisg
ICAgICAgIGNvZGUgdGhhdCBhY2Nlc3NlcyB0aGUgc3RhY2sgY2FuIHVzZSB0aGUgc2lnbmVkIG1v
ZGlmaWVyIEpTU3RhY2s6OkNhbGxGcmFtZURpcmVjdGlvbk11bHRpcGxpZXIKKyAgICAgICAgd2l0
aCByZWdpc3RlciBhbmQgYXJndW1lbnQgb2Zmc2V0cyBhcyBhIHdheSB0byBjYWxjdWxhdGUgYSBz
bG90IG9mZnNldCB3aXRob3V0ICNpZmRlZnMuICBBZGRlZAorICAgICAgICBzb21lIG5ldyBjb25z
dHJ1Y3RzIHRvIEpTU3RhY2sgaW4gdGhlIHByb2Nlc3MsIGxpa2UgbG93QWRkcmVzcygpIGFuZCBo
aWdoQWRkcmVzcygpIHdoaWNoIGFyZSB0aGUKKyAgICAgICAgYWRkcmVzcyByYW5nZXMgb2YgdGhl
IGN1cnJlbnRseSByZXNlcnZlZCBzdGFjayBzcGFjZS4KKworICAgICAgICAqIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJp
Y0FkZFNwYW4pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmluaXQpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3VtZW50
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMpOgorICAgICAgICAoRXhlY1N0YXRlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjph
cmdJbmRleEZvclJlZ2lzdGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
On5KU1N0YWNrKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlND
OjpKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpKU1N0YWNr
OjpkaXNhYmxlRXJyb3JTdGFja1Jlc2VydmUpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3Rh
Y2suaDoKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6Z2V0QmFzZU9mU3RhY2spOgorICAgICAgICAo
SlNTdGFjayk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdldExpbWl0T2ZTdGFjayk6CisgICAg
ICAgIChKU0M6OkpTU3RhY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpjb250YWlu
c0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpsb3dBZGRyZXNzKToKKyAgICAgICAg
KEpTQzo6SlNTdGFjazo6aGlnaEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpyZXNl
cnZhdGlvbkVuZCk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnNocmluayk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6Omdyb3cpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3RhY2tJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdldFRvcE9mRnJhbWUpOgorICAgICAgICAoSlND
OjpKU1N0YWNrOjpwdXNoRnJhbWUpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpwb3BGcmFtZSk6
CisgICAgICAgIChKU0M6OkpTU3RhY2s6Omluc3RhbGxUcmFwc0FmdGVyRnJhbWUpOgorICAgICAg
ICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5U
X1NMT1dfUEFUSF9ERUNMKToKKwogMjAxMy0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIE5hdHVyYWxMb29wcyArIFByb2ZpbGVyID0gQ3Jhc2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJ
KHJldmlzaW9uIDE1MjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsMTIgQEAgaW5saW5lIHZv
aWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hv
b2s+CiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwg
dm9pZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVu
ZCk7CisgICAgaWYgKGJlZ2luID4gZW5kKSB7CisgICAgICAgIHZvaWQqIHN3YXBUZW1wID0gYmVn
aW47CisgICAgICAgIGJlZ2luID0gZW5kOworICAgICAgICBlbmQgPSBzd2FwVGVtcDsKKyAgICB9
CisKICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGJlZ2luKSkgPCAweDEwMDAwMDApOwogICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKGJl
Z2luKSk7CiAgICAgQVNTRVJUKGlzUG9pbnRlckFsaWduZWQoZW5kKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTIz
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBpbnQgYXJnYywgSlNPYmplY3QqIGNhbGxlZSkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1lKTsgLy8gVXNlIG5vQ2Fs
bGVyKCkgcmF0aGVyIHRoYW4gMCBmb3IgdGhlIG91dGVyIGhvc3QgY2FsbCBmcmFtZSBjYWxsZXIu
Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUgPT0gbm9DYWxsZXIoKSB8fCBjYWxsZXJG
cmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKS0+c3RhY2soKS0+ZW5kKCkgPj0gdGhpcyk7
CisgICAgICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUgPT0gbm9DYWxsZXIoKSB8fCBjYWxsZXJG
cmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKS0+c3RhY2soKS0+Y29udGFpbnNBZGRyZXNz
KHRoaXMpKTsKIAogICAgICAgICAgICAgc2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICBzZXRTY29wZShzY29wZSk7CkBAIC0yMjYsOCArMjI2LDggQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1
cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCiAgICAgICAg
IHNpemVfdCBhcmd1bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSAtIDE7IH0KICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS5wYXlsb2Fk
KCk7IH0KLSAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldChpbnQgYXJndW1lbnQpIHsg
cmV0dXJuIHNfZmlyc3RBcmd1bWVudE9mZnNldCAtIGFyZ3VtZW50OyB9Ci0gICAgICAgIHN0YXRp
YyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4g
c190aGlzQXJndW1lbnRPZmZzZXQgLSBhcmd1bWVudDsgfQorICAgICAgICBzdGF0aWMgaW50IGFy
Z3VtZW50T2Zmc2V0KGludCBhcmd1bWVudCkgeyByZXR1cm4gKHNfZmlyc3RBcmd1bWVudE9mZnNl
dCAtIGFyZ3VtZW50ICogSlNTdGFjazo6Q2FsbEZyYW1lRGlyZWN0aW9uTXVsdGlwbGllcik7IH0K
KyAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoaW50IGFyZ3Vt
ZW50KSB7IHJldHVybiAoc190aGlzQXJndW1lbnRPZmZzZXQgLSBhcmd1bWVudCAqIEpTU3RhY2s6
OkNhbGxGcmFtZURpcmVjdGlvbk11bHRpcGxpZXIpOyB9CiAKICAgICAgICAgLy8gSW4gdGhlIGZv
bGxvd2luZyAoYXJndW1lbnQoKSBhbmQgc2V0QXJndW1lbnQoKSksIHRoZSAnYXJndW1lbnQnCiAg
ICAgICAgIC8vIHBhcmFtZXRlciBpcyB0aGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50cyBvZiB0aGUg
dGFyZ2V0IGZ1bmN0aW9uIG9mCkBAIC0yODMsOCArMjgzLDggQEAgbmFtZXNwYWNlIEpTQyAgewog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEhvc3RDYWxsRnJh
bWVGbGFnID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzX3RoaXNBcmd1bWVudE9mZnNl
dCA9IC0xIC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgPSBzX3RoaXNBcmd1bWVudE9mZnNldCAtIDE7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc190aGlzQXJndW1lbnRPZmZzZXQgPSAoLTEgLSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSAqIEpTU3RhY2s6OkNhbGxGcmFtZURpcmVjdGlv
bk11bHRpcGxpZXI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc19maXJzdEFyZ3VtZW50T2Zm
c2V0ID0gc190aGlzQXJndW1lbnRPZmZzZXQgLSAxICogSlNTdGFjazo6Q2FsbEZyYW1lRGlyZWN0
aW9uTXVsdGlwbGllcjsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgSlNTdGFjayogc3RhY2so
KTsKQEAgLTMwOCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgICAgICAvLyAg
ICAgICBvZmZzZXQgPSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBhcmdJbmRleDsKICAgICAgICAg
ICAgIC8vIEhlbmNlOgogICAgICAgICAgICAgLy8gICAgICAgYXJnSW5kZXggPSBzX2ZpcnN0QXJn
dW1lbnRPZmZzZXQgLSBvZmZzZXQ7Ci0gICAgICAgICAgICBzaXplX3QgYXJnSW5kZXggPSBzX2Zp
cnN0QXJndW1lbnRPZmZzZXQgLSBvZmZzZXQ7CisgICAgICAgICAgICBzaXplX3QgYXJnSW5kZXgg
PSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBvZmZzZXQgKiBKU1N0YWNrOjpDYWxsRnJhbWVEaXJl
Y3Rpb25NdWx0aXBsaWVyOwogICAgICAgICAgICAgcmV0dXJuIGFyZ0luZGV4OwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5j
cHAJKHJldmlzaW9uIDE1MjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTMgQEAgSlNTdGFjazo6
SlNTdGFjayhWTSYgdm0sIHNpemVfdCBjYXBhY2l0eQogICAgIEFTU0VSVChjYXBhY2l0eSAmJiBp
c1BhZ2VBbGlnbmVkKGNhcGFjaXR5KSk7CiAKICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2Vy
dmF0aW9uOjpyZXNlcnZlKHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSAqIHNpemVvZihS
ZWdpc3RlciksIGNvbW1pdFNpemUpLCBPU0FsbG9jYXRvcjo6SlNWTVN0YWNrUGFnZXMpOwotICAg
IG1fZW5kID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0g
ICAgbV9jb21taXRFbmQgPSBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFz
ZSgpKTsKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgbV9lbmQgPSBoaWdo
QWRkcmVzcygpOworICAgIG1fY29tbWl0RW5kID0gaGlnaEFkZHJlc3MoKTsKKyNlbHNlCisgICAg
bV9lbmQgPSBsb3dBZGRyZXNzKCk7CisgICAgbV9jb21taXRFbmQgPSBsb3dBZGRyZXNzKCk7Cisj
ZW5kaWYKIAogICAgIGRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOwogCkBAIC02MCwxNCArNjUs
NDMgQEAgSlNTdGFjazo6SlNTdGFjayhWTSYgdm0sIHNpemVfdCBjYXBhY2l0eQogCiBKU1N0YWNr
Ojp+SlNTdGFjaygpCiB7CisjaWYgRU5BQkxFKEpTQ19TVEFDS19HUk9XU19ET1dOKQorICAgIHZv
aWQqIGhpZ2hBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCo+KHN0YXRpY19jYXN0
PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSkgKyBtX3Jlc2VydmF0aW9uLnNpemUoKSk7Cisg
ICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKj4obV9j
b21taXRFbmQpLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihoaWdoQWRkcmVzcykgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkpOworICAgIGFkZFRvQ29tbWl0dGVk
Qnl0ZUNvdW50KC0ocmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCo+KG1fY29tbWl0RW5kKSwgcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaGlnaEFkZHJlc3MpIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9jb21taXRFbmQpKSk7CisjZWxzZQogICAgIHZvaWQqIGJhc2UgPSBtX3Jlc2Vy
dmF0aW9uLmJhc2UoKTsKICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KGJhc2UsIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGJhc2UpKTsKICAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudCgtKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGJh
c2UpKSk7CisjZW5kaWYKICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKIH0KIAogYm9v
bCBKU1N0YWNrOjpncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ld0VuZCkKIHsKKyNpZiBFTkFCTEUo
SlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGNvbW1pdHRl
ZCBlbm91Z2ggbWVtb3J5IHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LAorICAgIC8vIGp1c3QgdXBk
YXRlIHRoZSBlbmQgcG9pbnRlciBhbmQgcmV0dXJuLgorICAgIGlmIChuZXdFbmQgPj0gbV9jb21t
aXRFbmQpIHsKKyAgICAgICAgbV9lbmQgPSBuZXdFbmQ7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIGNodW5rIHNpemUgb2YgYWRkaXRpb25hbCBtZW1v
cnkgdG8gY29tbWl0LCBhbmQgc2VlIGlmIHdlCisgICAgLy8gaGF2ZSBpdCBpcyBzdGlsbCB3aXRo
aW4gb3VyIGJ1ZGdldC4gSWYgbm90LCB3ZSdsbCBmYWlsIHRvIGdyb3cgYW5kCisgICAgLy8gcmV0
dXJuIGZhbHNlLgorICAgIGxvbmcgZGVsdGEgPSByb3VuZFVwQWxsb2NhdGlvblNpemUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
bmV3RW5kKSwgY29tbWl0U2l6ZSk7CisgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1f
Y29tbWl0RW5kKSAtIGRlbHRhIDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV91c2VhYmxlRW5k
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgZ3Jvd3Ro
IGlzIHN0aWxsIHdpdGhpbiBvdXIgYnVkZ2V0LiBHbyBhaGVhZCBhbmQgY29tbWl0CisgICAgLy8g
aXQgYW5kIHJldHVybiB0cnVlLgorICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KG1fY29tbWl0RW5k
IC0gZGVsdGEsIGRlbHRhKTsKKyAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChkZWx0YSk7Cisg
ICAgbV9jb21taXRFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSAtIGRlbHRhKTsKKyAgICBtX2VuZCA9IG5ld0Vu
ZDsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCiAgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGNv
bW1pdHRlZCBlbm91Z2ggbWVtb3J5IHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LAogICAgIC8vIGp1
c3QgdXBkYXRlIHRoZSBlbmQgcG9pbnRlciBhbmQgcmV0dXJuLgogICAgIGlmIChuZXdFbmQgPD0g
bV9jb21taXRFbmQpIHsKQEAgLTg5LDI0ICsxMjMsMzIgQEAgYm9vbCBKU1N0YWNrOjpncm93U2xv
d0Nhc2UoUmVnaXN0ZXIqIG5ldwogICAgIG1fY29tbWl0RW5kID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgKyBkZWx0
YSk7CiAgICAgbV9lbmQgPSBuZXdFbmQ7CiAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKIH0KIAog
dm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYg
Y29uc2VydmF0aXZlUm9vdHMpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCks
IGdldFRvcE9mU3RhY2soKSk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGdldEJhc2VPZlN0
YWNrKCksIGdldFRvcE9mU3RhY2soKSk7CiB9CiAKIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHVi
Um91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tz
KQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCks
IGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMu
YWRkKGdldEJhc2VPZlN0YWNrKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBk
ZmdDb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHko
KQogewotICAgIHB0cmRpZmZfdCBkZWx0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Piht
X2NvbW1pdEVuZCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5i
YXNlKCkpOwotICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQobV9yZXNlcnZhdGlvbi5iYXNlKCks
IGRlbHRhKTsKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04pCisgICAgcHRyZGlmZl90
IGRlbHRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhpZ2hBZGRyZXNzKCkpIC0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fY29tbWl0RW5kKTsKKyAgICBtX3Jlc2VydmF0aW9u
LmRlY29tbWl0KG1fY29tbWl0RW5kLCBkZWx0YSk7CisgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291
bnQoLWRlbHRhKTsKKyAgICBtX2NvbW1pdEVuZCA9IGhpZ2hBZGRyZXNzKCk7CisjZWxzZQorICAg
IHB0cmRpZmZfdCBkZWx0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2NvbW1pdEVu
ZCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG93QWRkcmVzcygpKTsKKyAgICBtX3Jl
c2VydmF0aW9uLmRlY29tbWl0KGxvd0FkZHJlc3MoKSwgZGVsdGEpOwogICAgIGFkZFRvQ29tbWl0
dGVkQnl0ZUNvdW50KC1kZWx0YSk7CiAgICAgbV9jb21taXRFbmQgPSBzdGF0aWNfY2FzdDxSZWdp
c3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKKyNlbmRpZgogfQogCiB2b2lkIEpTU3RhY2s6
OmluaXRpYWxpemVUaHJlYWRpbmcoKQpAQCAtMTM0LDYgKzE3NiwyMCBAQCB2b2lkIEpTU3RhY2s6
OmVuYWJsZUVycm9yU3RhY2tSZXNlcnZlKCkKIAogdm9pZCBKU1N0YWNrOjpkaXNhYmxlRXJyb3JT
dGFja1Jlc2VydmUoKQogeworI2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICBj
aGFyKiB1c2VhYmxlRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzZXJ2YXRpb25FbmQo
KSkgKyBjb21taXRTaXplOworICAgIG1fdXNlYWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PFJlZ2lzdGVyKj4odXNlYWJsZUVuZCk7CisKKyAgICAvLyBCeSB0aGUgdGltZSB3ZSBnZXQgaGVy
ZSwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZGVzdHJ1Y3RpbmcgdGhlIGxhc3QKKyAgICAvLyBJ
bnRlcnByZXRlcjo6RXJyb3JIYW5kbGluZ01vZGUgdGhhdCBlbmFibGVkIHRoaXMgcmVzZXJ2ZSBp
biB0aGUgZmlyc3QKKyAgICAvLyBwbGFjZS4gVGhhdCBtZWFucyB0aGUgc3RhY2sgc3BhY2UgYmV5
b25kIG1fdXNlYWJsZUVuZCBiZWZvcmUgd2UKKyAgICAvLyBlbmFibGVkIHRoZSByZXNlcnZlIHdh
cyBub3QgcHJldmlvdXNseSBpbiB1c2UuIEhlbmNlLCBpdCBpcyBzYWZlIHRvCisgICAgLy8gc2hy
aW5rIGJhY2sgdG8gdGhhdCBtX3VzZWFibGVFbmQuCisgICAgaWYgKG1fZW5kIDwgbV91c2VhYmxl
RW5kKSB7CisgICAgICAgIEFTU0VSVChtX3RvcENhbGxGcmFtZS0+ZnJhbWVFeHRlbnQoKSA+PSBt
X3VzZWFibGVFbmQpOworICAgICAgICBzaHJpbmsobV91c2VhYmxlRW5kKTsKKyAgICB9CisjZWxz
ZQogICAgIGNoYXIqIHVzZWFibGVFbmQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXNlcnZh
dGlvbkVuZCgpKSAtIGNvbW1pdFNpemU7CiAgICAgbV91c2VhYmxlRW5kID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8UmVnaXN0ZXIqPih1c2VhYmxlRW5kKTsKIApAQCAtMTQ2LDYgKzIwMiw3IEBAIHZv
aWQgSlNTdGFjazo6ZGlzYWJsZUVycm9yU3RhY2tSZXNlcnZlKCkKICAgICAgICAgQVNTRVJUKG1f
dG9wQ2FsbEZyYW1lLT5mcmFtZUV4dGVudCgpIDw9IG1fdXNlYWJsZUVuZCk7CiAgICAgICAgIHNo
cmluayhtX3VzZWFibGVFbmQpOwogICAgIH0KKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAko
cmV2aXNpb24gMTUyMzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pT
U3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIENhbGxGcmFtZUhlYWRlckVudHJ5IHsKICAgICAg
ICAgICAgIENhbGxGcmFtZUhlYWRlclNpemUgPSA2LAotCisjaWYgRU5BQkxFKEpTQ19TVEFDS19H
Uk9XU19ET1dOKQorICAgICAgICAgICAgQ2FsbEZyYW1lRGlyZWN0aW9uTXVsdGlwbGllciA9IC0x
LAorI2Vsc2UKKyAgICAgICAgICAgIENhbGxGcmFtZURpcmVjdGlvbk11bHRpcGxpZXIgPSAxLAor
I2VuZGlmCiAgICAgICAgICAgICBBcmd1bWVudENvdW50ID0gLTYsCiAgICAgICAgICAgICBDYWxs
ZXJGcmFtZSA9IC01LAogICAgICAgICAgICAgQ2FsbGVlID0gLTQsCkBAIC03Myw5ICs3NywxNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7
CiAKLSAgICAgICAgUmVnaXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KLSAgICAgICAgUmVnaXN0ZXIqIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gZW5kKCkgLSBiZWdpbigpOyB9CisgICAgICAgIFJlZ2lzdGVyKiBnZXRCYXNlT2ZT
dGFjaygpIGNvbnN0CisgICAgICAgIHsKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dTX0RPV04p
CisgICAgICAgICAgICByZXR1cm4gaGlnaEFkZHJlc3MoKTsKKyNlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gbG93QWRkcmVzcygpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBSZWdpc3Rl
ciogZ2V0TGltaXRPZlN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKyAgICAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBoaWdoQWRkcmVzcygpIC0gbG93QWRkcmVzcygpOyB9
CiAKICAgICAgICAgYm9vbCBncm93KFJlZ2lzdGVyKik7CiAgICAgICAgIApAQCAtOTYsNiArMTA4
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwb3BGcmFtZShDYWxsRnJhbWUq
KTsKIAorICAgICAgICBib29sIGNvbnRhaW5zQWRkcmVzcyhSZWdpc3RlciogYWRkcmVzcykgeyBy
ZXR1cm4gKGxvd0FkZHJlc3MoKSA8PSBhZGRyZXNzICYmIGFkZHJlc3MgPD0gaGlnaEFkZHJlc3Mo
KSk7IH0KKwogICAgICAgICB2b2lkIGVuYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7CiAgICAgICAg
IHZvaWQgZGlzYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7CiAKQEAgLTEwOSwxMCArMTIzLDIwIEBA
IG5hbWVzcGFjZSBKU0MgewogI2VuZGlmIC8vICFFTkFCTEUoREVCVUdfSlNTVEFDSykKIAogICAg
IHByaXZhdGU6CisjaWYgRU5BQkxFKEpTQ19TVEFDS19HUk9XU19ET1dOKQorICAgICAgICBSZWdp
c3RlciogbG93QWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisgICAgICAgIFJlZ2lz
dGVyKiBoaWdoQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJl
Z2lzdGVyKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVz
ZXJ2YXRpb24uc2l6ZSgpKTsgfQorI2Vsc2UKKyAgICAgICAgUmVnaXN0ZXIqIGxvd0FkZHJlc3Mo
KSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+KG1fcmVzZXJ2
YXRpb24uYmFzZSgpKTsgfQorICAgICAgICBSZWdpc3RlciogaGlnaEFkZHJlc3MoKSBjb25zdCB7
IHJldHVybiBtX2VuZDsgfQorI2VuZGlmCisKICAgICAgICAgUmVnaXN0ZXIqIHJlc2VydmF0aW9u
RW5kKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgY2hhciogYmFzZSA9IHN0YXRpY19j
YXN0PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgICAgICAgICBjaGFyKiByZXNl
cnZhdGlvbkVuZCA9IGJhc2UgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGNo
YXIqIHJlc2VydmF0aW9uRW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFz
ZSgpKTsKKyNpZiAhRU5BQkxFKEpTQ19TVEFDS19HUk9XU19ET1dOKQorICAgICAgICAgICAgcmVz
ZXJ2YXRpb25FbmQgKz0gbV9yZXNlcnZhdGlvbi5zaXplKCk7CisjZW5kaWYKICAgICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+KHJlc2VydmF0aW9uRW5kKTsK
ICAgICAgICAgfQogCkBAIC0xNDIsMTMgKzE2NiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgaWYgKG5ld0VuZCA+PSBtX2VuZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9l
bmQgPSBuZXdFbmQ7Ci0gICAgICAgIGlmIChtX2VuZCA9PSBtX3Jlc2VydmF0aW9uLmJhc2UoKSAm
JiAobV9jb21taXRFbmQgLSBiZWdpbigpKSA+PSBtYXhFeGNlc3NDYXBhY2l0eSkKKyAgICAgICAg
aWYgKG1fZW5kID09IGdldEJhc2VPZlN0YWNrKCkgJiYgKG1fY29tbWl0RW5kIC0gZ2V0QmFzZU9m
U3RhY2soKSkgPj0gbWF4RXhjZXNzQ2FwYWNpdHkpCiAgICAgICAgICAgICByZWxlYXNlRXhjZXNz
Q2FwYWNpdHkoKTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1N0YWNrOjpncm93KFJlZ2lz
dGVyKiBuZXdFbmQpCiAgICAgeworI2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAg
ICAgICAgaWYgKG5ld0VuZCA+PSBtX2VuZCkKKyNlbHNlCiAgICAgICAgIGlmIChuZXdFbmQgPD0g
bV9lbmQpCisjZW5kaWYKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
Z3Jvd1Nsb3dDYXNlKG5ld0VuZCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjM3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogaW5saW5lIFJl
Z2lzdGVyKiBKU1N0YWNrOjpnZXRUb3BPZkZyYW1lKENhbGxGcmFtZSogZnJhbWUpCiB7CiAgICAg
aWYgKFVOTElLRUxZKCFmcmFtZSkpCi0gICAgICAgIHJldHVybiBiZWdpbigpOworICAgICAgICBy
ZXR1cm4gZ2V0QmFzZU9mU3RhY2soKTsKICAgICByZXR1cm4gZnJhbWUtPmZyYW1lRXh0ZW50KCk7
CiB9CiAKQEAgLTY1LDEzICs2NSwyNyBAQCBpbmxpbmUgQ2FsbEZyYW1lKiBKU1N0YWNrOjpwdXNo
RnJhbWUoQ2FsCiAgICAgICAgICAgICBwYWRkZWRBcmdzQ291bnQgPSBudW1QYXJhbWV0ZXJzOwog
ICAgIH0KIAorI2lmIEVOQUJMRShKU0NfU1RBQ0tfR1JPV1NfRE9XTikKKyAgICBSZWdpc3Rlciog
bmV3Q2FsbEZyYW1lU2xvdCA9IG9sZEVuZCAtIHBhZGRlZEFyZ3NDb3VudCAtIEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7CisKKyNpZiBFTkFCTEUoREVCVUdfSlNTVEFDSykKKyAgICBuZXdD
YWxsRnJhbWVTbG90IC09IEpTU3RhY2s6OkZlbmNlU2l6ZTsKKyNlbmRpZgorCisgICAgUmVnaXN0
ZXIqIG5ld0VuZCA9IG5ld0NhbGxGcmFtZVNsb3Q7CisgICAgaWYgKCEhY29kZUJsb2NrKQorICAg
ICAgICBuZXdFbmQgLT0gY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyNlbHNlCiAg
ICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZVNsb3QgPSBvbGRFbmQgKyBwYWRkZWRBcmdzQ291bnQg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworCiAjaWYgRU5BQkxFKERFQlVHX0pTU1RB
Q0spCiAgICAgbmV3Q2FsbEZyYW1lU2xvdCArPSBKU1N0YWNrOjpGZW5jZVNpemU7CiAjZW5kaWYK
KwogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBuZXdDYWxsRnJhbWVTbG90OwogICAgIGlmICghIWNv
ZGVCbG9jaykKICAgICAgICAgbmV3RW5kICs9IGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnM7CisjZW5kaWYKIAogICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIG5lZWRlZCBzdGFj
ayBjYXBhY2l0eSB0byBwdXNoIHRoZSBuZXcgZnJhbWU6CiAgICAgaWYgKCFncm93KG5ld0VuZCkp
CkBAIC0xMjEsNyArMTM1LDcgQEAgaW5saW5lIHZvaWQgSlNTdGFjazo6cG9wRnJhbWUoQ2FsbEZy
YW1lKgogICAgIC8vIHRoaXMgY2FzZSwgd2UncmUgc2hyaW5raW5nIGFsbCB0aGUgd2F5IHRvIHRo
ZSBiZWdpbm5pbmcgc2luY2UgdGhlcmUKICAgICAvLyBhcmUgbm8gbW9yZSBmcmFtZXMgb24gdGhl
IHN0YWNrLgogICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgIHNocmluayhiZWdpbigpKTsK
KyAgICAgICAgc2hyaW5rKGdldEJhc2VPZlN0YWNrKCkpOwogCiAgICAgaW5zdGFsbFRyYXBzQWZ0
ZXJGcmFtZShjYWxsZXJGcmFtZSk7CiB9CkBAIC0yMTMsMTcgKzIyNywyNiBAQCBpbmxpbmUgdm9p
ZCBKU1N0YWNrOjppbnN0YWxsVHJhcHNBZnRlckZyCiAgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUg
PSBnZXRUb3BPZkZyYW1lKGZyYW1lKTsKICAgICBjb25zdCBpbnQgc2l6ZU9mVHJhcCA9IDY0Owog
ICAgIGludDMyX3QqIHN0YXJ0T2ZUcmFwID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4odG9w
T2ZGcmFtZSk7Ci0gICAgaW50MzJfdCogZW5kT2ZUcmFwID0gc3RhcnRPZlRyYXAgKyBzaXplT2ZU
cmFwOworICAgIGludDMyX3QqIGVuZE9mVHJhcCA9IHN0YXJ0T2ZUcmFwICsgc2l6ZU9mVHJhcCAq
IEpTU3RhY2s6OkNhbGxGcmFtZURpcmVjdGlvbk11bHRpcGxpZXI7CiAgICAgaW50MzJfdCogZW5k
T2ZDb21taXRlZE1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KG1fY29tbWl0RW5k
KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgZXhjZWVkaW5nIHRoZSBhbW91bnQgb2Yg
YXZhaWxhYmxlIG1lbW9yeSB0byB3cml0ZSB0bzoKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dST1dT
X0RPV04pCisgICAgaWYgKGVuZE9mVHJhcCA8IGVuZE9mQ29tbWl0ZWRNZW1vcnkpCisjZWxzZQog
ICAgIGlmIChlbmRPZlRyYXAgPiBlbmRPZkNvbW1pdGVkTWVtb3J5KQorI2VuZGlmCiAgICAgICAg
IGVuZE9mVHJhcCA9IGVuZE9mQ29tbWl0ZWRNZW1vcnk7CiAKICAgICAvLyBMYXkgdGhlIHRyYXBz
OgogICAgIGludDMyX3QqIHAgPSBzdGFydE9mVHJhcDsKKyNpZiBFTkFCTEUoSlNDX1NUQUNLX0dS
T1dTX0RPV04pCisgICAgd2hpbGUgKHAgPiBlbmRPZlRyYXApCisgICAgICAgICpwLS0gPSAweGFi
YWRjYWZlOyAvLyBBIGJhZCB3b3JkIHRvIHRyaWdnZXIgYSBjcmFzaCBpZiBkZXJlZidlZC4KKyNl
bHNlCiAgICAgd2hpbGUgKHAgPCBlbmRPZlRyYXApCiAgICAgICAgICpwKysgPSAweGFiYWRjYWZl
OyAvLyBBIGJhZCB3b3JkIHRvIHRyaWdnZXIgYSBjcmFzaCBpZiBkZXJlZidlZC4KKyNlbmRpZgog
fQogI2VuZGlmIC8vIEVOQUJMRShERUJVR19KU1NUQUNLKQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1MjM3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxNyw3ICs0MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19j
aGVjaykKICAgICBkYXRhTG9nRigiTnVtIHZhcnMgPSAldS5cbiIsIGV4ZWMtPmNvZGVCbG9jaygp
LT5tX251bVZhcnMpOwogICAgIGRhdGFMb2dGKCJDdXJyZW50IGVuZCBpcyBhdCAlcC5cbiIsIGV4
ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPnN0YWNrKCkuZW5kKCkpOwogI2VuZGlmCi0gICAgQVNTRVJU
KCZleGVjLT5yZWdpc3RlcnMoKVtleGVjLT5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3Rl
cnNdID4gZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+c3RhY2soKS5lbmQoKSk7CisgICAgQVNTRVJU
KCFleGVjLT52bSgpLmludGVycHJldGVyLT5zdGFjaygpLmNvbnRhaW5zQWRkcmVzcygmZXhlYy0+
cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpOwog
ICAgIGlmIChVTkxJS0VMWSghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+cmVn
aXN0ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpKSB7CiAg
ICAgICAgIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAg
ICAgICBleGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTI0NjMp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDEzLTA3LTA4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGZvdXJ0aFRpZXI6IENoYW5nZSBKU1N0YWNrIHRvIHVzZSBtYWNybyB0byBkZXRlcm1pbmUg
c3RhY2sgZ3Jvd3RoIGRpcmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgRU5BQkxFX0pTQ19TVEFDS19HUk9XU19ET1dOICNpZmRlZiB0
byBlbmFibGUgdGhlIEpTQyBzdGFjayB0byBncm93IGZyb20gaGlnaGVyIHRvIGxvd2VyIGFkZHJl
c3Nlcy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEzLTA3LTAyICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IDMyLWJp
dCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTUyMzc4KQorKysgU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzQxLDYgKzc0MSwxMCBAQAogI2Vu
ZGlmCiAjZW5kaWYgLyogIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdU
Rl9VU0VfSlNWQUxVRTMyXzY0KSAqLwogCisjaWYgIWRlZmluZWQoRU5BQkxFX0pTQ19TVEFDS19H
Uk9XU19ET1dOKQorI2RlZmluZSBFTkFCTEVfSlNDX1NUQUNLX0dST1dTX0RPV04gMAorI2VuZGlm
CisKIC8qIERpc2FibGUgdGhlIEpJVCBvbiB2ZXJzaW9ucyBvZiBHQ0MgcHJpb3IgdG8gNC4xICov
CiAjaWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgJiYgQ09NUElMRVIoR0NDKSAmJiAhR0NDX1ZFUlNJ
T05fQVRfTEVBU1QoNCwgMSwgMCkKICNkZWZpbmUgRU5BQkxFX0pJVCAwCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>