<?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>23175</bug_id>
          
          <creation_ts>2009-01-07 15:20:21 -0800</creation_ts>
          <short_desc>String and UString should be able to share a UChar* buffer.</short_desc>
          <delta_ts>2009-06-29 16:00:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>23199</dependson>
    
    <dependson>25039</dependson>
    
    <dependson>25126</dependson>
    
    <dependson>26057</dependson>
          <blocked>22720</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>catfish.man</cc>
    
    <cc>darin</cc>
    
    <cc>emacemac7</cc>
    
    <cc>levin</cc>
    
    <cc>mrowe</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>104792</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-07 15:20:21 -0800</bug_when>
    <thetext>Also, it would be nice to share a String across threads and share the buffer in that case as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104822</commentid>
    <comment_count>1</comment_count>
      <attachid>26515</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-07 17:29:01 -0800</bug_when>
    <thetext>Created attachment 26515
Patch for bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104824</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-07 17:34:25 -0800</bug_when>
    <thetext>There is a simple follow on patch that could enable StringImpl to automatically share the buf from a UString, but I&apos;m slightly more worried about potential memory regressions (due to UString&apos;s buffers being bigger than StringImpl), so I wanted to get in this part first.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104848</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-07 22:51:00 -0800</bug_when>
    <thetext>If anyone wants to start looking at the diff, it would be great.

However, I&apos;m looking at changing making some changes to mrowe&apos;s comments in irc.   My summary: Basically &quot;SharedDataHolder&quot; is confusing and badly named (and I goofed in the changelog &quot;visa versa&quot; should be &quot;vice versa&quot;).

So I&apos;ve be changing SharedDataHolder some how to make it clearer in how to use it (and likely changing its name).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104973</commentid>
    <comment_count>4</comment_count>
      <attachid>26550</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-08 17:06:22 -0800</bug_when>
    <thetext>Created attachment 26550
Attempted to make the SharedDataHolder usage more clear.

This has all known changes done to it.

There is one known issue with the change:
JavaScriptCore/wtf/SharedDataHolder.h no longer matches the contents of the file.

This means that I should change the name of the file and the references to it in various places (build files, includes, and ChangeLog).  However, in case there is more feedback about the naming of this class, I avoid those changes for the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104975</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-08 17:13:41 -0800</bug_when>
    <thetext>Now it is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105013</commentid>
    <comment_count>6</comment_count>
      <attachid>26563</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-09 04:53:19 -0800</bug_when>
    <thetext>Created attachment 26563
Part 1.  Some refactoring work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105014</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-09 04:55:49 -0800</bug_when>
    <thetext>Here&apos;s a much smaller patch that is ready for review.

After this one gets in, I&apos;ll do another incremental one.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105019</commentid>
    <comment_count>8</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-09 09:55:41 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/GNUmakefile.am
	M	JavaScriptCore/JavaScriptCore.exp
	M	JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
	M	JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
	M	JavaScriptCore/runtime/Identifier.cpp
	M	JavaScriptCore/runtime/InitializeThreading.cpp
	M	JavaScriptCore/runtime/JSGlobalData.cpp
	M	JavaScriptCore/runtime/PropertyNameArray.cpp
	M	JavaScriptCore/runtime/UString.cpp
	M	JavaScriptCore/runtime/UString.h
	M	JavaScriptGlue/ChangeLog
	M	WebCore/ChangeLog
Committed r39747
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	A	JavaScriptGlue/ForwardingHeaders/wtf/PtrAndFlags.h
	A	WebCore/ForwardingHeaders/wtf/PtrAndFlags.h
Committed r39748

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105029</commentid>
    <comment_count>9</comment_count>
      <attachid>26565</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-09 11:22:41 -0800</bug_when>
    <thetext>Created attachment 26565
Minor change to previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105038</commentid>
    <comment_count>10</comment_count>
      <attachid>26565</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-09 12:17:30 -0800</bug_when>
    <thetext>Comment on attachment 26565
Minor change to previous patch.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/jsc.cpp
	M	JavaScriptCore/runtime/JSGlobalData.cpp
Committed r39755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105192</commentid>
    <comment_count>11</comment_count>
      <attachid>26563</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-11 01:45:10 -0800</bug_when>
    <thetext>Comment on attachment 26563
Part 1.  Some refactoring work.

Clearing review flags from committed patches to get the bug out of commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105244</commentid>
    <comment_count>12</comment_count>
      <attachid>26609</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-11 11:32:33 -0800</bug_when>
    <thetext>Created attachment 26609
Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105270</commentid>
    <comment_count>13</comment_count>
      <attachid>26609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 14:14:15 -0800</bug_when>
    <thetext>Comment on attachment 26609
Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.

This looks good.

&gt; +static const unsigned numCharactersToStore = 0x100; // Note that SmallStrings::m_singleCharacterStrings should be the same size.

We have COMPILE_ASSERT so that such things can be checked rather than just mentioned in comments.

&gt; +}  // namespace JSC
&gt; +
&gt; +#endif  // SmallStrings_h

If the patch is going to touch some files just to add comments, then I will be in full nitpick mode. I suggest only one space before &quot;//&quot; to match the style elsewhere, rather than two spaces.

&gt; -            rep-&gt;capacity = newCapacity;
&gt; +            rep-&gt;baseString()-&gt;capacity = newCapacity;

I would have expected you to use &quot;base&quot; here rather than re-fetching rep-&gt;baseString(). Is this better in some way?

&gt; -            bool baseIsSelf() const { return baseString == this; }
&gt; +            bool baseIsSelf() const { return m_identifierTableAndFlags.isFlagSet(BaseStringFlag); }

Why can&apos;t we keep the old definition, but move it down in the file where it can see the BaseString class definition? Or can&apos;t this check if baseString is zero instead? Do we really need the bit in the flags? Does the bit help performance or something?

&gt; -            UChar* data() const { return baseString-&gt;buf + baseString-&gt;preCapacity + offset; }
&gt; +            UChar* data() const;

I&apos;m surprised this can be non-inline without hurting performance slightly.

&gt; +            void setBaseString(PassRefPtr&lt;BaseString&gt; base) { ASSERT(base != this); m_baseString = base.releaseRef(); }
&gt; +            BaseString* baseString() { return reinterpret_cast&lt;BaseString*&gt;(baseIsSelf() ? this : m_baseString); }
&gt; +            const BaseString* baseString() const { return const_cast&lt;const BaseString*&gt;(const_cast&lt;Rep*&gt;(this)-&gt;baseString());  }

It&apos;s annoying to have these reinterpret_cast here. Instead you should just define these inline functions outside the class definition, in a place that can see the definition of BaseString.

&gt; +            void* m_baseString; // If &quot;this&quot; is a BaseString instance, it is 0. BaseString* otherwise.

Seems really ugly to have this be a void*. Can&apos;t it be a BaseString* instead? When is the fact that it&apos;s a void* helpful?

&gt; +
&gt; +            static BaseString&amp; null() { return *nullBaseString; }
&gt; +            static BaseString&amp; empty() { return *emptyBaseString; }
&gt; +        private:
&gt; +            friend void initializeUString();

I&apos;d prefer a blank line before the private line.

&gt; +    inline UChar* UString::Rep::data() const
&gt; +    {
&gt; +        const UString::BaseString* base = baseString();
&gt; +        return base-&gt;buf + base-&gt;preCapacity + offset;
&gt; +    }

Do you need the UString:: qualifier on BaseString here?

&gt; +        UString::BaseString* base = m_rep-&gt;baseString();

And here?

I&apos;m going to say review- because of the reinterpret_cast question, and the question of whether we really do need a bit to tell whether something is a base string. But this does seem like a great change and about ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105282</commentid>
    <comment_count>14</comment_count>
      <attachid>26618</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-11 16:51:55 -0800</bug_when>
    <thetext>Created attachment 26618
Addressed comments -- Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.


&gt; &gt; +static const unsigned numCharactersToStore = 0x100; // Note that SmallStrings::m_singleCharacterStrings should be the same size.
&gt;We have COMPILE_ASSERT so that such things can be checked rather than just mentioned in comments.
Fixed.

&gt; &gt; +}  // namespace JSC
&gt; &gt; +
&gt; &gt; +#endif  // SmallStrings_h
&gt; I suggest only one space before &quot;//&quot; to match the style elsewhere, rather than two spaces.
Fixed.

&gt; &gt; -            rep-&gt;capacity = newCapacity;
&gt; &gt; +            rep-&gt;baseString()-&gt;capacity = newCapacity;

&gt; I would have expected you to use &quot;base&quot; here rather than re-fetching
&gt; rep-&gt;baseString(). Is this better in some way?

rep has just been recreated, so the local variable base is no longer valid at this point.


&gt; &gt; +            UChar* data() const;
&gt; I&apos;m surprised this can be non-inline without hurting performance slightly.

Still inlined just not defined in the class definition.


&gt; &gt; +            void setBaseString(PassRefPtr&lt;BaseString&gt; base) { ASSERT(base != this); m_baseString = base.releaseRef(); }
&gt; &gt; +            BaseString* baseString() { return reinterpret_cast&lt;BaseString*&gt;(baseIsSelf() ? this : m_baseString); }
&gt; &gt; +            const BaseString* baseString() const { return const_cast&lt;const BaseString*&gt;(const_cast&lt;Rep*&gt;(this)-&gt;baseString());  }

&gt; It&apos;s annoying to have these reinterpret_cast here. Instead you should just
&gt; define these inline functions outside the class definition, in a place that can
&gt; see the definition of BaseString.

Fixed.

&gt; &gt; +            static BaseString&amp; empty() { return *emptyBaseString; }
&gt; &gt; +        private:
&gt; &gt; +            friend void initializeUString();
&gt; I&apos;d prefer a blank line before the private line.

Fixed.

&gt; +    inline UChar* UString::Rep::data() const
&gt; +    {
&gt; +        const UString::BaseString* base = baseString();
&gt; Do you need the UString:: qualifier on BaseString here?

Fixed.


&gt; &gt; +        UString::BaseString* base = m_rep-&gt;baseString();
&gt;And here?
Fixed.


&gt; &gt; -            bool baseIsSelf() const { return baseString == this; }
&gt;&gt; +            bool baseIsSelf() const { return m_identifierTableAndFlags.isFlagSet(BaseStringFlag); }

&gt; Why can&apos;t we keep the old definition, but move it down in the file where it can...

and

&gt; &gt; +            void* m_baseString; // If &quot;this&quot; is a BaseString instance, it is 0. BaseString* otherwise.
&gt; Seems really ugly to have this be a void*. Can&apos;t it be a BaseString* instead?
&gt; When is the fact that it&apos;s a void* helpful?

and

&gt; I&apos;m going to say review- because of the reinterpret_cast question, and the
&gt; question of whether we really do need a bit to tell whether something is a base
&gt; string.

In the next change, I&apos;ll make this point to something else if it is a BaseString.  This is the reason for the flag and putting 0 in there in the case of the BaseString and for making a it void* that no code can use directly.

Why re-use this field? In order to not make BaseString any bigger.  (I&apos;ve been under the impression that this is desired.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105285</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 17:47:54 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; In the next change, I&apos;ll make this point to something else if it is a
&gt; BaseString.  This is the reason for the flag and putting 0 in there in the case
&gt; of the BaseString and for making a it void* that no code can use directly.

A union is typically better than a void* to use the same storage for pointers of two different types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105286</commentid>
    <comment_count>16</comment_count>
      <attachid>26618</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 17:51:57 -0800</bug_when>
    <thetext>Comment on attachment 26618
Addressed comments -- Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.

&gt; +    COMPILE_ASSERT(numCharactersToStore == sizeof(SmallStrings::m_singleCharacterStrings) / sizeof(SmallStrings::m_singleCharacterStrings[0]), 
&gt; +                   WTF_IsNumCharactersConstInSyncWithClassUsage);

No need to put that WTF_ prefix on the COMPILE_ASSERT argument. That name is only used for a local symbol, which can&apos;t conflict with anything outside this function. The only place you *might* want that prefix would be if you used COMPILE_ASSERT in a header, and even there I don&apos;t think it’s needed.

Do you need those SmallStrings:: qualifiers? I&apos;d think this would compile without them since we’re inside a SmallStrings constructor definition.

&gt; +            void setBaseString(PassRefPtr&lt;BaseString&gt; base);

This is a classic case where we would not name the argument in the function declaration, since the argument&apos;s type and the function name make it perfectly clear without a name.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105287</commentid>
    <comment_count>17</comment_count>
      <attachid>26619</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-11 18:06:04 -0800</bug_when>
    <thetext>Created attachment 26619
Addressed Darin&apos;s comments from the last review.

The only change is to fix the two comments on the R+ review from before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105292</commentid>
    <comment_count>18</comment_count>
      <attachid>26619</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 19:19:59 -0800</bug_when>
    <thetext>Comment on attachment 26619
Addressed Darin&apos;s comments from the last review.

Landed as http://trac.webkit.org/changeset/39815</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105293</commentid>
    <comment_count>19</comment_count>
      <attachid>26619</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 19:20:13 -0800</bug_when>
    <thetext>Comment on attachment 26619
Addressed Darin&apos;s comments from the last review.

Clearing review flag because it was landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105322</commentid>
    <comment_count>20</comment_count>
      <attachid>26629</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-12 04:39:18 -0800</bug_when>
    <thetext>Created attachment 26629
Part3: Allow UString to share a UChar* with another class.

The underlying class used for sharing also allows for sharing across threads which will be used in StringImpl::copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107157</commentid>
    <comment_count>21</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-26 22:23:19 -0800</bug_when>
    <thetext>I currently like the names
  FastRefCountForThreads
or
  FastThreadableRefCount

instead of
  RefCountedMalloced

but I&apos;d like a second opinion before I change it.  (The fact that it hold something that was malloc&apos;ed is easily changeable if it is ever desired to be used to for another allocation type.)
 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107192</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-27 08:57:25 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; I currently like the names
&gt;   FastRefCountForThreads
&gt; or
&gt;   FastThreadableRefCount
&gt; 
&gt; instead of
&gt;   RefCountedMalloced
&gt; 
&gt; but I&apos;d like a second opinion before I change it.  (The fact that it hold
&gt; something that was malloc&apos;ed is easily changeable if it is ever desired to be
&gt; used to for another allocation type.)

I like the general direction here; the new suggested names seem better.

Despite our unfortunate use of the word &quot;fast&quot; in &quot;fastMalloc&quot;, I generally would like to avoid the word &quot;fast&quot;. It makes me want to ask the question, &quot;When we would I ever *not* use this?&quot; I don&apos;t want my other code to be slow!

This is easier to do in person, but generally I like to describe the class and what it&apos;s for in prose, and then select words from that discussion to name the class. That exercise often works well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107238</commentid>
    <comment_count>23</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-27 12:56:12 -0800</bug_when>
    <thetext>&gt;  describe the class and what it&apos;s for in prose

Here&apos;s my attempt:

The class is to allow for sharing an item with multiple objects across threads that can each control its lifetime independently (using a ref counting scheme) which is similar to RefCounted.  

It particularly useful in performance critical scenarios where ref/deref are done often without significantly impacting performance and avoids using atomic* until absolutely necessary (unlike ThreadSafeShared which does it on every call).

In return, the way to use it is slightly more complicated than ThreadSafeShared.  An instance of the class is not threadsafe, but it is designed to be usable in a multi-thread scenario.  The code has to call ::copy() to get another instance which can be used on another thread (while still holding on to the same object).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107579</commentid>
    <comment_count>24</comment_count>
      <attachid>26618</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-01-29 13:57:51 -0800</bug_when>
    <thetext>Comment on attachment 26618
Addressed comments -- Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.

Removed r+ b/c it was landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108058</commentid>
    <comment_count>25</comment_count>
      <attachid>27266</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-02 16:30:10 -0800</bug_when>
    <thetext>Created attachment 27266
Part 3: Add CrossThreadRefCounted.

Ready for review.

Also I broke up the previous (part 3) patch into something smaller with the hope that it will be easier to review like this, and came up with a better name for my class.  The class isn&apos;t in the build yet because it isn&apos;t used in this patch.  (It will be used in the next patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112834</commentid>
    <comment_count>26</comment_count>
      <attachid>27266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-09 09:38:37 -0700</bug_when>
    <thetext>Comment on attachment 27266
Part 3: Add CrossThreadRefCounted.

&gt; +    // ThreadSafeShared can have a siginificant perf impact when used in low level classes

Typo here in the spelling of &quot;significant&quot;.

&gt; +        // data is freed using *fastFree*.

I believe this comment is wrong. I think the data is deallocated with delete, not fastFree.

&gt; +        // Used to make an instance that can be used on another thread.
&gt; +        PassRefPtr&lt;CrossThreadRefCounted&lt;T&gt; &gt; copy();

I think this naming is getting increasingly unclear. The functions that copy objects to be used on other threads probably need a name that somehow talks about threads rather then just the word &quot;copy&quot;.

&gt; +        bool isShared() const { return !m_refCounter.hasOneRef() || dataAccessMustBeThreadSafe(); }

I don&apos;t understand the semantics of this function. When would you call it and what would you do based on the result.

&gt; +        bool dataAccessMustBeThreadSafe() const { return m_threadSafeRefCounter &amp;&amp; !m_threadSafeRefCounter-&gt;hasOneRef(); }

Same question.

&gt; +        ~CrossThreadRefCounted()
&gt; +        {
&gt; +            if (m_data &amp;&amp; !m_threadSafeRefCounter)
&gt; +                delete m_data;
&gt; +        }

The null check of m_data is redundant with what the compiler will already do automatically, so I suggest omitting it.

&gt; +#if USE(LOCKFREE_THREADSAFESHARED)
&gt; +        if (atomicDecrement(&amp;m_refCount) &lt;= 0)
&gt; +#else
&gt; +        {
&gt; +            MutexLocker locker(m_mutex);
&gt; +            --m_refCount;
&gt; +        }
&gt; +        if (m_refCount &lt;= 0)
&gt; +#endif
&gt; +            return true;

I think this would read more clearly if the return statement was repeated isnide the #if.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112897</commentid>
    <comment_count>27</comment_count>
      <attachid>27266</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-09 14:06:24 -0700</bug_when>
    <thetext>Comment on attachment 27266
Part 3: Add CrossThreadRefCounted.

Committed in r41536.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128908</commentid>
    <comment_count>28</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-29 16:00:15 -0700</bug_when>
    <thetext>This is all working now.  Changing to FIXED.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26515</attachid>
            <date>2009-01-07 17:29:01 -0800</date>
            <delta_ts>2009-01-08 17:06:22 -0800</delta_ts>
            <desc>Patch for bug.</desc>
            <filename>patch-for-bug23175.txt</filename>
            <type>text/plain</type>
            <size>81993</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4MzdmMWE2Li5lZjc1YjFmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM2
IEBACisyMDA5LTAxLTA3ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKworICAgICAgICAxLTIlIHBlcmYgaW1w
cm92ZW1lbnQgb24gU3Vuc3BpZGVyLgorCisgICAgICAgIFJlZHVjZWQgbWVtb3J5IHVzYWdlIGZv
ciBVU3RyaW5nIGJ5IGJyZWFraW5nIG91dCBmaWVsZHMgb25seSB1c2VkIGluIGEgYmFzZSBzdHJp
bmcKKyAgICAgICAgaW50byBVU3RyaW5nOjpCYXNlU3RyaW5nIHdoaWNoIGRlcml2ZXMgZnJvbSBV
U3RyaW5nOjpSZXAuCisKKyAgICAgICAgQWxsb3cgVVN0cmluZzo6QmFzZVN0cmluZzo6YnVmIHRv
IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgY2xhc3MuICBUaGlzIGFsbG93cworICAgICAgICBXZWJD
b3JlOjpTdHJpbmdJbXBsIHRvIGJlIGFibGUgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBVU3RyaW5n
IGFuZCBoYXZlIGpvaW50IG93bmVyc2hpcAorICAgICAgICBvdmVyIHRoZSB1bmRlcmx5aW5nIGJ1
ZmZlciAod2hpY2ggYXZvaWRzIGV4dHJhIGFsbG9jYXRpb25zIGFuZCBjb3BpZXMpIGFuZCB2aXNh
CisgICAgICAgIHZlcnNhIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAgICAgICBObyBvYnNlcnZh
YmxlIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkZWQgUHRyQW5kRmxhZ3MuaCBh
bmQgU2hhcmVkRGF0YUhvbGRlci5oIChhbmQgc29ydGVkIHRoZSB4Y29kZSBwcm9qZWN0IGZpbGUp
LgorCisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRl
bnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmdPbmNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1l
QXJyYXk6OmFkZCk6CisgICAgICAgICogcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAg
ICAoSlNDOjpTbWFsbFN0cmluZ3NTdG9yYWdlOjpyZXApOgorICAgICAgICAoSlNDOjpTbWFsbFN0
cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6U21hbGxT
dHJpbmdzOjpTbWFsbFN0cmluZ3MpOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6Om1hcmsp
OgorICAgICAgICBUaGlzIHdhcyBkdWUgdG8gdGhlIGNoYW5nZXMgaW4gVVN0cmluZzo6UmVwL0Jh
c2VTdHJpbmcgYW5kIHB1dCB0aGUgVVN0cmluZzo6KiBpdGVtcyBkaXJlY3RseSBpbiB0aGUgCisg
ICAgICAgIGNsYXNzIHRvIGluY3JlYXNlIHRoZSBsb2NhbGl0eSBvZiByZWZlcmVuY2UuCisKKyAg
ICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5oOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmlu
Zy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVVTdHJpbmcpOgorICAgICAgICBEdWUgdG8gYWRkaXRpb24gb2Yg
dGhlIEJhc2VTdHJpbmcgY2xhc3MsIHRoZSBpbnRpYWxpemF0aW9uIG9mIHRoZSBzdGF0aWMKKyAg
ICAgICAgdmFyaWFibGVzIGhhZCB0byBjaGFuZ2UgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIHVz
aW5nIHt9IGZvciBpbnRpYWxpemF0aW9uLgorCisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjcmVhdGVTaGFyZWQpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmNyZWF0ZUZyb21VVEY4KToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6UmVwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjaGVj
a0NvbnNpc3RlbmN5KToKKworICAgICAgICAoSlNDOjpVU3RyaW5nOjpCYXNlU3RyaW5nOjp0cnlU
b01ha2VVbnNoYXJlZCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnRyeVRv
TWFrZU1vZGlmaWFibGUpOgorICAgICAgICAoSlNDOjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OmV4cGFuZFByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UmVwKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0cmluZyk6CisgICAgICAgIChKU0M6OmNv
bmNhdGVuYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6VVN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6bWFrZU51bGwp
OgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudWxsUmVwKToKKyAgICAgICAgRW5zdXJlIHRoYXQg
dGhlIGJ1ZmZlciBpc24ndCBiZWluZyBtb2RpZmVkIHdoZW4gaXQgaXMgYmVpZ24gc2hhcmVkIGFj
cm9zcyBjbGFzc2VzL3RocmVhZHMuCisKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpiYXNlSXNTZWxmKToKKyAgICAgICAgKEpTQzo6VVN0
cmluZzo6UmVwOjppZGVudGlmaWVyVGFibGUpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6
OnNldElkZW50aWZpZXJUYWJsZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6aXNTdGF0
aWMpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OnNldFN0YXRpYyk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6OlJlcDo6c2V0QmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6
OlJlcDo6YmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6KToKKyAgICAg
ICAgKEpTQzo6VVN0cmluZzo6UmVwOjpudWxsKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVw
OjplbXB0eSk6CisgICAgICAgIEFkZGVkIGEgMm5kIGZsYWcgaW50byB0aGUgbV9pZGVudGlmaWVy
VGFibGUgdmFyaWFibGUgYW5kIG1hZGUgYSB0ZW1wbGF0ZSBjbGFzcyB0byBtYWtlIHRoZQorICAg
ICAgICBwb2ludGVyIGNvbWJpbmVkIHdpdGggZmxhZ3MgbW9yZSByZWFkYWJsZS4KKworICAgICAg
ICBUaGUgYWRkaXRpb25hbCBmbGFnIGluZGljYXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEg
VVN0cmluZzo6UmVwCisgICAgICAgIGFuZCBhIFVTdHJpbmc6OkJhc2VTdHJpbmcuICBUaGlzIHNl
cGFyYXRpb24gYWxsb3dzIGEgc2F2aW5ncyBvZiAyNCBieXRlcyBpbiBlYWNoIFVTdHJpbmc6OlJl
cC4KKyAgICAgICAgCisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnJhd1NoYXJl
ZERhdGFIb2xkZXIpOgorICAgICAgICBwcmVDYXBhY2l0eSBpcyBub3cgdGhlIGZpcnN0ICpDYXBh
Y2l0eSBmaWVsZCB3aGljaCBtZWFucyB0aGF0IFVTdHJpbmc6OkJhc2VTdHJpbmc6OmRhdGEoKSBv
bmx5IAorICAgICAgICB1c2VzIGZpZWxkcyB3aXRoaW4gdGhlIGZpcnN0IDMyIGJ5dGVzIG9mIEJh
c2VTdHJpbmcuCisKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0cmluZyk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6On5VU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6aXNOdWxsKToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6bnVsbCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OnNo
YXJlZERhdGFIb2xkZXIpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmRhdGEpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjpCYXNlU3RyaW5nOjpzaGFyZWREYXRhSG9sZGVyKToKKyAgICAg
ICAgKEpTQzo6VVN0cmluZzo6Y29zdCk6CisgICAgICAgIChXVEY6Oik6CisKKyAgICAgICAgKiB3
dGYvUHRyQW5kRmxhZ3MuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdzOjpQdHJB
bmRGbGFncyk6CisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdzOjppc0ZsYWdTZXQpOgorICAgICAg
ICAoV1RGOjpQdHJBbmRGbGFnczo6c2V0RmxhZyk6CisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdz
OjpjbGVhckZsYWcpOgorICAgICAgICAoV1RGOjpQdHJBbmRGbGFnczo6Z2V0KToKKyAgICAgICAg
KFdURjo6UHRyQW5kRmxhZ3M6OnNldCk6CisgICAgICAgIEEgc2ltcGxlIHdheSB0byBsYXllciB0
b2dldGhlciBhIHBvaW50ZXIgYW5kIDIgZmxhZ3MuICBJdCByZWxpZXMgb24gdGhlIHBvaW50ZXIg
YmVpbmcgNCBieXRlIGFsaWduZWQsCisgICAgICAgIHdoaWNoIHNob3VsZCBoYXBwZW4gZm9yIGFs
bCBhbGxvY2F0b3JzIChkdWUgdG8gYWxpZ25pbmcgcG9pbnRlcnMsIGludCdzLCBldGMuIG9uIDQg
Ynl0ZSBib3VuZGFyaWVzKS4KKyAgICAgICAgCisgICAgICAgICogd3RmL1JlZkNvdW50ZWQuaDoK
KyAgICAgICAgKiB3dGYvU2hhcmVkRGF0YUhvbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
UmVmQ291bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6aGFzT25lUmVmKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6aXNUaHJlYWRTaGFyZWQpOgorICAgICAgICAoV1RGOjpS
ZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRCYXNlOjpSZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRCYXNl
KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6flJlZkNvdW50
V2l0aFRocmVhZFNoYXJlZEJhc2UpOgorICAgICAgICAoV1RGOjpSZWZDb3VudFdpdGhUaHJlYWRT
aGFyZWRCYXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAoV1RGOjpSZWZDb3VudFdpdGhUaHJlYWRT
aGFyZWRCYXNlOjpzaG91bGREZWxldGVTaGFyZWREYXRhKToKKyAgICAgICAgKFdURjo6U2hhcmVk
RGF0YUhvbGRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6U2hhcmVkRGF0YUhvbGRlcjo6dW5z
aGFyZSk6CisgICAgICAgIChXVEY6OlNoYXJlZERhdGFIb2xkZXI6OmRlcmVmKToKKyAgICAgICAg
KFdURjo6U2hhcmVkRGF0YUhvbGRlcjo6Y29weSk6CisgICAgICAgIChXVEY6OlNoYXJlZERhdGFI
b2xkZXI6OlNoYXJlZERhdGFIb2xkZXIpOgorICAgICAgICAoV1RGOjpTaGFyZWREYXRhSG9sZGVy
Ojp+U2hhcmVkRGF0YUhvbGRlcik6CisgICAgICAgIEFsbG93cyBmb3IgZWFzaWx5IHNoYXJpbmcg
ZGF0YSBhY3Jvc3MgdGhyZWFkcyBvciB3aXRoaW4gYSB0aHJlYWQuICBUaGlzIGRvZXMgcmVmIGNv
dW50aW5nIHVzaW5nCisgICAgICAgIG5vcm1hbCBpbmNyZW1lbnQvZGVjcmVtZW50IHdpdGhpbiBh
IHRocmVhZCBhbmQgYXRvbWljSW5jcmVtZW50L0RlY3JlbWVudCBhY3Jvc3MgdGhyZWFkcy4gIChP
bmUKKyAgICAgICAgY2FsbHMgImNvcHkiIHRvIGdldCBhbiBpbnN0YW5jZSB0byBiZSB1c2VkIG9u
IGFub3RoZXIgdGhyZWFkLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIFdlYktpdCBjb2Rl
LikKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkU2Fm
ZVNoYXJlZEJhc2U6OlRocmVhZFNhZmVTaGFyZWRCYXNlKToKKyAgICAgICAgKFdURjo6VGhyZWFk
U2FmZVNoYXJlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVTaGFy
ZWQ6OlRocmVhZFNhZmVTaGFyZWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlU2hhcmVkOjpk
ZXJlZik6CisKIDIwMDktMDEtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggOWY5OTNhYS4uM2Q2MTc3YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIxOSw2ICsy
MTksNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYv
T3duUHRyLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmggXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3Mu
aCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCUphdmFTY3JpcHRD
b3JlL3d0Zi9SYW5kb21OdW1iZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJl
clNlZWQuaCBcCkBAIC0yMjgsNiArMjI5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvUmVm
UHRySGFzaE1hcC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvUmV0YWluUHRyLmggXAorCUphdmFT
Y3JpcHRDb3JlL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9T
dGRMaWJFeHRyYXMuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0V4dHJhcy5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvVENQYWNrZWRDYWNoZS5oIFwKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAppbmRleCBkNjVhOTc3Li5lZDdmMGI4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0yMTAsNyArMjEwLDggQEAgX19aTjNKU0M3UHJvZmlsZTVmb2N1c0VQS05TXzExUHJvZmls
ZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2V4Y2x1ZGVFUEtOU18xMVByb2ZpbGVOb2RlRQogX19a
TjNKU0M3UHJvZmlsZTdmb3JFYWNoRU1OU18xMVByb2ZpbGVOb2RlRUZ2dkUKIF9fWk4zSlNDN1VT
dHJpbmczUmVwMTFjb21wdXRlSGFzaEVQS3RpCi1fX1pOM0pTQzdVU3RyaW5nM1JlcDRudWxsRQor
X19aTjNKU0M3VVN0cmluZzNSZXAxMmNyZWF0ZVNoYXJlZEVQdGlOM1dURjEwUGFzc1JlZlB0cklO
UzNfMTZTaGFyZWREYXRhSG9sZGVySXRFRUVFCitfX1pOM0pTQzdVU3RyaW5nM1JlcDE0bnVsbEJh
c2VTdHJpbmdFCiBfX1pOM0pTQzdVU3RyaW5nM1JlcDdkZXN0cm95RXYKIF9fWk4zSlNDN1VTdHJp
bmc0ZnJvbUVpCiBfX1pOM0pTQzdVU3RyaW5nNGZyb21FagpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IGY2OTYwOGYuLjVj
NGFiZTMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
V1RGL1dURi52Y3Byb2oKQEAgLTM1OSw2ICszNTksMTAgQEAKIAkJCT4NCiAJCTwvRmlsZT4NCiAJ
CTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUHRyQW5kRmxhZ3MuaCINCisJCQk+
DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFJhbmRv
bU51bWJlci5jcHAiDQogCQkJPg0KIAkJPC9GaWxlPg0KQEAgLTM5MSw2ICszOTUsMTAgQEAKIAkJ
CT4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcU2hh
cmVkRGF0YUhvbGRlci5oIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx3dGZcU3RkTGliRXh0cmFzLmgiDQogCQkJPg0KIAkJPC9GaWxlPg0KZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDcxN2FlYTkuLmQ1ZDliZjYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzks
NiArMzksOCBAQAogCQkwODhGQTVCQjBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OEZBNUI5
MEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuY3BwICovOyB9OwogCQkwODhGQTVCQzBF
Rjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODhGQTVCQTBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9t
TnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDhFMjc5RTkwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RTI3OUU4MEVGODNCMTAw
MDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi87IH07CisJCTBCNTlCRUVDMEYxMjFDMDgw
MEUwRjAxQSAvKiBQdHJBbmRGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEI1OUJFRUIwRjEyMUMwODAwRTBGMDFBIC8qIFB0ckFuZEZsYWdzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEI4NENC
RjgwRjExNzk5QjAwOTg5RTFFIC8qIFNoYXJlZERhdGFIb2xkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCODRDQkY3MEYxMTc5OUIwMDk4OUUxRSAv
KiBTaGFyZWREYXRhSG9sZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQwQjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTQWN0aXZhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBODE4
RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmNwcCAqLzsgfTsKIAkJMTQwRDE3RDcw
RThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jh
c2VQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQxMjExMzEwQTQ4Nzk0RDAwNDgwMjU1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1
QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CkBA
IC00MTksNiArNDIxLDggQEAKIAkJMDg4RkE1QjkwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51
bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSYW5kb21OdW1i
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODhGQTVCQTBFRjc2RDQzMDA1
NzhFNkYgLyogUmFuZG9tTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJhbmRvbU51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEUyNzlFODBF
RjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSYW5kb21OdW1iZXJTZWVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBCNTlCRUVCMEYxMjFDMDgwMEUwRjAxQSAvKiBQdHJBbmRGbGFncy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdHJBbmRGbGFncy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwQjg0Q0JGNzBGMTE3OTlCMDA5ODlFMUUgLyogU2hhcmVkRGF0YUhvbGRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWREYXRhSG9sZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAv
KiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFz
ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjExMDIwQTQ4Nzgw
OTAwNDgwMjU1IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0g
bWluaWRvbS5jOyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9t
aW5pZG9tLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwNSw2ICsxMTA5LDcg
QEAKIAkJCQk5MzAzRjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8sCiAJCQkJNjU4
MEY3OTUwOTQwNzA1NjAwODJDMjE5IC8qIFBhc3NSZWZQdHIuaCAqLywKIAkJCQk2NUQ2RDg3RTA5
QjVBMzJFMDAwMkU0RDcgLyogUGxhdGZvcm0uaCAqLywKKwkJCQkwQjU5QkVFQjBGMTIxQzA4MDBF
MEYwMUEgLyogUHRyQW5kRmxhZ3MuaCAqLywKIAkJCQkwODhGQTVCOTBFRjc2RDQzMDA1NzhFNkYg
LyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQkwODhGQTVCQTBFRjc2RDQzMDA1NzhFNkYgLyog
UmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJMDhFMjc5RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRv
bU51bWJlclNlZWQuaCAqLywKQEAgLTExMTQsNiArMTExOSw3IEBACiAJCQkJNjVDNjQ3QjMwOTNF
RjhENjAwMjJDMzgwIC8qIFJlZlB0ci5oICovLAogCQkJCTE0OEExRUNEMEQxMEMyM0IwMDY5QTQ3
QyAvKiBSZWZQdHJIYXNoTWFwLmggKi8sCiAJCQkJNTFGNjQ4RDYwQkI0RTJDQTAwMzNENzYwIC8q
IFJldGFpblB0ci5oICovLAorCQkJCTBCODRDQkY3MEYxMTc5OUIwMDk4OUUxRSAvKiBTaGFyZWRE
YXRhSG9sZGVyLmggKi8sCiAJCQkJRkUxQjQ0NzkwRUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4
dHJhcy5oICovLAogCQkJCUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMu
aCAqLywKIAkJCQk1REE0Nzk2NTBDRkJDRjU2MDA5MzI4QTAgLyogVENQYWNrZWRDYWNoZS5oICov
LApAQCAtMTEyMiw4ICsxMTI4LDggQEAKIAkJCQk2NTQxQkQ3MDA4RTgwQTE3MDAyQ0JFRTcgLyog
VENTeXN0ZW1BbGxvYy5jcHAgKi8sCiAJCQkJNjU0MUJENzEwOEU4MEExNzAwMkNCRUU3IC8qIFRD
U3lzdGVtQWxsb2MuaCAqLywKIAkJCQlFMUI3QzhCRDBEQTNBMzM2MDA3NEIwREMgLyogVGhyZWFk
U3BlY2lmaWMuaCAqLywKLQkJCQlFMUVFNzkyMjBENkM5NUNEMDBGRUEzQkEgLyogVGhyZWFkaW5n
LmggKi8sCiAJCQkJNUQ2QTU2NkEwRjA1OTk1NTAwMjY2MTQ1IC8qIFRocmVhZGluZy5jcHAgKi8s
CisJCQkJRTFFRTc5MjIwRDZDOTVDRDAwRkVBM0JBIC8qIFRocmVhZGluZy5oICovLAogCQkJCUUx
RUU3OTNDMEQ2QzlCOTIwMEZFQTNCQSAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJ
OTM1QUY0NkIwOUU5RDlEQjAwQUNEMUQ4IC8qIFVudXNlZFBhcmFtLmggKi8sCiAJCQkJNjU5MkMz
MTYwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rvci5oICovLApAQCAtMTIwMyw2ICsxMjA5LDggQEAK
IAkJCQk3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogQm9vbGVhbk9iamVjdC5oICovLAogCQkJ
CUJDNzk1MjM0MEUxNUVCNTYwMEE4OThBQiAvKiBCb29sZWFuUHJvdG90eXBlLmNwcCAqLywKIAkJ
CQlCQzc5NTIzNTBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5oICovLAorCQkJ
CUE3OTFFRTVBMEYxMUQ5MEMwMEFFMUY2OCAvKiBCeXRlQXJyYXkuY3BwICovLAorCQkJCUE3OTFF
RTU5MEYxMUQ5MEMwMEFFMUY2OCAvKiBCeXRlQXJyYXkuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgy
NjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4
RjZCOSAvKiBDYWxsRGF0YS5oICovLAogCQkJCUJDNkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBD
bGFzc0luZm8uaCAqLywKQEAgLTEyNTEsNiArMTI1OSw4IEBACiAJCQkJMTREQTgxOEUwRDk5RkQy
MDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQz
MEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyog
SlNBcnJheS5oICovLAorCQkJCUE3OTFFRjI3MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJh
eS5jcHAgKi8sCisJCQkJQTc5MUVGMjYwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5Lmgg
Ki8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCiAJCQkJ
QkMxMTY3RDgwRTE5QkNDOTAwODA2NkREIC8qIEpTQ2VsbC5oICovLAogCQkJCUY2OTJBODVFMDI1
NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKQEAgLTEzNDUsMTAgKzEzNTUsNiBA
QAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBUeXBlSW5mby5oICovLAogCQkJCUY2
OTJBODg1MDI1NTU5N0QwMUZGNjBGNyAvKiBVU3RyaW5nLmNwcCAqLywKIAkJCQlGNjkyQTg4NjAy
NTU1OTdEMDFGRjYwRjcgLyogVVN0cmluZy5oICovLAotCQkJCUE3OTFFRTU5MEYxMUQ5MEMwMEFF
MUY2OCAvKiBCeXRlQXJyYXkuaCAqLywKLQkJCQlBNzkxRUU1QTBGMTFEOTBDMDBBRTFGNjggLyog
Qnl0ZUFycmF5LmNwcCAqLywKLQkJCQlBNzkxRUYyNjBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRl
QXJyYXkuaCAqLywKLQkJCQlBNzkxRUYyNzBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXku
Y3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1lOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTE0OTAsNiArMTQ5Niw3IEBACiAJCQkJQkMxOEMzRUEwRTE2RjVDRDAwQjM0NDYw
IC8qIEFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3
NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE3OTFFRTVCMEYxMUQ5MEMwMEFFMUY2OCAvKiBCeXRlQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk2OUEwNzIzMEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDhERTBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZy
YW1lLmggaW4gSGVhZGVycyAqLywKQEAgLTE1NDYsNiArMTU1Myw3IEBACiAJCQkJQkMxOEM0MTcw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3
MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
NzkxRUYyODBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNr
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjAsNiArMTYyOCw3IEBA
CiAJCQkJQkMxOEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMjU3REY0MEUxRjUzNzQwMDE2QjZDOSAvKiBQcm90b3R5cGVGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEI1OUJFRUMwRjEyMUMwODAwRTBGMDFBIC8qIFB0ckFu
ZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyog
UHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5REE0QTBFRDI0NUVDMDBC
ODk2MTkgLyogUXVhbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4RkE1QkMwRUY3NkQ0
MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQyLDYgKzE2
NTEsNyBAQAogCQkJCTE0MjlEODg2MEVEMjFDM0QwMEI4OTYxOSAvKiBTYW1wbGluZ1Rvb2wuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDYxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTY29wZUNoYWlu
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVu
dGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwQjg0Q0JGODBGMTE3OTlCMDA5ODlFMUUg
LyogU2hhcmVkRGF0YUhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5
NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNjg3LDggKzE2OTcsNiBAQAogCQkJCUJDMThDNDREMEUxNkY1Q0QwMEIzNDQ2MCAvKiBwY3Jl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0RTBFMTZGNUNEMDBCMzQ0NjAgLyogcGNyZV9p
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NzIwRTE2RjVDRDAwQjM0NDYwIC8q
IHVjcGludGVybmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzkxRUU1QjBGMTFEOTBDMDBBRTFG
NjggLyogQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzkxRUYyODBGMTFFMDc5MDBB
RTFGNjggLyogSlNCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTk3NCw2ICsxOTgyLDcg
QEAKIAkJCWZpbGVzID0gKAogCQkJCTY1OTEyNkJEMEJERDE3MjgwMDE5MjFGQiAvKiBBbGxJbk9u
ZUZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVGREU0OUMwQkREMUQ0QTAwRTgwMTExIC8q
IEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTc5MUVFNUMwRjExRDkwQzAwQUUx
RjY4IC8qIEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDhERDBFRDIyMDVC
MDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOUM0MEVE
MjNDMzkwMEI4OTYxOSAvKiBDaGFyYWN0ZXJDbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
RTJBREQ5MDBFNzlBQzExMDBENTBDNTEgLyogQ2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTE5OTQsNiArMjAwMyw3IEBACiAJCQkJODZDQzg1QzQwRUU3QTg5
NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0FjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBNzkxRUYyOTBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEg
LyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0
MzdGRUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MjAyNCw2ICsyMDM0LDcgQEAKIAkJCQlCQ0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0
dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBT
dHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGMEQwQzBFRjBCOEE1MDA0
MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUQ2QTU2
NkIwRjA1OTk1NTAwMjY2MTQ1IC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MUVFNzkzRDBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTVDRDQxQjMwRTFCRjY1NjAwODUzNThFIC8qIFRyZWVQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRUY3OUFBMENFOTdCQTYwMDg4RDUwMCAvKiBVVEY4LmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjAzNiw5ICsyMDQ3LDYgQEAKIAkJCQk5MzA3NTREMDA4QjBGNzQ2
MDBBQjMwNTYgLyogcGNyZV90YWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM3MDEzNDgw
Q0E5N0UwRTAwRkExNEQzIC8qIHBjcmVfdWNwX3NlYXJjaGZ1bmNzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRTI2QkQ0MDhCMTUxNDEwMEY4NTIyNiAvKiBwY3JlX3hjbGFzcy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1RDZBNTY2QjBGMDU5OTU1MDAyNjYxNDUgLyogVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUE3OTFFRTVDMEYxMUQ5MEMwMEFFMUY2OCAvKiBCeXRlQXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTc5MUVGMjkwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0
ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JZGVudGlmaWVyLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5j
cHAKaW5kZXggODM3MjAxMC4uMDQwYzEyMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JZGVudGlmaWVyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZp
ZXIuY3BwCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3Igewog
UGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IElkZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgaWYgKCFjKSB7Ci0gICAgICAgIFVTdHJp
bmc6OlJlcDo6bnVsbC5oYXNoKCk7Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpudWxs
OworICAgICAgICBVU3RyaW5nOjpSZXA6Om51bGwoKS5oYXNoKCk7CisgICAgICAgIHJldHVybiAm
VVN0cmluZzo6UmVwOjpudWxsKCk7CiAgICAgfQogICAgIGlmICghY1swXSkgewotICAgICAgICBV
U3RyaW5nOjpSZXA6OmVtcHR5Lmhhc2goKTsKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6
OmVtcHR5OworICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCkuaGFzaCgpOworICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsKICAgICB9CiAgICAgaWYgKCFjWzFdKQogICAg
ICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmdSZXAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY1swXSkpKTsK
QEAgLTE5NCw4ICsxOTQsOCBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmllcjo6
YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqCiAgICAgICAgICAgICBy
ZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFy
YWN0ZXJTdHJpbmdSZXAoYykpOwogICAgIH0KICAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBV
U3RyaW5nOjpSZXA6OmVtcHR5Lmhhc2goKTsKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6
OmVtcHR5OworICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5KCkuaGFzaCgpOworICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsKICAgICB9CiAgICAgVUNoYXJCdWZmZXIgYnVm
ID0ge3MsIGxlbmd0aH07IAogICAgIHBhaXI8SGFzaFNldDxVU3RyaW5nOjpSZXAqPjo6aXRlcmF0
b3IsIGJvb2w+IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkPFVD
aGFyQnVmZmVyLCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CkBAIC0yMjUsOCArMjI1LDgg
QEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVVN0cmkKICAgICAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KCFyLT5sZW4pIHsKLSAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0eS5oYXNoKCk7Ci0gICAgICAg
IHJldHVybiAmVVN0cmluZzo6UmVwOjplbXB0eTsKKyAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0
eSgpLmhhc2goKTsKKyAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CiAgICAg
fQogICAgIHJldHVybiAqZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuZmlyc3Q7
CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApp
bmRleCBhMTdjMzg2Li5jZGE5ZmIxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgc3RhdGljIHB0aHJlYWRfb25j
ZV90IGluaXRpYWxpemVUaHJlYWRpbmdLZXlPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CiBzdGF0
aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nT25jZSgpCiB7CiAgICAgV1RGOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CisgICAgaW5pdGlhbGl6ZVVTdHJpbmcoKTsKICNpZiBFTkFCTEUoSlNDX01V
TFRJUExFX1RIUkVBRFMpCiAgICAgc19kdG9hUDVNdXRleCA9IG5ldyBNdXRleDsKLSAgICBVU3Ry
aW5nOjpudWxsKCk7CiAgICAgaW5pdERhdGVNYXRoKCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCA2MmRmNjVlLi5kNjcxYTY5IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCkBAIC0zMCwxNSArMzAsMTYgQEAKICNp
bmNsdWRlICJKU0dsb2JhbERhdGEuaCIKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRl
ICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUg
IkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJK
U0xvY2suaCIKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdGF0aWNT
Y29wZU9iamVjdC5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCi0jaW5jbHVkZSAiQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRl
ICJMb29rdXAuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgpAQCAtMTQyLDYgKzE0Myw3IEBAIEpTR2xv
YmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0ds
b2JhbERhdGE6OmNyZWF0ZSgpCiB7CisgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAppbmRleCA0N2U5ZDg0Li4wODc4ZTczIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcApAQCAtMjcsNyAr
MjcsNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IHNldFRocmVzaG9sZCA9IDIwOwogCiB2b2lkIFBy
b3BlcnR5TmFtZUFycmF5OjphZGQoVVN0cmluZzo6UmVwKiBpZGVudGlmaWVyKQogewotICAgIEFT
U0VSVChpZGVudGlmaWVyID09ICZVU3RyaW5nOjpSZXA6Om51bGwgfHwgaWRlbnRpZmllciA9PSAm
VVN0cmluZzo6UmVwOjplbXB0eSB8fCBpZGVudGlmaWVyLT5pZGVudGlmaWVyVGFibGUoKSk7Cisg
ICAgQVNTRVJUKGlkZW50aWZpZXIgPT0gJlVTdHJpbmc6OlJlcDo6bnVsbCgpIHx8IGlkZW50aWZp
ZXIgPT0gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKSB8fCBpZGVudGlmaWVyLT5pZGVudGlmaWVyVGFi
bGUoKSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCku
c2l6ZSgpOwogICAgIGlmIChzaXplIDwgc2V0VGhyZXNob2xkKSB7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NtYWxsU3RyaW5ncy5jcHAKaW5kZXggMDY4MTFiOS4uZDMwMjkxNSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcApAQCAtMjksNDggKzI5LDUwIEBACiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKIG5hbWVzcGFjZSBKU0Mgeworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bUNoYXJhY3RlcnNUb1N0b3JlID0gMHgxMDA7IC8vIE5vdGUgdGhhdCBTbWFsbFN0cmlu
Z3M6Om1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncyBzaG91bGQgYmUgdGhlIHNhbWUgc2l6ZS4KIAot
Y2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZSB7CitjbGFzcyBTbWFsbFN0cmluZ3NTdG9yYWdlIDog
Tm9uY29weWFibGUgewogcHVibGljOgogICAgIFNtYWxsU3RyaW5nc1N0b3JhZ2UoKTsKLSAgICB+
U21hbGxTdHJpbmdzU3RvcmFnZSgpOwogCi0gICAgVVN0cmluZzo6UmVwKiByZXAodW5zaWduZWQg
Y2hhciBjaGFyYWN0ZXIpIHsgcmV0dXJuICZyZXBzW2NoYXJhY3Rlcl07IH0KKyAgICBVU3RyaW5n
OjpSZXAqIHJlcCh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gJm1fcmVwc1tjaGFy
YWN0ZXJdOyB9CiAKIHByaXZhdGU6Ci0gICAgVUNoYXIgY2hhcmFjdGVyc1sweDEwMF07Ci0gICAg
VVN0cmluZzo6UmVwKiByZXBzOworICAgIFVDaGFyIG1fY2hhcmFjdGVyc1tudW1DaGFyYWN0ZXJz
VG9TdG9yZV07CisgICAgVVN0cmluZzo6QmFzZVN0cmluZyBtX2Jhc2U7CisgICAgVVN0cmluZzo6
UmVwIG1fcmVwc1tudW1DaGFyYWN0ZXJzVG9TdG9yZV07CiB9OwogCiBTbWFsbFN0cmluZ3NTdG9y
YWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKCkKLSAgICA6IHJlcHMoc3RhdGljX2Nhc3Q8VVN0cmlu
Zzo6UmVwKj4oZmFzdFplcm9lZE1hbGxvYyhzaXplb2YoVVN0cmluZzo6UmVwKSAqIDB4MTAwKSkp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MTAwOyArK2kpIHsKLSAgICAgICAg
Y2hhcmFjdGVyc1tpXSA9IGk7Ci0gICAgICAgIHJlcHNbaV0ub2Zmc2V0ID0gaTsKLSAgICAgICAg
cmVwc1tpXS5sZW4gPSAxOwotICAgICAgICByZXBzW2ldLnJjID0gMTsKLSAgICAgICAgcmVwc1tp
XS5iYXNlU3RyaW5nID0gJnJlcHNbMF07Ci0gICAgfQotICAgIHJlcHNbMF0ucmMgPSAweDEwMTsK
LSAgICByZXBzWzBdLmJ1ZiA9IGNoYXJhY3RlcnM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUNoYXJhY3RlcnNUb1N0b3JlOyArK2kpCisgICAgICAgIG1fY2hhcmFjdGVyc1tpXSA9
IGk7CiAKKyAgICBtZW1zZXQoJm1fYmFzZSwgMCwgc2l6ZW9mKFVTdHJpbmc6OkJhc2VTdHJpbmcp
KTsKKyAgICBtX2Jhc2UucmMgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7CisgICAgbV9iYXNl
LmJ1ZiA9IG1fY2hhcmFjdGVyczsKKyAgICBtX2Jhc2UubV9pZGVudGlmaWVyVGFibGVBbmRGbGFn
cy5zZXRGbGFnKFVTdHJpbmc6OlJlcDo6QmFzZVN0cmluZ0ZsYWcpOwogICAgIC8vIG1ha2Ugc3Vy
ZSBVU3RyaW5nIGRvZXNuJ3QgdHJ5IHRvIHJldXNlIHRoZSBidWZmZXIgYnkgcHJldGVuZGluZyB3
ZSBoYXZlIG9uZSBtb3JlIGNoYXJhY3RlciBpbiBpdAotICAgIHJlcHNbMF0udXNlZENhcGFjaXR5
ID0gMHgxMDE7Ci0gICAgcmVwc1swXS5jYXBhY2l0eSA9IDB4MTAxOwotfQorICAgIG1fYmFzZS51
c2VkQ2FwYWNpdHkgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7CisgICAgbV9iYXNlLmNhcGFj
aXR5ID0gbnVtQ2hhcmFjdGVyc1RvU3RvcmUgKyAxOwogCi1TbWFsbFN0cmluZ3NTdG9yYWdlOjp+
U21hbGxTdHJpbmdzU3RvcmFnZSgpCi17Ci0gICAgZmFzdEZyZWUocmVwcyk7CisgICAgbWVtc2V0
KCZtX3JlcHMsIDAsIHNpemVvZihtX3JlcHMpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2hhcmFjdGVyc1RvU3RvcmU7ICsraSkgeworICAgICAgICBtX3JlcHNbaV0ub2Zmc2V0
ID0gaTsKKyAgICAgICAgbV9yZXBzW2ldLmxlbiA9IDE7CisgICAgICAgIG1fcmVwc1tpXS5yYyA9
IDE7CisgICAgICAgIG1fcmVwc1tpXS5zZXRCYXNlU3RyaW5nKCZtX2Jhc2UpOworICAgIH0KIH0K
IAogU21hbGxTdHJpbmdzOjpTbWFsbFN0cmluZ3MoKQogICAgIDogbV9lbXB0eVN0cmluZygwKQog
ICAgICwgbV9zdG9yYWdlKDApCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MTAw
OyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnNUb1N0b3Jl
OyArK2kpCiAgICAgICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSA9IDA7CiB9CiAKQEAg
LTgyLDcgKzg0LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6Om1hcmsoKQogewogICAgIGlmIChtX2Vt
cHR5U3RyaW5nICYmICFtX2VtcHR5U3RyaW5nLT5tYXJrZWQoKSkKICAgICAgICAgbV9lbXB0eVN0
cmluZy0+bWFyaygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAweDEwMDsgKytpKSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnNUb1N0b3JlOyArK2kp
IHsKICAgICAgICAgaWYgKG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSAmJiAhbV9zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzW2ldLT5tYXJrZWQoKSkKICAgICAgICAgICAgIG1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nc1tpXS0+bWFyaygpOwogICAgIH0KQEAgLTEwOSw0ICsxMTEsNCBAQCBVU3RyaW5n
OjpSZXAqIFNtYWxsU3RyaW5nczo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNo
YXIgY2hhcmFjdGVyKQogICAgIHJldHVybiBtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpOwogfQog
Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5o
CmluZGV4IDdlNWY1YzguLjc3MjcyMWEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmlu
Z3MuaApAQCAtNTUsOSArNTUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
ICAgIFVTdHJpbmc6OlJlcCogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNoYXIg
Y2hhcmFjdGVyKTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBtYXJrKCk7Ci0gICAgICAgIAor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2JhbERh
dGEqKTsKICAgICAgICAgdm9pZCBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9iYWxE
YXRhKiwgdW5zaWduZWQgY2hhcik7CkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU1N0cmluZyogbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzB4MTAwXTsKICAgICAg
ICAgT3duUHRyPFNtYWxsU3RyaW5nc1N0b3JhZ2U+IG1fc3RvcmFnZTsKICAgICB9OwotICAgIAot
fQogCi0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU21hbGxTdHJpbmdz
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCmluZGV4IDQ1ZGYyNDguLmNiNGJhNzUgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcApAQCAtMTg2LDggKzE4NiwzNyBAQCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1N0cmluZyYgYzEsIGNvbnN0IENTdHJpbmcmIGMyKQogLy8gVGhlc2Ug
c3RhdGljIHN0cmluZ3MgYXJlIGltbXV0YWJsZSwgZXhjZXB0IGZvciByYywgd2hvc2UgaW5pdGlh
bCB2YWx1ZSBpcyBjaG9zZW4gdG8gCiAvLyByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGl0IGJl
Y29taW5nIHplcm8gZHVlIHRvIHJlZi9kZXJlZiBub3QgYmVpbmcgdGhyZWFkLXNhZmUuCiBzdGF0
aWMgVUNoYXIgc2hhcmVkRW1wdHlDaGFyOwotVVN0cmluZzo6UmVwIFVTdHJpbmc6OlJlcDo6bnVs
bCA9IHsgMCwgMCwgSU5UX01BWCAvIDIsIDAsIDEsICZVU3RyaW5nOjpSZXA6Om51bGwsIDAsIDAs
IDAsIDAsIDAsIDAgfTsKLVVTdHJpbmc6OlJlcCBVU3RyaW5nOjpSZXA6OmVtcHR5ID0geyAwLCAw
LCBJTlRfTUFYIC8gMiwgMCwgMSwgJlVTdHJpbmc6OlJlcDo6ZW1wdHksIDAsICZzaGFyZWRFbXB0
eUNoYXIsIDAsIDAsIDAsIDAgfTsKK1VTdHJpbmc6OkJhc2VTdHJpbmcqIFVTdHJpbmc6OlJlcDo6
bnVsbEJhc2VTdHJpbmc7CitVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5nOjpSZXA6OmVtcHR5
QmFzZVN0cmluZzsKK1VTdHJpbmcqIFVTdHJpbmc6Om51bGxVU3RyaW5nOworCit2b2lkIGluaXRp
YWxpemVTdGF0aWNCYXNlU3RyaW5nKGludCBsZW4sIFVDaGFyKiBidWYsIFVTdHJpbmc6OkJhc2VT
dHJpbmcmIGJhc2UpCit7CisgICAgYmFzZS5vZmZzZXQgPSAwOworICAgIGJhc2UubGVuID0gbGVu
OworICAgIGJhc2UucmMgPSBJTlRfTUFYIC8gMjsKKyAgICBiYXNlLl9oYXNoID0gMDsKKyAgICBi
YXNlLm1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3Muc2V0RmxhZyhVU3RyaW5nOjpSZXA6OlN0YXRp
Y0ZsYWcpOworICAgIGJhc2UubV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFnKFVTdHJp
bmc6OlJlcDo6QmFzZVN0cmluZ0ZsYWcpOworICAgIGJhc2UubV9iYXNlU3RyaW5nT3JTaGFyZWRE
YXRhID0gMDsKKyAgICBiYXNlLmJ1ZiA9IGJ1ZjsKKyAgICBiYXNlLnByZUNhcGFjaXR5ID0gMDsK
KyAgICBiYXNlLnVzZWRQcmVDYXBhY2l0eSA9IDA7CisgICAgYmFzZS5jYXBhY2l0eSA9IDA7Cisg
ICAgYmFzZS51c2VkQ2FwYWNpdHkgPSAwOworICAgIGJhc2UucmVwb3J0ZWRDb3N0ID0gMDsKK30K
Kwordm9pZCBpbml0aWFsaXplVVN0cmluZygpCit7CisgICAgVVN0cmluZzo6UmVwOjpudWxsQmFz
ZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpCYXNlU3RyaW5nOworICAgIGluaXRpYWxpemVTdGF0aWNC
YXNlU3RyaW5nKDAsIDAsICpVU3RyaW5nOjpSZXA6Om51bGxCYXNlU3RyaW5nKTsKKworICAgIFVT
dHJpbmc6OlJlcDo6ZW1wdHlCYXNlU3RyaW5nID0gbmV3IFVTdHJpbmc6OkJhc2VTdHJpbmc7Cisg
ICAgaW5pdGlhbGl6ZVN0YXRpY0Jhc2VTdHJpbmcoMCwgJnNoYXJlZEVtcHR5Q2hhciwgKlVTdHJp
bmc6OlJlcDo6ZW1wdHlCYXNlU3RyaW5nKTsKKworICAgIFVTdHJpbmc6Om51bGxVU3RyaW5nID0g
bmV3IFVTdHJpbmc7Cit9CiAKIHN0YXRpYyBjaGFyKiBzdGF0QnVmZmVyID0gMDsgLy8gT25seSB1
c2VkIGZvciBkZWJ1Z2dpbmcgdmlhIFVTdHJpbmc6OmFzY2lpKCkuCiAKQEAgLTIwMCwxMyArMjI5
LDEzIEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZUNvcHlp
bmcoY29uc3QgVUNoYXIqIGQsIGludCBsKQogCiBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0
cmluZzo6UmVwOjpjcmVhdGUoVUNoYXIqIGQsIGludCBsKQogewotICAgIFJlcCogciA9IG5ldyBS
ZXA7CisgICAgQmFzZVN0cmluZyogciA9IG5ldyBCYXNlU3RyaW5nOwogICAgIHItPm9mZnNldCA9
IDA7CiAgICAgci0+bGVuID0gbDsKICAgICByLT5yYyA9IDE7CiAgICAgci0+X2hhc2ggPSAwOwot
ICAgIHItPm1faWRlbnRpZmllclRhYmxlID0gMDsKLSAgICByLT5iYXNlU3RyaW5nID0gcjsKKyAg
ICByLT5tX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLnNldEZsYWcoQmFzZVN0cmluZ0ZsYWcpOwor
ICAgIHItPm1fYmFzZVN0cmluZ09yU2hhcmVkRGF0YSA9IDA7CiAgICAgci0+cmVwb3J0ZWRDb3N0
ID0gMDsKICAgICByLT5idWYgPSBkOwogICAgIHItPnVzZWRDYXBhY2l0eSA9IGw7CkBAIC0yMjAs
MzEgKzI0OSwzMiBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVh
dGUoVUNoYXIqIGQsIGludCBsKQogICAgIHJldHVybiBhZG9wdFJlZihyKTsKIH0KIAotUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFBhc3NSZWZQdHI8UmVwPiBi
YXNlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVT
dHJpbmc6OlJlcDo6Y3JlYXRlU2hhcmVkKFVDaGFyKiBkLCBpbnQgbCwgUGFzc1JlZlB0cjxTaGFy
ZWREYXRhSG9sZGVyPFVDaGFyPiA+IGhvbGRlcikKIHsKLSAgICBBU1NFUlQoYmFzZSk7Ci0gICAg
YmFzZS0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBy
ID0gY3JlYXRlKGQsIGwpOworICAgIHItPm1fYmFzZVN0cmluZ09yU2hhcmVkRGF0YSA9IGhvbGRl
ci5yZWxlYXNlUmVmKCk7CisgICAgci0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiBy
OworfQogCi0gICAgaW50IGJhc2VPZmZzZXQgPSBiYXNlLT5vZmZzZXQ7CitQYXNzUmVmUHRyPFVT
dHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoUGFzc1JlZlB0cjxSZXA+IHJlcCwgaW50
IG9mZnNldCwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQocmVwKTsKKyAgICByZXAtPmNoZWNr
Q29uc2lzdGVuY3koKTsKIAotICAgIGJhc2UgPSBiYXNlLT5iYXNlU3RyaW5nOworICAgIGludCBy
ZXBPZmZzZXQgPSByZXAtPm9mZnNldDsKIAotICAgIEFTU0VSVCgtKG9mZnNldCArIGJhc2VPZmZz
ZXQpIDw9IGJhc2UtPnVzZWRQcmVDYXBhY2l0eSk7Ci0gICAgQVNTRVJUKG9mZnNldCArIGJhc2VP
ZmZzZXQgKyBsZW5ndGggPD0gYmFzZS0+dXNlZENhcGFjaXR5KTsKKyAgICBQYXNzUmVmUHRyPEJh
c2VTdHJpbmc+IGJhc2UgPSByZXAtPmJhc2VTdHJpbmcoKTsKKworICAgIEFTU0VSVCgtKG9mZnNl
dCArIHJlcE9mZnNldCkgPD0gYmFzZS0+dXNlZFByZUNhcGFjaXR5KTsKKyAgICBBU1NFUlQob2Zm
c2V0ICsgcmVwT2Zmc2V0ICsgbGVuZ3RoIDw9IGJhc2UtPnVzZWRDYXBhY2l0eSk7CiAKICAgICBS
ZXAqIHIgPSBuZXcgUmVwOwotICAgIHItPm9mZnNldCA9IGJhc2VPZmZzZXQgKyBvZmZzZXQ7Cisg
ICAgci0+b2Zmc2V0ID0gcmVwT2Zmc2V0ICsgb2Zmc2V0OwogICAgIHItPmxlbiA9IGxlbmd0aDsK
ICAgICByLT5yYyA9IDE7CiAgICAgci0+X2hhc2ggPSAwOwotICAgIHItPm1faWRlbnRpZmllclRh
YmxlID0gMDsKLSAgICByLT5iYXNlU3RyaW5nID0gYmFzZS5yZWxlYXNlUmVmKCk7Ci0gICAgci0+
cmVwb3J0ZWRDb3N0ID0gMDsKLSAgICByLT5idWYgPSAwOwotICAgIHItPnVzZWRDYXBhY2l0eSA9
IDA7Ci0gICAgci0+Y2FwYWNpdHkgPSAwOwotICAgIHItPnVzZWRQcmVDYXBhY2l0eSA9IDA7Ci0g
ICAgci0+cHJlQ2FwYWNpdHkgPSAwOworICAgIHItPnNldEJhc2VTdHJpbmcoYmFzZS5yZWxlYXNl
UmVmKCkpOwogCiAgICAgci0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC0yNTUsMTMgKzI4NSwx
MyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxSZXA+IGJhc2UsIGludCBvZmZzZXQsCiBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0
cmluZzo6UmVwOjpjcmVhdGVGcm9tVVRGOChjb25zdCBjaGFyKiBzdHJpbmcpCiB7CiAgICAgaWYg
KCFzdHJpbmcpCi0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpudWxsOworICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbCgpOwogCiAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxl
bihzdHJpbmcpOwogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gYnVmZmVyKGxlbmd0aCk7CiAgICAg
VUNoYXIqIHAgPSBidWZmZXIuZGF0YSgpOwogICAgIGlmIChjb252ZXJzaW9uT0sgIT0gY29udmVy
dFVURjhUb1VURjE2KCZzdHJpbmcsIHN0cmluZyArIGxlbmd0aCwgJnAsIHAgKyBsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAgICAgcmV0dXJuICZVU3Ry
aW5nOjpSZXA6Om51bGwoKTsKIAogICAgIHJldHVybiBVU3RyaW5nOjpSZXA6OmNyZWF0ZUNvcHlp
bmcoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogfQpAQCAtMjc1LDEwICszMDUs
MTUgQEAgdm9pZCBVU3RyaW5nOjpSZXA6OmRlc3Ryb3koKQogICAgIGlmICghaXNTdGF0aWMoKSkg
ewogICAgICAgICBpZiAoaWRlbnRpZmllclRhYmxlKCkpCiAgICAgICAgICAgICBJZGVudGlmaWVy
OjpyZW1vdmUodGhpcyk7Ci0gICAgICAgIGlmIChiYXNlU3RyaW5nID09IHRoaXMpCi0gICAgICAg
ICAgICBmYXN0RnJlZShidWYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlU3RyaW5n
LT5kZXJlZigpOworICAgICAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmlu
ZygpOworICAgICAgICBpZiAoYmFzZSA9PSB0aGlzKSB7CisgICAgICAgICAgICBTaGFyZWREYXRh
SG9sZGVyPFVDaGFyPiogc2hhcmVkSG9sZGVyID0gYmFzZS0+cmF3U2hhcmVkRGF0YUhvbGRlcigp
OworICAgICAgICAgICAgaWYgKHNoYXJlZEhvbGRlcikKKyAgICAgICAgICAgICAgICBzaGFyZWRI
b2xkZXItPmRlcmVmKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFzdEZy
ZWUoYmFzZS0+YnVmKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlLT5kZXJlZigp
OwogCiAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KQEAgLTM4MCwxNyArNDE1LDEwIEBAIHVu
c2lnbmVkIFVTdHJpbmc6OlJlcDo6Y29tcHV0ZUhhc2goY29uc3QgY2hhciogcywgaW50IGwpCiAj
aWZuZGVmIE5ERUJVRwogdm9pZCBVU3RyaW5nOjpSZXA6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dAogewotICAgIC8vIE9ubHkgYmFzZSBzdHJpbmdzIGhhdmUgbm9uLXplcm8gc2hhcmVkIGRhdGEu
Ci0gICAgaWYgKHRoaXMgIT0gYmFzZVN0cmluZykgewotICAgICAgICBBU1NFUlQoIWJ1Zik7Ci0g
ICAgICAgIEFTU0VSVCghdXNlZENhcGFjaXR5KTsKLSAgICAgICAgQVNTRVJUKCFjYXBhY2l0eSk7
Ci0gICAgICAgIEFTU0VSVCghdXNlZFByZUNhcGFjaXR5KTsKLSAgICAgICAgQVNTRVJUKCFwcmVD
YXBhY2l0eSk7Ci0gICAgfQorICAgIGNvbnN0IFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSBi
YXNlU3RyaW5nKCk7CiAKICAgICAvLyBUaGVyZSBpcyBubyByZWN1cnNpb24gZm9yIGJhc2Ugc3Ry
aW5ncy4KLSAgICBBU1NFUlQoYmFzZVN0cmluZyA9PSBiYXNlU3RyaW5nLT5iYXNlU3RyaW5nKTsK
KyAgICBBU1NFUlQoYmFzZSA9PSBiYXNlLT5iYXNlU3RyaW5nKCkpOwogCiAgICAgaWYgKGlzU3Rh
dGljKCkpIHsKICAgICAgICAgLy8gVGhlcmUgYXJlIG9ubHkgdHdvIHN0YXRpYyBzdHJpbmdzOiBu
dWxsIGFuZCBlbXB0eS4KQEAgLTQwMSwxMyArNDI5LDM3IEBAIHZvaWQgVVN0cmluZzo6UmVwOjpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB9CiAKICAgICAvLyBUaGUgc3RyaW5nIGZpdHMg
aW4gYnVmZmVyLgotICAgIEFTU0VSVChiYXNlU3RyaW5nLT51c2VkUHJlQ2FwYWNpdHkgPD0gYmFz
ZVN0cmluZy0+cHJlQ2FwYWNpdHkpOwotICAgIEFTU0VSVChiYXNlU3RyaW5nLT51c2VkQ2FwYWNp
dHkgPD0gYmFzZVN0cmluZy0+Y2FwYWNpdHkpOwotICAgIEFTU0VSVCgtb2Zmc2V0IDw9IGJhc2VT
dHJpbmctPnVzZWRQcmVDYXBhY2l0eSk7Ci0gICAgQVNTRVJUKG9mZnNldCArIGxlbiA8PSBiYXNl
U3RyaW5nLT51c2VkQ2FwYWNpdHkpOworICAgIEFTU0VSVChiYXNlLT51c2VkUHJlQ2FwYWNpdHkg
PD0gYmFzZS0+cHJlQ2FwYWNpdHkpOworICAgIEFTU0VSVChiYXNlLT51c2VkQ2FwYWNpdHkgPD0g
YmFzZS0+Y2FwYWNpdHkpOworICAgIEFTU0VSVCgtb2Zmc2V0IDw9IGJhc2UtPnVzZWRQcmVDYXBh
Y2l0eSk7CisgICAgQVNTRVJUKG9mZnNldCArIGxlbiA8PSBiYXNlLT51c2VkQ2FwYWNpdHkpOwog
fQogI2VuZGlmCiAKK2Jvb2wgVVN0cmluZzo6QmFzZVN0cmluZzo6dHJ5VG9NYWtlVW5zaGFyZWQo
KQoreworICAgIHJldHVybiByYyA9PSAxICYmIHRyeVRvTWFrZU1vZGlmaWFibGUoKTsKK30KKwor
Ym9vbCBVU3RyaW5nOjpCYXNlU3RyaW5nOjp0cnlUb01ha2VNb2RpZmlhYmxlKCkKK3sKKyAgICAv
LyBidWYgbWF5IG5vdCBiZSBtb2RpZmllZCBhcyBzb29uIGFzIHRoZSB1bmRlcmx5aW5nIGRhdGEg
aGFzIGJlZW4gc2hhcmVkIHdpdGggYW5vdGhlciBjbGFzcy4KKyAgICBTaGFyZWREYXRhSG9sZGVy
PFVDaGFyPiogaG9sZGVyID0gcmF3U2hhcmVkRGF0YUhvbGRlcigpOworICAgIGlmICghaG9sZGVy
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWhvbGRlci0+aGFzT25lUmVmKCkgfHwg
aG9sZGVyLT5pc1RocmVhZFNoYXJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IGl0IHRoYXQgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGlz
bid0IHNoYXJlZCBvdXRzaWRlIG9mIHRoaXMgYmFzZSBjbGFzcy4KKyAgICAvLyBJbiBvcmRlciB0
byByZWdhaW4gY29udHJvbCBvZiBpdCwgd2UgbmVlZCB0byBnZXQgcmlkIG9mIHRoZSAiaG9sZGVy
Ii4KKyAgICBVQ2hhciogdW5zaGFyZWRCdWYgPSBjb25zdF9jYXN0PFVDaGFyKj4oaG9sZGVyLT51
bnNoYXJlKCkpOworICAgIGhvbGRlci0+ZGVyZWYoKTsKKyAgICBtX2Jhc2VTdHJpbmdPclNoYXJl
ZERhdGEgPSAwOworICAgIHByZUNhcGFjaXR5ICs9IChidWYgLSB1bnNoYXJlZEJ1Zik7CisgICAg
YnVmID0gdW5zaGFyZWRCdWY7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIC8vIHB1dCB0aGVzZSBl
YXJseSBzbyB0aGV5IGNhbiBiZSBpbmxpbmVkCiBzdGF0aWMgaW5saW5lIHNpemVfdCBleHBhbmRl
ZFNpemUoc2l6ZV90IHNpemUsIHNpemVfdCBvdGhlclNpemUpCiB7CkBAIC00MjQsMzUgKzQ3Niwy
NSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBleHBhbmRlZFNpemUoc2l6ZV90IHNpemUsIHNpemVf
dCBvdGhlclNpemUpCiAgICAgcmV0dXJuIGV4cGFuZGVkU2l6ZSArIG90aGVyU2l6ZTsKIH0KIAot
aW5saW5lIGludCBVU3RyaW5nOjp1c2VkQ2FwYWNpdHkoKSBjb25zdAotewotICAgIHJldHVybiBt
X3JlcC0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5OwotfQotCi1pbmxpbmUgaW50IFVTdHJpbmc6
OnVzZWRQcmVDYXBhY2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVwLT5iYXNlU3RyaW5n
LT51c2VkUHJlQ2FwYWNpdHk7Ci19Ci0KLQogc3RhdGljIGlubGluZSBib29sIGV4cGFuZENhcGFj
aXR5KFVTdHJpbmc6OlJlcCogcmVwLCBpbnQgcmVxdWlyZWRMZW5ndGgpCiB7CiAgICAgcmVwLT5j
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgQVNTRVJUKCFyZXAtPmJhc2VTdHJpbmcoKS0+cmF3U2hh
cmVkRGF0YUhvbGRlcigpKTsKIAotICAgIFVTdHJpbmc6OlJlcCogciA9IHJlcC0+YmFzZVN0cmlu
ZzsKKyAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gcmVwLT5iYXNlU3RyaW5nKCk7CiAK
LSAgICBpZiAocmVxdWlyZWRMZW5ndGggPiByLT5jYXBhY2l0eSkgewotICAgICAgICBzaXplX3Qg
bmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUocmVxdWlyZWRMZW5ndGgsIHItPnByZUNhcGFjaXR5
KTsKLSAgICAgICAgVUNoYXIqIG9sZEJ1ZiA9IHItPmJ1ZjsKLSAgICAgICAgci0+YnVmID0gcmVh
bGxvY0NoYXJzKHItPmJ1ZiwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBpZiAoIXItPmJ1Zikgewot
ICAgICAgICAgICAgci0+YnVmID0gb2xkQnVmOworICAgIGlmIChyZXF1aXJlZExlbmd0aCA+IGJh
c2UtPmNhcGFjaXR5KSB7CisgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6
ZShyZXF1aXJlZExlbmd0aCwgYmFzZS0+cHJlQ2FwYWNpdHkpOworICAgICAgICBVQ2hhciogb2xk
QnVmID0gYmFzZS0+YnVmOworICAgICAgICBiYXNlLT5idWYgPSByZWFsbG9jQ2hhcnMoYmFzZS0+
YnVmLCBuZXdDYXBhY2l0eSk7CisgICAgICAgIGlmICghYmFzZS0+YnVmKSB7CisgICAgICAgICAg
ICBiYXNlLT5idWYgPSBvbGRCdWY7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KLSAgICAgICAgci0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eSAtIHItPnByZUNhcGFjaXR5Owor
ICAgICAgICBiYXNlLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5IC0gYmFzZS0+cHJlQ2FwYWNpdHk7
CiAgICAgfQotICAgIGlmIChyZXF1aXJlZExlbmd0aCA+IHItPnVzZWRDYXBhY2l0eSkKLSAgICAg
ICAgci0+dXNlZENhcGFjaXR5ID0gcmVxdWlyZWRMZW5ndGg7CisgICAgaWYgKHJlcXVpcmVkTGVu
Z3RoID4gYmFzZS0+dXNlZENhcGFjaXR5KQorICAgICAgICBiYXNlLT51c2VkQ2FwYWNpdHkgPSBy
ZXF1aXJlZExlbmd0aDsKIAogICAgIHJlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtNDY3LDI2ICs1MDksMjcgQEAgdm9pZCBVU3RyaW5nOjpleHBhbmRDYXBhY2l0
eShpbnQgcmVxdWlyZWRMZW5ndGgpCiB2b2lkIFVTdHJpbmc6OmV4cGFuZFByZUNhcGFjaXR5KGlu
dCByZXF1aXJlZFByZUNhcCkKIHsKICAgICBtX3JlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAg
IEFTU0VSVCghbV9yZXAtPmJhc2VTdHJpbmcoKS0+cmF3U2hhcmVkRGF0YUhvbGRlcigpKTsKIAot
ICAgIFJlcCogciA9IG1fcmVwLT5iYXNlU3RyaW5nOworICAgIEJhc2VTdHJpbmcqIGJhc2UgPSBt
X3JlcC0+YmFzZVN0cmluZygpOwogCi0gICAgaWYgKHJlcXVpcmVkUHJlQ2FwID4gci0+cHJlQ2Fw
YWNpdHkpIHsKLSAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKHJlcXVp
cmVkUHJlQ2FwLCByLT5jYXBhY2l0eSk7Ci0gICAgICAgIGludCBkZWx0YSA9IG5ld0NhcGFjaXR5
IC0gci0+Y2FwYWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKKyAgICBpZiAocmVxdWlyZWRQcmVDYXAg
PiBiYXNlLT5wcmVDYXBhY2l0eSkgeworICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBh
bmRlZFNpemUocmVxdWlyZWRQcmVDYXAsIGJhc2UtPmNhcGFjaXR5KTsKKyAgICAgICAgaW50IGRl
bHRhID0gbmV3Q2FwYWNpdHkgLSBiYXNlLT5jYXBhY2l0eSAtIGJhc2UtPnByZUNhcGFjaXR5Owog
CiAgICAgICAgIFVDaGFyKiBuZXdCdWYgPSBhbGxvY0NoYXJzKG5ld0NhcGFjaXR5KTsKICAgICAg
ICAgaWYgKCFuZXdCdWYpIHsKICAgICAgICAgICAgIG1ha2VOdWxsKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY29weUNoYXJzKG5ld0J1ZiArIGRlbHRhLCByLT5i
dWYsIHItPmNhcGFjaXR5ICsgci0+cHJlQ2FwYWNpdHkpOwotICAgICAgICBmYXN0RnJlZShyLT5i
dWYpOwotICAgICAgICByLT5idWYgPSBuZXdCdWY7CisgICAgICAgIGNvcHlDaGFycyhuZXdCdWYg
KyBkZWx0YSwgYmFzZS0+YnVmLCBiYXNlLT5jYXBhY2l0eSArIGJhc2UtPnByZUNhcGFjaXR5KTsK
KyAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKKyAgICAgICAgYmFzZS0+YnVmID0gbmV3QnVm
OwogCi0gICAgICAgIHItPnByZUNhcGFjaXR5ID0gbmV3Q2FwYWNpdHkgLSByLT5jYXBhY2l0eTsK
KyAgICAgICAgYmFzZS0+cHJlQ2FwYWNpdHkgPSBuZXdDYXBhY2l0eSAtIGJhc2UtPmNhcGFjaXR5
OwogICAgIH0KLSAgICBpZiAocmVxdWlyZWRQcmVDYXAgPiByLT51c2VkUHJlQ2FwYWNpdHkpCi0g
ICAgICAgIHItPnVzZWRQcmVDYXBhY2l0eSA9IHJlcXVpcmVkUHJlQ2FwOworICAgIGlmIChyZXF1
aXJlZFByZUNhcCA+IGJhc2UtPnVzZWRQcmVDYXBhY2l0eSkKKyAgICAgICAgYmFzZS0+dXNlZFBy
ZUNhcGFjaXR5ID0gcmVxdWlyZWRQcmVDYXA7CiAKICAgICBtX3JlcC0+Y2hlY2tDb25zaXN0ZW5j
eSgpOwogfQpAQCAtNDk0LDE1ICs1MzcsMTUgQEAgdm9pZCBVU3RyaW5nOjpleHBhbmRQcmVDYXBh
Y2l0eShpbnQgcmVxdWlyZWRQcmVDYXApCiBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY3JlYXRl
UmVwKGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgaWYgKCFjKQotICAgICAgICByZXR1cm4gJlVTdHJp
bmc6OlJlcDo6bnVsbDsKKyAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKIAog
ICAgIGlmICghY1swXSkKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5OworICAg
ICAgICByZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsKIAogICAgIHNpemVfdCBsZW5ndGgg
PSBzdHJsZW4oYyk7CiAgICAgVUNoYXIqIGQgPSBhbGxvY0NoYXJzKGxlbmd0aCk7CiAgICAgaWYg
KCFkKQotICAgICAgICByZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAgICAgcmV0dXJu
ICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgICAgIGRbaV0gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjW2ldKTsgLy8gdXNlIHVuc2lnbmVkIGNoYXIgdG8gemVyby1leHRlbmQg
aW5zdGVhZCBvZiBzaWduLWV4dGVuZApAQCAtNTE5LDcgKzU2Miw3IEBAIFVTdHJpbmc6OlVTdHJp
bmcoY29uc3QgY2hhciogYykKIFVTdHJpbmc6OlVTdHJpbmcoY29uc3QgVUNoYXIqIGMsIGludCBs
ZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSAKLSAgICAgICAgbV9yZXAgPSAmUmVwOjpl
bXB0eTsKKyAgICAgICAgbV9yZXAgPSAmQmFzZVN0cmluZzo6ZW1wdHkoKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fcmVwID0gUmVwOjpjcmVhdGVDb3B5aW5nKGMsIGxlbmd0aCk7CiB9CkBAIC01Mjcs
NyArNTcwLDcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBVQ2hhciogYywgaW50IGxlbmd0aCkK
IFVTdHJpbmc6OlVTdHJpbmcoVUNoYXIqIGMsIGludCBsZW5ndGgsIGJvb2wgY29weSkKIHsKICAg
ICBpZiAobGVuZ3RoID09IDApCi0gICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHk7CisgICAgICAg
IG1fcmVwID0gJkJhc2VTdHJpbmc6OmVtcHR5KCk7CiAgICAgZWxzZSBpZiAoY29weSkKICAgICAg
ICAgbV9yZXAgPSBSZXA6OmNyZWF0ZUNvcHlpbmcoYywgbGVuZ3RoKTsKICAgICBlbHNlCkBAIC01
MzcsNyArNTgwLDcgQEAgVVN0cmluZzo6VVN0cmluZyhVQ2hhciogYywgaW50IGxlbmd0aCwgYm9v
bCBjb3B5KQogVVN0cmluZzo6VVN0cmluZyhjb25zdCBWZWN0b3I8VUNoYXI+JiBidWZmZXIpCiB7
CiAgICAgaWYgKCFidWZmZXIuc2l6ZSgpKQotICAgICAgICBtX3JlcCA9ICZSZXA6OmVtcHR5Owor
ICAgICAgICBtX3JlcCA9ICZCYXNlU3RyaW5nOjplbXB0eSgpOwogICAgIGVsc2UKICAgICAgICAg
bV9yZXAgPSBSZXA6OmNyZWF0ZUNvcHlpbmcoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7
CiB9CkBAIC01NTEsNiArNTk0LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxV
U3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICBpbnQg
dGhpc1NpemUgPSByZXAtPnNpemUoKTsKICAgICBpbnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0
OwogICAgIGludCBsZW5ndGggPSB0aGlzU2l6ZSArIHRTaXplOworICAgIFVTdHJpbmc6OkJhc2VT
dHJpbmcqIGJhc2UgPSByZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxlIGNhc2Vz
OgogICAgIGlmICh0U2l6ZSA9PSAwKSB7CkBAIC01NTgsMzQgKzYwMiwzNCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0
cjxVU3RyaW5nOjpSZQogICAgIH0gZWxzZSBpZiAodGhpc1NpemUgPT0gMCkgewogICAgICAgICAv
LyB0aGlzIGlzIGVtcHR5CiAgICAgICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWlu
Zyh0RGF0YSwgdFNpemUpOwotICAgIH0gZWxzZSBpZiAocmVwLT5iYXNlSXNTZWxmKCkgJiYgcmVw
LT5yYyA9PSAxKSB7CisgICAgfSBlbHNlIGlmIChyZXAgPT0gYmFzZSAmJiBiYXNlLT50cnlUb01h
a2VVbnNoYXJlZCgpKSB7CiAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291
bnQgb2YgMSAoc28gd2UgY2FuIGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGlmICgh
ZXhwYW5kQ2FwYWNpdHkocmVwLmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVuZ3RoKSkKLSAgICAgICAg
ICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAgICAgICByZXAgPSAmVVN0cmlu
Zzo6UmVwOjpudWxsKCk7CiAgICAgICAgIGlmIChyZXAtPmRhdGEoKSkgewogICAgICAgICAgICAg
Y29weUNoYXJzKHJlcC0+ZGF0YSgpICsgdGhpc1NpemUsIHREYXRhLCB0U2l6ZSk7CiAgICAgICAg
ICAgICByZXAtPmxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgIHJlcC0+X2hhc2ggPSAwOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gcmVwLT5iYXNl
U3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAg
fSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYm
IHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSAmJiBiYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkp
IHsKICAgICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVu
ZCBpdCBpZiBpdCdzIGxvbmcgZW5vdWdoIHRvIGFwcGVuZCB0bwogICAgICAgICBpZiAoIWV4cGFu
ZENhcGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0aCkpCi0gICAgICAgICAgICBy
ZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsOworICAgICAgICAgICAgcmVwID0gJlVTdHJpbmc6OlJl
cDo6bnVsbCgpOwogICAgICAgICBpZiAocmVwLT5kYXRhKCkpIHsKICAgICAgICAgICAgIGNvcHlD
aGFycyhyZXAtPmRhdGEoKSArIHRoaXNTaXplLCB0RGF0YSwgdFNpemUpOwogICAgICAgICAgICAg
cmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGUocmVwLCAwLCBsZW5ndGgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5n
IG1vcmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCisgICAgICAgIC8v
IHRoaXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVudHMgdXMgZnJvbSBtb2RpZnlp
bmcgYmFzZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKICAgICAgICAgc2l6ZV90IG5l
d0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0g
YWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICghZCkKLSAgICAgICAgICAgIHJl
cCA9ICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVw
OjpudWxsKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29weUNoYXJzKGQsIHJlcC0+
ZGF0YSgpLCB0aGlzU2l6ZSk7CiAgICAgICAgICAgICBjb3B5Q2hhcnMoZCArIHRoaXNTaXplLCB0
RGF0YSwgdFNpemUpOwogICAgICAgICAgICAgcmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGUoZCwg
bGVuZ3RoKTsKLSAgICAgICAgICAgIHJlcC0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICAg
ICAgICAgIHJlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAg
ICB9CiAgICAgfQogCkBAIC02MDQsNiArNjQ4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUK
ICAgICBpbnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0OwogICAgIGludCB0U2l6ZSA9IHN0YXRp
Y19jYXN0PGludD4oc3RybGVuKHQpKTsKICAgICBpbnQgbGVuZ3RoID0gdGhpc1NpemUgKyB0U2l6
ZTsKKyAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gcmVwLT5iYXNlU3RyaW5nKCk7CiAK
ICAgICAvLyBwb3NzaWJsZSBjYXNlczoKICAgICBpZiAodGhpc1NpemUgPT0gMCkgewpAQCAtNjEx
LDcgKzY1Niw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVw
PiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgIHJlcCA9IGNyZWF0
ZVJlcCh0KTsKICAgICB9IGVsc2UgaWYgKHRTaXplID09IDApIHsKICAgICAgICAgLy8gdCBpcyBl
bXB0eSwgd2UnbGwganVzdCByZXR1cm4gKnRoaXMgYmVsb3cuCi0gICAgfSBlbHNlIGlmIChyZXAt
PmJhc2VJc1NlbGYoKSAmJiByZXAtPnJjID09IDEpIHsKKyAgICB9IGVsc2UgaWYgKHJlcCA9PSBi
YXNlICYmIGJhc2UtPnRyeVRvTWFrZVVuc2hhcmVkKCkpIHsKICAgICAgICAgLy8gdGhpcyBpcyBk
aXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRlciBpdCBkaXJl
Y3RseSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkocmVwLmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVu
Z3RoKTsKICAgICAgICAgVUNoYXIqIGQgPSByZXAtPmRhdGEoKTsKQEAgLTYyMSw3ICs2NjYsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5h
dGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAgICAgICAgcmVwLT5sZW4gPSBsZW5ndGg7
CiAgICAgICAgICAgICByZXAtPl9oYXNoID0gMDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
dGhpc09mZnNldCArIHRoaXNTaXplID09IHJlcC0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5ICYm
IHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCAr
IHRoaXNTaXplID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiB0aGlzU2l6ZSA+PSBtaW5TaGFyZVNp
emUgJiYgYmFzZS0+dHJ5VG9NYWtlTW9kaWZpYWJsZSgpKSB7CiAgICAgICAgIC8vIHRoaXMgc3Ry
aW5nIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIC0gZXh0ZW5kIGl0CiAgICAgICAgIGV4
cGFuZENhcGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0aCk7CiAgICAgICAgIFVD
aGFyKiBkID0gcmVwLT5kYXRhKCk7CkBAIC02MzEsMTcgKzY3NiwxNyBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxV
U3RyaW5nOjpSZQogICAgICAgICAgICAgcmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGUocmVwLCAw
LCBsZW5ndGgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBz
aGFyZWQgd2l0aCBzb21lb25lIHVzaW5nIG1vcmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9s
ZSBuZXcgc3RyaW5nCisgICAgICAgIC8vIHRoaXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQg
cHJldmVudHMgdXMgZnJvbSBtb2RpZnlpbmcgYmFzZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBz
dHJpbmcKICAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwg
MCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAg
IGlmICghZCkKLSAgICAgICAgICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAg
ICAgICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgY29weUNoYXJzKGQsIHJlcC0+ZGF0YSgpLCB0aGlzU2l6ZSk7CiAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHRTaXplOyArK2kpCiAgICAgICAgICAgICAgICAgZFt0aGlzU2l6
ZSArIGldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odFtpXSk7IC8vIHVzZSB1bnNpZ25l
ZCBjaGFyIHRvIHplcm8tZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKICAgICAgICAgICAg
IHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgICAgICAgICByZXAt
PmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICByZXAtPmJhc2VTdHJpbmcoKS0+
Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjcwLDE1ICs3
MTUsMTcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJl
cCogYSwgVVN0cmluZzo6UmVwKiBiKQogICAgIGlmIChiU2l6ZSA9PSAwKQogICAgICAgICByZXR1
cm4gYTsKIAotICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhLT5iYXNl
U3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgYU9mZnNldCArIGxlbmd0aCA8PSBhLT5iYXNlU3RyaW5n
LT5jYXBhY2l0eSkgeworICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGFCYXNlID0gYS0+YmFzZVN0
cmluZygpOworICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhQmFzZS0+
dXNlZENhcGFjaXR5ICYmIGFPZmZzZXQgKyBsZW5ndGggPD0gYUJhc2UtPmNhcGFjaXR5ICYmIGFC
YXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAgICAgLy8gYiBpcyBhIHNpbmdsZSBj
aGFyYWN0ZXIgKGNvbW1vbiBmYXN0IGNhc2UpCi0gICAgICAgIGEtPmJhc2VTdHJpbmctPnVzZWRD
YXBhY2l0eSA9IGFPZmZzZXQgKyBsZW5ndGg7CisgICAgICAgIGFCYXNlLT51c2VkQ2FwYWNpdHkg
PSBhT2Zmc2V0ICsgbGVuZ3RoOwogICAgICAgICBhLT5kYXRhKClbYVNpemVdID0gYi0+ZGF0YSgp
WzBdOwogICAgICAgICByZXR1cm4gVVN0cmluZzo6UmVwOjpjcmVhdGUoYSwgMCwgbGVuZ3RoKTsK
ICAgICB9CiAKLSAgICBpZiAoYU9mZnNldCArIGFTaXplID09IGEtPmJhc2VTdHJpbmctPnVzZWRD
YXBhY2l0eSAmJiBhU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGFTaXplID49IGJTaXplICYm
Ci0gICAgICAgICAgICAgICAoLWJPZmZzZXQgIT0gYi0+YmFzZVN0cmluZy0+dXNlZFByZUNhcGFj
aXR5IHx8IGFTaXplID49IGJTaXplKSkgeworICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJCYXNl
ID0gYi0+YmFzZVN0cmluZygpOworICAgIGlmIChhT2Zmc2V0ICsgYVNpemUgPT0gYUJhc2UtPnVz
ZWRDYXBhY2l0eSAmJiBhU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGFTaXplID49IGJTaXpl
CisgICAgICAgICYmICgtYk9mZnNldCAhPSBiQmFzZS0+dXNlZFByZUNhcGFjaXR5IHx8IGFTaXpl
ID49IGJTaXplKSAgJiYgYUJhc2UtPnRyeVRvTWFrZU1vZGlmaWFibGUoKSkgewogICAgICAgICAv
LyAtIGEgcmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBidWZmZXIgc28gaXQgcXVhbGlmaWVzIGZvciBz
aGFyZWQgYXBwZW5kCiAgICAgICAgIC8vIC0gYWxzbywgaXQncyBhdCBsZWFzdCBhIHF1YXJ0ZXIg
dGhlIGxlbmd0aCBvZiBiIC0gYXBwZW5kaW5nIHRvIGEgbXVjaCBzaG9ydGVyCiAgICAgICAgIC8v
ICAgc3RyaW5nIGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZApAQCAtNjk3LDcgKzc0NCw3IEBAIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3RyaW5nOjpSZXAqIGEsIFVTdHJp
bmc6OlJlcCogYikKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoLWJP
ZmZzZXQgPT0gYi0+YmFzZVN0cmluZy0+dXNlZFByZUNhcGFjaXR5ICYmIGJTaXplID49IG1pblNo
YXJlU2l6ZSAmJiA0ICogYlNpemUgPj0gYVNpemUpIHsKKyAgICBpZiAoLWJPZmZzZXQgPT0gYkJh
c2UtPnVzZWRQcmVDYXBhY2l0eSAmJiBiU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGJTaXpl
ID49IGFTaXplICYmIGJCYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAgICAgLy8g
LSBiIHJlYWNoZXMgdGhlIGJlZ2lubmluZyBvZiBpdHMgYnVmZmVyIHNvIGl0IHF1YWxpZmllcyBm
b3Igc2hhcmVkIHByZXBlbmQKICAgICAgICAgLy8gLSBhbHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVh
cnRlciB0aGUgbGVuZ3RoIG9mIGEgLSBwcmVwZW5kaW5nIHRvIGEgbXVjaCBzaG9ydGVyCiAgICAg
ICAgIC8vICAgc3RyaW5nIGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZApAQCAtNzIzLDcgKzc3MCw3
IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3RyaW5nOjpSZXAqIGEs
IFVTdHJpbmc6OlJlcCogYikKICAgICBjb3B5Q2hhcnMoZCwgYS0+ZGF0YSgpLCBhU2l6ZSk7CiAg
ICAgY29weUNoYXJzKGQgKyBhU2l6ZSwgYi0+ZGF0YSgpLCBiU2l6ZSk7CiAgICAgUGFzc1JlZlB0
cjxVU3RyaW5nOjpSZXA+IHJlc3VsdCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7
Ci0gICAgcmVzdWx0LT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgIHJlc3VsdC0+YmFzZVN0
cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogCiAgICAgYS0+Y2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgIGItPmNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTgzMSwxMiArODc4LDYgQEAgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogcmVwLCBkb3Vi
bGUgZCkKICAgcmV0dXJuIGNvbmNhdGVuYXRlKHJlcCwgYnVmKTsKIH0KIAotY29uc3QgVVN0cmlu
ZyYgVVN0cmluZzo6bnVsbCgpCi17Ci0gICAgc3RhdGljIFVTdHJpbmcqIG4gPSBuZXcgVVN0cmlu
ZzsgLy8gU2hvdWxkIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkIGF0IGxlYXN0IG9uY2UgdG8g
YmUgc2FmZWx5IGluaXRpYWxpemVkLgotICAgIHJldHVybiAqbjsKLX0KLQogVVN0cmluZyBVU3Ry
aW5nOjpmcm9tKGludCBpKQogewogICAgIFVDaGFyIGJ1ZlsxICsgc2l6ZW9mKGkpICogM107CkBA
IC0xMDMwLDYgKzEwNzEsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmlu
ZyAmdCkKICAgICBpbnQgdGhpc09mZnNldCA9IG1fcmVwLT5vZmZzZXQ7CiAgICAgaW50IHRTaXpl
ID0gdC5zaXplKCk7CiAgICAgaW50IGxlbmd0aCA9IHRoaXNTaXplICsgdFNpemU7CisgICAgQmFz
ZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CiAKICAgICAvLyBwb3NzaWJsZSBj
YXNlczoKICAgICBpZiAodGhpc1NpemUgPT0gMCkgewpAQCAtMTAzNyw3ICsxMDc5LDcgQEAgVVN0
cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcgJnQpCiAgICAgICAgICp0aGlzID0g
dDsKICAgICB9IGVsc2UgaWYgKHRTaXplID09IDApIHsKICAgICAgICAgLy8gdCBpcyBlbXB0eQot
ICAgIH0gZWxzZSBpZiAobV9yZXAtPmJhc2VJc1NlbGYoKSAmJiBtX3JlcC0+cmMgPT0gMSkgewor
ICAgIH0gZWxzZSBpZiAobV9yZXAgPT0gYmFzZSAmJiBiYXNlLT50cnlUb01ha2VVbnNoYXJlZCgp
KSB7CiAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291bnQgb2YgMSAoc28g
d2UgY2FuIGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHRo
aXNPZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSgpKSB7CkBAIC0xMDQ1LDcgKzEw
ODcsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkKICAgICAg
ICAgICAgIG1fcmVwLT5sZW4gPSBsZW5ndGg7CiAgICAgICAgICAgICBtX3JlcC0+X2hhc2ggPSAw
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gdXNl
ZENhcGFjaXR5KCkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlm
ICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXpl
ID49IG1pblNoYXJlU2l6ZSAmJiBiYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAg
ICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVuZCBpdCBpZiBp
dCdzIGxvbmcgZW5vdWdoIHRvIGFwcGVuZCB0bwogICAgICAgICBleHBhbmRDYXBhY2l0eSh0aGlz
T2Zmc2V0ICsgbGVuZ3RoKTsKICAgICAgICAgaWYgKGRhdGEoKSkgewpAQCAtMTA1Myw3ICsxMDk1
LDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcgJnQpCiAgICAgICAg
ICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKG1fcmVwLCAwLCBsZW5ndGgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5n
IG1vcmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCisgICAgICAgIC8v
IHRoaXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVudHMgdXMgZnJvbSBtb2RpZnlp
bmcgYmFzZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKICAgICAgICAgc2l6ZV90IG5l
d0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0g
YWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICghZCkKQEAgLTEwNjIsNyArMTEw
NCw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAg
ICAgICAgY29weUNoYXJzKGQsIGRhdGEoKSwgdGhpc1NpemUpOwogICAgICAgICAgICAgY29weUNo
YXJzKGQgKyB0aGlzU2l6ZSwgdC5kYXRhKCksIHRTaXplKTsKICAgICAgICAgICAgIG1fcmVwID0g
UmVwOjpjcmVhdGUoZCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIG1fcmVwLT5jYXBhY2l0eSA9IG5l
d0NhcGFjaXR5OworICAgICAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNpdHkgPSBu
ZXdDYXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA5MCw2ICsxMTMyLDcgQEAgVVN0
cmluZyYgVVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAKICAgICBpbnQgdGhpc09mZnNldCA9IG1f
cmVwLT5vZmZzZXQ7CiAgICAgaW50IGxlbmd0aCA9IHNpemUoKTsKKyAgICBCYXNlU3RyaW5nKiBi
YXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxlIGNhc2VzOgogICAg
IGlmIChsZW5ndGggPT0gMCkgewpAQCAtMTEwMSw5ICsxMTQ0LDkgQEAgVVN0cmluZyYgVVN0cmlu
Zzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZFswXSA9IGM7
CiAgICAgICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIDEpOwotICAgICAgICAgICAgbV9y
ZXAtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3JlcC0+YmFzZVN0cmlu
ZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICht
X3JlcC0+YmFzZUlzU2VsZigpICYmIG1fcmVwLT5yYyA9PSAxKSB7CisgICAgfSBlbHNlIGlmICht
X3JlcCA9PSBiYXNlICYmIGJhc2UtPnRyeVRvTWFrZVVuc2hhcmVkKCkpIHsKICAgICAgICAgLy8g
dGhpcyBpcyBkaXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRl
ciBpdCBkaXJlY3RseSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNldCArIGxlbmd0
aCArIDEpOwogICAgICAgICBVQ2hhciogZCA9IG1fcmVwLT5kYXRhKCk7CkBAIC0xMTEyLDcgKzEx
NTUsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoVUNoYXIgYykKICAgICAgICAgICAgIG1f
cmVwLT5sZW4gPSBsZW5ndGggKyAxOwogICAgICAgICAgICAgbV9yZXAtPl9oYXNoID0gMDsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIGxlbmd0aCA9PSB1c2VkQ2FwYWNp
dHkoKSAmJiBsZW5ndGggPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zm
c2V0ICsgbGVuZ3RoID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiBsZW5ndGggPj0gbWluU2hhcmVT
aXplICYmIGJhc2UtPnRyeVRvTWFrZU1vZGlmaWFibGUoKSkgewogICAgICAgICAvLyB0aGlzIHJl
YWNoZXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIC0gZXh0ZW5kIGl0IGFuZCBzaGFyZQogICAgICAg
ICBleHBhbmRDYXBhY2l0eSh0aGlzT2Zmc2V0ICsgbGVuZ3RoICsgMSk7CiAgICAgICAgIFVDaGFy
KiBkID0gbV9yZXAtPmRhdGEoKTsKQEAgLTExMjEsNyArMTE2NCw3IEBAIFVTdHJpbmcmIFVTdHJp
bmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShtX3Jl
cCwgMCwgbGVuZ3RoICsgMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICAvLyB0
aGlzIGlzIHNoYXJlZCB3aXRoIHNvbWVvbmUgdXNpbmcgbW9yZSBjYXBhY2l0eSwgZ290dGEgbWFr
ZSBhIHdob2xlIG5ldyBzdHJpbmcKKyAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgaW4gc29tZSB3
YXkgdGhhdCBwcmV2ZW50cyB1cyBmcm9tIG1vZGlmeWluZyBiYXNlLCBnb3R0YSBtYWtlIGEgd2hv
bGUgbmV3IHN0cmluZwogICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUo
bGVuZ3RoICsgMSwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0
eSk7CiAgICAgICAgIGlmICghZCkKQEAgLTExMzAsNyArMTE3Myw3IEBAIFVTdHJpbmcmIFVTdHJp
bmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICAgICAgY29weUNoYXJzKGQsIGRhdGEoKSwgbGVu
Z3RoKTsKICAgICAgICAgICAgIGRbbGVuZ3RoXSA9IGM7CiAgICAgICAgICAgICBtX3JlcCA9IFJl
cDo6Y3JlYXRlKGQsIGxlbmd0aCArIDEpOwotICAgICAgICAgICAgbV9yZXAtPmNhcGFjaXR5ID0g
bmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3JlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9
IG5ld0NhcGFjaXR5OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTg1LDE5ICsxMjI4LDIwIEBA
IGNoYXIqIFVTdHJpbmc6OmFzY2lpKCkgY29uc3QKIFVTdHJpbmcmIFVTdHJpbmc6Om9wZXJhdG9y
PShjb25zdCBjaGFyKiBjKQogewogICAgIGlmICghYykgewotICAgICAgICBtX3JlcCA9ICZSZXA6
Om51bGw7CisgICAgICAgIG1fcmVwID0gJkJhc2VTdHJpbmc6Om51bGwoKTsKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAogICAgIGlmICghY1swXSkgewotICAgICAgICBtX3JlcCA9ICZS
ZXA6OmVtcHR5OworICAgICAgICBtX3JlcCA9ICZCYXNlU3RyaW5nOjplbXB0eSgpOwogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgaW50IGwgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0
cmxlbihjKSk7CiAgICAgVUNoYXIqIGQ7Ci0gICAgaWYgKG1fcmVwLT5yYyA9PSAxICYmIGwgPD0g
bV9yZXAtPmNhcGFjaXR5ICYmIG1fcmVwLT5iYXNlSXNTZWxmKCkgJiYgbV9yZXAtPm9mZnNldCA9
PSAwICYmIG1fcmVwLT5wcmVDYXBhY2l0eSA9PSAwKSB7Ci0gICAgICAgIGQgPSBtX3JlcC0+YnVm
OworICAgIEJhc2VTdHJpbmcqIGJhc2UgPSBtX3JlcC0+YmFzZVN0cmluZygpOworICAgIGlmIChi
YXNlLT50cnlUb01ha2VVbnNoYXJlZCgpICYmIG1fcmVwLT5vZmZzZXQgPT0gMCAmJiBtX3JlcCA9
PSBiYXNlICYmIGwgPD0gYmFzZS0+Y2FwYWNpdHkgJiYgYmFzZS0+cHJlQ2FwYWNpdHkgPT0gMCkg
eworICAgICAgICBkID0gYmFzZS0+YnVmOwogICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAg
ICAgICBtX3JlcC0+bGVuID0gbDsKICAgICB9IGVsc2UgewpAQCAtMTYyNiwxMyArMTY3MCwxMyBA
QCBDU3RyaW5nIFVTdHJpbmc6OlVURjhTdHJpbmcoYm9vbCBzdHJpY3QpIGNvbnN0CiAvLyBGb3Ig
dXNlIGluIGVycm9yIGhhbmRsaW5nIGNvZGUgcGF0aHMgLS0gaGF2aW5nIHRoaXMgbm90IGJlIGlu
bGluZWQgaGVscHMgYXZvaWQgUElDIGJyYW5jaGVzIHRvIGZldGNoIHRoZSBnbG9iYWwgb24gTWFj
IE9TIFguCiBORVZFUl9JTkxJTkUgdm9pZCBVU3RyaW5nOjptYWtlTnVsbCgpCiB7Ci0gICAgbV9y
ZXAgPSAmUmVwOjpudWxsOworICAgIG1fcmVwID0gJkJhc2VTdHJpbmc6Om51bGwoKTsKIH0KIAog
Ly8gRm9yIHVzZSBpbiBlcnJvciBoYW5kbGluZyBjb2RlIHBhdGhzIC0tIGhhdmluZyB0aGlzIG5v
dCBiZSBpbmxpbmVkIGhlbHBzIGF2b2lkIFBJQyBicmFuY2hlcyB0byBmZXRjaCB0aGUgZ2xvYmFs
IG9uIE1hYyBPUyBYLgogTkVWRVJfSU5MSU5FIFVTdHJpbmc6OlJlcCogVVN0cmluZzo6bnVsbFJl
cCgpCiB7Ci0gICAgcmV0dXJuICZSZXA6Om51bGw7CisgICAgcmV0dXJuICZCYXNlU3RyaW5nOjpu
dWxsKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VU3RyaW5nLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaApp
bmRleCA3NTQwM2MwLi5kNzExMTBhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VTdHJpbmcuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaApAQCAtMjYs
OSArMjYsMTEgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUHRyQW5kRmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1NoYXJlZERhdGFIb2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC03NCwxMCArNzYsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICBwdWJsaWM6
Ci0gICAgICAgIHN0cnVjdCBSZXAgeworICAgICAgICBzdHJ1Y3QgQmFzZVN0cmluZzsKKyAgICAg
ICAgc3RydWN0IFJlcCA6IE5vbmNvcHlhYmxlIHsKICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBK
SVQ7CiAKICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4gY3JlYXRlKFVDaGFyKiwg
aW50KTsKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4gY3JlYXRlU2hhcmVkKFVD
aGFyKiwgaW50LCBQYXNzUmVmUHRyPFNoYXJlZERhdGFIb2xkZXI8VUNoYXI+ID4pOwogICAgICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwPiBjcmVhdGVDb3B5aW5nKGNvbnN0IFVDaGFyKiwg
aW50KTsKICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4gY3JlYXRlKFBhc3NSZWZQ
dHI8UmVwPiBiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKIApAQCAtODcsOCArOTEsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAgICAgdm9pZCBkZXN0cm95KCk7CiAKLSAgICAg
ICAgICAgIGJvb2wgYmFzZUlzU2VsZigpIGNvbnN0IHsgcmV0dXJuIGJhc2VTdHJpbmcgPT0gdGhp
czsgfQotICAgICAgICAgICAgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBiYXNlU3RyaW5n
LT5idWYgKyBiYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSArIG9mZnNldDsgfQorICAgICAgICAgICAg
Ym9vbCBiYXNlSXNTZWxmKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyVGFibGVBbmRGbGFn
cy5pc0ZsYWdTZXQoQmFzZVN0cmluZ0ZsYWcpOyB9CisgICAgICAgICAgICBVQ2hhciogZGF0YSgp
IGNvbnN0OwogICAgICAgICAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBsZW47IH0KIAog
ICAgICAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgaWYgKF9oYXNoID09IDApIF9oYXNo
ID0gY29tcHV0ZUhhc2goZGF0YSgpLCBsZW4pOyByZXR1cm4gX2hhc2g7IH0KQEAgLTk4LDM1ICsx
MDIsNTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUhhc2goY29uc3QgY2hhciosIGludCBsZW5ndGgpOwogICAgICAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHMs
IHN0cmxlbihzKSk7IH0KIAotICAgICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVy
VGFibGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PElkZW50aWZpZXJUYWJsZSo+
KG1faWRlbnRpZmllclRhYmxlICYgfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOyB9Ci0gICAg
ICAgICAgICB2b2lkIHNldElkZW50aWZpZXJUYWJsZShJZGVudGlmaWVyVGFibGUqIHRhYmxlKSB7
IEFTU0VSVCghaXNTdGF0aWMoKSk7IG1faWRlbnRpZmllclRhYmxlID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4odGFibGUpOyB9CisgICAgICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50
aWZpZXJUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuZ2V0
KCk7IH0KKyAgICAgICAgICAgIHZvaWQgc2V0SWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWJs
ZSogdGFibGUpIHsgQVNTRVJUKCFpc1N0YXRpYygpKTsgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFn
cy5zZXQodGFibGUpOyB9CiAKLSAgICAgICAgICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJUYWJsZSAmIDE7IH0KLSAgICAgICAgICAgIHZvaWQgc2V0U3RhdGlj
KGJvb2wgdikgeyBBU1NFUlQoIWlkZW50aWZpZXJUYWJsZSgpKTsgbV9pZGVudGlmaWVyVGFibGUg
PSB2OyB9CisgICAgICAgICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9pZGVu
dGlmaWVyVGFibGVBbmRGbGFncy5pc0ZsYWdTZXQoU3RhdGljRmxhZyk7IH0KKyAgICAgICAgICAg
IHZvaWQgc2V0U3RhdGljKGJvb2wgdikgeyBBU1NFUlQoIWlkZW50aWZpZXJUYWJsZSgpKTsgaWYg
KHYpIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3Muc2V0RmxhZyhTdGF0aWNGbGFnKTsgZWxzZSBt
X2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLmNsZWFyRmxhZyhTdGF0aWNGbGFnKTsgfQorCisgICAg
ICAgICAgICB2b2lkIHNldEJhc2VTdHJpbmcoQmFzZVN0cmluZyogYmFzZSkgeyBBU1NFUlQoYmFz
ZSAhPSB0aGlzKTsgbV9iYXNlU3RyaW5nT3JTaGFyZWREYXRhID0gYmFzZTsgfQorICAgICAgICAg
ICAgQmFzZVN0cmluZyogYmFzZVN0cmluZygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QmFz
ZVN0cmluZyo+KGJhc2VJc1NlbGYoKSA/IHRoaXMgOiBtX2Jhc2VTdHJpbmdPclNoYXJlZERhdGEp
OyB9CisgICAgICAgICAgICBjb25zdCBCYXNlU3RyaW5nKiBiYXNlU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gY29uc3RfY2FzdDxjb25zdCBCYXNlU3RyaW5nKj4oY29uc3RfY2FzdDxSZXAqPih0aGlz
KS0+YmFzZVN0cmluZygpKTsgIH0KIAogICAgICAgICAgICAgUmVwKiByZWYoKSB7ICsrcmM7IHJl
dHVybiB0aGlzOyB9CiAgICAgICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVyZWYoKSB7IGlm
ICgtLXJjID09IDApIGRlc3Ryb3koKTsgfQogCiAgICAgICAgICAgICB2b2lkIGNoZWNrQ29uc2lz
dGVuY3koKSBjb25zdDsKKyAgICAgICAgICAgIGVudW0gVVN0cmluZ0ZsYWdzIHsKKyAgICAgICAg
ICAgICAgICBTdGF0aWNGbGFnLAorICAgICAgICAgICAgICAgIEJhc2VTdHJpbmdGbGFnCisgICAg
ICAgICAgICB9OwogCiAgICAgICAgICAgICAvLyB1bnNoYXJlZCBkYXRhCiAgICAgICAgICAgICBp
bnQgb2Zmc2V0OwogICAgICAgICAgICAgaW50IGxlbjsKICAgICAgICAgICAgIGludCByYzsgLy8g
Rm9yIG51bGwgYW5kIGVtcHR5IHN0YXRpYyBzdHJpbmdzLCB0aGlzIGZpZWxkIGRvZXMgbm90IHJl
ZmxlY3QgYSBjb3JyZWN0IGNvdW50LCBiZWNhdXNlIHJlZi9kZXJlZiBhcmUgbm90IHRocmVhZC1z
YWZlLiBBIHNwZWNpYWwgY2FzZSBpbiBkZXN0cm95KCkgZ3VhcmFudGVlcyB0aGF0IHRoZXNlIGRv
IG5vdCBnZXQgZGVsZXRlZC4KICAgICAgICAgICAgIG11dGFibGUgdW5zaWduZWQgX2hhc2g7Ci0g
ICAgICAgICAgICBpbnRwdHJfdCBtX2lkZW50aWZpZXJUYWJsZTsgLy8gQSBwb2ludGVyIHRvIGlk
ZW50aWZpZXIgdGFibGUuIFRoZSBsb3dlc3QgYml0IGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhl
ciB0aGUgc3RyaW5nIGlzIHN0YXRpYyAobnVsbCBvciBlbXB0eSkuCi0gICAgICAgICAgICBVU3Ry
aW5nOjpSZXAqIGJhc2VTdHJpbmc7Ci0gICAgICAgICAgICBzaXplX3QgcmVwb3J0ZWRDb3N0Owor
ICAgICAgICAgICAgUHRyQW5kRmxhZ3M8SWRlbnRpZmllclRhYmxlLCBVU3RyaW5nRmxhZ3M+IG1f
aWRlbnRpZmllclRhYmxlQW5kRmxhZ3M7CisgICAgICAgICAgICB2b2lkKiBtX2Jhc2VTdHJpbmdP
clNoYXJlZERhdGE7IC8vIElmICJ0aGlzIiBpcyBhIEJhc2VTdHJpbmcgaW5zdGFuY2UsIGl0IGlz
IHRoZSBTaGFyZWREYXRhSG9sZGVyKi4gQmFzZVN0cmluZyogb3RoZXJ3aXNlLgorCisgICAgICAg
ICAgICBzdGF0aWMgQmFzZVN0cmluZyYgbnVsbCgpIHsgcmV0dXJuICpudWxsQmFzZVN0cmluZzsg
fQorICAgICAgICAgICAgc3RhdGljIEJhc2VTdHJpbmcmIGVtcHR5KCkgeyByZXR1cm4gKmVtcHR5
QmFzZVN0cmluZzsgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgZnJpZW5kIHZvaWQg
aW5pdGlhbGl6ZVVTdHJpbmcoKTsKKyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nKiBudWxs
QmFzZVN0cmluZzsKKyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nKiBlbXB0eUJhc2VTdHJp
bmc7CisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEJhc2VTdHJpbmcgOiBwdWJsaWMgUmVw
IHsKKyAgICAgICAgICAgIFNoYXJlZERhdGFIb2xkZXI8VUNoYXI+KiByYXdTaGFyZWREYXRhSG9s
ZGVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWREYXRhSG9sZGVyPFVD
aGFyPio+KG1fYmFzZVN0cmluZ09yU2hhcmVkRGF0YSk7IH0KKworICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxTaGFyZWREYXRhSG9sZGVyPFVDaGFyPiA+IHNoYXJlZERhdGFIb2xkZXIoKTsKKyAgICAg
ICAgICAgIGJvb2wgdHJ5VG9NYWtlVW5zaGFyZWQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJ5VG9N
YWtlTW9kaWZpYWJsZSgpOwogCi0gICAgICAgICAgICAvLyBwb3RlbnRpYWxseSBzaGFyZWQgZGF0
YS4gMCBpZiBiYWNrZWQgdXAgYnkgYSBiYXNlIHN0cmluZy4KKyAgICAgICAgICAgIC8vIHBvdGVu
dGlhbGx5IHNoYXJlZCBkYXRhLgogICAgICAgICAgICAgVUNoYXIqIGJ1ZjsKLSAgICAgICAgICAg
IGludCB1c2VkQ2FwYWNpdHk7Ci0gICAgICAgICAgICBpbnQgY2FwYWNpdHk7Ci0gICAgICAgICAg
ICBpbnQgdXNlZFByZUNhcGFjaXR5OwogICAgICAgICAgICAgaW50IHByZUNhcGFjaXR5OworICAg
ICAgICAgICAgaW50IHVzZWRQcmVDYXBhY2l0eTsKKyAgICAgICAgICAgIGludCBjYXBhY2l0eTsK
KyAgICAgICAgICAgIGludCB1c2VkQ2FwYWNpdHk7CiAKLSAgICAgICAgICAgIHN0YXRpYyBSZXAg
bnVsbDsKLSAgICAgICAgICAgIHN0YXRpYyBSZXAgZW1wdHk7CisgICAgICAgICAgICBzaXplX3Qg
cmVwb3J0ZWRDb3N0OwogICAgICAgICB9OwogCiAgICAgcHVibGljOgpAQCAtMTQyLDggKzE2Nywx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBVU3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hh
cj4mIGJ1ZmZlcik7CiAKLSAgICAgICAgflVTdHJpbmcoKQorICAgICAgICBVU3RyaW5nKFBhc3NS
ZWZQdHI8UmVwPiByKQorICAgICAgICAgICAgOiBtX3JlcChyKQogICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQobV9yZXApOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU3BlY2lhbCBjb25z
dHJ1Y3RvciBmb3IgY2FzZXMgd2hlcmUgd2Ugb3ZlcndyaXRlIGFuIG9iamVjdCBpbiBwbGFjZS4K
QEAgLTE1Miw2ICsxNzksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
fQogCisgICAgICAgIH5VU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICB9CisKICAgICAgICAg
c3RhdGljIFVTdHJpbmcgZnJvbShpbnQpOwogICAgICAgICBzdGF0aWMgVVN0cmluZyBmcm9tKHVu
c2lnbmVkIGludCk7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGZyb20obG9uZyk7CkBAIC0yMDQs
NyArMjM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX3JlcC0+ZGF0YSgpOyB9CiAKLSAgICAgICAgYm9vbCBpc051bGwo
KSBjb25zdCB7IHJldHVybiAobV9yZXAgPT0gJlJlcDo6bnVsbCk7IH0KKyAgICAgICAgYm9vbCBp
c051bGwoKSBjb25zdCB7IHJldHVybiAobV9yZXAgPT0gJlJlcDo6bnVsbCgpKTsgfQogICAgICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAoIW1fcmVwLT5sZW4pOyB9CiAKICAgICAg
ICAgYm9vbCBpczhCaXQoKSBjb25zdDsKQEAgLTIzMCwyOCArMjYxLDI0IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFVTdHJpbmcgc3Vic3RyKGludCBwb3MgPSAwLCBpbnQgbGVuID0gLTEp
IGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBjb25zdCBVU3RyaW5nJiBudWxsKCk7CisgICAgICAg
IHN0YXRpYyBjb25zdCBVU3RyaW5nJiBudWxsKCkgeyByZXR1cm4gKm51bGxVU3RyaW5nOyB9CiAK
ICAgICAgICAgUmVwKiByZXAoKSBjb25zdCB7IHJldHVybiBtX3JlcC5nZXQoKTsgfQogICAgICAg
ICBzdGF0aWMgUmVwKiBudWxsUmVwKCk7CiAKLSAgICAgICAgVVN0cmluZyhQYXNzUmVmUHRyPFJl
cD4gcikKLSAgICAgICAgICAgIDogbV9yZXAocikKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKG1fcmVwKTsKLSAgICAgICAgfQotCiAgICAgICAgIHNpemVfdCBjb3N0KCkgY29uc3Q7CiAK
KyAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWREYXRhSG9sZGVyPFVDaGFyPiA+IHNoYXJlZERhdGFI
b2xkZXIoKSB7IHJldHVybiBtX3JlcC0+YmFzZVN0cmluZygpLT5zaGFyZWREYXRhSG9sZGVyKCk7
IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCB1c2VkQ2FwYWNpdHkoKSBjb25zdDsKLSAg
ICAgICAgaW50IHVzZWRQcmVDYXBhY2l0eSgpIGNvbnN0OwogICAgICAgICB2b2lkIGV4cGFuZENh
cGFjaXR5KGludCByZXF1aXJlZExlbmd0aCk7CiAgICAgICAgIHZvaWQgZXhwYW5kUHJlQ2FwYWNp
dHkoaW50IHJlcXVpcmVkUHJlQ2FwKTsKICAgICAgICAgdm9pZCBtYWtlTnVsbCgpOwogCiAgICAg
ICAgIFJlZlB0cjxSZXA+IG1fcmVwOworICAgICAgICBzdGF0aWMgVVN0cmluZyogbnVsbFVTdHJp
bmc7CiAKKyAgICAgICAgZnJpZW5kIHZvaWQgaW5pdGlhbGl6ZVVTdHJpbmcoKTsKICAgICAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVU3RyaW5nJiwgY29uc3QgVVN0cmluZyYpOwog
ICAgICAgICBmcmllbmQgUGFzc1JlZlB0cjxSZXA+IGNvbmNhdGVuYXRlKFJlcCosIFJlcCopOyAv
LyByZXR1cm5zIDAgaWYgb3V0IG9mIG1lbW9yeQogICAgIH07CkBAIC0yOTgsMTQgKzMyNSwyOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGJvb2wgZXF1YWwoY29uc3QgVVN0cmluZzo6UmVwKiwg
Y29uc3QgVVN0cmluZzo6UmVwKik7CiAKKyAgICBpbmxpbmUgVUNoYXIqIFVTdHJpbmc6OlJlcDo6
ZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBVU3RyaW5nOjpCYXNlU3RyaW5nKiBi
YXNlID0gYmFzZVN0cmluZygpOworICAgICAgICByZXR1cm4gYmFzZS0+YnVmICsgYmFzZS0+cHJl
Q2FwYWNpdHkgKyBvZmZzZXQ7CisgICAgfQorCiAjaWZkZWYgTkRFQlVHCiAgICAgaW5saW5lIHZv
aWQgVVN0cmluZzo6UmVwOjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CiAgICAgfQog
I2VuZGlmCiAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxTaGFyZWREYXRhSG9sZGVyPFVDaGFyPiA+
IFVTdHJpbmc6OkJhc2VTdHJpbmc6OnNoYXJlZERhdGFIb2xkZXIoKQorICAgIHsKKyAgICAgICAg
Ly8gSXQgbWFrZSBkb2Vzbid0IHNlbnNlIHRvIHNoYXJlIDwgNiBieXRlcyBvZiBkYXRhLgorICAg
ICAgICBBU1NFUlQobGVuID4gMik7CisgICAgICAgIGlmICghbV9iYXNlU3RyaW5nT3JTaGFyZWRE
YXRhKQorICAgICAgICAgICAgbV9iYXNlU3RyaW5nT3JTaGFyZWREYXRhID0gU2hhcmVkRGF0YUhv
bGRlcjxVQ2hhcj46OmNyZWF0ZShidWYpLnJlbGVhc2VSZWYoKTsKKyAgICAgICAgcmV0dXJuIHJh
d1NoYXJlZERhdGFIb2xkZXIoKTsKKyAgICB9CisKICAgICBpbmxpbmUgVVN0cmluZzo6VVN0cmlu
ZygpCi0gICAgICAgIDogbV9yZXAoJlJlcDo6bnVsbCkKKyAgICAgICAgOiBtX3JlcCgmUmVwOjpu
dWxsKCkpCiAgICAgewogICAgIH0KIApAQCAtMzI4LDggKzM3MCw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgaW5saW5lIHNpemVfdCBVU3RyaW5nOjpjb3N0KCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHNpemVfdCBjYXBhY2l0eSA9IChtX3JlcC0+YmFzZVN0cmluZy0+Y2FwYWNpdHkgKyBtX3Jl
cC0+YmFzZVN0cmluZy0+cHJlQ2FwYWNpdHkpICogc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgc2l6
ZV90IHJlcG9ydGVkQ29zdCA9IG1fcmVwLT5iYXNlU3RyaW5nLT5yZXBvcnRlZENvc3Q7CisgICAg
ICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSBtX3JlcC0+YmFzZVN0cmluZygpOworICAg
ICAgICBzaXplX3QgY2FwYWNpdHkgPSAoYmFzZS0+Y2FwYWNpdHkgKyBiYXNlLT5wcmVDYXBhY2l0
eSkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICBzaXplX3QgcmVwb3J0ZWRDb3N0ID0gYmFzZS0+
cmVwb3J0ZWRDb3N0OwogICAgICAgICBBU1NFUlQoY2FwYWNpdHkgPj0gcmVwb3J0ZWRDb3N0KTsK
IAogICAgICAgICBzaXplX3QgY2FwYWNpdHlEZWx0YSA9IGNhcGFjaXR5IC0gcmVwb3J0ZWRDb3N0
OwpAQCAtMzM3LDcgKzM4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAoY2FwYWNp
dHlEZWx0YSA8IHN0YXRpY19jYXN0PHNpemVfdD4obWluU2hhcmVTaXplKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogCi0gICAgICAgIG1fcmVwLT5iYXNlU3RyaW5nLT5yZXBvcnRlZENvc3QgPSBj
YXBhY2l0eTsKKyAgICAgICAgYmFzZS0+cmVwb3J0ZWRDb3N0ID0gY2FwYWNpdHk7CiAKICAgICAg
ICAgcmV0dXJuIGNhcGFjaXR5RGVsdGE7CiAgICAgfQpAQCAtMzQ3LDYgKzM5MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChKU0M6OlVTdHJpbmc6OlJl
cCoga2V5KSB7IHJldHVybiBrZXktPmNvbXB1dGVkSGFzaCgpOyB9CiAgICAgfTsKIAorICAgIHZv
aWQgaW5pdGlhbGl6ZVVTdHJpbmcoKTsKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTM3Nyw5ICs0MjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFJlZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4gPiB7CiAgICAg
ICAgIHR5cGVkZWYgU3RySGFzaDxSZWZQdHI8SlNDOjpVU3RyaW5nOjpSZXA+ID4gSGFzaDsKLQog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi0jZW5kaWYKKyNlbmRpZiAvLyBVU3RyaW5n
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QdHJBbmRGbGFncy5oIGIvSmF2YVNj
cmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODRlNWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QdHJB
bmRGbGFncy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQdHJBbmRGbGFnc19oCisjZGVmaW5l
IFB0ckFuZEZsYWdzX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworICAgIHRlbXBsYXRlPGNsYXNzIFQsIHR5cGVuYW1lIEZsYWdFbnVtPiBjbGFzcyBQ
dHJBbmRGbGFncyB7CisgICAgcHVibGljOgorICAgICAgICBQdHJBbmRGbGFncygpIDogbV9wdHJB
bmRGbGFncygwKSB7fQorCisgICAgICAgIGJvb2wgaXNGbGFnU2V0KEZsYWdFbnVtIGZsYWdOdW1i
ZXIpIGNvbnN0IHsgQVNTRVJUKGZsYWdOdW1iZXIgPCAyKTsgcmV0dXJuIG1fcHRyQW5kRmxhZ3Mg
JiAoMSA8PCBmbGFnTnVtYmVyKTsgfQorICAgICAgICB2b2lkIHNldEZsYWcoRmxhZ0VudW0gZmxh
Z051bWJlcikgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyBtX3B0ckFuZEZsYWdzIHw9ICgxIDw8
IGZsYWdOdW1iZXIpO30KKyAgICAgICAgdm9pZCBjbGVhckZsYWcoRmxhZ0VudW0gZmxhZ051bWJl
cikgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyBtX3B0ckFuZEZsYWdzICY9IH4oMSA8PCBmbGFn
TnVtYmVyKTt9CisgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+KG1fcHRyQW5kRmxhZ3MgJiB+Myk7IH0KKyAgICAgICAgdm9pZCBzZXQoVCogcHRyKSB7
IEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHB0cikgJiAzKSk7IG1fcHRyQW5k
RmxhZ3MgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpIHwgKG1fcHRyQW5kRmxhZ3Mg
JiAzKTt9CisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50cHRyX3QgbV9wdHJBbmRGbGFnczsKKyAg
ICB9OworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UHRyQW5kRmxhZ3M7CisKKyNl
bmRpZiAvLyBQdHJBbmRGbGFnc19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvUmVm
Q291bnRlZC5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAppbmRleCBhYzhlMTY3
Li45MTc4OTA1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgKQEAgLTQ5LDYgKzQ5LDggQEAgcHVi
bGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudFdpdGhU
aHJlYWRTaGFyZWRCYXNlOworCiAgICAgUmVmQ291bnRlZEJhc2UoaW50IGluaXRpYWxSZWZDb3Vu
dCkKICAgICAgICAgOiBtX3JlZkNvdW50KGluaXRpYWxSZWZDb3VudCkKICNpZm5kZWYgTkRFQlVH
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvU2hhcmVkRGF0YUhvbGRlci5oIGIvSmF2
YVNjcmlwdENvcmUvd3RmL1NoYXJlZERhdGFIb2xkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yYWNjZGVhCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUv
d3RmL1NoYXJlZERhdGFIb2xkZXIuaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXJlZERh
dGFIb2xkZXJfaAorI2RlZmluZSBTaGFyZWREYXRhSG9sZGVyX2gKKworI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCisgICAgY2xhc3MgUmVmQ291bnRXaXRoVGhyZWFkU2hhcmVkQmFzZSA6IE5vbmNvcHlh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgcmVmKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9yZWZDb3VudGVkQmFzZS5yZWYoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
aGFzT25lUmVmKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcmVmQ291
bnRlZEJhc2UuaGFzT25lUmVmKCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVGhyZWFk
U2hhcmVkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdGhyZWFkU2Fm
ZVNoYXJlZEJhc2UgJiYgIW1fdGhyZWFkU2FmZVNoYXJlZEJhc2UtPmhhc09uZVJlZigpOworICAg
ICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFJlZkNvdW50V2l0aFRocmVhZFNoYXJl
ZEJhc2UoaW50IGluaXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIDogbV9yZWZDb3VudGVkQmFz
ZShpbml0aWFsUmVmQ291bnQpCisgICAgICAgICAgICAsIG1fdGhyZWFkU2FmZVNoYXJlZEJhc2Uo
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgflJlZkNvdW50V2l0aFRocmVhZFNo
YXJlZEJhc2UoKSB7fQorCisgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcG9pbnRlciBz
aG91bGQgYmUgZnJlZWQgb3Igbm90LgorICAgICAgICBib29sIGRlcmVmQmFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtX3JlZkNvdW50ZWRCYXNlLmRlcmVmQmFzZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVNoYXJlZEJhc2UgJiYgbV90aHJlYWRTYWZlU2hh
cmVkQmFzZS0+ZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1fdGhy
ZWFkU2FmZVNoYXJlZEJhc2U7CisgICAgICAgICAgICAgICAgICAgIG1fdGhyZWFkU2FmZVNoYXJl
ZEJhc2UgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgc2hvdWxkRGVsZXRlU2hhcmVkRGF0YSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAhbV90aHJlYWRTYWZlU2hhcmVkQmFzZTsKKyAgICAgICAgfQorCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBSZWZDb3VudGVkQmFzZSBtX3JlZkNvdW50ZWRCYXNlOworICAg
ICAgICBUaHJlYWRTYWZlU2hhcmVkQmFzZSogbV90aHJlYWRTYWZlU2hhcmVkQmFzZTsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgU2hhcmVkRGF0YUhvbGRlciA6IHB1Ymxp
YyBSZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlZERhdGFIb2xkZXI8VD4gPiBjcmVhdGUoY29uc3QgVCogc2hh
cmVkRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFy
ZWREYXRhSG9sZGVyPFQ+KHNoYXJlZERhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IFQqIHVuc2hhcmUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUKiBzaGFyZWREYXRh
ID0gbV9zaGFyZWREYXRhOworICAgICAgICAgICAgbV9zaGFyZWREYXRhID0gMDsKKyAgICAgICAg
ICAgIHJldHVybiBzaGFyZWREYXRhOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkZXJlZigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgICAg
ICBkZWxldGUgdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkRGF0
YUhvbGRlcjxUPiA+IGNvcHkoKQorICAgICAgICB7CisgICAgICAgICAgICBQYXNzUmVmUHRyPFNo
YXJlZERhdGFIb2xkZXI8VD4gPiBob2xkZXIoY3JlYXRlKG1fc2hhcmVkRGF0YSkpOworICAgICAg
ICAgICAgaWYgKCFtX3RocmVhZFNhZmVTaGFyZWRCYXNlKQorICAgICAgICAgICAgICAgIG1fdGhy
ZWFkU2FmZVNoYXJlZEJhc2UgPSBuZXcgVGhyZWFkU2FmZVNoYXJlZEJhc2UoMik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90aHJlYWRTYWZlU2hhcmVkQmFzZS0+cmVmKCk7
CisgICAgICAgICAgICBob2xkZXItPm1fdGhyZWFkU2FmZVNoYXJlZEJhc2UgPSBtX3RocmVhZFNh
ZmVTaGFyZWRCYXNlOworICAgICAgICAgICAgcmV0dXJuIGhvbGRlcjsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgU2hhcmVkRGF0YUhvbGRlcihjb25zdCBUKiBzaGFyZWREYXRh
KQorICAgICAgICAgICAgOiBSZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRCYXNlKDEpCisgICAgICAg
ICAgICAsIG1fc2hhcmVkRGF0YShzaGFyZWREYXRhKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICB+U2hhcmVkRGF0YUhvbGRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGREZWxldGVTaGFyZWREYXRhKCkgJiYgbV9zaGFyZWREYXRhKQorICAgICAgICAgICAgICAg
IGZhc3RGcmVlKGNvbnN0X2Nhc3Q8VCo+KG1fc2hhcmVkRGF0YSkpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBUKiBtX3NoYXJlZERhdGE7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2hhcmVkRGF0YUhvbGRlcjsKKworI2VuZGlm
IC8vIFNoYXJlZERhdGFIb2xkZXJfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1Ro
cmVhZGluZy5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCmluZGV4IDE1NjAxM2Qu
LmFhMGRmY2UgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKQEAgLTIwMSw5ICsyMDEsOSBAQCBpbmxp
bmUgaW50IGF0b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gX19n
bnVfY3h4OjpfX2V4Y2hhbmdlXwogCiAjZW5kaWYKIAotdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3Mg
VGhyZWFkU2FmZVNoYXJlZCA6IE5vbmNvcHlhYmxlIHsKK2NsYXNzIFRocmVhZFNhZmVTaGFyZWRC
YXNlIDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFyZWQoaW50IGlu
aXRpYWxSZWZDb3VudCA9IDEpCisgICAgVGhyZWFkU2FmZVNoYXJlZEJhc2UoaW50IGluaXRpYWxS
ZWZDb3VudCA9IDEpCiAgICAgICAgIDogbV9yZWZDb3VudChpbml0aWFsUmVmQ291bnQpCiAgICAg
ewogICAgIH0KQEAgLTIxOCwyMCArMjE4LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0g
ICAgdm9pZCBkZXJlZigpCi0gICAgewotI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVE
KQotICAgICAgICBpZiAoYXRvbWljRGVjcmVtZW50KCZtX3JlZkNvdW50KSA8PSAwKQotI2Vsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAg
ICAgICAgICAgLS1tX3JlZkNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3JlZkNvdW50
IDw9IDApCi0jZW5kaWYKLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7
Ci0gICAgfQotCiAgICAgYm9vbCBoYXNPbmVSZWYoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJl
ZkNvdW50KCkgPT0gMTsKQEAgLTI0NSw2ICsyMzEsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50IGNvbnN0IHZvbGF0aWxlICY+KG1fcmVmQ291bnQpOwogICAgIH0K
IAorcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRC
YXNlOworCisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVl
ZCBvciBub3QuCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyNpZiBVU0UoTE9DS0ZSRUVf
VEhSRUFEU0FGRVNIQVJFRCkKKyAgICAgICAgaWYgKGF0b21pY0RlY3JlbWVudCgmbV9yZWZDb3Vu
dCkgPD0gMCkKKyNlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX211dGV4KTsKKyAgICAgICAgICAgIC0tbV9yZWZDb3VudDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobV9yZWZDb3VudCA8PSAwKQorI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogcHJpdmF0ZToKICAgICBpbnQgbV9yZWZD
b3VudDsKICNpZiAhVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCkBAIC0yNTIsNiArMjU3
LDIxIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3Mg
VGhyZWFkU2FmZVNoYXJlZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkQmFzZSB7CitwdWJsaWM6
CisgICAgVGhyZWFkU2FmZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50ID0gMSkKKyAgICAgICAg
OiBUaHJlYWRTYWZlU2hhcmVkQmFzZShpbml0aWFsUmVmQ291bnQpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAg
ICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9Cit9OworCiAvLyBUaGlz
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZl
IHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KIC8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhp
cyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgcmVx
dWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCiB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZyBi
L0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwppbmRleCBiZDBmZTVkLi4wMmY4ZTMyIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdEdsdWUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDEtMDcgIERhdmlkIExldmluICA8bGV2aW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NQorCisgICAg
ICAgIEFkZGVkIGZvcndhcmRpbmcgaGVhZGVycy4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9QdHJBbmRGbGFncy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVy
cy93dGYvU2hhcmVkRGF0YUhvbGRlci5oOiBBZGRlZC4KKwogMjAwOS0wMS0wNSAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgU3RhbXBl
ZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oIGIvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL1B0ckFuZEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzhiZGZiNAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9QdHJBbmRGbGFncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9QdHJBbmRGbGFncy5oPgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL1NoYXJlZERhdGFIb2xkZXIuaCBiL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGI4YTllZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRHbHVlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmgKQEAgLTAsMCArMSBAQAorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NoYXJlZERhdGFIb2xkZXIuaD4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ1NDQ5Ny4uN2FhOWRm
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNiBAQAorMjAwOS0wMS0wNyAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTc1CisKKyAgICAgICAg
TWFkZSBTdHJpbmdJbXBsOjpjb3B5IGFuZCBXZWJDb3JlOjpTdHJpbmc6Om9wZXJhdG9yIFVTdHJp
bmcgcmUtdXNlIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIGJ1ZmZlciwgc28gbm8gYWRkaXRpb25h
bCBhbGxvY2F0aW9uL2NvcHkgbmVlZHMgdG8gYmUgZG9uZSBmb3IgdGhlc2UgY29kZSBwYXRocy4K
KworICAgICAgICBObyBvYnNlcnZhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4K
KworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oOiBBZGRlZC4K
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvU2hhcmVkRGF0YUhvbGRlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdG9taWNTdHJpbmc6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6U3RyaW5nSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5n
SW1wbDo6dXN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNoYXJlZERhdGFIb2xkZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6aGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0ltcGw6Oik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppblRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNldEluVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6cmF3U2hhcmVkRGF0YUhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdJbXBsOjpzZXRTaGFyZWREYXRhSG9sZGVyKToKKwogMjAwOS0wMS0wNiAgTWFyayBSb3dlICA8
bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUHRyQW5kRmxhZ3MuaCBiL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiZGZiNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1B0ckFuZEZsYWdzLmg+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmggYi9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGI4YTllZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL1NoYXJlZERhdGFIb2xkZXIuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2hhcmVkRGF0YUhvbGRlci5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRv
bWljU3RyaW5nLmNwcAppbmRleCA1ZjlhYmZkLi40OWQ2NjdmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQXRvbWljU3RyaW5nLmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgVUNoYXIqIHMpCiAKIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoU3RyaW5nSW1wbCogcikKIHsKLSAgICBpZiAoIXIg
fHwgci0+bV9pblRhYmxlKQorICAgIGlmICghciB8fCByLT5pblRhYmxlKCkpCiAgICAgICAgIHJl
dHVybiByOwogCiAgICAgaWYgKHItPmxlbmd0aCgpID09IDApCkBAIC0yMTQsNyArMjE0LDcgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChTdHJpbmdJbXBsKiByKQog
ICAgIAogICAgIFN0cmluZ0ltcGwqIHJlc3VsdCA9ICpzdHJpbmdUYWJsZSgpLmFkZChyKS5maXJz
dDsKICAgICBpZiAocmVzdWx0ID09IHIpCi0gICAgICAgIHItPm1faW5UYWJsZSA9IHRydWU7Cisg
ICAgICAgIHItPnNldEluVGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmcuY3BwCmluZGV4IGU0MGMzYzYuLjg3NTFkMDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
dHJpbmcuY3BwCkBAIC02MTgsMjEgKzYxOCwyMSBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBJZGVu
dGlmaWVyJiBzdHIpCiB7CiAgICAgaWYgKHN0ci5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsK
KyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLnVzdHJpbmcoKSk7CiB9CiAKIFN0
cmluZzo6U3RyaW5nKGNvbnN0IFVTdHJpbmcmIHN0cikKIHsKICAgICBpZiAoc3RyLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci5k
YXRhKCksIHN0ci5zaXplKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIp
OwogfQogCiBTdHJpbmc6Om9wZXJhdG9yIFVTdHJpbmcoKSBjb25zdAogewogICAgIGlmICghbV9p
bXBsKQogICAgICAgICByZXR1cm4gVVN0cmluZygpOwotICAgIHJldHVybiBVU3RyaW5nKG1faW1w
bC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbV9pbXBsLT51
c3RyaW5nKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0ltcGwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCmlu
ZGV4IDA1NTZmOGUuLmM4NjMyZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
dHJpbmdJbXBsLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAK
QEAgLTQzLDYgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBV
bmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWlu
TGVuZ3RoVG9TaGFyZSA9IDEwOyAvLyAyMCBieXRlcyBzZWVtZWQgbGlrZSBhIHJlYXNvbmFibGUg
bnVtYmVyIGhlcmUgZ2l2ZW4gdGhhdCBhbGxvY2F0aW5nIHRoZSBzaGFyZWQgaG9sZGVyIGlzIGF0
IGxlYXN0IDEyIGJ5dGVzLgogCiBzdGF0aWMgaW5saW5lIFVDaGFyKiBuZXdVQ2hhclZlY3Rvcih1
bnNpZ25lZCBuKQogewpAQCAtNTksOCArNjAsNiBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKCkK
ICAgICA6IG1fbGVuZ3RoKDApCiAgICAgLCBtX2RhdGEoMCkKICAgICAsIG1faGFzaCgwKQotICAg
ICwgbV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIo
ZmFsc2UpCiB7CiAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhh
dCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCiAgICAgLy8gd2l0aCBp
bXB1bml0eS4gVGhlIGVtcHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIg
ZW50ZXJlZCBpbnRvCkBAIC03NCw4ICs3Myw2IEBAIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoKQog
aW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaCgwKQot
ICAgICwgbV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIoZmFsc2UpCiB7CiAgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOwog
ICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKQEAg
LTg1LDkgKzgyLDggQEAgaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJ
bXBsKGNvbnN0IFN0cmluZ0ltcGwmIHN0ciwgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlcikK
ICAgICA6IG1fbGVuZ3RoKHN0ci5tX2xlbmd0aCkKICAgICAsIG1faGFzaChzdHIubV9oYXNoKQot
ICAgICwgbV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIodHJ1ZSkKIHsKKyAgICBtX3NoYXJlZERhdGFIb2xkZXJBbmRGbGFncy5zZXRGbGFnKEhhc1Rl
cm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7CiAgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3Rv
cihzdHIubV9sZW5ndGggKyAxKTsKICAgICBtZW1jcHkoZGF0YSwgc3RyLm1fZGF0YSwgc3RyLm1f
bGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgZGF0YVtzdHIubV9sZW5ndGhdID0gMDsKQEAg
LTk3LDggKzkzLDYgQEAgaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgU3RyaW5n
SW1wbCYgc3RyLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGUKIGlubGluZSBTdHJpbmdJbXBs
OjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAg
ICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaCgwKQotICAgICwgbV9pblRhYmxlKGZh
bHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFsc2UpCiB7CiAgICAg
QVNTRVJUKGNoYXJhY3RlcnMpOwogICAgIEFTU0VSVChsZW5ndGgpOwpAQCAtMTE1LDggKzEwOSw2
IEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIEFkb3B0QnVmZmVyKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwg
bV9kYXRhKGNoYXJhY3RlcnMpCiAgICAgLCBtX2hhc2goMCkKLSAgICAsIG1faW5UYWJsZShmYWxz
ZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogewogICAgIEFT
U0VSVChjaGFyYWN0ZXJzKTsKICAgICBBU1NFUlQobGVuZ3RoKTsKQEAgLTEyNiwxMyArMTE4LDEy
IEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIEFkb3B0QnVmZmVyKQogU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQogICAgIDog
bV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9oYXNoKGhhc2gpCi0gICAgLCBtX2luVGFibGUodHJ1
ZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogewogICAgIEFT
U0VSVChoYXNoKTsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAgICAgQVNTRVJUKGxlbmd0aCk7
CiAKKyAgICBtX3NoYXJlZERhdGFIb2xkZXJBbmRGbGFncy5zZXRGbGFnKEluVGFibGUpOwogICAg
IFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3RoKTsKICAgICBtZW1jcHkoZGF0YSwg
Y2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgbV9kYXRhID0gZGF0YTsK
QEAgLTE0MiwxMyArMTMzLDEyIEBAIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgaGFzaCkKIFN0cmluZ0ltcGw6
OlN0cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBoYXNoKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9oYXNoKGhhc2gpCi0g
ICAgLCBtX2luVGFibGUodHJ1ZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVy
KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNoKTsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAg
ICAgQVNTRVJUKGxlbmd0aCk7CiAKKyAgICBtX3NoYXJlZERhdGFIb2xkZXJBbmRGbGFncy5zZXRG
bGFnKEluVGFibGUpOwogICAgIFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3RoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHVu
c2lnbmVkIGNoYXIgYyA9IGNoYXJhY3RlcnNbaV07CkBAIC0xNTksOSArMTQ5LDE0IEBAIFN0cmlu
Z0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBoYXNoKQogCiBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB7Ci0gICAgaWYg
KG1faW5UYWJsZSkKKyAgICBpZiAoaW5UYWJsZSgpKQogICAgICAgICBBdG9taWNTdHJpbmc6OnJl
bW92ZSh0aGlzKTsKLSAgICBkZWxldGVVQ2hhclZlY3RvcihtX2RhdGEpOworCisgICAgU2hhcmVk
RGF0YUhvbGRlcjxVQ2hhcj4qIGhvbGRlciA9IHJhd1NoYXJlZERhdGFIb2xkZXIoKTsKKyAgICBp
ZiAoaG9sZGVyKQorICAgICAgICBob2xkZXItPmRlcmVmKCk7CisgICAgZWxzZQorICAgICAgICBk
ZWxldGVVQ2hhclZlY3RvcihtX2RhdGEpOwogfQogCiBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpl
bXB0eSgpCkBAIC05NzgsNiArOTczLDIyIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIHN0cmluZykKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0cmluZ0ltcGwoc3RyaW5nLCBsZW5ndGgpKTsKIH0KIAorI2lmIFVTRShKU0MpCitQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZShjb25zdCBKU0M6OlVTdHJpbmcmIHN0
cikKK3sKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci5kYXRhKCksIHN0ci5zaXpl
KCkpOworfQorCitKU0M6OlVTdHJpbmcgU3RyaW5nSW1wbDo6dXN0cmluZygpCit7CisgICAgaWYg
KHJhd1NoYXJlZERhdGFIb2xkZXIoKSB8fCBtX2xlbmd0aCA+PSBtaW5MZW5ndGhUb1NoYXJlKSB7
CisgICAgICAgIHJldHVybiBKU0M6OlVTdHJpbmc6OlJlcDo6Y3JlYXRlU2hhcmVkKGNvbnN0X2Nh
c3Q8VUNoYXIqPihtX2RhdGEpLCBtX2xlbmd0aCwgc2hhcmVkRGF0YUhvbGRlcigpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gSlNDOjpVU3RyaW5nKG1fZGF0YSwgbV9sZW5ndGgpOworfQorI2VuZGlm
CisKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aFRlcm1pbmF0
aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHN0cmluZywgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJh
Y3RlcigpKSk7CkBAIC05ODUsNyArOTk2LDIyIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Y3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpCiAK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29weSgpCiB7CisgICAgaWYgKHJh
d1NoYXJlZERhdGFIb2xkZXIoKSB8fCBtX2xlbmd0aCA+PSBtaW5MZW5ndGhUb1NoYXJlKSB7Cisg
ICAgICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJ
bXBsKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpLCBtX2xlbmd0aCwgQWRvcHRCdWZmZXIoKSkp
OworICAgICAgICBpbXBsLT5zZXRTaGFyZWREYXRhSG9sZGVyKHNoYXJlZERhdGFIb2xkZXIoKS0+
Y29weSgpKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHJpbmdJbXBsKG1fZGF0YSwgbV9sZW5ndGgpKTsKIH0KIAorUGFzc1JlZlB0cjxT
aGFyZWREYXRhSG9sZGVyPFVDaGFyPiA+IFN0cmluZ0ltcGw6OnNoYXJlZERhdGFIb2xkZXIoKQor
eworICAgIC8vIEl0IG1ha2UgZG9lc24ndCBzZW5zZSB0byBzaGFyZWQgNCBieXRlcyBvZiBkYXRh
LgorICAgIEFTU0VSVChtX2xlbmd0aCA+IDIpOworICAgIGlmICghcmF3U2hhcmVkRGF0YUhvbGRl
cigpKQorICAgICAgICBzZXRTaGFyZWREYXRhSG9sZGVyKFNoYXJlZERhdGFIb2xkZXI8VUNoYXI+
OjpjcmVhdGUobV9kYXRhKSk7CisgICAgcmV0dXJuIHJhd1NoYXJlZERhdGFIb2xkZXIoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ0ltcGwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKaW5k
ZXggOWRhMTM2Zi4uZjgzYTBmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0ltcGwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0y
Myw4ICsyMywxMiBAQAogI2RlZmluZSBTdHJpbmdJbXBsX2gKIAogI2luY2x1ZGUgPGxpbWl0cy5o
PgorI2lmIFVTRShKU0MpCisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CisjZW5kaWYKICNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpA
QCAtNzYsNiArODAsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqKTsK
KyNpZiBVU0UoSlNDKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShj
b25zdCBKU0M6OlVTdHJpbmcmKTsKKyNlbmRpZgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gY3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpbmdJ
bXBsJik7CiAKQEAgLTg2LDcgKzkzLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1
cm4gbV9sZW5ndGg7IH0KIAotICAgIGJvb2wgaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkg
eyByZXR1cm4gbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7IH0KKyAgICBib29sIGhhc1Rl
cm1pbmF0aW5nTnVsbENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkRGF0YUhvbGRl
ckFuZEZsYWdzLmlzRmxhZ1NldChIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpOyB9CiAKICAg
ICB1bnNpZ25lZCBoYXNoKCkgeyBpZiAobV9oYXNoID09IDApIG1faGFzaCA9IGNvbXB1dGVIYXNo
KG1fZGF0YSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9CiAgICAgdW5zaWduZWQgZXhpc3Rp
bmdIYXNoKCkgY29uc3QgeyBBU1NFUlQobV9oYXNoKTsgcmV0dXJuIG1faGFzaDsgfQpAQCAtMTM1
LDYgKzE0MiwxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlbW92
ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cik7CiAKKyNpZiBVU0UoSlNDKQor
ICAgIEpTQzo6VVN0cmluZyB1c3RyaW5nKCk7CisjZW5kaWYKKwogICAgIGludCBmaW5kKGNvbnN0
IGNoYXIqLCBpbnQgaW5kZXggPSAwLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKTsKICAgICBp
bnQgZmluZChVQ2hhciwgaW50IGluZGV4ID0gMCk7CiAgICAgaW50IGZpbmQoQ2hhcmFjdGVyTWF0
Y2hGdW5jdGlvblB0ciwgaW50IGluZGV4ID0gMCk7CkBAIC0xNjUsMTEgKzE3NiwyMiBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBlbnVtIFN0cmluZ0ltcGxGbGFncyB7CisgICAg
ICAgIEluVGFibGUsCisgICAgICAgIEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlciwKKyAgICB9
OworICAgIGJvb2wgaW5UYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkRGF0YUhvbGRlckFu
ZEZsYWdzLmlzRmxhZ1NldChJblRhYmxlKTsgfQorICAgIHZvaWQgc2V0SW5UYWJsZSgpIHsgcmV0
dXJuIG1fc2hhcmVkRGF0YUhvbGRlckFuZEZsYWdzLnNldEZsYWcoSW5UYWJsZSk7IH0KKworICAg
IFNoYXJlZERhdGFIb2xkZXI8VUNoYXI+KiByYXdTaGFyZWREYXRhSG9sZGVyKCkgeyByZXR1cm4g
bV9zaGFyZWREYXRhSG9sZGVyQW5kRmxhZ3MuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNoYXJlZERh
dGFIb2xkZXIoUGFzc1JlZlB0cjxTaGFyZWREYXRhSG9sZGVyPFVDaGFyPiA+IGhvbGRlcikgeyBB
U1NFUlQoIXJhd1NoYXJlZERhdGFIb2xkZXIoKSk7IG1fc2hhcmVkRGF0YUhvbGRlckFuZEZsYWdz
LnNldChob2xkZXIucmVsZWFzZVJlZigpKTsgfQorCisgICAgUGFzc1JlZlB0cjxTaGFyZWREYXRh
SG9sZGVyPFVDaGFyPiA+IHNoYXJlZERhdGFIb2xkZXIoKTsKKwogICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOwogICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2hh
c2g7Ci0gICAgYm9vbCBtX2luVGFibGU7Ci0gICAgYm9vbCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENo
YXJhY3RlcjsKKyAgICBQdHJBbmRGbGFnczxTaGFyZWREYXRhSG9sZGVyPFVDaGFyPiwgU3RyaW5n
SW1wbEZsYWdzPiBtX3NoYXJlZERhdGFIb2xkZXJBbmRGbGFnczsKIH07CiAKIGJvb2wgZXF1YWwo
U3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26550</attachid>
            <date>2009-01-08 17:06:22 -0800</date>
            <delta_ts>2009-01-09 04:53:19 -0800</delta_ts>
            <desc>Attempted to make the SharedDataHolder usage more clear.</desc>
            <filename>patch-for-bug23175_rev2.txt</filename>
            <type>text/plain</type>
            <size>84368</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4MzdmMWE2Li5jYWY0ODAzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM2
IEBACisyMDA5LTAxLTA3ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKworICAgICAgICAxLTIlIHBlcmYgaW1w
cm92ZW1lbnQgb24gU3Vuc3BpZGVyLgorCisgICAgICAgIFJlZHVjZWQgbWVtb3J5IHVzYWdlIGZv
ciBVU3RyaW5nIGJ5IGJyZWFraW5nIG91dCBmaWVsZHMgb25seSB1c2VkIGluIGEgYmFzZSBzdHJp
bmcKKyAgICAgICAgaW50byBVU3RyaW5nOjpCYXNlU3RyaW5nIHdoaWNoIGRlcml2ZXMgZnJvbSBV
U3RyaW5nOjpSZXAuCisKKyAgICAgICAgQWxsb3cgVVN0cmluZzo6QmFzZVN0cmluZzo6YnVmIHRv
IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgY2xhc3MuICBUaGlzIGFsbG93cworICAgICAgICBXZWJD
b3JlOjpTdHJpbmdJbXBsIHRvIGJlIGFibGUgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBVU3RyaW5n
IGFuZCBoYXZlIGpvaW50IG93bmVyc2hpcAorICAgICAgICBvdmVyIHRoZSB1bmRlcmx5aW5nIGJ1
ZmZlciAod2hpY2ggYXZvaWRzIGV4dHJhIGFsbG9jYXRpb25zIGFuZCBjb3BpZXMpIGFuZCB2aWNl
CisgICAgICAgIHZlcnNhIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAgICAgICBObyBvYnNlcnZh
YmxlIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkZWQgUHRyQW5kRmxhZ3MuaCBh
bmQgU2hhcmVkRGF0YUhvbGRlci5oIChhbmQgc29ydGVkIHRoZSB4Y29kZSBwcm9qZWN0IGZpbGUp
LgorCisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRl
bnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmdPbmNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1l
QXJyYXk6OmFkZCk6CisgICAgICAgICogcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAg
ICAoSlNDOjpTbWFsbFN0cmluZ3NTdG9yYWdlOjpyZXApOgorICAgICAgICAoSlNDOjpTbWFsbFN0
cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6U21hbGxT
dHJpbmdzOjpTbWFsbFN0cmluZ3MpOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6Om1hcmsp
OgorICAgICAgICBUaGlzIHdhcyBkdWUgdG8gdGhlIGNoYW5nZXMgaW4gVVN0cmluZzo6UmVwL0Jh
c2VTdHJpbmcgYW5kIHB1dCB0aGUgVVN0cmluZzo6KiBpdGVtcyBkaXJlY3RseSBpbiB0aGUgCisg
ICAgICAgIGNsYXNzIHRvIGluY3JlYXNlIHRoZSBsb2NhbGl0eSBvZiByZWZlcmVuY2UuCisKKyAg
ICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5oOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmlu
Zy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVVTdHJpbmcpOgorICAgICAgICBEdWUgdG8gYWRkaXRpb24gb2Yg
dGhlIEJhc2VTdHJpbmcgY2xhc3MsIHRoZSBpbnRpYWxpemF0aW9uIG9mIHRoZSBzdGF0aWMKKyAg
ICAgICAgdmFyaWFibGVzIGhhZCB0byBjaGFuZ2UgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIHVz
aW5nIHt9IGZvciBpbnRpYWxpemF0aW9uLgorCisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjcmVhdGVTaGFyZWQpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmNyZWF0ZUZyb21VVEY4KToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6UmVwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjaGVj
a0NvbnNpc3RlbmN5KToKKworICAgICAgICAoSlNDOjpVU3RyaW5nOjpCYXNlU3RyaW5nOjp0cnlU
b01ha2VVbnNoYXJlZCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnRyeVRv
TWFrZU1vZGlmaWFibGUpOgorICAgICAgICAoSlNDOjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OmV4cGFuZFByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UmVwKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0cmluZyk6CisgICAgICAgIChKU0M6OmNv
bmNhdGVuYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6VVN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6bWFrZU51bGwp
OgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudWxsUmVwKToKKyAgICAgICAgRW5zdXJlIHRoYXQg
dGhlIGJ1ZmZlciBpc24ndCBiZWluZyBtb2RpZmVkIHdoZW4gaXQgaXMgYmVpZ24gc2hhcmVkIGFj
cm9zcyBjbGFzc2VzL3RocmVhZHMuCisKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpiYXNlSXNTZWxmKToKKyAgICAgICAgKEpTQzo6VVN0
cmluZzo6UmVwOjppZGVudGlmaWVyVGFibGUpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6
OnNldElkZW50aWZpZXJUYWJsZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6aXNTdGF0
aWMpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OnNldFN0YXRpYyk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6OlJlcDo6c2V0QmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6
OlJlcDo6YmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6KToKKyAgICAg
ICAgKEpTQzo6VVN0cmluZzo6UmVwOjpudWxsKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVw
OjplbXB0eSk6CisgICAgICAgIEFkZGVkIGEgMm5kIGZsYWcgaW50byB0aGUgbV9pZGVudGlmaWVy
VGFibGUgdmFyaWFibGUgYW5kIG1hZGUgYSB0ZW1wbGF0ZSBjbGFzcyB0byBtYWtlIHRoZQorICAg
ICAgICBwb2ludGVyIGNvbWJpbmVkIHdpdGggZmxhZ3MgbW9yZSByZWFkYWJsZS4KKworICAgICAg
ICBUaGUgYWRkaXRpb25hbCBmbGFnIGluZGljYXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEg
VVN0cmluZzo6UmVwCisgICAgICAgIGFuZCBhIFVTdHJpbmc6OkJhc2VTdHJpbmcuICBUaGlzIHNl
cGFyYXRpb24gYWxsb3dzIGEgc2F2aW5ncyBvZiAyNCBieXRlcyBpbiBlYWNoIFVTdHJpbmc6OlJl
cC4KKyAgICAgICAgCisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnJhd1NoYXJl
ZERhdGFIb2xkZXIpOgorICAgICAgICBwcmVDYXBhY2l0eSBpcyBub3cgdGhlIGZpcnN0ICpDYXBh
Y2l0eSBmaWVsZCB3aGljaCBtZWFucyB0aGF0IFVTdHJpbmc6OkJhc2VTdHJpbmc6OmRhdGEoKSBv
bmx5IAorICAgICAgICB1c2VzIGZpZWxkcyB3aXRoaW4gdGhlIGZpcnN0IDMyIGJ5dGVzIG9mIEJh
c2VTdHJpbmcuCisKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0cmluZyk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6On5VU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6aXNOdWxsKToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6bnVsbCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OnNo
YXJlZERhdGFIb2xkZXIpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmRhdGEpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjpCYXNlU3RyaW5nOjpzaGFyZWREYXRhSG9sZGVyKToKKyAgICAg
ICAgKEpTQzo6VVN0cmluZzo6Y29zdCk6CisgICAgICAgIChXVEY6Oik6CisKKyAgICAgICAgKiB3
dGYvUHRyQW5kRmxhZ3MuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdzOjpQdHJB
bmRGbGFncyk6CisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdzOjppc0ZsYWdTZXQpOgorICAgICAg
ICAoV1RGOjpQdHJBbmRGbGFnczo6c2V0RmxhZyk6CisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdz
OjpjbGVhckZsYWcpOgorICAgICAgICAoV1RGOjpQdHJBbmRGbGFnczo6Z2V0KToKKyAgICAgICAg
KFdURjo6UHRyQW5kRmxhZ3M6OnNldCk6CisgICAgICAgIEEgc2ltcGxlIHdheSB0byBsYXllciB0
b2dldGhlciBhIHBvaW50ZXIgYW5kIDIgZmxhZ3MuICBJdCByZWxpZXMgb24gdGhlIHBvaW50ZXIg
YmVpbmcgNCBieXRlIGFsaWduZWQsCisgICAgICAgIHdoaWNoIHNob3VsZCBoYXBwZW4gZm9yIGFs
bCBhbGxvY2F0b3JzIChkdWUgdG8gYWxpZ25pbmcgcG9pbnRlcnMsIGludCdzLCBldGMuIG9uIDQg
Ynl0ZSBib3VuZGFyaWVzKS4KKyAgICAgICAgCisgICAgICAgICogd3RmL1JlZkNvdW50ZWQuaDoK
KyAgICAgICAgKiB3dGYvU2hhcmVkRGF0YUhvbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
UmVmQ291bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6aGFzT25lUmVmKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6aXNUaHJlYWRTaGFyZWQpOgorICAgICAgICAoV1RGOjpS
ZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRCYXNlOjpSZWZDb3VudFdpdGhUaHJlYWRTaGFyZWRCYXNl
KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRXaXRoVGhyZWFkU2hhcmVkQmFzZTo6flJlZkNvdW50
V2l0aFRocmVhZFNoYXJlZEJhc2UpOgorICAgICAgICAoV1RGOjpSZWZDb3VudFdpdGhUaHJlYWRT
aGFyZWRCYXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAoV1RGOjpSZWZDb3VudFdpdGhUaHJlYWRT
aGFyZWRCYXNlOjpzaG91bGREZWxldGVTaGFyZWREYXRhKToKKyAgICAgICAgKFdURjo6U2hhcmVk
RGF0YUhvbGRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6U2hhcmVkRGF0YUhvbGRlcjo6dW5z
aGFyZSk6CisgICAgICAgIChXVEY6OlNoYXJlZERhdGFIb2xkZXI6OmRlcmVmKToKKyAgICAgICAg
KFdURjo6U2hhcmVkRGF0YUhvbGRlcjo6Y29weSk6CisgICAgICAgIChXVEY6OlNoYXJlZERhdGFI
b2xkZXI6OlNoYXJlZERhdGFIb2xkZXIpOgorICAgICAgICAoV1RGOjpTaGFyZWREYXRhSG9sZGVy
Ojp+U2hhcmVkRGF0YUhvbGRlcik6CisgICAgICAgIEFsbG93cyBmb3IgZWFzaWx5IHNoYXJpbmcg
ZGF0YSBhY3Jvc3MgdGhyZWFkcyBvciB3aXRoaW4gYSB0aHJlYWQuICBUaGlzIGRvZXMgcmVmIGNv
dW50aW5nIHVzaW5nCisgICAgICAgIG5vcm1hbCBpbmNyZW1lbnQvZGVjcmVtZW50IHdpdGhpbiBh
IHRocmVhZCBhbmQgYXRvbWljSW5jcmVtZW50L0RlY3JlbWVudCBhY3Jvc3MgdGhyZWFkcy4gIChP
bmUKKyAgICAgICAgY2FsbHMgImNvcHkiIHRvIGdldCBhbiBpbnN0YW5jZSB0byBiZSB1c2VkIG9u
IGFub3RoZXIgdGhyZWFkLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIFdlYktpdCBjb2Rl
LikKKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkU2Fm
ZVNoYXJlZEJhc2U6OlRocmVhZFNhZmVTaGFyZWRCYXNlKToKKyAgICAgICAgKFdURjo6VGhyZWFk
U2FmZVNoYXJlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVTaGFy
ZWQ6OlRocmVhZFNhZmVTaGFyZWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlU2hhcmVkOjpk
ZXJlZik6CisKIDIwMDktMDEtMDYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggOWY5OTNhYS4uM2Q2MTc3YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIxOSw2ICsy
MTksNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYv
T3duUHRyLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmggXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3Mu
aCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCUphdmFTY3JpcHRD
b3JlL3d0Zi9SYW5kb21OdW1iZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJl
clNlZWQuaCBcCkBAIC0yMjgsNiArMjI5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvUmVm
UHRySGFzaE1hcC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvUmV0YWluUHRyLmggXAorCUphdmFT
Y3JpcHRDb3JlL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9T
dGRMaWJFeHRyYXMuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0V4dHJhcy5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvVENQYWNrZWRDYWNoZS5oIFwKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAppbmRleCBkNjVhOTc3Li40ZDAzNjQ3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0yMTAsNyArMjEwLDggQEAgX19aTjNKU0M3UHJvZmlsZTVmb2N1c0VQS05TXzExUHJvZmls
ZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2V4Y2x1ZGVFUEtOU18xMVByb2ZpbGVOb2RlRQogX19a
TjNKU0M3UHJvZmlsZTdmb3JFYWNoRU1OU18xMVByb2ZpbGVOb2RlRUZ2dkUKIF9fWk4zSlNDN1VT
dHJpbmczUmVwMTFjb21wdXRlSGFzaEVQS3RpCi1fX1pOM0pTQzdVU3RyaW5nM1JlcDRudWxsRQor
X19aTjNKU0M3VVN0cmluZzNSZXAxNG51bGxCYXNlU3RyaW5nRQorX19aTjNKU0M3VVN0cmluZzNS
ZXA1c2hhcmVFUHRpTjNXVEYxMFBhc3NSZWZQdHJJTlMzXzI5VGhyZWFkQXdhcmVSZWZDb3VudGVk
TWFsbG9jZWRJdEVFRUUKIF9fWk4zSlNDN1VTdHJpbmczUmVwN2Rlc3Ryb3lFdgogX19aTjNKU0M3
VVN0cmluZzRmcm9tRWkKIF9fWk4zSlNDN1VTdHJpbmc0ZnJvbUVqCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKaW5kZXggZjY5NjA4
Zi4uNWM0YWJlMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL1dURi9XVEYudmNwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvagpAQCAtMzU5LDYgKzM1OSwxMCBAQAogCQkJPg0KIAkJPC9GaWxl
Pg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQdHJBbmRGbGFncy5oIg0K
KwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZc
UmFuZG9tTnVtYmVyLmNwcCINCiAJCQk+DQogCQk8L0ZpbGU+DQpAQCAtMzkxLDYgKzM5NSwxMCBA
QAogCQkJPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0
ZlxTaGFyZWREYXRhSG9sZGVyLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxTdGRMaWJFeHRyYXMuaCINCiAJCQk+DQogCQk8L0ZpbGU+
DQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNzE3YWVhOS4uZDVkOWJmNiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zOSw2ICszOSw4IEBACiAJCTA4OEZBNUJCMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1i
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg4
RkE1QjkwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi87IH07CiAJCTA4OEZB
NUJDMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OEZBNUJBMEVGNzZENDMwMDU3OEU2RiAvKiBS
YW5kb21OdW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwOEUyNzlFOTBFRjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhFMjc5RTgwRUY4
M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLzsgfTsKKwkJMEI1OUJFRUMwRjEy
MUMwODAwRTBGMDFBIC8qIFB0ckFuZEZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwQjU5QkVFQjBGMTIxQzA4MDBFMEYwMUEgLyogUHRyQW5kRmxh
Z3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Qjg0Q0JGODBGMTE3OTlCMDA5ODlFMUUgLyogU2hhcmVkRGF0YUhvbGRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI4NENCRjcwRjExNzk5QjAwOTg5
RTFFIC8qIFNoYXJlZERhdGFIb2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNBY3RpdmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uY3BwICovOyB9OwogCQkxNDBE
MTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8q
IEpTQmFzZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDEyMTEzMTBBNDg3OTREMDA0ODAyNTUgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsg
fTsKQEAgLTQxOSw2ICs0MjEsOCBAQAogCQkwODhGQTVCOTBFRjc2RDQzMDA1NzhFNkYgLyogUmFu
ZG9tTnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmRv
bU51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4OEZBNUJBMEVGNzZE
NDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmFuZG9tTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4RTI3
OUU4MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmRvbU51bWJlclNlZWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEI1OUJFRUIwRjEyMUMwODAwRTBGMDFBIC8qIFB0ckFuZEZsYWdzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB0ckFuZEZsYWdzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBCODRDQkY3MEYxMTc5OUIwMDk4OUUxRSAvKiBTaGFyZWREYXRh
SG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZERhdGFIb2xk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENE
MTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEyMTEwMjBB
NDg3ODA5MDA0ODAyNTUgLyogbWluaWRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5h
bWUgPSBtaW5pZG9tLmM7IHBhdGggPSB0ZXN0cy9taW5pZG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MTIxMTBEMEE0ODc4ODcwMDQ4MDI1NSAvKiBtaW5pZG9tLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gbWluaWRvbS5qczsgcGF0aCA9IHRl
c3RzL21pbmlkb20uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTA1LDYgKzEx
MDksNyBAQAogCQkJCTkzMDNGNTY3MDk5MTE4RkEwMEFENzFCOCAvKiBPd25QdHIuaCAqLywKIAkJ
CQk2NTgwRjc5NTA5NDA3MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCTY1RDZE
ODdFMDlCNUEzMkUwMDAyRTRENyAvKiBQbGF0Zm9ybS5oICovLAorCQkJCTBCNTlCRUVCMEYxMjFD
MDgwMEUwRjAxQSAvKiBQdHJBbmRGbGFncy5oICovLAogCQkJCTA4OEZBNUI5MEVGNzZENDMwMDU3
OEU2RiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCTA4OEZBNUJBMEVGNzZENDMwMDU3OEU2
RiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQkwOEUyNzlFODBFRjgzQjEwMDA3REI1MjMgLyog
UmFuZG9tTnVtYmVyU2VlZC5oICovLApAQCAtMTExNCw2ICsxMTE5LDcgQEAKIAkJCQk2NUM2NDdC
MzA5M0VGOEQ2MDAyMkMzODAgLyogUmVmUHRyLmggKi8sCiAJCQkJMTQ4QTFFQ0QwRDEwQzIzQjAw
NjlBNDdDIC8qIFJlZlB0ckhhc2hNYXAuaCAqLywKIAkJCQk1MUY2NDhENjBCQjRFMkNBMDAzM0Q3
NjAgLyogUmV0YWluUHRyLmggKi8sCisJCQkJMEI4NENCRjcwRjExNzk5QjAwOTg5RTFFIC8qIFNo
YXJlZERhdGFIb2xkZXIuaCAqLywKIAkJCQlGRTFCNDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3Rk
TGliRXh0cmFzLmggKi8sCiAJCQkJRTExRDUxNzUwQjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4
dHJhcy5oICovLAogCQkJCTVEQTQ3OTY1MENGQkNGNTYwMDkzMjhBMCAvKiBUQ1BhY2tlZENhY2hl
LmggKi8sCkBAIC0xMTIyLDggKzExMjgsOCBAQAogCQkJCTY1NDFCRDcwMDhFODBBMTcwMDJDQkVF
NyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCAqLywKIAkJCQk2NTQxQkQ3MTA4RTgwQTE3MDAyQ0JFRTcg
LyogVENTeXN0ZW1BbGxvYy5oICovLAogCQkJCUUxQjdDOEJEMERBM0EzMzYwMDc0QjBEQyAvKiBU
aHJlYWRTcGVjaWZpYy5oICovLAotCQkJCUUxRUU3OTIyMEQ2Qzk1Q0QwMEZFQTNCQSAvKiBUaHJl
YWRpbmcuaCAqLywKIAkJCQk1RDZBNTY2QTBGMDU5OTU1MDAyNjYxNDUgLyogVGhyZWFkaW5nLmNw
cCAqLywKKwkJCQlFMUVFNzkyMjBENkM5NUNEMDBGRUEzQkEgLyogVGhyZWFkaW5nLmggKi8sCiAJ
CQkJRTFFRTc5M0MwRDZDOUI5MjAwRkVBM0JBIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCAqLywK
IAkJCQk5MzVBRjQ2QjA5RTlEOURCMDBBQ0QxRDggLyogVW51c2VkUGFyYW0uaCAqLywKIAkJCQk2
NTkyQzMxNjA5OEI3REUxMDAwM0Q0RjYgLyogVmVjdG9yLmggKi8sCkBAIC0xMjAzLDYgKzEyMDks
OCBAQAogCQkJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8s
CiAJCQkJQkM3OTUyMzQwRTE1RUI1NjAwQTg5OEFCIC8qIEJvb2xlYW5Qcm90b3R5cGUuY3BwICov
LAogCQkJCUJDNzk1MjM1MEUxNUVCNTYwMEE4OThBQiAvKiBCb29sZWFuUHJvdG90eXBlLmggKi8s
CisJCQkJQTc5MUVFNUEwRjExRDkwQzAwQUUxRjY4IC8qIEJ5dGVBcnJheS5jcHAgKi8sCisJCQkJ
QTc5MUVFNTkwRjExRDkwQzAwQUUxRjY4IC8qIEJ5dGVBcnJheS5oICovLAogCQkJCUJDQTYyREZF
MEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlERjYz
QjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCiAJCQkJQkM2QUFBRTQwRTFGNDI2NTAwQUQ4N0Q4
IC8qIENsYXNzSW5mby5oICovLApAQCAtMTI1MSw2ICsxMjU5LDggQEAKIAkJCQkxNERBODE4RTBE
OTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdB
QzAwRDMwQjA4IC8qIEpTQXJyYXkuY3BwICovLAogCQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVD
RSAvKiBKU0FycmF5LmggKi8sCisJCQkJQTc5MUVGMjcwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0
ZUFycmF5LmNwcCAqLywKKwkJCQlBNzkxRUYyNjBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJy
YXkuaCAqLywKIAkJCQlCQzdGOEZCQTBFMTlEMUVGMDA4NjMyQzAgLyogSlNDZWxsLmNwcCAqLywK
IAkJCQlCQzExNjdEODBFMTlCQ0M5MDA4MDY2REQgLyogSlNDZWxsLmggKi8sCiAJCQkJRjY5MkE4
NUUwMjU1NTk3RDAxRkY2MEY3IC8qIEpTRnVuY3Rpb24uY3BwICovLApAQCAtMTM0NSwxMCArMTM1
NSw2IEBACiAJCQkJNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIFR5cGVJbmZvLmggKi8sCiAJ
CQkJRjY5MkE4ODUwMjU1NTk3RDAxRkY2MEY3IC8qIFVTdHJpbmcuY3BwICovLAogCQkJCUY2OTJB
ODg2MDI1NTU5N0QwMUZGNjBGNyAvKiBVU3RyaW5nLmggKi8sCi0JCQkJQTc5MUVFNTkwRjExRDkw
QzAwQUUxRjY4IC8qIEJ5dGVBcnJheS5oICovLAotCQkJCUE3OTFFRTVBMEYxMUQ5MEMwMEFFMUY2
OCAvKiBCeXRlQXJyYXkuY3BwICovLAotCQkJCUE3OTFFRjI2MEYxMUUwNzkwMEFFMUY2OCAvKiBK
U0J5dGVBcnJheS5oICovLAotCQkJCUE3OTFFRjI3MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVB
cnJheS5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQ5MCw2ICsxNDk2LDcgQEAKIAkJCQlCQzE4QzNFQTBFMTZGNUNEMDBC
MzQ0NjAgLyogQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhD
OTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTc5MUVFNUIwRjExRDkwQzAwQUUxRjY4IC8qIEJ5dGVBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTY5QTA3MjMwRUQxQ0UzMzAwRjFGNjgxIC8qIEJ5dGVjb2RlR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2Fs
bERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBD
YWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTU0Niw2ICsxNTUzLDcgQEAKIAkJCQlCQzE4
QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQw
RDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUE3OTFFRjI4MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2Fs
bGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUIwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQ2FsbGJhY2tPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTYyMCw2ICsxNjI4
LDcgQEAKIAkJCQlCQzE4QzQ1NTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMyNTdERjQwRTFGNTM3NDAwMTZCNkM5IC8qIFByb3RvdHlwZUZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwQjU5QkVFQzBGMTIxQzA4MDBFMEYwMUEgLyog
UHRyQW5kRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVB
NCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEQTRBMEVEMjQ1
RUMwMEI4OTYxOSAvKiBRdWFudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhGQTVCQzBF
Rjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NDIs
NiArMTY1MSw3IEBACiAJCQkJMTQyOUQ4ODYwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9v
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjEwRTE2RjVDRDAwQjM0NDYwIC8qIFNjb3Bl
Q2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzJDMEVEMUNFNjkwMEYxRjY4MSAvKiBT
ZWdtZW50ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBCODRDQkY4MEYxMTc5OUIwMDk4
OUUxRSAvKiBTaGFyZWREYXRhSG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBF
NkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTE2ODcsOCArMTY5Nyw2IEBACiAJCQkJQkMxOEM0NEQwRTE2RjVDRDAwQjM0NDYwIC8q
IHBjcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDRFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBw
Y3JlX2ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3MjBFMTZGNUNEMDBCMzQ0
NjAgLyogdWNwaW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3OTFFRTVCMEYxMUQ5MEMw
MEFFMUY2OCAvKiBCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3OTFFRjI4MEYxMUUw
NzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xOTc0LDYgKzE5
ODIsNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJNjU5MTI2QkQwQkREMTcyODAwMTkyMUZCIC8qIEFs
bEluT25lRmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUZERTQ5QzBCREQxRDRBMDBFODAx
MTEgLyogQXNzZXJ0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzkxRUU1QzBGMTFEOTBD
MDBBRTFGNjggLyogQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVE
MjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ5
QzQwRUQyM0MzOTAwQjg5NjE5IC8qIENoYXJhY3RlckNsYXNzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFMkFERDkwMEU3OUFDMTEwMEQ1MEM1MSAvKiBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTk5NCw2ICsyMDAzLDcgQEAKIAkJCQk4NkNDODVDNDBF
RTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQwQjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTQWN0aXZhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDIxMzU5QjBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE3OTFFRjI5MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRG
NjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yMDI0LDYgKzIwMzQsNyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBT
dHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFB
IC8qIFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4
QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
RDZBNTY2QjBGMDU5OTU1MDAyNjYxNDUgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxRUU3OTNEMEQ2QzlCOTIwMEZFQTNCQSAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NUNENDFCMzBFMUJGNjU2MDA4NTM1OEUgLyogVHJlZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFRjc5QUEwQ0U5N0JBNjAwODhENTAwIC8qIFVURjgu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMDM2LDkgKzIwNDcsNiBAQAogCQkJCTkzMDc1NEQwMDhC
MEY3NDYwMEFCMzA1NiAvKiBwY3JlX3RhYmxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzcw
MTM0ODBDQTk3RTBFMDBGQTE0RDMgLyogcGNyZV91Y3Bfc2VhcmNoZnVuY3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNFMjZCRDQwOEIxNTE0MTAwRjg1MjI2IC8qIHBjcmVfeGNsYXNzLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTVENkE1NjZCMEYwNTk5NTUwMDI2NjE0NSAvKiBUaHJlYWRpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTc5MUVFNUMwRjExRDkwQzAwQUUxRjY4IC8qIEJ5dGVB
cnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzkxRUYyOTBGMTFFMDc5MDBBRTFGNjggLyog
SlNCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmNwcAppbmRleCA4MzcyMDEwLi4wNDBjMTIzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAKQEAgLTEyNCwxMiArMTI0LDEyIEBAIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRv
ciB7CiBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKIHsKICAgICBpZiAoIWMpIHsKLSAgICAgICAg
VVN0cmluZzo6UmVwOjpudWxsLmhhc2goKTsKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6
Om51bGw7CisgICAgICAgIFVTdHJpbmc6OlJlcDo6bnVsbCgpLmhhc2goKTsKKyAgICAgICAgcmV0
dXJuICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKICAgICB9CiAgICAgaWYgKCFjWzBdKSB7Ci0gICAg
ICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHkuaGFzaCgpOwotICAgICAgICByZXR1cm4gJlVTdHJpbmc6
OlJlcDo6ZW1wdHk7CisgICAgICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHkoKS5oYXNoKCk7CisgICAg
ICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjplbXB0eSgpOwogICAgIH0KICAgICBpZiAoIWNbMV0p
CiAgICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjWzBd
KSkpOwpAQCAtMTk0LDggKzE5NCw4IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBJZGVudGlm
aWVyOjphZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhcioKICAgICAgICAg
ICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CiAgICAgfQogICAgIGlmICghbGVuZ3RoKSB7Ci0gICAg
ICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHkuaGFzaCgpOwotICAgICAgICByZXR1cm4gJlVTdHJpbmc6
OlJlcDo6ZW1wdHk7CisgICAgICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHkoKS5oYXNoKCk7CisgICAg
ICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjplbXB0eSgpOwogICAgIH0KICAgICBVQ2hhckJ1ZmZl
ciBidWYgPSB7cywgbGVuZ3RofTsgCiAgICAgcGFpcjxIYXNoU2V0PFVTdHJpbmc6OlJlcCo+Ojpp
dGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlLT5h
ZGQ8VUNoYXJCdWZmZXIsIFVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmKTsKQEAgLTIyNSw4ICsy
MjUsOCBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2Uo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBVU3RyaQogICAgICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAoIXItPmxlbikgewotICAgICAgICBVU3RyaW5nOjpSZXA6OmVtcHR5Lmhhc2goKTsKLSAg
ICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5OworICAgICAgICBVU3RyaW5nOjpSZXA6
OmVtcHR5KCkuaGFzaCgpOworICAgICAgICByZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsK
ICAgICB9CiAgICAgcmV0dXJuICpnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZChyKS5m
aXJzdDsKIH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
Y3BwCmluZGV4IGExN2MzODYuLmNkYTlmYjEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtNDksOSArNDksOSBAQCBzdGF0aWMgcHRocmVh
ZF9vbmNlX3QgaW5pdGlhbGl6ZVRocmVhZGluZ0tleU9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsK
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKIHsKICAgICBXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcoKTsKKyAgICBpbml0aWFsaXplVVN0cmluZygpOwogI2lmIEVOQUJMRShK
U0NfTVVMVElQTEVfVEhSRUFEUykKICAgICBzX2R0b2FQNU11dGV4ID0gbmV3IE11dGV4OwotICAg
IFVTdHJpbmc6Om51bGwoKTsKICAgICBpbml0RGF0ZU1hdGgoKTsKICNlbmRpZgogfQpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IDYyZGY2NWUuLmQ2NzFhNjkgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAgLTMwLDE1ICszMCwxNiBA
QAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgorI2lu
Y2x1ZGUgIkNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCisjaW5j
bHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAj
aW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgogI2luY2x1
ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1N0
YXRpY1Njb3BlT2JqZWN0LmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKLSNpbmNsdWRlICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2lu
Y2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCkBAIC0xNDIsNiArMTQzLDcgQEAg
SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKIAogUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKCkKIHsKKyAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEpOwogfQogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCmluZGV4IDQ3ZTlkODQuLjA4NzhlNzMg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCkBAIC0y
Nyw3ICsyNyw3IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qgc2V0VGhyZXNob2xkID0gMjA7CiAKIHZv
aWQgUHJvcGVydHlOYW1lQXJyYXk6OmFkZChVU3RyaW5nOjpSZXAqIGlkZW50aWZpZXIpCiB7Ci0g
ICAgQVNTRVJUKGlkZW50aWZpZXIgPT0gJlVTdHJpbmc6OlJlcDo6bnVsbCB8fCBpZGVudGlmaWVy
ID09ICZVU3RyaW5nOjpSZXA6OmVtcHR5IHx8IGlkZW50aWZpZXItPmlkZW50aWZpZXJUYWJsZSgp
KTsKKyAgICBBU1NFUlQoaWRlbnRpZmllciA9PSAmVVN0cmluZzo6UmVwOjpudWxsKCkgfHwgaWRl
bnRpZmllciA9PSAmVVN0cmluZzo6UmVwOjplbXB0eSgpIHx8IGlkZW50aWZpZXItPmlkZW50aWZp
ZXJUYWJsZSgpKTsKIAogICAgIHNpemVfdCBzaXplID0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0
b3IoKS5zaXplKCk7CiAgICAgaWYgKHNpemUgPCBzZXRUaHJlc2hvbGQpIHsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAppbmRleCAwNjgxMWI5Li5kMzAyOTE1IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCkBAIC0yOSw0OCArMjksNTAgQEAKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbnVtQ2hhcmFjdGVyc1RvU3RvcmUgPSAweDEwMDsgLy8gTm90ZSB0aGF0IFNtYWxs
U3RyaW5nczo6bV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzIHNob3VsZCBiZSB0aGUgc2FtZSBzaXpl
LgogCi1jbGFzcyBTbWFsbFN0cmluZ3NTdG9yYWdlIHsKK2NsYXNzIFNtYWxsU3RyaW5nc1N0b3Jh
Z2UgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgU21hbGxTdHJpbmdzU3RvcmFnZSgpOwot
ICAgIH5TbWFsbFN0cmluZ3NTdG9yYWdlKCk7CiAKLSAgICBVU3RyaW5nOjpSZXAqIHJlcCh1bnNp
Z25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gJnJlcHNbY2hhcmFjdGVyXTsgfQorICAgIFVT
dHJpbmc6OlJlcCogcmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJldHVybiAmbV9yZXBz
W2NoYXJhY3Rlcl07IH0KIAogcHJpdmF0ZToKLSAgICBVQ2hhciBjaGFyYWN0ZXJzWzB4MTAwXTsK
LSAgICBVU3RyaW5nOjpSZXAqIHJlcHM7CisgICAgVUNoYXIgbV9jaGFyYWN0ZXJzW251bUNoYXJh
Y3RlcnNUb1N0b3JlXTsKKyAgICBVU3RyaW5nOjpCYXNlU3RyaW5nIG1fYmFzZTsKKyAgICBVU3Ry
aW5nOjpSZXAgbV9yZXBzW251bUNoYXJhY3RlcnNUb1N0b3JlXTsKIH07CiAKIFNtYWxsU3RyaW5n
c1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UoKQotICAgIDogcmVwcyhzdGF0aWNfY2FzdDxV
U3RyaW5nOjpSZXAqPihmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihVU3RyaW5nOjpSZXApICogMHgx
MDApKSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMHgxMDA7ICsraSkgewotICAg
ICAgICBjaGFyYWN0ZXJzW2ldID0gaTsKLSAgICAgICAgcmVwc1tpXS5vZmZzZXQgPSBpOwotICAg
ICAgICByZXBzW2ldLmxlbiA9IDE7Ci0gICAgICAgIHJlcHNbaV0ucmMgPSAxOwotICAgICAgICBy
ZXBzW2ldLmJhc2VTdHJpbmcgPSAmcmVwc1swXTsKLSAgICB9Ci0gICAgcmVwc1swXS5yYyA9IDB4
MTAxOwotICAgIHJlcHNbMF0uYnVmID0gY2hhcmFjdGVyczsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtQ2hhcmFjdGVyc1RvU3RvcmU7ICsraSkKKyAgICAgICAgbV9jaGFyYWN0ZXJz
W2ldID0gaTsKIAorICAgIG1lbXNldCgmbV9iYXNlLCAwLCBzaXplb2YoVVN0cmluZzo6QmFzZVN0
cmluZykpOworICAgIG1fYmFzZS5yYyA9IG51bUNoYXJhY3RlcnNUb1N0b3JlICsgMTsKKyAgICBt
X2Jhc2UuYnVmID0gbV9jaGFyYWN0ZXJzOworICAgIG1fYmFzZS5tX2lkZW50aWZpZXJUYWJsZUFu
ZEZsYWdzLnNldEZsYWcoVVN0cmluZzo6UmVwOjpCYXNlU3RyaW5nRmxhZyk7CiAgICAgLy8gbWFr
ZSBzdXJlIFVTdHJpbmcgZG9lc24ndCB0cnkgdG8gcmV1c2UgdGhlIGJ1ZmZlciBieSBwcmV0ZW5k
aW5nIHdlIGhhdmUgb25lIG1vcmUgY2hhcmFjdGVyIGluIGl0Ci0gICAgcmVwc1swXS51c2VkQ2Fw
YWNpdHkgPSAweDEwMTsKLSAgICByZXBzWzBdLmNhcGFjaXR5ID0gMHgxMDE7Ci19CisgICAgbV9i
YXNlLnVzZWRDYXBhY2l0eSA9IG51bUNoYXJhY3RlcnNUb1N0b3JlICsgMTsKKyAgICBtX2Jhc2Uu
Y2FwYWNpdHkgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7CiAKLVNtYWxsU3RyaW5nc1N0b3Jh
Z2U6On5TbWFsbFN0cmluZ3NTdG9yYWdlKCkKLXsKLSAgICBmYXN0RnJlZShyZXBzKTsKKyAgICBt
ZW1zZXQoJm1fcmVwcywgMCwgc2l6ZW9mKG1fcmVwcykpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsgKytpKSB7CisgICAgICAgIG1fcmVwc1tpXS5v
ZmZzZXQgPSBpOworICAgICAgICBtX3JlcHNbaV0ubGVuID0gMTsKKyAgICAgICAgbV9yZXBzW2ld
LnJjID0gMTsKKyAgICAgICAgbV9yZXBzW2ldLnNldEJhc2VTdHJpbmcoJm1fYmFzZSk7CisgICAg
fQogfQogCiBTbWFsbFN0cmluZ3M6OlNtYWxsU3RyaW5ncygpCiAgICAgOiBtX2VtcHR5U3RyaW5n
KDApCiAgICAgLCBtX3N0b3JhZ2UoMCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MHgxMDA7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyc1Rv
U3RvcmU7ICsraSkKICAgICAgICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2ldID0gMDsKIH0K
IApAQCAtODIsNyArODQsNyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6bWFyaygpCiB7CiAgICAgaWYg
KG1fZW1wdHlTdHJpbmcgJiYgIW1fZW1wdHlTdHJpbmctPm1hcmtlZCgpKQogICAgICAgICBtX2Vt
cHR5U3RyaW5nLT5tYXJrKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MTAwOyAr
K2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyc1RvU3RvcmU7
ICsraSkgewogICAgICAgICBpZiAobV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2ldICYmICFtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbaV0tPm1hcmtlZCgpKQogICAgICAgICAgICAgbV9zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzW2ldLT5tYXJrKCk7CiAgICAgfQpAQCAtMTA5LDQgKzExMSw0IEBAIFVT
dHJpbmc6OlJlcCogU21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWdu
ZWQgY2hhciBjaGFyYWN0ZXIpCiAgICAgcmV0dXJuIG1fc3RvcmFnZS0+cmVwKGNoYXJhY3Rlcik7
CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJp
bmdzLmgKaW5kZXggN2U1ZjVjOC4uNzcyNzIxYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxs
U3RyaW5ncy5oCkBAIC01NSw5ICs1NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgVVN0cmluZzo6UmVwKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQg
Y2hhciBjaGFyYWN0ZXIpOwotICAgICAgICAKKwogICAgICAgICB2b2lkIG1hcmsoKTsKLSAgICAg
ICAgCisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNyZWF0ZUVtcHR5U3RyaW5nKEpTR2xv
YmFsRGF0YSopOwogICAgICAgICB2b2lkIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0ds
b2JhbERhdGEqLCB1bnNpZ25lZCBjaGFyKTsKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTU3RyaW5nKiBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMHgxMDBdOwog
ICAgICAgICBPd25QdHI8U21hbGxTdHJpbmdzU3RvcmFnZT4gbV9zdG9yYWdlOwogICAgIH07Ci0g
ICAgCi19CiAKLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTbWFsbFN0
cmluZ3NfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggNDVkZjI0OC4uNzFjZGMy
NiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC0xODYsOCArMTg2LDM3IEBAIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDU3RyaW5nJiBjMSwgY29uc3QgQ1N0cmluZyYgYzIpCiAvLyBU
aGVzZSBzdGF0aWMgc3RyaW5ncyBhcmUgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJjLCB3aG9zZSBp
bml0aWFsIHZhbHVlIGlzIGNob3NlbiB0byAKIC8vIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2Yg
aXQgYmVjb21pbmcgemVybyBkdWUgdG8gcmVmL2RlcmVmIG5vdCBiZWluZyB0aHJlYWQtc2FmZS4K
IHN0YXRpYyBVQ2hhciBzaGFyZWRFbXB0eUNoYXI7Ci1VU3RyaW5nOjpSZXAgVVN0cmluZzo6UmVw
OjpudWxsID0geyAwLCAwLCBJTlRfTUFYIC8gMiwgMCwgMSwgJlVTdHJpbmc6OlJlcDo6bnVsbCwg
MCwgMCwgMCwgMCwgMCwgMCB9OwotVVN0cmluZzo6UmVwIFVTdHJpbmc6OlJlcDo6ZW1wdHkgPSB7
IDAsIDAsIElOVF9NQVggLyAyLCAwLCAxLCAmVVN0cmluZzo6UmVwOjplbXB0eSwgMCwgJnNoYXJl
ZEVtcHR5Q2hhciwgMCwgMCwgMCwgMCB9OworVVN0cmluZzo6QmFzZVN0cmluZyogVVN0cmluZzo6
UmVwOjpudWxsQmFzZVN0cmluZzsKK1VTdHJpbmc6OkJhc2VTdHJpbmcqIFVTdHJpbmc6OlJlcDo6
ZW1wdHlCYXNlU3RyaW5nOworVVN0cmluZyogVVN0cmluZzo6bnVsbFVTdHJpbmc7CisKK3ZvaWQg
aW5pdGlhbGl6ZVN0YXRpY0Jhc2VTdHJpbmcoaW50IGxlbiwgVUNoYXIqIGJ1ZiwgVVN0cmluZzo6
QmFzZVN0cmluZyYgYmFzZSkKK3sKKyAgICBiYXNlLm9mZnNldCA9IDA7CisgICAgYmFzZS5sZW4g
PSBsZW47CisgICAgYmFzZS5yYyA9IElOVF9NQVggLyAyOworICAgIGJhc2UuX2hhc2ggPSAwOwor
ICAgIGJhc2UubV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFnKFVTdHJpbmc6OlJlcDo6
U3RhdGljRmxhZyk7CisgICAgYmFzZS5tX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLnNldEZsYWco
VVN0cmluZzo6UmVwOjpCYXNlU3RyaW5nRmxhZyk7CisgICAgYmFzZS5tX2Jhc2VTdHJpbmdPclJl
ZkNvdW50ZWRNYWxsb2NlZCA9IDA7CisgICAgYmFzZS5idWYgPSBidWY7CisgICAgYmFzZS5wcmVD
YXBhY2l0eSA9IDA7CisgICAgYmFzZS51c2VkUHJlQ2FwYWNpdHkgPSAwOworICAgIGJhc2UuY2Fw
YWNpdHkgPSAwOworICAgIGJhc2UudXNlZENhcGFjaXR5ID0gMDsKKyAgICBiYXNlLnJlcG9ydGVk
Q29zdCA9IDA7Cit9CisKK3ZvaWQgaW5pdGlhbGl6ZVVTdHJpbmcoKQoreworICAgIFVTdHJpbmc6
OlJlcDo6bnVsbEJhc2VTdHJpbmcgPSBuZXcgVVN0cmluZzo6QmFzZVN0cmluZzsKKyAgICBpbml0
aWFsaXplU3RhdGljQmFzZVN0cmluZygwLCAwLCAqVVN0cmluZzo6UmVwOjpudWxsQmFzZVN0cmlu
Zyk7CisKKyAgICBVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpC
YXNlU3RyaW5nOworICAgIGluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKDAsICZzaGFyZWRFbXB0
eUNoYXIsICpVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZyk7CisKKyAgICBVU3RyaW5nOjpu
dWxsVVN0cmluZyA9IG5ldyBVU3RyaW5nOworfQogCiBzdGF0aWMgY2hhciogc3RhdEJ1ZmZlciA9
IDA7IC8vIE9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHZpYSBVU3RyaW5nOjphc2NpaSgpLgogCkBA
IC0yMDAsMTMgKzIyOSwxMyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVw
OjpjcmVhdGVDb3B5aW5nKGNvbnN0IFVDaGFyKiBkLCBpbnQgbCkKIAogUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFVDaGFyKiBkLCBpbnQgbCkKIHsKLSAgICBS
ZXAqIHIgPSBuZXcgUmVwOworICAgIEJhc2VTdHJpbmcqIHIgPSBuZXcgQmFzZVN0cmluZzsKICAg
ICByLT5vZmZzZXQgPSAwOwogICAgIHItPmxlbiA9IGw7CiAgICAgci0+cmMgPSAxOwogICAgIHIt
Pl9oYXNoID0gMDsKLSAgICByLT5tX2lkZW50aWZpZXJUYWJsZSA9IDA7Ci0gICAgci0+YmFzZVN0
cmluZyA9IHI7CisgICAgci0+bV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFnKEJhc2VT
dHJpbmdGbGFnKTsKKyAgICByLT5tX2Jhc2VTdHJpbmdPclJlZkNvdW50ZWRNYWxsb2NlZCA9IDA7
CiAgICAgci0+cmVwb3J0ZWRDb3N0ID0gMDsKICAgICByLT5idWYgPSBkOwogICAgIHItPnVzZWRD
YXBhY2l0eSA9IGw7CkBAIC0yMjAsMzEgKzI0OSwzMiBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJl
cD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoVUNoYXIqIGQsIGludCBsKQogICAgIHJldHVybiBhZG9w
dFJlZihyKTsKIH0KIAotUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3Jl
YXRlKFBhc3NSZWZQdHI8UmVwPiBiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQorUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6c2hhcmUoVUNoYXIqIGQsIGludCBsLCBQ
YXNzUmVmUHRyPFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiA+IHJlZkNvdW50
ZWRNYWxsb2NlZCkKIHsKLSAgICBBU1NFUlQoYmFzZSk7Ci0gICAgYmFzZS0+Y2hlY2tDb25zaXN0
ZW5jeSgpOworICAgIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiByID0gY3JlYXRlKGQsIGwpOwor
ICAgIHItPm1fYmFzZVN0cmluZ09yUmVmQ291bnRlZE1hbGxvY2VkID0gcmVmQ291bnRlZE1hbGxv
Y2VkLnJlbGVhc2VSZWYoKTsKKyAgICByLT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJu
IHI7Cit9CiAKLSAgICBpbnQgYmFzZU9mZnNldCA9IGJhc2UtPm9mZnNldDsKK1Bhc3NSZWZQdHI8
VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZShQYXNzUmVmUHRyPFJlcD4gcmVwLCBp
bnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChyZXApOworICAgIHJlcC0+Y2hl
Y2tDb25zaXN0ZW5jeSgpOwogCi0gICAgYmFzZSA9IGJhc2UtPmJhc2VTdHJpbmc7CisgICAgaW50
IHJlcE9mZnNldCA9IHJlcC0+b2Zmc2V0OwogCi0gICAgQVNTRVJUKC0ob2Zmc2V0ICsgYmFzZU9m
ZnNldCkgPD0gYmFzZS0+dXNlZFByZUNhcGFjaXR5KTsKLSAgICBBU1NFUlQob2Zmc2V0ICsgYmFz
ZU9mZnNldCArIGxlbmd0aCA8PSBiYXNlLT51c2VkQ2FwYWNpdHkpOworICAgIFBhc3NSZWZQdHI8
QmFzZVN0cmluZz4gYmFzZSA9IHJlcC0+YmFzZVN0cmluZygpOworCisgICAgQVNTRVJUKC0ob2Zm
c2V0ICsgcmVwT2Zmc2V0KSA8PSBiYXNlLT51c2VkUHJlQ2FwYWNpdHkpOworICAgIEFTU0VSVChv
ZmZzZXQgKyByZXBPZmZzZXQgKyBsZW5ndGggPD0gYmFzZS0+dXNlZENhcGFjaXR5KTsKIAogICAg
IFJlcCogciA9IG5ldyBSZXA7Ci0gICAgci0+b2Zmc2V0ID0gYmFzZU9mZnNldCArIG9mZnNldDsK
KyAgICByLT5vZmZzZXQgPSByZXBPZmZzZXQgKyBvZmZzZXQ7CiAgICAgci0+bGVuID0gbGVuZ3Ro
OwogICAgIHItPnJjID0gMTsKICAgICByLT5faGFzaCA9IDA7Ci0gICAgci0+bV9pZGVudGlmaWVy
VGFibGUgPSAwOwotICAgIHItPmJhc2VTdHJpbmcgPSBiYXNlLnJlbGVhc2VSZWYoKTsKLSAgICBy
LT5yZXBvcnRlZENvc3QgPSAwOwotICAgIHItPmJ1ZiA9IDA7Ci0gICAgci0+dXNlZENhcGFjaXR5
ID0gMDsKLSAgICByLT5jYXBhY2l0eSA9IDA7Ci0gICAgci0+dXNlZFByZUNhcGFjaXR5ID0gMDsK
LSAgICByLT5wcmVDYXBhY2l0eSA9IDA7CisgICAgci0+c2V0QmFzZVN0cmluZyhiYXNlLnJlbGVh
c2VSZWYoKSk7CiAKICAgICByLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTI1NSwxMyArMjg1
LDEzIEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZShQYXNz
UmVmUHRyPFJlcD4gYmFzZSwgaW50IG9mZnNldCwKIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBV
U3RyaW5nOjpSZXA6OmNyZWF0ZUZyb21VVEY4KGNvbnN0IGNoYXIqIHN0cmluZykKIHsKICAgICBp
ZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAg
IHJldHVybiAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAKICAgICBzaXplX3QgbGVuZ3RoID0gc3Ry
bGVuKHN0cmluZyk7CiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBidWZmZXIobGVuZ3RoKTsKICAg
ICBVQ2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CiAgICAgaWYgKGNvbnZlcnNpb25PSyAhPSBjb252
ZXJ0VVRGOFRvVVRGMTYoJnN0cmluZywgc3RyaW5nICsgbGVuZ3RoLCAmcCwgcCArIGxlbmd0aCkp
Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpudWxsOworICAgICAgICByZXR1cm4gJlVT
dHJpbmc6OlJlcDo6bnVsbCgpOwogCiAgICAgcmV0dXJuIFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29w
eWluZyhidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CiB9CkBAIC0yNzUsMTAgKzMw
NSwxNSBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6ZGVzdHJveSgpCiAgICAgaWYgKCFpc1N0YXRpYygp
KSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyVGFibGUoKSkKICAgICAgICAgICAgIElkZW50aWZp
ZXI6OnJlbW92ZSh0aGlzKTsKLSAgICAgICAgaWYgKGJhc2VTdHJpbmcgPT0gdGhpcykKLSAgICAg
ICAgICAgIGZhc3RGcmVlKGJ1Zik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VTdHJp
bmctPmRlcmVmKCk7CisgICAgICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSBiYXNlU3Ry
aW5nKCk7CisgICAgICAgIGlmIChiYXNlID09IHRoaXMpIHsKKyAgICAgICAgICAgIFRocmVhZEF3
YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiogcmVmQ291bnRlZE1hbGxvY2VkID0gYmFzZS0+
cmF3UmVmQ291bnRlZE1hbGxvY2VkKCk7CisgICAgICAgICAgICBpZiAocmVmQ291bnRlZE1hbGxv
Y2VkKQorICAgICAgICAgICAgICAgIHJlZkNvdW50ZWRNYWxsb2NlZC0+ZGVyZWYoKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShiYXNlLT5idWYpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2UtPmRlcmVmKCk7CiAKICAgICAgICAgZGVsZXRlIHRo
aXM7CiAgICAgfQpAQCAtMzgwLDE3ICs0MTUsMTAgQEAgdW5zaWduZWQgVVN0cmluZzo6UmVwOjpj
b21wdXRlSGFzaChjb25zdCBjaGFyKiBzLCBpbnQgbCkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFVT
dHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgLy8gT25seSBiYXNl
IHN0cmluZ3MgaGF2ZSBub24temVybyBzaGFyZWQgZGF0YS4KLSAgICBpZiAodGhpcyAhPSBiYXNl
U3RyaW5nKSB7Ci0gICAgICAgIEFTU0VSVCghYnVmKTsKLSAgICAgICAgQVNTRVJUKCF1c2VkQ2Fw
YWNpdHkpOwotICAgICAgICBBU1NFUlQoIWNhcGFjaXR5KTsKLSAgICAgICAgQVNTRVJUKCF1c2Vk
UHJlQ2FwYWNpdHkpOwotICAgICAgICBBU1NFUlQoIXByZUNhcGFjaXR5KTsKLSAgICB9CisgICAg
Y29uc3QgVVN0cmluZzo6QmFzZVN0cmluZyogYmFzZSA9IGJhc2VTdHJpbmcoKTsKIAogICAgIC8v
IFRoZXJlIGlzIG5vIHJlY3Vyc2lvbiBmb3IgYmFzZSBzdHJpbmdzLgotICAgIEFTU0VSVChiYXNl
U3RyaW5nID09IGJhc2VTdHJpbmctPmJhc2VTdHJpbmcpOworICAgIEFTU0VSVChiYXNlID09IGJh
c2UtPmJhc2VTdHJpbmcoKSk7CiAKICAgICBpZiAoaXNTdGF0aWMoKSkgewogICAgICAgICAvLyBU
aGVyZSBhcmUgb25seSB0d28gc3RhdGljIHN0cmluZ3M6IG51bGwgYW5kIGVtcHR5LgpAQCAtNDAx
LDEzICs0MjksMzcgQEAgdm9pZCBVU3RyaW5nOjpSZXA6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dAogICAgIH0KIAogICAgIC8vIFRoZSBzdHJpbmcgZml0cyBpbiBidWZmZXIuCi0gICAgQVNTRVJU
KGJhc2VTdHJpbmctPnVzZWRQcmVDYXBhY2l0eSA8PSBiYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSk7
Ci0gICAgQVNTRVJUKGJhc2VTdHJpbmctPnVzZWRDYXBhY2l0eSA8PSBiYXNlU3RyaW5nLT5jYXBh
Y2l0eSk7Ci0gICAgQVNTRVJUKC1vZmZzZXQgPD0gYmFzZVN0cmluZy0+dXNlZFByZUNhcGFjaXR5
KTsKLSAgICBBU1NFUlQob2Zmc2V0ICsgbGVuIDw9IGJhc2VTdHJpbmctPnVzZWRDYXBhY2l0eSk7
CisgICAgQVNTRVJUKGJhc2UtPnVzZWRQcmVDYXBhY2l0eSA8PSBiYXNlLT5wcmVDYXBhY2l0eSk7
CisgICAgQVNTRVJUKGJhc2UtPnVzZWRDYXBhY2l0eSA8PSBiYXNlLT5jYXBhY2l0eSk7CisgICAg
QVNTRVJUKC1vZmZzZXQgPD0gYmFzZS0+dXNlZFByZUNhcGFjaXR5KTsKKyAgICBBU1NFUlQob2Zm
c2V0ICsgbGVuIDw9IGJhc2UtPnVzZWRDYXBhY2l0eSk7CiB9CiAjZW5kaWYKIAorYm9vbCBVU3Ry
aW5nOjpCYXNlU3RyaW5nOjp0cnlUb01ha2VVbnNoYXJlZCgpCit7CisgICAgcmV0dXJuIHJjID09
IDEgJiYgdHJ5VG9NYWtlTW9kaWZpYWJsZSgpOworfQorCitib29sIFVTdHJpbmc6OkJhc2VTdHJp
bmc6OnRyeVRvTWFrZU1vZGlmaWFibGUoKQoreworICAgIC8vIGJ1ZiBtYXkgbm90IGJlIG1vZGlm
aWVkIGFzIHNvb24gYXMgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgYmVlbiBzaGFyZWQgd2l0aCBh
bm90aGVyIGNsYXNzLgorICAgIFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiog
cmVmQ291bnRlZE1hbGxvY2VkID0gcmF3UmVmQ291bnRlZE1hbGxvY2VkKCk7CisgICAgaWYgKCFy
ZWZDb3VudGVkTWFsbG9jZWQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChyZWZDb3Vu
dGVkTWFsbG9jZWQtPmlzU2hhcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgaXQgdGhhdCB0aGUgdW5kZXJseWluZyBidWZmZXIgaXNu
J3Qgc2hhcmVkIG91dHNpZGUgb2YgdGhpcyBiYXNlIGNsYXNzLgorICAgIC8vIEluIG9yZGVyIHRv
IHJlZ2FpbiBjb250cm9sIG9mIGl0LCB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdGhlICJyZWZDb3Vu
dGVkTWFsbG9jZWQiLgorICAgIFVDaGFyKiB1bnNoYXJlZEJ1ZiA9IGNvbnN0X2Nhc3Q8VUNoYXIq
PihyZWZDb3VudGVkTWFsbG9jZWQtPnJlbGVhc2VEYXRhKCkpOworICAgIHJlZkNvdW50ZWRNYWxs
b2NlZC0+ZGVyZWYoKTsKKyAgICBtX2Jhc2VTdHJpbmdPclJlZkNvdW50ZWRNYWxsb2NlZCA9IDA7
CisgICAgcHJlQ2FwYWNpdHkgKz0gKGJ1ZiAtIHVuc2hhcmVkQnVmKTsKKyAgICBidWYgPSB1bnNo
YXJlZEJ1ZjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gcHV0IHRoZXNlIGVhcmx5IHNvIHRo
ZXkgY2FuIGJlIGlubGluZWQKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGV4cGFuZGVkU2l6ZShzaXpl
X3Qgc2l6ZSwgc2l6ZV90IG90aGVyU2l6ZSkKIHsKQEAgLTQyNCwzNSArNDc2LDI1IEBAIHN0YXRp
YyBpbmxpbmUgc2l6ZV90IGV4cGFuZGVkU2l6ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IG90aGVyU2l6
ZSkKICAgICByZXR1cm4gZXhwYW5kZWRTaXplICsgb3RoZXJTaXplOwogfQogCi1pbmxpbmUgaW50
IFVTdHJpbmc6OnVzZWRDYXBhY2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVwLT5iYXNl
U3RyaW5nLT51c2VkQ2FwYWNpdHk7Ci19Ci0KLWlubGluZSBpbnQgVVN0cmluZzo6dXNlZFByZUNh
cGFjaXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXAtPmJhc2VTdHJpbmctPnVzZWRQcmVD
YXBhY2l0eTsKLX0KLQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZXhwYW5kQ2FwYWNpdHkoVVN0cmlu
Zzo6UmVwKiByZXAsIGludCByZXF1aXJlZExlbmd0aCkKIHsKICAgICByZXAtPmNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICBBU1NFUlQoIXJlcC0+YmFzZVN0cmluZygpLT5yYXdSZWZDb3VudGVkTWFs
bG9jZWQoKSk7CiAKLSAgICBVU3RyaW5nOjpSZXAqIHIgPSByZXAtPmJhc2VTdHJpbmc7CisgICAg
VVN0cmluZzo6QmFzZVN0cmluZyogYmFzZSA9IHJlcC0+YmFzZVN0cmluZygpOwogCi0gICAgaWYg
KHJlcXVpcmVkTGVuZ3RoID4gci0+Y2FwYWNpdHkpIHsKLSAgICAgICAgc2l6ZV90IG5ld0NhcGFj
aXR5ID0gZXhwYW5kZWRTaXplKHJlcXVpcmVkTGVuZ3RoLCByLT5wcmVDYXBhY2l0eSk7Ci0gICAg
ICAgIFVDaGFyKiBvbGRCdWYgPSByLT5idWY7Ci0gICAgICAgIHItPmJ1ZiA9IHJlYWxsb2NDaGFy
cyhyLT5idWYsIG5ld0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKCFyLT5idWYpIHsKLSAgICAgICAg
ICAgIHItPmJ1ZiA9IG9sZEJ1ZjsKKyAgICBpZiAocmVxdWlyZWRMZW5ndGggPiBiYXNlLT5jYXBh
Y2l0eSkgeworICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUocmVxdWly
ZWRMZW5ndGgsIGJhc2UtPnByZUNhcGFjaXR5KTsKKyAgICAgICAgVUNoYXIqIG9sZEJ1ZiA9IGJh
c2UtPmJ1ZjsKKyAgICAgICAgYmFzZS0+YnVmID0gcmVhbGxvY0NoYXJzKGJhc2UtPmJ1ZiwgbmV3
Q2FwYWNpdHkpOworICAgICAgICBpZiAoIWJhc2UtPmJ1ZikgeworICAgICAgICAgICAgYmFzZS0+
YnVmID0gb2xkQnVmOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAg
ICAgIHItPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKKyAgICAgICAg
YmFzZS0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eSAtIGJhc2UtPnByZUNhcGFjaXR5OwogICAgIH0K
LSAgICBpZiAocmVxdWlyZWRMZW5ndGggPiByLT51c2VkQ2FwYWNpdHkpCi0gICAgICAgIHItPnVz
ZWRDYXBhY2l0eSA9IHJlcXVpcmVkTGVuZ3RoOworICAgIGlmIChyZXF1aXJlZExlbmd0aCA+IGJh
c2UtPnVzZWRDYXBhY2l0eSkKKyAgICAgICAgYmFzZS0+dXNlZENhcGFjaXR5ID0gcmVxdWlyZWRM
ZW5ndGg7CiAKICAgICByZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ2NywyNiArNTA5LDI3IEBAIHZvaWQgVVN0cmluZzo6ZXhwYW5kQ2FwYWNpdHkoaW50IHJl
cXVpcmVkTGVuZ3RoKQogdm9pZCBVU3RyaW5nOjpleHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdWly
ZWRQcmVDYXApCiB7CiAgICAgbV9yZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlQo
IW1fcmVwLT5iYXNlU3RyaW5nKCktPnJhd1JlZkNvdW50ZWRNYWxsb2NlZCgpKTsKIAotICAgIFJl
cCogciA9IG1fcmVwLT5iYXNlU3RyaW5nOworICAgIEJhc2VTdHJpbmcqIGJhc2UgPSBtX3JlcC0+
YmFzZVN0cmluZygpOwogCi0gICAgaWYgKHJlcXVpcmVkUHJlQ2FwID4gci0+cHJlQ2FwYWNpdHkp
IHsKLSAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKHJlcXVpcmVkUHJl
Q2FwLCByLT5jYXBhY2l0eSk7Ci0gICAgICAgIGludCBkZWx0YSA9IG5ld0NhcGFjaXR5IC0gci0+
Y2FwYWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKKyAgICBpZiAocmVxdWlyZWRQcmVDYXAgPiBiYXNl
LT5wcmVDYXBhY2l0eSkgeworICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNp
emUocmVxdWlyZWRQcmVDYXAsIGJhc2UtPmNhcGFjaXR5KTsKKyAgICAgICAgaW50IGRlbHRhID0g
bmV3Q2FwYWNpdHkgLSBiYXNlLT5jYXBhY2l0eSAtIGJhc2UtPnByZUNhcGFjaXR5OwogCiAgICAg
ICAgIFVDaGFyKiBuZXdCdWYgPSBhbGxvY0NoYXJzKG5ld0NhcGFjaXR5KTsKICAgICAgICAgaWYg
KCFuZXdCdWYpIHsKICAgICAgICAgICAgIG1ha2VOdWxsKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgY29weUNoYXJzKG5ld0J1ZiArIGRlbHRhLCByLT5idWYsIHIt
PmNhcGFjaXR5ICsgci0+cHJlQ2FwYWNpdHkpOwotICAgICAgICBmYXN0RnJlZShyLT5idWYpOwot
ICAgICAgICByLT5idWYgPSBuZXdCdWY7CisgICAgICAgIGNvcHlDaGFycyhuZXdCdWYgKyBkZWx0
YSwgYmFzZS0+YnVmLCBiYXNlLT5jYXBhY2l0eSArIGJhc2UtPnByZUNhcGFjaXR5KTsKKyAgICAg
ICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKKyAgICAgICAgYmFzZS0+YnVmID0gbmV3QnVmOwogCi0g
ICAgICAgIHItPnByZUNhcGFjaXR5ID0gbmV3Q2FwYWNpdHkgLSByLT5jYXBhY2l0eTsKKyAgICAg
ICAgYmFzZS0+cHJlQ2FwYWNpdHkgPSBuZXdDYXBhY2l0eSAtIGJhc2UtPmNhcGFjaXR5OwogICAg
IH0KLSAgICBpZiAocmVxdWlyZWRQcmVDYXAgPiByLT51c2VkUHJlQ2FwYWNpdHkpCi0gICAgICAg
IHItPnVzZWRQcmVDYXBhY2l0eSA9IHJlcXVpcmVkUHJlQ2FwOworICAgIGlmIChyZXF1aXJlZFBy
ZUNhcCA+IGJhc2UtPnVzZWRQcmVDYXBhY2l0eSkKKyAgICAgICAgYmFzZS0+dXNlZFByZUNhcGFj
aXR5ID0gcmVxdWlyZWRQcmVDYXA7CiAKICAgICBtX3JlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwog
fQpAQCAtNDk0LDE1ICs1MzcsMTUgQEAgdm9pZCBVU3RyaW5nOjpleHBhbmRQcmVDYXBhY2l0eShp
bnQgcmVxdWlyZWRQcmVDYXApCiBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY3JlYXRlUmVwKGNv
bnN0IGNoYXIqIGMpCiB7CiAgICAgaWYgKCFjKQotICAgICAgICByZXR1cm4gJlVTdHJpbmc6OlJl
cDo6bnVsbDsKKyAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKIAogICAgIGlm
ICghY1swXSkKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5OworICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHkoKTsKIAogICAgIHNpemVfdCBsZW5ndGggPSBzdHJs
ZW4oYyk7CiAgICAgVUNoYXIqIGQgPSBhbGxvY0NoYXJzKGxlbmd0aCk7CiAgICAgaWYgKCFkKQot
ICAgICAgICByZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAgICAgcmV0dXJuICZVU3Ry
aW5nOjpSZXA6Om51bGwoKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgICAgIGRbaV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihjW2ldKTsgLy8gdXNlIHVuc2lnbmVkIGNoYXIgdG8gemVyby1leHRlbmQgaW5zdGVh
ZCBvZiBzaWduLWV4dGVuZApAQCAtNTE5LDcgKzU2Miw3IEBAIFVTdHJpbmc6OlVTdHJpbmcoY29u
c3QgY2hhciogYykKIFVTdHJpbmc6OlVTdHJpbmcoY29uc3QgVUNoYXIqIGMsIGludCBsZW5ndGgp
CiB7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSAKLSAgICAgICAgbV9yZXAgPSAmUmVwOjplbXB0eTsK
KyAgICAgICAgbV9yZXAgPSAmQmFzZVN0cmluZzo6ZW1wdHkoKTsKICAgICBlbHNlCiAgICAgICAg
IG1fcmVwID0gUmVwOjpjcmVhdGVDb3B5aW5nKGMsIGxlbmd0aCk7CiB9CkBAIC01MjcsNyArNTcw
LDcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBVQ2hhciogYywgaW50IGxlbmd0aCkKIFVTdHJp
bmc6OlVTdHJpbmcoVUNoYXIqIGMsIGludCBsZW5ndGgsIGJvb2wgY29weSkKIHsKICAgICBpZiAo
bGVuZ3RoID09IDApCi0gICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHk7CisgICAgICAgIG1fcmVw
ID0gJkJhc2VTdHJpbmc6OmVtcHR5KCk7CiAgICAgZWxzZSBpZiAoY29weSkKICAgICAgICAgbV9y
ZXAgPSBSZXA6OmNyZWF0ZUNvcHlpbmcoYywgbGVuZ3RoKTsKICAgICBlbHNlCkBAIC01MzcsNyAr
NTgwLDcgQEAgVVN0cmluZzo6VVN0cmluZyhVQ2hhciogYywgaW50IGxlbmd0aCwgYm9vbCBjb3B5
KQogVVN0cmluZzo6VVN0cmluZyhjb25zdCBWZWN0b3I8VUNoYXI+JiBidWZmZXIpCiB7CiAgICAg
aWYgKCFidWZmZXIuc2l6ZSgpKQotICAgICAgICBtX3JlcCA9ICZSZXA6OmVtcHR5OworICAgICAg
ICBtX3JlcCA9ICZCYXNlU3RyaW5nOjplbXB0eSgpOwogICAgIGVsc2UKICAgICAgICAgbV9yZXAg
PSBSZXA6OmNyZWF0ZUNvcHlpbmcoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiB9CkBA
IC01NTEsNiArNTk0LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5n
OjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICBpbnQgdGhpc1Np
emUgPSByZXAtPnNpemUoKTsKICAgICBpbnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0OwogICAg
IGludCBsZW5ndGggPSB0aGlzU2l6ZSArIHRTaXplOworICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcq
IGJhc2UgPSByZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxlIGNhc2VzOgogICAg
IGlmICh0U2l6ZSA9PSAwKSB7CkBAIC01NTgsMzQgKzYwMiwzNCBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZQogICAgIH0gZWxzZSBpZiAodGhpc1NpemUgPT0gMCkgewogICAgICAgICAvLyB0aGlz
IGlzIGVtcHR5CiAgICAgICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyh0RGF0
YSwgdFNpemUpOwotICAgIH0gZWxzZSBpZiAocmVwLT5iYXNlSXNTZWxmKCkgJiYgcmVwLT5yYyA9
PSAxKSB7CisgICAgfSBlbHNlIGlmIChyZXAgPT0gYmFzZSAmJiBiYXNlLT50cnlUb01ha2VVbnNo
YXJlZCgpKSB7CiAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291bnQgb2Yg
MSAoc28gd2UgY2FuIGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGlmICghZXhwYW5k
Q2FwYWNpdHkocmVwLmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJl
cCA9ICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVw
OjpudWxsKCk7CiAgICAgICAgIGlmIChyZXAtPmRhdGEoKSkgewogICAgICAgICAgICAgY29weUNo
YXJzKHJlcC0+ZGF0YSgpICsgdGhpc1NpemUsIHREYXRhLCB0U2l6ZSk7CiAgICAgICAgICAgICBy
ZXAtPmxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgIHJlcC0+X2hhc2ggPSAwOwogICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gcmVwLT5iYXNlU3RyaW5n
LT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNl
IGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNT
aXplID49IG1pblNoYXJlU2l6ZSAmJiBiYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAg
ICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVuZCBpdCBp
ZiBpdCdzIGxvbmcgZW5vdWdoIHRvIGFwcGVuZCB0bwogICAgICAgICBpZiAoIWV4cGFuZENhcGFj
aXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0aCkpCi0gICAgICAgICAgICByZXAgPSAm
VVN0cmluZzo6UmVwOjpudWxsOworICAgICAgICAgICAgcmVwID0gJlVTdHJpbmc6OlJlcDo6bnVs
bCgpOwogICAgICAgICBpZiAocmVwLT5kYXRhKCkpIHsKICAgICAgICAgICAgIGNvcHlDaGFycyhy
ZXAtPmRhdGEoKSArIHRoaXNTaXplLCB0RGF0YSwgdFNpemUpOwogICAgICAgICAgICAgcmVwID0g
VVN0cmluZzo6UmVwOjpjcmVhdGUocmVwLCAwLCBsZW5ndGgpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5nIG1vcmUg
Y2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCisgICAgICAgIC8vIHRoaXMg
aXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVudHMgdXMgZnJvbSBtb2RpZnlpbmcgYmFz
ZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKICAgICAgICAgc2l6ZV90IG5ld0NhcGFj
aXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2ND
aGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICghZCkKLSAgICAgICAgICAgIHJlcCA9ICZV
U3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxs
KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29weUNoYXJzKGQsIHJlcC0+ZGF0YSgp
LCB0aGlzU2l6ZSk7CiAgICAgICAgICAgICBjb3B5Q2hhcnMoZCArIHRoaXNTaXplLCB0RGF0YSwg
dFNpemUpOwogICAgICAgICAgICAgcmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGUoZCwgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIHJlcC0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICAgICAgICAg
IHJlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9CiAg
ICAgfQogCkBAIC02MDQsNiArNjQ4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0
cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICBp
bnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0OwogICAgIGludCB0U2l6ZSA9IHN0YXRpY19jYXN0
PGludD4oc3RybGVuKHQpKTsKICAgICBpbnQgbGVuZ3RoID0gdGhpc1NpemUgKyB0U2l6ZTsKKyAg
ICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gcmVwLT5iYXNlU3RyaW5nKCk7CiAKICAgICAv
LyBwb3NzaWJsZSBjYXNlczoKICAgICBpZiAodGhpc1NpemUgPT0gMCkgewpAQCAtNjExLDcgKzY1
Niw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25j
YXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgIHJlcCA9IGNyZWF0ZVJlcCh0
KTsKICAgICB9IGVsc2UgaWYgKHRTaXplID09IDApIHsKICAgICAgICAgLy8gdCBpcyBlbXB0eSwg
d2UnbGwganVzdCByZXR1cm4gKnRoaXMgYmVsb3cuCi0gICAgfSBlbHNlIGlmIChyZXAtPmJhc2VJ
c1NlbGYoKSAmJiByZXAtPnJjID09IDEpIHsKKyAgICB9IGVsc2UgaWYgKHJlcCA9PSBiYXNlICYm
IGJhc2UtPnRyeVRvTWFrZVVuc2hhcmVkKCkpIHsKICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3Qg
YW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRlciBpdCBkaXJlY3RseSkK
ICAgICAgICAgZXhwYW5kQ2FwYWNpdHkocmVwLmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVuZ3RoKTsK
ICAgICAgICAgVUNoYXIqIGQgPSByZXAtPmRhdGEoKTsKQEAgLTYyMSw3ICs2NjYsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAgICAgICAgcmVwLT5sZW4gPSBsZW5ndGg7CiAgICAg
ICAgICAgICByZXAtPl9oYXNoID0gMDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGhpc09m
ZnNldCArIHRoaXNTaXplID09IHJlcC0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5ICYmIHRoaXNT
aXplID49IG1pblNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIHRoaXNT
aXplID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiB0aGlzU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYg
YmFzZS0+dHJ5VG9NYWtlTW9kaWZpYWJsZSgpKSB7CiAgICAgICAgIC8vIHRoaXMgc3RyaW5nIHJl
YWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIC0gZXh0ZW5kIGl0CiAgICAgICAgIGV4cGFuZENh
cGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0aCk7CiAgICAgICAgIFVDaGFyKiBk
ID0gcmVwLT5kYXRhKCk7CkBAIC02MzEsMTcgKzY3NiwxNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5n
OjpSZQogICAgICAgICAgICAgcmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGUocmVwLCAwLCBsZW5n
dGgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQg
d2l0aCBzb21lb25lIHVzaW5nIG1vcmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcg
c3RyaW5nCisgICAgICAgIC8vIHRoaXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVu
dHMgdXMgZnJvbSBtb2RpZnlpbmcgYmFzZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcK
ICAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwgMCk7CiAg
ICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICgh
ZCkKLSAgICAgICAgICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAgICAgICBy
ZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Y29weUNoYXJzKGQsIHJlcC0+ZGF0YSgpLCB0aGlzU2l6ZSk7CiAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRTaXplOyArK2kpCiAgICAgICAgICAgICAgICAgZFt0aGlzU2l6ZSArIGld
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odFtpXSk7IC8vIHVzZSB1bnNpZ25lZCBjaGFy
IHRvIHplcm8tZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKICAgICAgICAgICAgIHJlcCA9
IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgICAgICAgICByZXAtPmNhcGFj
aXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICByZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNp
dHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjcwLDE1ICs3MTUsMTcg
QEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogYSwg
VVN0cmluZzo6UmVwKiBiKQogICAgIGlmIChiU2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gYTsK
IAotICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhLT5iYXNlU3RyaW5n
LT51c2VkQ2FwYWNpdHkgJiYgYU9mZnNldCArIGxlbmd0aCA8PSBhLT5iYXNlU3RyaW5nLT5jYXBh
Y2l0eSkgeworICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGFCYXNlID0gYS0+YmFzZVN0cmluZygp
OworICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhQmFzZS0+dXNlZENh
cGFjaXR5ICYmIGFPZmZzZXQgKyBsZW5ndGggPD0gYUJhc2UtPmNhcGFjaXR5ICYmIGFCYXNlLT50
cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAgICAgLy8gYiBpcyBhIHNpbmdsZSBjaGFyYWN0
ZXIgKGNvbW1vbiBmYXN0IGNhc2UpCi0gICAgICAgIGEtPmJhc2VTdHJpbmctPnVzZWRDYXBhY2l0
eSA9IGFPZmZzZXQgKyBsZW5ndGg7CisgICAgICAgIGFCYXNlLT51c2VkQ2FwYWNpdHkgPSBhT2Zm
c2V0ICsgbGVuZ3RoOwogICAgICAgICBhLT5kYXRhKClbYVNpemVdID0gYi0+ZGF0YSgpWzBdOwog
ICAgICAgICByZXR1cm4gVVN0cmluZzo6UmVwOjpjcmVhdGUoYSwgMCwgbGVuZ3RoKTsKICAgICB9
CiAKLSAgICBpZiAoYU9mZnNldCArIGFTaXplID09IGEtPmJhc2VTdHJpbmctPnVzZWRDYXBhY2l0
eSAmJiBhU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGFTaXplID49IGJTaXplICYmCi0gICAg
ICAgICAgICAgICAoLWJPZmZzZXQgIT0gYi0+YmFzZVN0cmluZy0+dXNlZFByZUNhcGFjaXR5IHx8
IGFTaXplID49IGJTaXplKSkgeworICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJCYXNlID0gYi0+
YmFzZVN0cmluZygpOworICAgIGlmIChhT2Zmc2V0ICsgYVNpemUgPT0gYUJhc2UtPnVzZWRDYXBh
Y2l0eSAmJiBhU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGFTaXplID49IGJTaXplCisgICAg
ICAgICYmICgtYk9mZnNldCAhPSBiQmFzZS0+dXNlZFByZUNhcGFjaXR5IHx8IGFTaXplID49IGJT
aXplKSAgJiYgYUJhc2UtPnRyeVRvTWFrZU1vZGlmaWFibGUoKSkgewogICAgICAgICAvLyAtIGEg
cmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBidWZmZXIgc28gaXQgcXVhbGlmaWVzIGZvciBzaGFyZWQg
YXBwZW5kCiAgICAgICAgIC8vIC0gYWxzbywgaXQncyBhdCBsZWFzdCBhIHF1YXJ0ZXIgdGhlIGxl
bmd0aCBvZiBiIC0gYXBwZW5kaW5nIHRvIGEgbXVjaCBzaG9ydGVyCiAgICAgICAgIC8vICAgc3Ry
aW5nIGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZApAQCAtNjk3LDcgKzc0NCw3IEBAIFBhc3NSZWZQ
dHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3RyaW5nOjpSZXAqIGEsIFVTdHJpbmc6OlJl
cCogYikKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoLWJPZmZzZXQg
PT0gYi0+YmFzZVN0cmluZy0+dXNlZFByZUNhcGFjaXR5ICYmIGJTaXplID49IG1pblNoYXJlU2l6
ZSAmJiA0ICogYlNpemUgPj0gYVNpemUpIHsKKyAgICBpZiAoLWJPZmZzZXQgPT0gYkJhc2UtPnVz
ZWRQcmVDYXBhY2l0eSAmJiBiU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGJTaXplID49IGFT
aXplICYmIGJCYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAgICAgLy8gLSBiIHJl
YWNoZXMgdGhlIGJlZ2lubmluZyBvZiBpdHMgYnVmZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Igc2hh
cmVkIHByZXBlbmQKICAgICAgICAgLy8gLSBhbHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0
aGUgbGVuZ3RoIG9mIGEgLSBwcmVwZW5kaW5nIHRvIGEgbXVjaCBzaG9ydGVyCiAgICAgICAgIC8v
ICAgc3RyaW5nIGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZApAQCAtNzIzLDcgKzc3MCw3IEBAIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3RyaW5nOjpSZXAqIGEsIFVTdHJp
bmc6OlJlcCogYikKICAgICBjb3B5Q2hhcnMoZCwgYS0+ZGF0YSgpLCBhU2l6ZSk7CiAgICAgY29w
eUNoYXJzKGQgKyBhU2l6ZSwgYi0+ZGF0YSgpLCBiU2l6ZSk7CiAgICAgUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZXA+IHJlc3VsdCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAg
cmVzdWx0LT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgIHJlc3VsdC0+YmFzZVN0cmluZygp
LT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogCiAgICAgYS0+Y2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIGItPmNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTgzMSwxMiArODc4LDYgQEAgUGFzc1JlZlB0
cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogcmVwLCBkb3VibGUgZCkK
ICAgcmV0dXJuIGNvbmNhdGVuYXRlKHJlcCwgYnVmKTsKIH0KIAotY29uc3QgVVN0cmluZyYgVVN0
cmluZzo6bnVsbCgpCi17Ci0gICAgc3RhdGljIFVTdHJpbmcqIG4gPSBuZXcgVVN0cmluZzsgLy8g
U2hvdWxkIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkIGF0IGxlYXN0IG9uY2UgdG8gYmUgc2Fm
ZWx5IGluaXRpYWxpemVkLgotICAgIHJldHVybiAqbjsKLX0KLQogVVN0cmluZyBVU3RyaW5nOjpm
cm9tKGludCBpKQogewogICAgIFVDaGFyIGJ1ZlsxICsgc2l6ZW9mKGkpICogM107CkBAIC0xMDMw
LDYgKzEwNzEsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkK
ICAgICBpbnQgdGhpc09mZnNldCA9IG1fcmVwLT5vZmZzZXQ7CiAgICAgaW50IHRTaXplID0gdC5z
aXplKCk7CiAgICAgaW50IGxlbmd0aCA9IHRoaXNTaXplICsgdFNpemU7CisgICAgQmFzZVN0cmlu
ZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CiAKICAgICAvLyBwb3NzaWJsZSBjYXNlczoK
ICAgICBpZiAodGhpc1NpemUgPT0gMCkgewpAQCAtMTAzNyw3ICsxMDc5LDcgQEAgVVN0cmluZyYg
VVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcgJnQpCiAgICAgICAgICp0aGlzID0gdDsKICAg
ICB9IGVsc2UgaWYgKHRTaXplID09IDApIHsKICAgICAgICAgLy8gdCBpcyBlbXB0eQotICAgIH0g
ZWxzZSBpZiAobV9yZXAtPmJhc2VJc1NlbGYoKSAmJiBtX3JlcC0+cmMgPT0gMSkgeworICAgIH0g
ZWxzZSBpZiAobV9yZXAgPT0gYmFzZSAmJiBiYXNlLT50cnlUb01ha2VVbnNoYXJlZCgpKSB7CiAg
ICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291bnQgb2YgMSAoc28gd2UgY2Fu
IGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHRoaXNPZmZz
ZXQgKyBsZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSgpKSB7CkBAIC0xMDQ1LDcgKzEwODcsNyBA
QCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkKICAgICAgICAgICAg
IG1fcmVwLT5sZW4gPSBsZW5ndGg7CiAgICAgICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gdXNlZENhcGFj
aXR5KCkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlz
T2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1p
blNoYXJlU2l6ZSAmJiBiYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAgICAgLy8g
dGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVuZCBpdCBpZiBpdCdzIGxv
bmcgZW5vdWdoIHRvIGFwcGVuZCB0bwogICAgICAgICBleHBhbmRDYXBhY2l0eSh0aGlzT2Zmc2V0
ICsgbGVuZ3RoKTsKICAgICAgICAgaWYgKGRhdGEoKSkgewpAQCAtMTA1Myw3ICsxMDk1LDcgQEAg
VVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcgJnQpCiAgICAgICAgICAgICBt
X3JlcCA9IFJlcDo6Y3JlYXRlKG1fcmVwLCAwLCBsZW5ndGgpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5nIG1vcmUg
Y2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCisgICAgICAgIC8vIHRoaXMg
aXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVudHMgdXMgZnJvbSBtb2RpZnlpbmcgYmFz
ZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKICAgICAgICAgc2l6ZV90IG5ld0NhcGFj
aXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2ND
aGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICghZCkKQEAgLTEwNjIsNyArMTEwNCw3IEBA
IFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAgICAg
Y29weUNoYXJzKGQsIGRhdGEoKSwgdGhpc1NpemUpOwogICAgICAgICAgICAgY29weUNoYXJzKGQg
KyB0aGlzU2l6ZSwgdC5kYXRhKCksIHRTaXplKTsKICAgICAgICAgICAgIG1fcmVwID0gUmVwOjpj
cmVhdGUoZCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIG1fcmVwLT5jYXBhY2l0eSA9IG5ld0NhcGFj
aXR5OworICAgICAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNpdHkgPSBuZXdDYXBh
Y2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA5MCw2ICsxMTMyLDcgQEAgVVN0cmluZyYg
VVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAKICAgICBpbnQgdGhpc09mZnNldCA9IG1fcmVwLT5v
ZmZzZXQ7CiAgICAgaW50IGxlbmd0aCA9IHNpemUoKTsKKyAgICBCYXNlU3RyaW5nKiBiYXNlID0g
bV9yZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxlIGNhc2VzOgogICAgIGlmIChs
ZW5ndGggPT0gMCkgewpAQCAtMTEwMSw5ICsxMTQ0LDkgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBw
ZW5kKFVDaGFyIGMpCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZFswXSA9IGM7CiAgICAg
ICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIDEpOwotICAgICAgICAgICAgbV9yZXAtPmNh
cGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3JlcC0+YmFzZVN0cmluZygpLT5j
YXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3JlcC0+
YmFzZUlzU2VsZigpICYmIG1fcmVwLT5yYyA9PSAxKSB7CisgICAgfSBlbHNlIGlmIChtX3JlcCA9
PSBiYXNlICYmIGJhc2UtPnRyeVRvTWFrZVVuc2hhcmVkKCkpIHsKICAgICAgICAgLy8gdGhpcyBp
cyBkaXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRlciBpdCBk
aXJlY3RseSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNldCArIGxlbmd0aCArIDEp
OwogICAgICAgICBVQ2hhciogZCA9IG1fcmVwLT5kYXRhKCk7CkBAIC0xMTEyLDcgKzExNTUsNyBA
QCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoVUNoYXIgYykKICAgICAgICAgICAgIG1fcmVwLT5s
ZW4gPSBsZW5ndGggKyAxOwogICAgICAgICAgICAgbV9yZXAtPl9oYXNoID0gMDsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIGxlbmd0aCA9PSB1c2VkQ2FwYWNpdHkoKSAm
JiBsZW5ndGggPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsg
bGVuZ3RoID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiBsZW5ndGggPj0gbWluU2hhcmVTaXplICYm
IGJhc2UtPnRyeVRvTWFrZU1vZGlmaWFibGUoKSkgewogICAgICAgICAvLyB0aGlzIHJlYWNoZXMg
dGhlIGVuZCBvZiB0aGUgc3RyaW5nIC0gZXh0ZW5kIGl0IGFuZCBzaGFyZQogICAgICAgICBleHBh
bmRDYXBhY2l0eSh0aGlzT2Zmc2V0ICsgbGVuZ3RoICsgMSk7CiAgICAgICAgIFVDaGFyKiBkID0g
bV9yZXAtPmRhdGEoKTsKQEAgLTExMjEsNyArMTE2NCw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFw
cGVuZChVQ2hhciBjKQogICAgICAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShtX3JlcCwgMCwg
bGVuZ3RoICsgMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICAvLyB0aGlzIGlz
IHNoYXJlZCB3aXRoIHNvbWVvbmUgdXNpbmcgbW9yZSBjYXBhY2l0eSwgZ290dGEgbWFrZSBhIHdo
b2xlIG5ldyBzdHJpbmcKKyAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgaW4gc29tZSB3YXkgdGhh
dCBwcmV2ZW50cyB1cyBmcm9tIG1vZGlmeWluZyBiYXNlLCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3
IHN0cmluZwogICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUobGVuZ3Ro
ICsgMSwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAg
ICAgICAgIGlmICghZCkKQEAgLTExMzAsNyArMTE3Myw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFw
cGVuZChVQ2hhciBjKQogICAgICAgICAgICAgY29weUNoYXJzKGQsIGRhdGEoKSwgbGVuZ3RoKTsK
ICAgICAgICAgICAgIGRbbGVuZ3RoXSA9IGM7CiAgICAgICAgICAgICBtX3JlcCA9IFJlcDo6Y3Jl
YXRlKGQsIGxlbmd0aCArIDEpOwotICAgICAgICAgICAgbV9yZXAtPmNhcGFjaXR5ID0gbmV3Q2Fw
YWNpdHk7CisgICAgICAgICAgICBtX3JlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0Nh
cGFjaXR5OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTg1LDE5ICsxMjI4LDIwIEBAIGNoYXIq
IFVTdHJpbmc6OmFzY2lpKCkgY29uc3QKIFVTdHJpbmcmIFVTdHJpbmc6Om9wZXJhdG9yPShjb25z
dCBjaGFyKiBjKQogewogICAgIGlmICghYykgewotICAgICAgICBtX3JlcCA9ICZSZXA6Om51bGw7
CisgICAgICAgIG1fcmVwID0gJkJhc2VTdHJpbmc6Om51bGwoKTsKICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgIH0KIAogICAgIGlmICghY1swXSkgewotICAgICAgICBtX3JlcCA9ICZSZXA6OmVt
cHR5OworICAgICAgICBtX3JlcCA9ICZCYXNlU3RyaW5nOjplbXB0eSgpOwogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgfQogCiAgICAgaW50IGwgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihj
KSk7CiAgICAgVUNoYXIqIGQ7Ci0gICAgaWYgKG1fcmVwLT5yYyA9PSAxICYmIGwgPD0gbV9yZXAt
PmNhcGFjaXR5ICYmIG1fcmVwLT5iYXNlSXNTZWxmKCkgJiYgbV9yZXAtPm9mZnNldCA9PSAwICYm
IG1fcmVwLT5wcmVDYXBhY2l0eSA9PSAwKSB7Ci0gICAgICAgIGQgPSBtX3JlcC0+YnVmOworICAg
IEJhc2VTdHJpbmcqIGJhc2UgPSBtX3JlcC0+YmFzZVN0cmluZygpOworICAgIGlmIChiYXNlLT50
cnlUb01ha2VVbnNoYXJlZCgpICYmIG1fcmVwLT5vZmZzZXQgPT0gMCAmJiBtX3JlcCA9PSBiYXNl
ICYmIGwgPD0gYmFzZS0+Y2FwYWNpdHkgJiYgYmFzZS0+cHJlQ2FwYWNpdHkgPT0gMCkgeworICAg
ICAgICBkID0gYmFzZS0+YnVmOwogICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAgICAgICBt
X3JlcC0+bGVuID0gbDsKICAgICB9IGVsc2UgewpAQCAtMTYyNiwxMyArMTY3MCwxMyBAQCBDU3Ry
aW5nIFVTdHJpbmc6OlVURjhTdHJpbmcoYm9vbCBzdHJpY3QpIGNvbnN0CiAvLyBGb3IgdXNlIGlu
IGVycm9yIGhhbmRsaW5nIGNvZGUgcGF0aHMgLS0gaGF2aW5nIHRoaXMgbm90IGJlIGlubGluZWQg
aGVscHMgYXZvaWQgUElDIGJyYW5jaGVzIHRvIGZldGNoIHRoZSBnbG9iYWwgb24gTWFjIE9TIFgu
CiBORVZFUl9JTkxJTkUgdm9pZCBVU3RyaW5nOjptYWtlTnVsbCgpCiB7Ci0gICAgbV9yZXAgPSAm
UmVwOjpudWxsOworICAgIG1fcmVwID0gJkJhc2VTdHJpbmc6Om51bGwoKTsKIH0KIAogLy8gRm9y
IHVzZSBpbiBlcnJvciBoYW5kbGluZyBjb2RlIHBhdGhzIC0tIGhhdmluZyB0aGlzIG5vdCBiZSBp
bmxpbmVkIGhlbHBzIGF2b2lkIFBJQyBicmFuY2hlcyB0byBmZXRjaCB0aGUgZ2xvYmFsIG9uIE1h
YyBPUyBYLgogTkVWRVJfSU5MSU5FIFVTdHJpbmc6OlJlcCogVVN0cmluZzo6bnVsbFJlcCgpCiB7
Ci0gICAgcmV0dXJuICZSZXA6Om51bGw7CisgICAgcmV0dXJuICZCYXNlU3RyaW5nOjpudWxsKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VU3RyaW5nLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAppbmRleCA3
NTQwM2MwLi5hNmNlYjEzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaApAQCAtMjYsOSArMjYs
MTEgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUHRyQW5kRmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZERhdGFIb2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC03NCwyMSArNzYsMjUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0cnVjdCBSZXAgeworICAgICAgICBzdHJ1Y3QgQmFzZVN0cmluZzsKKyAgICAgICAgc3Ry
dWN0IFJlcCA6IE5vbmNvcHlhYmxlIHsKICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAK
ICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4gY3JlYXRlKFVDaGFyKiwgaW50KTsK
ICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4gY3JlYXRlQ29weWluZyhjb25zdCBV
Q2hhciosIGludCk7CiAgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXA+IGNyZWF0ZShQ
YXNzUmVmUHRyPFJlcD4gYmFzZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCk7CiAKKyAgICAgICAg
ICAgIC8vIFVzZXMgVGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQgdG8gaGF2ZSBqb2ludCBv
d25lcnNoaXAgb3ZlciB0aGUgVUNoYXIqLgorICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVwPiBzaGFyZShVQ2hhciosIGludCwgUGFzc1JlZlB0cjxUaHJlYWRBd2FyZVJlZkNvdW50ZWRN
YWxsb2NlZDxVQ2hhcj4gPik7CisKICAgICAgICAgICAgIC8vIENvbnN0cnVjdHMgYSBzdHJpbmcg
ZnJvbSBhIFVURi04IHN0cmluZywgdXNpbmcgc3RyaWN0IGNvbnZlcnNpb24gKHNlZSBjb21tZW50
cyBpbiBVVEY4LmgpLgogICAgICAgICAgICAgLy8gUmV0dXJucyBVU3RyaW5nOjpSZXA6Om51bGwg
Zm9yIG51bGwgaW5wdXQgb3IgY29udmVyc2lvbiBmYWlsdXJlLgogICAgICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVwPiBjcmVhdGVGcm9tVVRGOChjb25zdCBjaGFyKik7CiAKICAgICAgICAg
ICAgIHZvaWQgZGVzdHJveSgpOwogCi0gICAgICAgICAgICBib29sIGJhc2VJc1NlbGYoKSBjb25z
dCB7IHJldHVybiBiYXNlU3RyaW5nID09IHRoaXM7IH0KLSAgICAgICAgICAgIFVDaGFyKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gYmFzZVN0cmluZy0+YnVmICsgYmFzZVN0cmluZy0+cHJlQ2FwYWNp
dHkgKyBvZmZzZXQ7IH0KKyAgICAgICAgICAgIGJvb2wgYmFzZUlzU2VsZigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuaXNGbGFnU2V0KEJhc2VTdHJpbmdGbGFnKTsg
fQorICAgICAgICAgICAgVUNoYXIqIGRhdGEoKSBjb25zdDsKICAgICAgICAgICAgIGludCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbGVuOyB9CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdCB7IGlmIChfaGFzaCA9PSAwKSBfaGFzaCA9IGNvbXB1dGVIYXNoKGRhdGEoKSwgbGVuKTsg
cmV0dXJuIF9oYXNoOyB9CkBAIC05OCwzNSArMTA0LDU2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IGNoYXIqLCBpbnQgbGVu
Z3RoKTsKICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFy
KiBzKSB7IHJldHVybiBjb21wdXRlSGFzaChzLCBzdHJsZW4ocykpOyB9CiAKLSAgICAgICAgICAg
IElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJZGVudGlmaWVyVGFibGUqPihtX2lkZW50aWZpZXJUYWJsZSAmIH5zdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KDEpKTsgfQotICAgICAgICAgICAgdm9pZCBzZXRJZGVudGlmaWVyVGFi
bGUoSWRlbnRpZmllclRhYmxlKiB0YWJsZSkgeyBBU1NFUlQoIWlzU3RhdGljKCkpOyBtX2lkZW50
aWZpZXJUYWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhYmxlKTsgfQorICAgICAg
ICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLmdldCgpOyB9CisgICAgICAgICAgICB2b2lkIHNldElk
ZW50aWZpZXJUYWJsZShJZGVudGlmaWVyVGFibGUqIHRhYmxlKSB7IEFTU0VSVCghaXNTdGF0aWMo
KSk7IG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3Muc2V0KHRhYmxlKTsgfQorCisgICAgICAgICAg
ICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyVGFibGVBbmRGbGFn
cy5pc0ZsYWdTZXQoU3RhdGljRmxhZyk7IH0KKyAgICAgICAgICAgIHZvaWQgc2V0U3RhdGljKGJv
b2wgdikgeyBBU1NFUlQoIWlkZW50aWZpZXJUYWJsZSgpKTsgaWYgKHYpIG1faWRlbnRpZmllclRh
YmxlQW5kRmxhZ3Muc2V0RmxhZyhTdGF0aWNGbGFnKTsgZWxzZSBtX2lkZW50aWZpZXJUYWJsZUFu
ZEZsYWdzLmNsZWFyRmxhZyhTdGF0aWNGbGFnKTsgfQogCi0gICAgICAgICAgICBib29sIGlzU3Rh
dGljKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyVGFibGUgJiAxOyB9Ci0gICAgICAgICAg
ICB2b2lkIHNldFN0YXRpYyhib29sIHYpIHsgQVNTRVJUKCFpZGVudGlmaWVyVGFibGUoKSk7IG1f
aWRlbnRpZmllclRhYmxlID0gdjsgfQorICAgICAgICAgICAgdm9pZCBzZXRCYXNlU3RyaW5nKEJh
c2VTdHJpbmcqIGJhc2UpIHsgQVNTRVJUKGJhc2UgIT0gdGhpcyk7IG1fYmFzZVN0cmluZ09yUmVm
Q291bnRlZE1hbGxvY2VkID0gYmFzZTsgfQorICAgICAgICAgICAgQmFzZVN0cmluZyogYmFzZVN0
cmluZygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QmFzZVN0cmluZyo+KGJhc2VJc1NlbGYo
KSA/IHRoaXMgOiBtX2Jhc2VTdHJpbmdPclJlZkNvdW50ZWRNYWxsb2NlZCk7IH0KKyAgICAgICAg
ICAgIGNvbnN0IEJhc2VTdHJpbmcqIGJhc2VTdHJpbmcoKSBjb25zdCB7IHJldHVybiBjb25zdF9j
YXN0PGNvbnN0IEJhc2VTdHJpbmcqPihjb25zdF9jYXN0PFJlcCo+KHRoaXMpLT5iYXNlU3RyaW5n
KCkpOyAgfQogCiAgICAgICAgICAgICBSZXAqIHJlZigpIHsgKytyYzsgcmV0dXJuIHRoaXM7IH0K
ICAgICAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZXJlZigpIHsgaWYgKC0tcmMgPT0gMCkg
ZGVzdHJveSgpOyB9CiAKICAgICAgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0
OworICAgICAgICAgICAgZW51bSBVU3RyaW5nRmxhZ3MgeworICAgICAgICAgICAgICAgIFN0YXRp
Y0ZsYWcsCisgICAgICAgICAgICAgICAgQmFzZVN0cmluZ0ZsYWcKKyAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIC8vIHVuc2hhcmVkIGRhdGEKICAgICAgICAgICAgIGludCBvZmZzZXQ7CiAg
ICAgICAgICAgICBpbnQgbGVuOwogICAgICAgICAgICAgaW50IHJjOyAvLyBGb3IgbnVsbCBhbmQg
ZW1wdHkgc3RhdGljIHN0cmluZ3MsIHRoaXMgZmllbGQgZG9lcyBub3QgcmVmbGVjdCBhIGNvcnJl
Y3QgY291bnQsIGJlY2F1c2UgcmVmL2RlcmVmIGFyZSBub3QgdGhyZWFkLXNhZmUuIEEgc3BlY2lh
bCBjYXNlIGluIGRlc3Ryb3koKSBndWFyYW50ZWVzIHRoYXQgdGhlc2UgZG8gbm90IGdldCBkZWxl
dGVkLgogICAgICAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBfaGFzaDsKLSAgICAgICAgICAgIGlu
dHB0cl90IG1faWRlbnRpZmllclRhYmxlOyAvLyBBIHBvaW50ZXIgdG8gaWRlbnRpZmllciB0YWJs
ZS4gVGhlIGxvd2VzdCBiaXQgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBzdHJpbmcg
aXMgc3RhdGljIChudWxsIG9yIGVtcHR5KS4KLSAgICAgICAgICAgIFVTdHJpbmc6OlJlcCogYmFz
ZVN0cmluZzsKLSAgICAgICAgICAgIHNpemVfdCByZXBvcnRlZENvc3Q7CisgICAgICAgICAgICBQ
dHJBbmRGbGFnczxJZGVudGlmaWVyVGFibGUsIFVTdHJpbmdGbGFncz4gbV9pZGVudGlmaWVyVGFi
bGVBbmRGbGFnczsKKyAgICAgICAgICAgIHZvaWQqIG1fYmFzZVN0cmluZ09yUmVmQ291bnRlZE1h
bGxvY2VkOyAvLyBJZiAidGhpcyIgaXMgYSBCYXNlU3RyaW5nIGluc3RhbmNlLCBpdCBpcyB0aGUg
VGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQqLiBCYXNlU3RyaW5nKiBvdGhlcndpc2UuCisK
KyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nJiBudWxsKCkgeyByZXR1cm4gKm51bGxCYXNl
U3RyaW5nOyB9CisgICAgICAgICAgICBzdGF0aWMgQmFzZVN0cmluZyYgZW1wdHkoKSB7IHJldHVy
biAqZW1wdHlCYXNlU3RyaW5nOyB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBmcmll
bmQgdm9pZCBpbml0aWFsaXplVVN0cmluZygpOworICAgICAgICAgICAgc3RhdGljIEJhc2VTdHJp
bmcqIG51bGxCYXNlU3RyaW5nOworICAgICAgICAgICAgc3RhdGljIEJhc2VTdHJpbmcqIGVtcHR5
QmFzZVN0cmluZzsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQmFzZVN0cmluZyA6IHB1
YmxpYyBSZXAgeworICAgICAgICAgICAgVGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQ8VUNo
YXI+KiByYXdSZWZDb3VudGVkTWFsbG9jZWQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9j
YXN0PFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPio+KG1fYmFzZVN0cmluZ09y
UmVmQ291bnRlZE1hbGxvY2VkKTsgfQogCi0gICAgICAgICAgICAvLyBwb3RlbnRpYWxseSBzaGFy
ZWQgZGF0YS4gMCBpZiBiYWNrZWQgdXAgYnkgYSBiYXNlIHN0cmluZy4KKyAgICAgICAgICAgIFBh
c3NSZWZQdHI8VGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+ID4gcmVmQ291bnRl
ZE1hbGxvY2VkKCk7CisgICAgICAgICAgICBib29sIHRyeVRvTWFrZVVuc2hhcmVkKCk7CisgICAg
ICAgICAgICBib29sIHRyeVRvTWFrZU1vZGlmaWFibGUoKTsKKworICAgICAgICAgICAgLy8gcG90
ZW50aWFsbHkgc2hhcmVkIGRhdGEuCiAgICAgICAgICAgICBVQ2hhciogYnVmOwotICAgICAgICAg
ICAgaW50IHVzZWRDYXBhY2l0eTsKLSAgICAgICAgICAgIGludCBjYXBhY2l0eTsKLSAgICAgICAg
ICAgIGludCB1c2VkUHJlQ2FwYWNpdHk7CiAgICAgICAgICAgICBpbnQgcHJlQ2FwYWNpdHk7Cisg
ICAgICAgICAgICBpbnQgdXNlZFByZUNhcGFjaXR5OworICAgICAgICAgICAgaW50IGNhcGFjaXR5
OworICAgICAgICAgICAgaW50IHVzZWRDYXBhY2l0eTsKIAotICAgICAgICAgICAgc3RhdGljIFJl
cCBudWxsOwotICAgICAgICAgICAgc3RhdGljIFJlcCBlbXB0eTsKKyAgICAgICAgICAgIHNpemVf
dCByZXBvcnRlZENvc3Q7CiAgICAgICAgIH07CiAKICAgICBwdWJsaWM6CkBAIC0xNDIsOCArMTY5
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFVTdHJpbmcoY29uc3QgVmVjdG9yPFVD
aGFyPiYgYnVmZmVyKTsKIAotICAgICAgICB+VVN0cmluZygpCisgICAgICAgIFVTdHJpbmcoUGFz
c1JlZlB0cjxSZXA+IHIpCisgICAgICAgICAgICA6IG1fcmVwKHIpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX3JlcCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTcGVjaWFsIGNv
bnN0cnVjdG9yIGZvciBjYXNlcyB3aGVyZSB3ZSBvdmVyd3JpdGUgYW4gb2JqZWN0IGluIHBsYWNl
LgpAQCAtMTUyLDYgKzE4MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICB9CiAKKyAgICAgICAgflVTdHJpbmcoKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAg
ICBzdGF0aWMgVVN0cmluZyBmcm9tKGludCk7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGZyb20o
dW5zaWduZWQgaW50KTsKICAgICAgICAgc3RhdGljIFVTdHJpbmcgZnJvbShsb25nKTsKQEAgLTIw
NCw3ICsyMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBjb25zdCBVQ2hhciogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwLT5kYXRhKCk7IH0KIAotICAgICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlcCA9PSAmUmVwOjpudWxsKTsgfQorICAgICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlcCA9PSAmUmVwOjpudWxsKCkpOyB9CiAgICAg
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICghbV9yZXAtPmxlbik7IH0KIAogICAg
ICAgICBib29sIGlzOEJpdCgpIGNvbnN0OwpAQCAtMjMwLDI4ICsyNjMsMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgVVN0cmluZyBzdWJzdHIoaW50IHBvcyA9IDAsIGludCBsZW4gPSAt
MSkgY29uc3Q7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IFVTdHJpbmcmIG51bGwoKTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IFVTdHJpbmcmIG51bGwoKSB7IHJldHVybiAqbnVsbFVTdHJpbmc7IH0K
IAogICAgICAgICBSZXAqIHJlcCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwLmdldCgpOyB9CiAgICAg
ICAgIHN0YXRpYyBSZXAqIG51bGxSZXAoKTsKIAotICAgICAgICBVU3RyaW5nKFBhc3NSZWZQdHI8
UmVwPiByKQotICAgICAgICAgICAgOiBtX3JlcChyKQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9yZXApOwotICAgICAgICB9Ci0KICAgICAgICAgc2l6ZV90IGNvc3QoKSBjb25zdDsK
IAorICAgICAgICBQYXNzUmVmUHRyPFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFy
PiA+IHJlZkNvdW50ZWRNYWxsb2NlZCgpIHsgcmV0dXJuIG1fcmVwLT5iYXNlU3RyaW5nKCktPnJl
ZkNvdW50ZWRNYWxsb2NlZCgpOyB9CisKICAgICBwcml2YXRlOgotICAgICAgICBpbnQgdXNlZENh
cGFjaXR5KCkgY29uc3Q7Ci0gICAgICAgIGludCB1c2VkUHJlQ2FwYWNpdHkoKSBjb25zdDsKICAg
ICAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShpbnQgcmVxdWlyZWRMZW5ndGgpOwogICAgICAgICB2
b2lkIGV4cGFuZFByZUNhcGFjaXR5KGludCByZXF1aXJlZFByZUNhcCk7CiAgICAgICAgIHZvaWQg
bWFrZU51bGwoKTsKIAogICAgICAgICBSZWZQdHI8UmVwPiBtX3JlcDsKKyAgICAgICAgc3RhdGlj
IFVTdHJpbmcqIG51bGxVU3RyaW5nOwogCisgICAgICAgIGZyaWVuZCB2b2lkIGluaXRpYWxpemVV
U3RyaW5nKCk7CiAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgVVN0cmluZyYs
IGNvbnN0IFVTdHJpbmcmKTsKICAgICAgICAgZnJpZW5kIFBhc3NSZWZQdHI8UmVwPiBjb25jYXRl
bmF0ZShSZXAqLCBSZXAqKTsgLy8gcmV0dXJucyAwIGlmIG91dCBvZiBtZW1vcnkKICAgICB9OwpA
QCAtMjk4LDE0ICszMjcsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBib29sIGVxdWFsKGNv
bnN0IFVTdHJpbmc6OlJlcCosIGNvbnN0IFVTdHJpbmc6OlJlcCopOwogCisgICAgaW5saW5lIFVD
aGFyKiBVU3RyaW5nOjpSZXA6OmRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgVVN0
cmluZzo6QmFzZVN0cmluZyogYmFzZSA9IGJhc2VTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGJh
c2UtPmJ1ZiArIGJhc2UtPnByZUNhcGFjaXR5ICsgb2Zmc2V0OworICAgIH0KKwogI2lmZGVmIE5E
RUJVRwogICAgIGlubGluZSB2b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNv
bnN0CiAgICAgewogICAgIH0KICNlbmRpZgogCisgICAgaW5saW5lIFBhc3NSZWZQdHI8VGhyZWFk
QXdhcmVSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+ID4gVVN0cmluZzo6QmFzZVN0cmluZzo6cmVm
Q291bnRlZE1hbGxvY2VkKCkKKyAgICB7CisgICAgICAgIC8vIEl0IG1ha2UgZG9lc24ndCBzZW5z
ZSB0byBzaGFyZSA8IDYgYnl0ZXMgb2YgZGF0YS4KKyAgICAgICAgQVNTRVJUKGxlbiA+IDIpOwor
ICAgICAgICBpZiAoIW1fYmFzZVN0cmluZ09yUmVmQ291bnRlZE1hbGxvY2VkKQorICAgICAgICAg
ICAgbV9iYXNlU3RyaW5nT3JSZWZDb3VudGVkTWFsbG9jZWQgPSBUaHJlYWRBd2FyZVJlZkNvdW50
ZWRNYWxsb2NlZDxVQ2hhcj46OmNyZWF0ZShidWYpLnJlbGVhc2VSZWYoKTsKKyAgICAgICAgcmV0
dXJuIHJhd1JlZkNvdW50ZWRNYWxsb2NlZCgpOworICAgIH0KKwogICAgIGlubGluZSBVU3RyaW5n
OjpVU3RyaW5nKCkKLSAgICAgICAgOiBtX3JlcCgmUmVwOjpudWxsKQorICAgICAgICA6IG1fcmVw
KCZSZXA6Om51bGwoKSkKICAgICB7CiAgICAgfQogCkBAIC0zMjgsOCArMzcyLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBpbmxpbmUgc2l6ZV90IFVTdHJpbmc6OmNvc3QoKSBjb25zdAogICAg
IHsKLSAgICAgICAgc2l6ZV90IGNhcGFjaXR5ID0gKG1fcmVwLT5iYXNlU3RyaW5nLT5jYXBhY2l0
eSArIG1fcmVwLT5iYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSkgKiBzaXplb2YoVUNoYXIpOwotICAg
ICAgICBzaXplX3QgcmVwb3J0ZWRDb3N0ID0gbV9yZXAtPmJhc2VTdHJpbmctPnJlcG9ydGVkQ29z
dDsKKyAgICAgICAgVVN0cmluZzo6QmFzZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5n
KCk7CisgICAgICAgIHNpemVfdCBjYXBhY2l0eSA9IChiYXNlLT5jYXBhY2l0eSArIGJhc2UtPnBy
ZUNhcGFjaXR5KSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHNpemVfdCByZXBvcnRlZENvc3Qg
PSBiYXNlLT5yZXBvcnRlZENvc3Q7CiAgICAgICAgIEFTU0VSVChjYXBhY2l0eSA+PSByZXBvcnRl
ZENvc3QpOwogCiAgICAgICAgIHNpemVfdCBjYXBhY2l0eURlbHRhID0gY2FwYWNpdHkgLSByZXBv
cnRlZENvc3Q7CkBAIC0zMzcsNyArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlm
IChjYXBhY2l0eURlbHRhIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5TaGFyZVNpemUpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmctPnJlcG9ydGVk
Q29zdCA9IGNhcGFjaXR5OworICAgICAgICBiYXNlLT5yZXBvcnRlZENvc3QgPSBjYXBhY2l0eTsK
IAogICAgICAgICByZXR1cm4gY2FwYWNpdHlEZWx0YTsKICAgICB9CkBAIC0zNDcsNiArMzkyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEpTQzo6VVN0
cmluZzo6UmVwKiBrZXkpIHsgcmV0dXJuIGtleS0+Y29tcHV0ZWRIYXNoKCk7IH0KICAgICB9Owog
CisgICAgdm9pZCBpbml0aWFsaXplVVN0cmluZygpOwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMzc3LDkgKzQyMyw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UmVmUHRyPEpTQzo6VVN0cmluZzo6UmVwPiA+
IHsKICAgICAgICAgdHlwZWRlZiBTdHJIYXNoPFJlZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4gPiBI
YXNoOwotCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLSNlbmRpZgorI2VuZGlmIC8v
IFVTdHJpbmdfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40NzdlODkzCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUv
d3RmL1B0ckFuZEZsYWdzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFB0ckFuZEZsYWdzX2gK
KyNkZWZpbmUgUHRyQW5kRmxhZ3NfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgRmxhZ0VudW0+
IGNsYXNzIFB0ckFuZEZsYWdzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFB0ckFuZEZsYWdzKCkg
OiBtX3B0ckFuZEZsYWdzKDApIHt9CisKKyAgICAgICAgYm9vbCBpc0ZsYWdTZXQoRmxhZ0VudW0g
ZmxhZ051bWJlcikgY29uc3QgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyByZXR1cm4gbV9wdHJB
bmRGbGFncyAmICgxIDw8IGZsYWdOdW1iZXIpOyB9CisgICAgICAgIHZvaWQgc2V0RmxhZyhGbGFn
RW51bSBmbGFnTnVtYmVyKSB7IEFTU0VSVChmbGFnTnVtYmVyIDwgMik7IG1fcHRyQW5kRmxhZ3Mg
fD0gKDEgPDwgZmxhZ051bWJlcik7fQorICAgICAgICB2b2lkIGNsZWFyRmxhZyhGbGFnRW51bSBm
bGFnTnVtYmVyKSB7IEFTU0VSVChmbGFnTnVtYmVyIDwgMik7IG1fcHRyQW5kRmxhZ3MgJj0gfigx
IDw8IGZsYWdOdW1iZXIpO30KKyAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUKj4obV9wdHJBbmRGbGFncyAmIH4zKTsgfQorICAgICAgICB2b2lkIHNldChU
KiBwdHIpIHsgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRyKSAmIDMpKTsg
bV9wdHJBbmRGbGFncyA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHB0cikgfCAobV9wdHJB
bmRGbGFncyAmIDMpO30KKyAgICBwcml2YXRlOgorICAgICAgICBpbnRwdHJfdCBtX3B0ckFuZEZs
YWdzOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQdHJBbmRGbGFn
czsKKworI2VuZGlmIC8vIFB0ckFuZEZsYWdzX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi9SZWZDb3VudGVkLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oCmluZGV4
IGFjOGUxNjcuLmM3YWI4NDAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3Vu
dGVkLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaApAQCAtNDksNiArNDks
OSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgdGVtcGxhdGU8Y2xhc3MgVD4K
KyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQ7CisKICAgICBS
ZWZDb3VudGVkQmFzZShpbnQgaW5pdGlhbFJlZkNvdW50KQogICAgICAgICA6IG1fcmVmQ291bnQo
aW5pdGlhbFJlZkNvdW50KQogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvU2hhcmVkRGF0
YUhvbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiODA2MjMKLS0t
IC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvU2hhcmVkRGF0YUhvbGRlci5oCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcmVkRGF0YUhvbGRlcl9oCisjZGVmaW5lIFNoYXJl
ZERhdGFIb2xkZXJfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworICAgIC8vIFVzZWQgdG8gYWxsb3dpbmcgc2hhcmluZyBkYXRhIGFjcm9zcyBj
bGFzc2VzIGFuZCB0aHJlYWRzIChsaWtlIFRocmVhZGVkU2FmZVNoYXJlZCkuCisgICAgLy8KKyAg
ICAvLyBXaHkgbm90IGp1c3QgdXNlIFRocmVhZFNhZmVTaGFyZWQ/CisgICAgLy8gVGhyZWFkU2Fm
ZVNoYXJlZCBjYW4gaGF2ZSBhIHNpZ2luaWZpY2FudCBwZXJmIGltcGFjdCB3aGVuIHVzZWQgaW4g
bG93IGxldmVsIGNsYXNzZXMKKyAgICAvLyAobGlrZSBVU3RyaW5nKSB0aGF0IGdldCByZWYvZGVy
ZWYnZWQgYSBsb3QuIFRoaXMgY2xhc3MgaGFzIHRoZSBiZW5lZml0IG9mIGRvaW5nIGZhc3QgcmVm
CisgICAgLy8gY291bnRzIGxpa2UgUmVmUHRyIHdoZW5ldmVyIHBvc3NpYmxlLCBidXQgaXQgaGFz
IHRoZSBkb3duc2lkZSB0aGF0IHlvdSBuZWVkIHRvIGNvcHkgaXQKKyAgICAvLyB0byB1c2UgaXQg
b24gYW5vdGhlciB0aHJlYWQuCisgICAgLy8KKyAgICAvLyBJcyB0aGlzIGNsYXNzIHRocmVhZHNh
ZmU/CisgICAgLy8gV2hpbGUgZWFjaCBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgaXMgbm90IHRocmVh
ZHNhZmUsIHRoZSBjb3BpZWQgaW5zdGFuY2UgaXMgdGhyZWFkc2FmZQorICAgIC8vIHdpdGggcmVz
cGVjdCB0byB0aGUgb3JpZ2luYWwgYW5kIGFueSBvdGhlciBjb3BpZXMuICBUaGUgdW5kZXJseWlu
ZyBtX2RhdGEgaXMgam9pbnRseQorICAgIC8vIG93bmVkIGJ5IHRoZSBvcmlnaW5hbCBpbnN0YW5j
ZSBhbmQgYWxsIGNvcGllcy4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIGNsYXNzIFRocmVh
ZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgLy8gZGF0YSBpcyBmcmVlZCB1c2luZyAqZmFzdEZyZWUqLgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUaHJlYWRBd2FyZVJlZkNvdW50ZWRNYWxsb2NlZDxUPiA+IGNyZWF0ZShjb25z
dCBUKiBkYXRhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRo
cmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFQ+KGRhdGEsIDApKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8VGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQ8VD4gPiBjb3B5
Rm9yQW5vdGhlclRocmVhZCgpOworCisgICAgICAgIHZvaWQgcmVmKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKCFtX3RocmVhZElkIHx8IG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVh
ZCgpKTsKKyAgICAgICAgICAgIG1fcmVmQ291bnRlci5yZWYoKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICAgICAvLyBOb3RlIHRoZSB0aHJlYWQgYXMgc29vbiBhcyB0aGUgcmVmIGNvdW50IGdl
dHMgdG8gMi4KKyAgICAgICAgICAgIC8vIFRoaXMgZ2V0cyBjcmVhdGVkIHdpdGggYSByZWYgY291
bnQgb2YgMSBhbmQgdGhlbiBwYXNzZWQKKyAgICAgICAgICAgIC8vIHRvIGFub3RoZXIgdGhyZWFk
IHdoZXJlIHRvIHJlZiBjb3VudCBnZXQgaW5jcmVhc2VkLgorICAgICAgICAgICAgaWYgKCFtX3Ro
cmVhZElkICYmIG1fcmVmQ291bnRlci5yZWZDb3VudCgpID09IDIpCisgICAgICAgICAgICAgICAg
bV90aHJlYWRJZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBkZXJlZigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV90aHJlYWRJ
ZCB8fCBtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgICAgICBpZiAobV9y
ZWZDb3VudGVyLmRlcmVmQmFzZSgpKSB7CisgICAgICAgICAgICAgICAgdGhyZWFkU2FmZURlcmVm
KCk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBUKiByZWxlYXNlRGF0YSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghaXNTaGFyZWQoKSk7CisKKyAgICAgICAgICAgIGNvbnN0IFQqIGRhdGEgPSBt
X2RhdGE7CisgICAgICAgICAgICBtX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuIGRhdGE7
CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzU2hhcmVkKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50ZXIuaGFzT25lUmVmKCkgfHwgZGF0YUFjY2Vz
c011c3RCZVRocmVhZFNhZmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZGF0YUFjY2Vz
c011c3RCZVRocmVhZFNhZmUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV90aHJlYWRTYWZlUmVmQ291bnRlciAmJiAhbV90aHJlYWRTYWZlUmVmQ291bnRlci0+aGFzT25l
UmVmKCk7CisgICAgICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBtYXlCZVBh
c3NlZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbV90aHJlYWRJZCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWZDb3VudGVyLmhhc09uZVJl
ZigpOworICAgICAgICB9CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFRocmVhZEF3
YXJlUmVmQ291bnRlZE1hbGxvY2VkKGNvbnN0IFQqIGRhdGEsIFRocmVhZFNhZmVTaGFyZWRCYXNl
KiB0aHJlYWRlZENvdW50ZXIpCisgICAgICAgICAgICA6IG1fcmVmQ291bnRlcigxKQorICAgICAg
ICAgICAgLCBtX3RocmVhZFNhZmVSZWZDb3VudGVyKHRocmVhZGVkQ291bnRlcikKKyAgICAgICAg
ICAgICwgbV9kYXRhKGRhdGEpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgLCBtX3RocmVh
ZElkKDApCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgflRocmVhZEF3
YXJlUmVmQ291bnRlZE1hbGxvY2VkKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZGF0
YSAmJiAhbV90aHJlYWRTYWZlUmVmQ291bnRlcikKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShj
b25zdF9jYXN0PFQqPihtX2RhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdGhyZWFk
U2FmZURlcmVmKCk7CisKKyAgICAgICAgUmVmQ291bnRlZEJhc2UgbV9yZWZDb3VudGVyOworICAg
ICAgICBUaHJlYWRTYWZlU2hhcmVkQmFzZSogbV90aHJlYWRTYWZlUmVmQ291bnRlcjsKKyAgICAg
ICAgY29uc3QgVCogbV9kYXRhOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElkOworI2VuZGlmCisgICAgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIFQ+
CisgICAgUGFzc1JlZlB0cjxUaHJlYWRBd2FyZVJlZkNvdW50ZWRNYWxsb2NlZDxUPiA+IFRocmVh
ZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFQ+Ojpjb3B5Rm9yQW5vdGhlclRocmVhZCgpCisgICAg
eworICAgICAgICBpZiAobV90aHJlYWRTYWZlUmVmQ291bnRlcikKKyAgICAgICAgICAgIG1fdGhy
ZWFkU2FmZVJlZkNvdW50ZXItPnJlZigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Ro
cmVhZFNhZmVSZWZDb3VudGVyID0gbmV3IFRocmVhZFNhZmVTaGFyZWRCYXNlKDIpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFQ+KG1f
ZGF0YSwgbV90aHJlYWRTYWZlUmVmQ291bnRlcikpOworICAgIH0KKworCisgICAgdGVtcGxhdGU8
Y2xhc3MgVD4KKyAgICB2b2lkIFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFQ+Ojp0aHJl
YWRTYWZlRGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIg
JiYgbV90aHJlYWRTYWZlUmVmQ291bnRlci0+ZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSBtX3RocmVhZFNhZmVSZWZDb3VudGVyOworICAgICAgICAgICAgbV90aHJlYWRTYWZlUmVm
Q291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpUaHJlYWRBd2FyZVJlZkNvdW50ZWRNYWxsb2NlZDsKKworI2VuZGlmIC8vIFNoYXJl
ZERhdGFIb2xkZXJfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5o
IGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCmluZGV4IDE1NjAxM2QuLjQxOWZhNjAg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKQEAgLTIwMSw5ICsyMDEsOSBAQCBpbmxpbmUgaW50IGF0
b21pY0RlY3JlbWVudChpbnQgdm9sYXRpbGUqIGFkZGVuZCkgeyByZXR1cm4gX19nbnVfY3h4Ojpf
X2V4Y2hhbmdlXwogCiAjZW5kaWYKIAotdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgVGhyZWFkU2Fm
ZVNoYXJlZCA6IE5vbmNvcHlhYmxlIHsKK2NsYXNzIFRocmVhZFNhZmVTaGFyZWRCYXNlIDogTm9u
Y29weWFibGUgewogcHVibGljOgotICAgIFRocmVhZFNhZmVTaGFyZWQoaW50IGluaXRpYWxSZWZD
b3VudCA9IDEpCisgICAgVGhyZWFkU2FmZVNoYXJlZEJhc2UoaW50IGluaXRpYWxSZWZDb3VudCA9
IDEpCiAgICAgICAgIDogbV9yZWZDb3VudChpbml0aWFsUmVmQ291bnQpCiAgICAgewogICAgIH0K
QEAgLTIxOCwyMCArMjE4LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBk
ZXJlZigpCi0gICAgewotI2lmIFVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVEKQotICAgICAg
ICBpZiAoYXRvbWljRGVjcmVtZW50KCZtX3JlZkNvdW50KSA8PSAwKQotI2Vsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICAgICAg
LS1tX3JlZkNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3JlZkNvdW50IDw9IDApCi0j
ZW5kaWYKLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Ci0gICAgfQot
CiAgICAgYm9vbCBoYXNPbmVSZWYoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkg
PT0gMTsKQEAgLTI0NSw2ICsyMzEsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50IGNvbnN0IHZvbGF0aWxlICY+KG1fcmVmQ291bnQpOwogICAgIH0KIAorcHJvdGVj
dGVkOgorICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEF3YXJl
UmVmQ291bnRlZE1hbGxvY2VkOworCisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVy
IHNob3VsZCBiZSBmcmVlZCBvciBub3QuCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyNp
ZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKKyAgICAgICAgaWYgKGF0b21pY0RlY3Jl
bWVudCgmbV9yZWZDb3VudCkgPD0gMCkKKyNlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgICAgIC0tbV9yZWZDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobV9yZWZDb3VudCA8PSAwKQorI2VuZGlmCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBpbnQgbV9yZWZDb3VudDsKICNpZiAhVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQp
CkBAIC0yNTIsNiArMjU4LDIxIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKwordGVtcGxhdGU8
Y2xhc3MgVD4gY2xhc3MgVGhyZWFkU2FmZVNoYXJlZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
QmFzZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2FmZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50
ID0gMSkKKyAgICAgICAgOiBUaHJlYWRTYWZlU2hhcmVkQmFzZShpbml0aWFsUmVmQ291bnQpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVm
QmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9
Cit9OworCiAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhy
ZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KIC8vIERhcndpbiBpcyBhbiBl
eGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVh
ZCwgdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJh
bnQuCiB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRH
bHVlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwppbmRleCBiZDBmZTVkLi4w
MmY4ZTMyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNj
cmlwdEdsdWUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDEtMDcgIERhdmlkIExl
dmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzE3NQorCisgICAgICAgIEFkZGVkIGZvcndhcmRpbmcgaGVhZGVycy4KKworICAgICAgICAq
IEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oOiBBZGRlZC4KKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy93dGYvU2hhcmVkRGF0YUhvbGRlci5oOiBBZGRlZC4KKwogMjAwOS0w
MS0wNSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSdWJiZXIgU3RhbXBlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRH
bHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oIGIvSmF2YVNjcmlwdEdsdWUv
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMzhiZGZiNAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRHbHVl
L0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9QdHJBbmRGbGFncy5oPgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NoYXJlZERhdGFIb2xkZXIuaCBiL0phdmFTY3Jp
cHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YTllZgotLS0gL2Rldi9udWxsCisrKyBiL0ph
dmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmgKQEAg
LTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NoYXJlZERhdGFIb2xkZXIuaD4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWQ1NDQ5Ny4uN2FhOWRmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wMS0wNyAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MTc1CisKKyAgICAgICAgTWFkZSBTdHJpbmdJbXBsOjpjb3B5IGFuZCBXZWJDb3JlOjpTdHJpbmc6
Om9wZXJhdG9yIFVTdHJpbmcgcmUtdXNlIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIGJ1ZmZlciwg
c28gbm8gYWRkaXRpb25hbCBhbGxvY2F0aW9uL2NvcHkgbmVlZHMgdG8gYmUgZG9uZSBmb3IgdGhl
c2UgY29kZSBwYXRocy4KKworICAgICAgICBObyBvYnNlcnZhYmxlIGNoYW5nZSBpbiBiZWhhdmlv
ciwgc28gbm8gdGVzdC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QdHJBbmRG
bGFncy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvU2hhcmVkRGF0
YUhvbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmFkZCk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9TdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5n
SW1wbDo6U3RyaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp+U3RyaW5n
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nSW1wbDo6dXN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJ
bXBsOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNoYXJlZERhdGFIb2xk
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6aGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6Oik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpp
blRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNldEluVGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6cmF3U2hhcmVkRGF0YUhvbGRlcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzZXRTaGFyZWREYXRhSG9sZGVyKToKKwogMjAwOS0wMS0w
NiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmIEdhcmVuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUHRy
QW5kRmxhZ3MuaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiZGZiNAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgKQEAgLTAs
MCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1B0ckFuZEZsYWdzLmg+CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmggYi9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaGFyZWREYXRhSG9sZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YTllZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NoYXJlZERhdGFIb2xkZXIuaApAQCAtMCwwICsx
IEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2hhcmVkRGF0YUhvbGRlci5oPgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAppbmRleCA1ZjlhYmZkLi40OWQ2NjdmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgVUNoYXIqIHMpCiAK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoU3RyaW5nSW1wbCogcikK
IHsKLSAgICBpZiAoIXIgfHwgci0+bV9pblRhYmxlKQorICAgIGlmICghciB8fCByLT5pblRhYmxl
KCkpCiAgICAgICAgIHJldHVybiByOwogCiAgICAgaWYgKHItPmxlbmd0aCgpID09IDApCkBAIC0y
MTQsNyArMjE0LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChT
dHJpbmdJbXBsKiByKQogICAgIAogICAgIFN0cmluZ0ltcGwqIHJlc3VsdCA9ICpzdHJpbmdUYWJs
ZSgpLmFkZChyKS5maXJzdDsKICAgICBpZiAocmVzdWx0ID09IHIpCi0gICAgICAgIHItPm1faW5U
YWJsZSA9IHRydWU7CisgICAgICAgIHItPnNldEluVGFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCmluZGV4IGU0MGMzYzYuLjg3NTFkMDUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCkBAIC02MTgsMjEgKzYxOCwyMSBAQCBTdHJpbmc6OlN0
cmluZyhjb25zdCBJZGVudGlmaWVyJiBzdHIpCiB7CiAgICAgaWYgKHN0ci5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgp
LCBzdHIuc2l6ZSgpKTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLnVzdHJp
bmcoKSk7CiB9CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IFVTdHJpbmcmIHN0cikKIHsKICAgICBp
ZiAoc3RyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1w
bDo6Y3JlYXRlKHN0ci5kYXRhKCksIHN0ci5zaXplKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0lt
cGw6OmNyZWF0ZShzdHIpOwogfQogCiBTdHJpbmc6Om9wZXJhdG9yIFVTdHJpbmcoKSBjb25zdAog
ewogICAgIGlmICghbV9pbXBsKQogICAgICAgICByZXR1cm4gVVN0cmluZygpOwotICAgIHJldHVy
biBVU3RyaW5nKG1faW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpKTsKKyAgICBy
ZXR1cm4gbV9pbXBsLT51c3RyaW5nKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0ltcGwuY3BwCmluZGV4IDA1NTZmOGUuLjkxZGRjMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVz
aW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluTGVuZ3RoVG9TaGFyZSA9IDEwOyAvLyAyMCBieXRlcyBzZWVtZWQgbGlr
ZSBhIHJlYXNvbmFibGUgbnVtYmVyIGhlcmUgZ2l2ZW4gdGhhdCBkb2luZyB0aGUgc2hhcmluZyBp
cyBhdCBsZWFzdCAxMiBieXRlcy4KIAogc3RhdGljIGlubGluZSBVQ2hhciogbmV3VUNoYXJWZWN0
b3IodW5zaWduZWQgbikKIHsKQEAgLTU5LDggKzYwLDYgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1w
bCgpCiAgICAgOiBtX2xlbmd0aCgwKQogICAgICwgbV9kYXRhKDApCiAgICAgLCBtX2hhc2goMCkK
LSAgICAsIG1faW5UYWJsZShmYWxzZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFj
dGVyKGZhbHNlKQogewogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1dGVkIHNv
IHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQogICAgIC8vIHdp
dGggaW1wdW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGlzIG5l
dmVyIGVudGVyZWQgaW50bwpAQCAtNzQsOCArNzMsNiBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBs
KCkKIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgOiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2hhc2go
MCkKLSAgICAsIG1faW5UYWJsZShmYWxzZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hh
cmFjdGVyKGZhbHNlKQogewogICAgIFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3Ro
KTsKICAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CkBAIC04NSw5ICs4Miw4IEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiBpbmxpbmUgU3RyaW5nSW1wbDo6U3Ry
aW5nSW1wbChjb25zdCBTdHJpbmdJbXBsJiBzdHIsIFdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIpCiAgICAgOiBtX2xlbmd0aChzdHIubV9sZW5ndGgpCiAgICAgLCBtX2hhc2goc3RyLm1faGFz
aCkKLSAgICAsIG1faW5UYWJsZShmYWxzZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hh
cmFjdGVyKHRydWUpCiB7CisgICAgbV9yZWZDb3VudGVkTWFsbG9jZWRBbmRGbGFncy5zZXRGbGFn
KEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7CiAgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hh
clZlY3RvcihzdHIubV9sZW5ndGggKyAxKTsKICAgICBtZW1jcHkoZGF0YSwgc3RyLm1fZGF0YSwg
c3RyLm1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgZGF0YVtzdHIubV9sZW5ndGhdID0g
MDsKQEAgLTk3LDggKzkzLDYgQEAgaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3Qg
U3RyaW5nSW1wbCYgc3RyLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGUKIGlubGluZSBTdHJp
bmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaCgwKQotICAgICwgbV9pblRh
YmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFsc2UpCiB7
CiAgICAgQVNTRVJUKGNoYXJhY3RlcnMpOwogICAgIEFTU0VSVChsZW5ndGgpOwpAQCAtMTE1LDgg
KzEwOSw2IEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgsIEFkb3B0QnVmZmVyKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQog
ICAgICwgbV9kYXRhKGNoYXJhY3RlcnMpCiAgICAgLCBtX2hhc2goMCkKLSAgICAsIG1faW5UYWJs
ZShmYWxzZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogewog
ICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKICAgICBBU1NFUlQobGVuZ3RoKTsKQEAgLTEyNiwxMyAr
MTE4LDEyIEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgsIEFkb3B0QnVmZmVyKQogU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQog
ICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9oYXNoKGhhc2gpCi0gICAgLCBtX2luVGFi
bGUodHJ1ZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogewog
ICAgIEFTU0VSVChoYXNoKTsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAgICAgQVNTRVJUKGxl
bmd0aCk7CiAKKyAgICBtX3JlZkNvdW50ZWRNYWxsb2NlZEFuZEZsYWdzLnNldEZsYWcoSW5UYWJs
ZSk7CiAgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOwogICAgIG1lbWNw
eShkYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICBtX2RhdGEg
PSBkYXRhOwpAQCAtMTQyLDEzICsxMzMsMTIgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQogU3Ry
aW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIGhhc2gpCiAgICAgOiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2hhc2go
aGFzaCkKLSAgICAsIG1faW5UYWJsZSh0cnVlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxD
aGFyYWN0ZXIoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc2gpOwogICAgIEFTU0VSVChjaGFyYWN0
ZXJzKTsKICAgICBBU1NFUlQobGVuZ3RoKTsKIAorICAgIG1fcmVmQ291bnRlZE1hbGxvY2VkQW5k
RmxhZ3Muc2V0RmxhZyhJblRhYmxlKTsKICAgICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9y
KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewog
ICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwpAQCAtMTU5LDkgKzE0OSwx
NCBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgaGFzaCkKIAogU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQog
ewotICAgIGlmIChtX2luVGFibGUpCisgICAgaWYgKGluVGFibGUoKSkKICAgICAgICAgQXRvbWlj
U3RyaW5nOjpyZW1vdmUodGhpcyk7Ci0gICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKKwor
ICAgIFRocmVhZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiogcmVmQ291bnRlZE1hbGxv
Y2VkID0gcmF3UmVmQ291bnRlZE1hbGxvY2VkKCk7CisgICAgaWYgKHJlZkNvdW50ZWRNYWxsb2Nl
ZCkKKyAgICAgICAgcmVmQ291bnRlZE1hbGxvY2VkLT5kZXJlZigpOworICAgIGVsc2UKKyAgICAg
ICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKIH0KIAogU3RyaW5nSW1wbCogU3RyaW5nSW1w
bDo6ZW1wdHkoKQpAQCAtOTc4LDYgKzk3MywyMyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHJpbmdJbXBsKHN0cmluZywgbGVuZ3RoKSk7CiB9CiAKKyNpZiBVU0UoSlNDKQorUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgSlNDOjpVU3RyaW5n
JiBzdHIpCit7CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgpLCBzdHIu
c2l6ZSgpKTsKK30KKworSlNDOjpVU3RyaW5nIFN0cmluZ0ltcGw6OnVzdHJpbmcoKQoreworICAg
IGlmIChyYXdSZWZDb3VudGVkTWFsbG9jZWQoKSB8fCBtX2xlbmd0aCA+PSBtaW5MZW5ndGhUb1No
YXJlKSB7CisgICAgICAgIGVuc3VyZVJlZkNvdW50ZWRNYWxsb2NlZCgpOworICAgICAgICByZXR1
cm4gSlNDOjpVU3RyaW5nOjpSZXA6OnNoYXJlKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpLCBt
X2xlbmd0aCwgcmF3UmVmQ291bnRlZE1hbGxvY2VkKCkpOworICAgIH0KKworICAgIHJldHVybiBK
U0M6OlVTdHJpbmcobV9kYXRhLCBtX2xlbmd0aCk7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVy
KGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
cmluZ0ltcGwoc3RyaW5nLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkpKTsKQEAgLTk4
NSw3ICs5OTcsMjUgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVX
aXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmkKIAogUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpjb3B5KCkKIHsKKyAgICBpZiAocmF3UmVmQ291bnRlZE1hbGxv
Y2VkKCkgfHwgbV9sZW5ndGggPj0gbWluTGVuZ3RoVG9TaGFyZSkgeworICAgICAgICBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGltcGwgPSBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChjb25zdF9jYXN0
PFVDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgsIEFkb3B0QnVmZmVyKCkpKTsKKyAgICAgICAgLy8g
Y29weSgpIG1heSBiZSBjYWxsZWQgb24gYW5vdGhlciB0aHJlYWQgZnJvbSB3aGVyZSB0aGUgc3Ry
aW5nIGlzIG5vcm1hbGx5IGFjY2Vzc2VkLCBzbyBiZSBjYXJlZnVsIG5vdAorICAgICAgICAvLyB0
byBjaGFuZ2Ugc3RhdGUgaW4gU3RyaW5nIGluIGhlcmUgKG90aGVyIHRoYW4gdG8gZW5zdXJlUmVm
Q291bnRlZE1hbGxvY2VkIHdoaWNoIHNob3VsZCBhbHJlYWR5IGJlIHNldAorICAgICAgICAvLyBp
ZiB0aGlzIGlzIGJlaW5nIHVzZWQgaW4gYSBjcm9zcyB0aHJlYWQgbWFubmVyKS4KKyAgICAgICAg
ZW5zdXJlUmVmQ291bnRlZE1hbGxvY2VkKCk7CisgICAgICAgIGltcGwtPnNldFJlZkNvdW50ZWRN
YWxsb2NlZChyYXdSZWZDb3VudGVkTWFsbG9jZWQoKS0+Y29weUZvckFub3RoZXJUaHJlYWQoKSk7
CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKwogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKSk7CiB9CiAKK3ZvaWQgU3RyaW5nSW1wbDo6ZW5z
dXJlUmVmQ291bnRlZE1hbGxvY2VkKCkKK3sKKyAgICAvLyBJdCBtYWtlIGRvZXNuJ3Qgc2Vuc2Ug
dG8gc2hhcmVkIDQgYnl0ZXMgb2YgZGF0YS4KKyAgICBBU1NFUlQobV9sZW5ndGggPiAyKTsKKyAg
ICBpZiAoIXJhd1JlZkNvdW50ZWRNYWxsb2NlZCgpKQorICAgICAgICBzZXRSZWZDb3VudGVkTWFs
bG9jZWQoVGhyZWFkQXdhcmVSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+OjpjcmVhdGUobV9kYXRh
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1w
bC5oCmluZGV4IDlkYTEzNmYuLmJjZjZlNTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aApAQCAtMjMsOCArMjMsMTIgQEAKICNkZWZpbmUgU3RyaW5nSW1wbF9oCiAKICNpbmNsdWRlIDxs
aW1pdHMuaD4KKyNpZiBVU0UoSlNDKQorI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgorI2Vu
ZGlmCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9QdHJBbmRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNv
ZGUuaD4KQEAgLTc2LDYgKzgwLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBs
ZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBj
aGFyKik7CisjaWYgVVNFKEpTQykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBj
cmVhdGUoY29uc3QgSlNDOjpVU3RyaW5nJik7CisjZW5kaWYKIAogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoY29uc3Qg
U3RyaW5nSW1wbCYpOwogCkBAIC04Niw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycygpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKLSAgICBib29sIGhhc1Rlcm1pbmF0aW5nTnVsbENoYXJh
Y3RlcigpIHsgcmV0dXJuIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOyB9CisgICAgYm9v
bCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50
ZWRNYWxsb2NlZEFuZEZsYWdzLmlzRmxhZ1NldChIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIp
OyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgeyBpZiAobV9oYXNoID09IDApIG1faGFzaCA9IGNv
bXB1dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9CiAgICAgdW5zaWdu
ZWQgZXhpc3RpbmdIYXNoKCkgY29uc3QgeyBBU1NFUlQobV9oYXNoKTsgcmV0dXJuIG1faGFzaDsg
fQpAQCAtMTM1LDYgKzE0MiwxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cik7CiAKKyNpZiBV
U0UoSlNDKQorICAgIEpTQzo6VVN0cmluZyB1c3RyaW5nKCk7CisjZW5kaWYKKwogICAgIGludCBm
aW5kKGNvbnN0IGNoYXIqLCBpbnQgaW5kZXggPSAwLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVl
KTsKICAgICBpbnQgZmluZChVQ2hhciwgaW50IGluZGV4ID0gMCk7CiAgICAgaW50IGZpbmQoQ2hh
cmFjdGVyTWF0Y2hGdW5jdGlvblB0ciwgaW50IGluZGV4ID0gMCk7CkBAIC0xNjUsMTEgKzE3Niwy
MSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBlbnVtIFN0cmluZ0ltcGxGbGFn
cyB7CisgICAgICAgIEluVGFibGUsCisgICAgICAgIEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rl
ciwKKyAgICB9OworICAgIGJvb2wgaW5UYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRl
ZE1hbGxvY2VkQW5kRmxhZ3MuaXNGbGFnU2V0KEluVGFibGUpOyB9CisgICAgdm9pZCBzZXRJblRh
YmxlKCkgeyByZXR1cm4gbV9yZWZDb3VudGVkTWFsbG9jZWRBbmRGbGFncy5zZXRGbGFnKEluVGFi
bGUpOyB9CisKKyAgICBUaHJlYWRBd2FyZVJlZkNvdW50ZWRNYWxsb2NlZDxVQ2hhcj4qIHJhd1Jl
ZkNvdW50ZWRNYWxsb2NlZCgpIHsgcmV0dXJuIG1fcmVmQ291bnRlZE1hbGxvY2VkQW5kRmxhZ3Mu
Z2V0KCk7IH0KKyAgICB2b2lkIHNldFJlZkNvdW50ZWRNYWxsb2NlZChQYXNzUmVmUHRyPFRocmVh
ZEF3YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiA+IGhvbGRlcikgeyBBU1NFUlQoIXJhd1Jl
ZkNvdW50ZWRNYWxsb2NlZCgpKTsgbV9yZWZDb3VudGVkTWFsbG9jZWRBbmRGbGFncy5zZXQoaG9s
ZGVyLnJlbGVhc2VSZWYoKSk7IH0KKyAgICB2b2lkIGVuc3VyZVJlZkNvdW50ZWRNYWxsb2NlZCgp
OworCiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTsKICAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaDsKLSAgICBib29sIG1faW5UYWJsZTsKLSAgICBib29s
IG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOworICAgIFB0ckFuZEZsYWdzPFRocmVhZEF3
YXJlUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiwgU3RyaW5nSW1wbEZsYWdzPiBtX3JlZkNvdW50
ZWRNYWxsb2NlZEFuZEZsYWdzOwogfTsKIAogYm9vbCBlcXVhbChTdHJpbmdJbXBsKiwgU3RyaW5n
SW1wbCopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26563</attachid>
            <date>2009-01-09 04:53:19 -0800</date>
            <delta_ts>2009-01-11 23:31:16 -0800</delta_ts>
            <desc>Part 1.  Some refactoring work.</desc>
            <filename>patch-for-bug23175_part1.txt</filename>
            <type>text/plain</type>
            <size>33194</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBmNzk0OTNmLi40ZDQ5NmQ1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMDktMDEtMDkgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NQorCisgICAgICAgIEFkZGVkIGEgdGVtcGxh
dGUgdG8gbWFrZSB0aGUgcG9pbnRlciBhbmQgZmxhZ3MgY29tYmluYXRpb24KKyAgICAgICAgaW4g
VVN0cmluZyBtb3JlIHJlYWRhYmxlIGFuZCBsZXNzIGVycm9yIHByb25lLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBQdHJBbmRG
bGFncy5oIChhbmQgc29ydGVkIHRoZSB4Y29kZSBwcm9qZWN0IGZpbGUpLgorCisgICAgICAgICog
cnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVUaHJl
YWRpbmdPbmNlKToKKyAgICAgICAgTWFkZSB0aGUgaW5pdCB0aHJlYWRpbmcgaW5pdGlhbGl6ZSB0
aGUgVVN0cmluZyBnbG9iYWxzLiAgQmVmb3JlCisgICAgICAgIHRoZXNlIHdlcmUgaW5pdGlsaXpl
ZCB1c2luZyB7fSBidXQgdGhhdCBiZWNhbWUgaGFyZGVyIGR1ZSB0byB0aGUKKyAgICAgICAgYWRk
aXRpb24gb2YgdGhpcyB0ZW1wYWx0ZSBjbGFzcy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpjcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheTo6YWRkKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuY3BwOgorICAgICAg
ICAoSlNDOjppbml0aWFsaXplU3RhdGljQmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OmluaXRp
YWxpemVVU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmNyZWF0ZUZyb21VVEY4KToKKyAgICAgICAgKEpTQzo6
Y3JlYXRlUmVwKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0cmluZyk6CisgICAgICAgIChK
U0M6OmNvbmNhdGVuYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6bWFrZU51bGwpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpu
dWxsUmVwKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6VVN0
cmluZzo6UmVwOjppZGVudGlmaWVyVGFibGUpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6
OnNldElkZW50aWZpZXJUYWJsZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6aXNTdGF0
aWMpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OnNldFN0YXRpYyk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6OlJlcDo6KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpudWxsKToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjplbXB0eSk6CisgICAgICAgIChKU0M6OlVTdHJp
bmc6OmlzTnVsbCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om51bGwpOgorICAgICAgICAoSlND
OjpVU3RyaW5nOjpVU3RyaW5nKToKKworICAgICAgICAqIHd0Zi9QdHJBbmRGbGFncy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6UHRyQW5kRmxhZ3M6OlB0ckFuZEZsYWdzKToKKyAgICAgICAgKFdU
Rjo6UHRyQW5kRmxhZ3M6OmlzRmxhZ1NldCk6CisgICAgICAgIChXVEY6OlB0ckFuZEZsYWdzOjpz
ZXRGbGFnKToKKyAgICAgICAgKFdURjo6UHRyQW5kRmxhZ3M6OmNsZWFyRmxhZyk6CisgICAgICAg
IChXVEY6OlB0ckFuZEZsYWdzOjpnZXQpOgorICAgICAgICAoV1RGOjpQdHJBbmRGbGFnczo6c2V0
KToKKyAgICAgICAgQSBzaW1wbGUgd2F5IHRvIGxheWVyIHRvZ2V0aGVyIGEgcG9pbnRlciBhbmQg
MiBmbGFncy4gIEl0IHJlbGllcyBvbiB0aGUgcG9pbnRlciBiZWluZyA0IGJ5dGUgYWxpZ25lZCwK
KyAgICAgICAgd2hpY2ggc2hvdWxkIGhhcHBlbiBmb3IgYWxsIGFsbG9jYXRvcnMgKGR1ZSB0byBh
bGlnbmluZyBwb2ludGVycywgaW50J3MsIGV0Yy4gb24gNCBieXRlIGJvdW5kYXJpZXMpLgorCiAy
MDA5LTAxLTA4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
OWY5OTNhYS4uMWU3ZDM4MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
YW0KKysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIxOSw2ICsyMTksNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvT3duUHRy
LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmggXAogCUphdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3MuaCBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi9SYW5kb21OdW1iZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlclNlZWQu
aCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggZDY1YTk3Ny4uOTI4MDFiNiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cApAQCAtMjEwLDcgKzIxMCw3IEBAIF9fWk4zSlNDN1By
b2ZpbGU1Zm9jdXNFUEtOU18xMVByb2ZpbGVOb2RlRQogX19aTjNKU0M3UHJvZmlsZTdleGNsdWRl
RVBLTlNfMTFQcm9maWxlTm9kZUUKIF9fWk4zSlNDN1Byb2ZpbGU3Zm9yRWFjaEVNTlNfMTFQcm9m
aWxlTm9kZUVGdnZFCiBfX1pOM0pTQzdVU3RyaW5nM1JlcDExY29tcHV0ZUhhc2hFUEt0aQotX19a
TjNKU0M3VVN0cmluZzNSZXA0bnVsbEUKK19fWk4zSlNDN1VTdHJpbmczUmVwMTRudWxsQmFzZVN0
cmluZ0UKIF9fWk4zSlNDN1VTdHJpbmczUmVwN2Rlc3Ryb3lFdgogX19aTjNKU0M3VVN0cmluZzRm
cm9tRWkKIF9fWk4zSlNDN1VTdHJpbmc0ZnJvbUVqCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKaW5kZXggOWM2ZTNlMC4uZWFkY2Qx
MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9X
VEYudmNwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYv
V1RGLnZjcHJvagpAQCAtMzU5LDYgKzM1OSwxMCBAQAogCQkJPg0KIAkJPC9GaWxlPg0KIAkJPEZp
bGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQdHJBbmRGbGFncy5oIg0KKwkJCT4NCisJ
CTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmFuZG9tTnVt
YmVyLmNwcCINCiAJCQk+DQogCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzE3YWVhOS4u
MTQ2OGMzYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOSw2ICszOSw3IEBACiAJCTA4OEZBNUJCMEVG
NzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg4RkE1QjkwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRv
bU51bWJlci5jcHAgKi87IH07CiAJCTA4OEZBNUJDMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21O
dW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
OEZBNUJBMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEUyNzlFOTBFRjgzQjEwMDA3REI1
MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDhFMjc5RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNl
ZWQuaCAqLzsgfTsKKwkJMEIxRjkyMUQwRjE3NTM1MDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjFGOTIxQjBG
MTc1MDJEMDAzNjQ2OEUgLyogUHRyQW5kRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNB
Y3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uY3BwICovOyB9Owog
CQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwRDE3RDYwRThBRDRBOTAwMENE
MTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDEyMTEzMTBBNDg3OTREMDA0ODAyNTUgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKQEAgLTQxOSw2ICs0MjAsNyBAQAogCQkwODhGQTVCOTBFRjc2RDQzMDA1NzhFNkYg
LyogUmFuZG9tTnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJhbmRvbU51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4OEZBNUJB
MEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmFuZG9tTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4RTI3OUU4MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmRvbU51bWJlclNlZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEIxRjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB0ckFuZEZsYWdzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jh
c2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjExMDIwQTQ4NzgwOTAwNDgw
MjU1IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWluaWRv
bS5jOyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9taW5pZG9t
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwNSw2ICsxMTA3LDcgQEAKIAkJ
CQk5MzAzRjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8sCiAJCQkJNjU4MEY3OTUw
OTQwNzA1NjAwODJDMjE5IC8qIFBhc3NSZWZQdHIuaCAqLywKIAkJCQk2NUQ2RDg3RTA5QjVBMzJF
MDAwMkU0RDcgLyogUGxhdGZvcm0uaCAqLywKKwkJCQkwQjFGOTIxQjBGMTc1MDJEMDAzNjQ2OEUg
LyogUHRyQW5kRmxhZ3MuaCAqLywKIAkJCQkwODhGQTVCOTBFRjc2RDQzMDA1NzhFNkYgLyogUmFu
ZG9tTnVtYmVyLmNwcCAqLywKIAkJCQkwODhGQTVCQTBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9t
TnVtYmVyLmggKi8sCiAJCQkJMDhFMjc5RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJl
clNlZWQuaCAqLywKQEAgLTExMjIsOCArMTEyNSw4IEBACiAJCQkJNjU0MUJENzAwOEU4MEExNzAw
MkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuY3BwICovLAogCQkJCTY1NDFCRDcxMDhFODBBMTcwMDJD
QkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggKi8sCiAJCQkJRTFCN0M4QkQwREEzQTMzNjAwNzRCMERD
IC8qIFRocmVhZFNwZWNpZmljLmggKi8sCi0JCQkJRTFFRTc5MjIwRDZDOTVDRDAwRkVBM0JBIC8q
IFRocmVhZGluZy5oICovLAogCQkJCTVENkE1NjZBMEYwNTk5NTUwMDI2NjE0NSAvKiBUaHJlYWRp
bmcuY3BwICovLAorCQkJCUUxRUU3OTIyMEQ2Qzk1Q0QwMEZFQTNCQSAvKiBUaHJlYWRpbmcuaCAq
LywKIAkJCQlFMUVFNzkzQzBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3Bw
ICovLAogCQkJCTkzNUFGNDZCMDlFOUQ5REIwMEFDRDFEOCAvKiBVbnVzZWRQYXJhbS5oICovLAog
CQkJCTY1OTJDMzE2MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3IuaCAqLywKQEAgLTEyMDMsNiAr
MTIwNiw4IEBACiAJCQkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3Qu
aCAqLywKIAkJCQlCQzc5NTIzNDBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5j
cHAgKi8sCiAJCQkJQkM3OTUyMzUwRTE1RUI1NjAwQTg5OEFCIC8qIEJvb2xlYW5Qcm90b3R5cGUu
aCAqLywKKwkJCQlBNzkxRUU1QTBGMTFEOTBDMDBBRTFGNjggLyogQnl0ZUFycmF5LmNwcCAqLywK
KwkJCQlBNzkxRUU1OTBGMTFEOTBDMDBBRTFGNjggLyogQnl0ZUFycmF5LmggKi8sCiAJCQkJQkNB
NjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAqLywKIAkJCQkxNDVDNTA3RjBE
OURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLywKIAkJCQlCQzZBQUFFNDBFMUY0MjY1MDBB
RDg3RDggLyogQ2xhc3NJbmZvLmggKi8sCkBAIC0xMjUxLDYgKzEyNTYsOCBAQAogCQkJCTE0REE4
MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLywKIAkJCQk5M0FERkNFNjBD
Q0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4NzcyRTUwMzhCRkUxOTAw
ODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKKwkJCQlBNzkxRUYyNzBGMTFFMDc5MDBBRTFGNjggLyog
SlNCeXRlQXJyYXkuY3BwICovLAorCQkJCUE3OTFFRjI2MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5
dGVBcnJheS5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwuY3Bw
ICovLAogCQkJCUJDMTE2N0Q4MEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCAqLywKIAkJCQlG
NjkyQTg1RTAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5jcHAgKi8sCkBAIC0xMzQ1LDEw
ICsxMzUyLDYgQEAKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogVHlwZUluZm8uaCAq
LywKIAkJCQlGNjkyQTg4NTAyNTU1OTdEMDFGRjYwRjcgLyogVVN0cmluZy5jcHAgKi8sCiAJCQkJ
RjY5MkE4ODYwMjU1NTk3RDAxRkY2MEY3IC8qIFVTdHJpbmcuaCAqLywKLQkJCQlBNzkxRUU1OTBG
MTFEOTBDMDBBRTFGNjggLyogQnl0ZUFycmF5LmggKi8sCi0JCQkJQTc5MUVFNUEwRjExRDkwQzAw
QUUxRjY4IC8qIEJ5dGVBcnJheS5jcHAgKi8sCi0JCQkJQTc5MUVGMjYwRjExRTA3OTAwQUUxRjY4
IC8qIEpTQnl0ZUFycmF5LmggKi8sCi0JCQkJQTc5MUVGMjcwRjExRTA3OTAwQUUxRjY4IC8qIEpT
Qnl0ZUFycmF5LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDkwLDYgKzE0OTMsNyBAQAogCQkJCUJDMThDM0VBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBF
NkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBNzkxRUU1QjBGMTFEOTBDMDBBRTFGNjggLyogQnl0ZUFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyMzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4REUwRUQyMjA1QjAwQjg5NjE5
IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTQ2LDYgKzE1NTAsNyBAQAogCQkJ
CUJDMThDNDE3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQxODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTc5MUVGMjgwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxOTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQjBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjIwLDYg
KzE2MjUsNyBAQAogCQkJCUJDMThDNDU1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9wZXJ0eVNsb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzI1N0RGNDBFMUY1Mzc0MDAxNkI2QzkgLyogUHJvdG90
eXBlRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBCMUY5MjFEMEYxNzUzNTAwMDM2NDY4
RSAvKiBQdHJBbmRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAw
NDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOURBNEEw
RUQyNDVFQzAwQjg5NjE5IC8qIFF1YW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEZB
NUJDMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MTY4Nyw4ICsxNjkzLDYgQEAKIAkJCQlCQzE4QzQ0RDBFMTZGNUNEMDBCMzQ0NjAgLyogcGNyZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEUwRTE2RjVDRDAwQjM0NDYwIC8qIHBjcmVfaW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDcyMEUxNkY1Q0QwMEIzNDQ2MCAvKiB1
Y3BpbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc5MUVFNUIwRjExRDkwQzAwQUUxRjY4
IC8qIEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc5MUVGMjgwRjExRTA3OTAwQUUx
RjY4IC8qIEpTQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5NzQsNiArMTk3OCw3IEBA
CiAJCQlmaWxlcyA9ICgKIAkJCQk2NTkxMjZCRDBCREQxNzI4MDAxOTIxRkIgLyogQWxsSW5PbmVG
aWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1RkRFNDlDMEJERDFENEEwMEU4MDExMSAvKiBB
c3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3OTFFRTVDMEYxMUQ5MEMwMEFFMUY2
OCAvKiBCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDlDNDBFRDIz
QzM5MDBCODk2MTkgLyogQ2hhcmFjdGVyQ2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Uy
QUREOTAwRTc5QUMxMTAwRDUwQzUxIC8qIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xOTk0LDYgKzE5OTksNyBAQAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQw
MDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDBC
N0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTc5MUVGMjkwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8q
IEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFCREY2MDBBNDM3
RkVGMDBFQ0NBMDEgLyogSlNDYWxsYmFja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIw
MjQsNiArMjAzMCw3IEBACiAJCQkJQkNERTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8qIFN0cnVjdHVy
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3Ry
dWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEz
QzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVENkE1NjZC
MEYwNTk5NTUwMDI2NjE0NSAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFF
RTc5M0QwRDZDOUI5MjAwRkVBM0JBIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk1Q0Q0MUIzMEUxQkY2NTYwMDg1MzU4RSAvKiBUcmVlUHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFMUVGNzlBQTBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTIwMzYsOSArMjA0Myw2IEBACiAJCQkJOTMwNzU0RDAwOEIwRjc0NjAw
QUIzMDU2IC8qIHBjcmVfdGFibGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNzAxMzQ4MENB
OTdFMEUwMEZBMTREMyAvKiBwY3JlX3VjcF9zZWFyY2hmdW5jcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0UyNkJENDA4QjE1MTQxMDBGODUyMjYgLyogcGNyZV94Y2xhc3MuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNUQ2QTU2NkIwRjA1OTk1NTAwMjY2MTQ1IC8qIFRocmVhZGluZy5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlBNzkxRUU1QzBGMTFEOTBDMDBBRTFGNjggLyogQnl0ZUFycmF5LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUE3OTFFRjI5MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVB
cnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3Bw
CmluZGV4IDgzNzIwMTAuLjA0MGMxMjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmNwcApAQCAtMTI0LDEyICsxMjQsMTIgQEAgc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBJZGVudGlmaWVyOjphZGQoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBjaGFyKiBjKQogewogICAgIGlmICghYykgewotICAgICAgICBVU3RyaW5n
OjpSZXA6Om51bGwuaGFzaCgpOwotICAgICAgICByZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbDsK
KyAgICAgICAgVVN0cmluZzo6UmVwOjpudWxsKCkuaGFzaCgpOworICAgICAgICByZXR1cm4gJlVT
dHJpbmc6OlJlcDo6bnVsbCgpOwogICAgIH0KICAgICBpZiAoIWNbMF0pIHsKLSAgICAgICAgVVN0
cmluZzo6UmVwOjplbXB0eS5oYXNoKCk7Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpl
bXB0eTsKKyAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0eSgpLmhhc2goKTsKKyAgICAgICAgcmV0
dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CiAgICAgfQogICAgIGlmICghY1sxXSkKICAgICAg
ICAgcmV0dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nUmVwKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNbMF0pKSk7CkBA
IC0xOTQsOCArMTk0LDggQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IElkZW50aWZpZXI6OmFk
ZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKgogICAgICAgICAgICAgcmV0
dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nUmVwKGMpKTsKICAgICB9CiAgICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgVVN0
cmluZzo6UmVwOjplbXB0eS5oYXNoKCk7Ci0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpl
bXB0eTsKKyAgICAgICAgVVN0cmluZzo6UmVwOjplbXB0eSgpLmhhc2goKTsKKyAgICAgICAgcmV0
dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CiAgICAgfQogICAgIFVDaGFyQnVmZmVyIGJ1ZiA9
IHtzLCBsZW5ndGh9OyAKICAgICBwYWlyPEhhc2hTZXQ8VVN0cmluZzo6UmVwKj46Oml0ZXJhdG9y
LCBib29sPiBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxVQ2hh
ckJ1ZmZlciwgVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpOwpAQCAtMjI1LDggKzIyNSw4IEBA
IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBJZGVudGlmaWVyOjphZGRTbG93Q2FzZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFVTdHJpCiAgICAgICAgICAgICB9CiAgICAgfQogICAgIGlmICgh
ci0+bGVuKSB7Ci0gICAgICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHkuaGFzaCgpOwotICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6ZW1wdHk7CisgICAgICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHko
KS5oYXNoKCk7CisgICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjplbXB0eSgpOwogICAgIH0K
ICAgICByZXR1cm4gKmdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkKHIpLmZpcnN0Owog
fQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKaW5k
ZXggYTE3YzM4Ni4uY2RhOWZiMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwCkBAIC00OSw5ICs0OSw5IEBAIHN0YXRpYyBwdGhyZWFkX29uY2Vf
dCBpbml0aWFsaXplVGhyZWFkaW5nS2V5T25jZSA9IFBUSFJFQURfT05DRV9JTklUOwogc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogewogICAgIFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOworICAgIGluaXRpYWxpemVVU3RyaW5nKCk7CiAjaWYgRU5BQkxFKEpTQ19NVUxU
SVBMRV9USFJFQURTKQogICAgIHNfZHRvYVA1TXV0ZXggPSBuZXcgTXV0ZXg7Ci0gICAgVVN0cmlu
Zzo6bnVsbCgpOwogICAgIGluaXREYXRlTWF0aCgpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKaW5kZXggNjJkZjY1ZS4uZDY3MWE2OSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMzAsMTUgKzMwLDE2IEBACiAjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAKICNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAi
Q29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJJ
bml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiSlNM
b2NrLmgiCiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RhdGljU2Nv
cGVPYmplY3QuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgotI2luY2x1ZGUgIkNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkxleGVyLmgiCiAjaW5jbHVkZSAi
TG9va3VwLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKQEAgLTE0Miw2ICsxNDMsNyBAQCBKU0dsb2Jh
bERhdGE6On5KU0dsb2JhbERhdGEoKQogCiBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9i
YWxEYXRhOjpjcmVhdGUoKQogeworICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKaW5kZXggNDdlOWQ4NC4uMDg3OGU3MyAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKQEAgLTI3LDcgKzI3
LDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBzZXRUaHJlc2hvbGQgPSAyMDsKIAogdm9pZCBQcm9w
ZXJ0eU5hbWVBcnJheTo6YWRkKFVTdHJpbmc6OlJlcCogaWRlbnRpZmllcikKIHsKLSAgICBBU1NF
UlQoaWRlbnRpZmllciA9PSAmVVN0cmluZzo6UmVwOjpudWxsIHx8IGlkZW50aWZpZXIgPT0gJlVT
dHJpbmc6OlJlcDo6ZW1wdHkgfHwgaWRlbnRpZmllci0+aWRlbnRpZmllclRhYmxlKCkpOworICAg
IEFTU0VSVChpZGVudGlmaWVyID09ICZVU3RyaW5nOjpSZXA6Om51bGwoKSB8fCBpZGVudGlmaWVy
ID09ICZVU3RyaW5nOjpSZXA6OmVtcHR5KCkgfHwgaWRlbnRpZmllci0+aWRlbnRpZmllclRhYmxl
KCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNp
emUoKTsKICAgICBpZiAoc2l6ZSA8IHNldFRocmVzaG9sZCkgewpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAKaW5kZXggNDVkZjI0OC4uNDZkYmQwOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VU3RyaW5nLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQor
ICogIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xODYsOCArMTg3LDM2IEBAIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDU3RyaW5nJiBjMSwgY29uc3QgQ1N0cmluZyYgYzIpCiAvLyBUaGVzZSBzdGF0aWMg
c3RyaW5ncyBhcmUgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJjLCB3aG9zZSBpbml0aWFsIHZhbHVl
IGlzIGNob3NlbiB0byAKIC8vIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVjb21pbmcg
emVybyBkdWUgdG8gcmVmL2RlcmVmIG5vdCBiZWluZyB0aHJlYWQtc2FmZS4KIHN0YXRpYyBVQ2hh
ciBzaGFyZWRFbXB0eUNoYXI7Ci1VU3RyaW5nOjpSZXAgVVN0cmluZzo6UmVwOjpudWxsID0geyAw
LCAwLCBJTlRfTUFYIC8gMiwgMCwgMSwgJlVTdHJpbmc6OlJlcDo6bnVsbCwgMCwgMCwgMCwgMCwg
MCwgMCB9OwotVVN0cmluZzo6UmVwIFVTdHJpbmc6OlJlcDo6ZW1wdHkgPSB7IDAsIDAsIElOVF9N
QVggLyAyLCAwLCAxLCAmVVN0cmluZzo6UmVwOjplbXB0eSwgMCwgJnNoYXJlZEVtcHR5Q2hhciwg
MCwgMCwgMCwgMCB9OworVVN0cmluZzo6UmVwKiBVU3RyaW5nOjpSZXA6Om51bGxCYXNlU3RyaW5n
OworVVN0cmluZzo6UmVwKiBVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZzsKK1VTdHJpbmcq
IFVTdHJpbmc6Om51bGxVU3RyaW5nOworCit2b2lkIGluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5n
KGludCBsZW4sIFVDaGFyKiBidWYsIFVTdHJpbmc6OlJlcCYgYmFzZSkKK3sKKyAgICBiYXNlLm9m
ZnNldCA9IDA7CisgICAgYmFzZS5sZW4gPSBsZW47CisgICAgYmFzZS5yYyA9IElOVF9NQVggLyAy
OworICAgIGJhc2UuX2hhc2ggPSAwOworICAgIGJhc2UubV9pZGVudGlmaWVyVGFibGVBbmRGbGFn
cy5zZXRGbGFnKFVTdHJpbmc6OlJlcDo6U3RhdGljRmxhZyk7CisgICAgYmFzZS5iYXNlU3RyaW5n
ID0gJmJhc2U7CisgICAgYmFzZS5idWYgPSBidWY7CisgICAgYmFzZS5wcmVDYXBhY2l0eSA9IDA7
CisgICAgYmFzZS51c2VkUHJlQ2FwYWNpdHkgPSAwOworICAgIGJhc2UuY2FwYWNpdHkgPSAwOwor
ICAgIGJhc2UudXNlZENhcGFjaXR5ID0gMDsKKyAgICBiYXNlLnJlcG9ydGVkQ29zdCA9IDA7Cit9
CisKK3ZvaWQgaW5pdGlhbGl6ZVVTdHJpbmcoKQoreworICAgIFVTdHJpbmc6OlJlcDo6bnVsbEJh
c2VTdHJpbmcgPSBuZXcgVVN0cmluZzo6UmVwOworICAgIGluaXRpYWxpemVTdGF0aWNCYXNlU3Ry
aW5nKDAsIDAsICpVU3RyaW5nOjpSZXA6Om51bGxCYXNlU3RyaW5nKTsKKworICAgIFVTdHJpbmc6
OlJlcDo6ZW1wdHlCYXNlU3RyaW5nID0gbmV3IFVTdHJpbmc6OlJlcDsKKyAgICBpbml0aWFsaXpl
U3RhdGljQmFzZVN0cmluZygwLCAmc2hhcmVkRW1wdHlDaGFyLCAqVVN0cmluZzo6UmVwOjplbXB0
eUJhc2VTdHJpbmcpOworCisgICAgVVN0cmluZzo6bnVsbFVTdHJpbmcgPSBuZXcgVVN0cmluZzsK
K30KIAogc3RhdGljIGNoYXIqIHN0YXRCdWZmZXIgPSAwOyAvLyBPbmx5IHVzZWQgZm9yIGRlYnVn
Z2luZyB2aWEgVVN0cmluZzo6YXNjaWkoKS4KIApAQCAtMjA1LDcgKzIzNCw2IEBAIFBhc3NSZWZQ
dHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZShVQ2hhciogZCwgaW50IGwpCiAg
ICAgci0+bGVuID0gbDsKICAgICByLT5yYyA9IDE7CiAgICAgci0+X2hhc2ggPSAwOwotICAgIHIt
Pm1faWRlbnRpZmllclRhYmxlID0gMDsKICAgICByLT5iYXNlU3RyaW5nID0gcjsKICAgICByLT5y
ZXBvcnRlZENvc3QgPSAwOwogICAgIHItPmJ1ZiA9IGQ7CkBAIC0yMzcsNyArMjY1LDYgQEAgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFBhc3NSZWZQdHI8UmVw
PiBiYXNlLCBpbnQgb2Zmc2V0LAogICAgIHItPmxlbiA9IGxlbmd0aDsKICAgICByLT5yYyA9IDE7
CiAgICAgci0+X2hhc2ggPSAwOwotICAgIHItPm1faWRlbnRpZmllclRhYmxlID0gMDsKICAgICBy
LT5iYXNlU3RyaW5nID0gYmFzZS5yZWxlYXNlUmVmKCk7CiAgICAgci0+cmVwb3J0ZWRDb3N0ID0g
MDsKICAgICByLT5idWYgPSAwOwpAQCAtMjU1LDEzICsyODIsMTMgQEAgUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFBhc3NSZWZQdHI8UmVwPiBiYXNlLCBpbnQg
b2Zmc2V0LAogUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlRnJv
bVVURjgoY29uc3QgY2hhciogc3RyaW5nKQogewogICAgIGlmICghc3RyaW5nKQotICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6
Om51bGwoKTsKIAogICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKICAgICBWZWN0
b3I8VUNoYXIsIDEwMjQ+IGJ1ZmZlcihsZW5ndGgpOwogICAgIFVDaGFyKiBwID0gYnVmZmVyLmRh
dGEoKTsKICAgICBpZiAoY29udmVyc2lvbk9LICE9IGNvbnZlcnRVVEY4VG9VVEYxNigmc3RyaW5n
LCBzdHJpbmcgKyBsZW5ndGgsICZwLCBwICsgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuICZVU3Ry
aW5nOjpSZXA6Om51bGw7CisgICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAK
ICAgICByZXR1cm4gVVN0cmluZzo6UmVwOjpjcmVhdGVDb3B5aW5nKGJ1ZmZlci5kYXRhKCksIHAg
LSBidWZmZXIuZGF0YSgpKTsKIH0KQEAgLTQ5NCwxNSArNTIxLDE1IEBAIHZvaWQgVVN0cmluZzo6
ZXhwYW5kUHJlQ2FwYWNpdHkoaW50IHJlcXVpcmVkUHJlQ2FwKQogUGFzc1JlZlB0cjxVU3RyaW5n
OjpSZXA+IGNyZWF0ZVJlcChjb25zdCBjaGFyKiBjKQogewogICAgIGlmICghYykKLSAgICAgICAg
cmV0dXJuICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVw
OjpudWxsKCk7CiAKICAgICBpZiAoIWNbMF0pCi0gICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVw
OjplbXB0eTsKKyAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6OmVtcHR5KCk7CiAKICAgICBz
aXplX3QgbGVuZ3RoID0gc3RybGVuKGMpOwogICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhsZW5n
dGgpOwogICAgIGlmICghZCkKLSAgICAgICAgcmV0dXJuICZVU3RyaW5nOjpSZXA6Om51bGw7Cisg
ICAgICAgIHJldHVybiAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAgICBkW2ldID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY1tpXSk7IC8vIHVzZSB1bnNpZ25lZCBjaGFyIHRv
IHplcm8tZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKQEAgLTUxOSw3ICs1NDYsNyBAQCBV
U3RyaW5nOjpVU3RyaW5nKGNvbnN0IGNoYXIqIGMpCiBVU3RyaW5nOjpVU3RyaW5nKGNvbnN0IFVD
aGFyKiBjLCBpbnQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPT0gMCkgCi0gICAgICAgIG1f
cmVwID0gJlJlcDo6ZW1wdHk7CisgICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHkoKTsKICAgICBl
bHNlCiAgICAgICAgIG1fcmVwID0gUmVwOjpjcmVhdGVDb3B5aW5nKGMsIGxlbmd0aCk7CiB9CkBA
IC01MjcsNyArNTU0LDcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBVQ2hhciogYywgaW50IGxl
bmd0aCkKIFVTdHJpbmc6OlVTdHJpbmcoVUNoYXIqIGMsIGludCBsZW5ndGgsIGJvb2wgY29weSkK
IHsKICAgICBpZiAobGVuZ3RoID09IDApCi0gICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHk7Cisg
ICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHkoKTsKICAgICBlbHNlIGlmIChjb3B5KQogICAgICAg
ICBtX3JlcCA9IFJlcDo6Y3JlYXRlQ29weWluZyhjLCBsZW5ndGgpOwogICAgIGVsc2UKQEAgLTUz
Nyw3ICs1NjQsNyBAQCBVU3RyaW5nOjpVU3RyaW5nKFVDaGFyKiBjLCBpbnQgbGVuZ3RoLCBib29s
IGNvcHkpCiBVU3RyaW5nOjpVU3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcikKIHsK
ICAgICBpZiAoIWJ1ZmZlci5zaXplKCkpCi0gICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHk7Cisg
ICAgICAgIG1fcmVwID0gJlJlcDo6ZW1wdHkoKTsKICAgICBlbHNlCiAgICAgICAgIG1fcmVwID0g
UmVwOjpjcmVhdGVDb3B5aW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwogfQpAQCAt
NTYxLDcgKzU4OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6
UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgfSBlbHNlIGlmIChy
ZXAtPmJhc2VJc1NlbGYoKSAmJiByZXAtPnJjID09IDEpIHsKICAgICAgICAgLy8gdGhpcyBpcyBk
aXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRlciBpdCBkaXJl
Y3RseSkKICAgICAgICAgaWYgKCFleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIHRoaXNPZmZzZXQg
KyBsZW5ndGgpKQotICAgICAgICAgICAgcmVwID0gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAg
ICAgICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKICAgICAgICAgaWYgKHJlcC0+ZGF0
YSgpKSB7CiAgICAgICAgICAgICBjb3B5Q2hhcnMocmVwLT5kYXRhKCkgKyB0aGlzU2l6ZSwgdERh
dGEsIHRTaXplKTsKICAgICAgICAgICAgIHJlcC0+bGVuID0gbGVuZ3RoOwpAQCAtNTcwLDcgKzU5
Nyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25j
YXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0
ICsgdGhpc1NpemUgPT0gcmVwLT5iYXNlU3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUg
Pj0gbWluU2hhcmVTaXplKSB7CiAgICAgICAgIC8vIHRoaXMgcmVhY2hlcyB0aGUgZW5kIG9mIHRo
ZSBidWZmZXIgLSBleHRlbmQgaXQgaWYgaXQncyBsb25nIGVub3VnaCB0byBhcHBlbmQgdG8KICAg
ICAgICAgaWYgKCFleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIHRoaXNPZmZzZXQgKyBsZW5ndGgp
KQotICAgICAgICAgICAgcmVwID0gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAgICAgICAgIHJl
cCA9ICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKICAgICAgICAgaWYgKHJlcC0+ZGF0YSgpKSB7CiAg
ICAgICAgICAgICBjb3B5Q2hhcnMocmVwLT5kYXRhKCkgKyB0aGlzU2l6ZSwgdERhdGEsIHRTaXpl
KTsKICAgICAgICAgICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKHJlcCwgMCwgbGVuZ3Ro
KTsKQEAgLTU4MCw3ICs2MDcsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVT
dHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAgICBz
aXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUobGVuZ3RoLCAwKTsKICAgICAgICAgVUNo
YXIqIGQgPSBhbGxvY0NoYXJzKG5ld0NhcGFjaXR5KTsKICAgICAgICAgaWYgKCFkKQotICAgICAg
ICAgICAgcmVwID0gJlVTdHJpbmc6OlJlcDo6bnVsbDsKKyAgICAgICAgICAgIHJlcCA9ICZVU3Ry
aW5nOjpSZXA6Om51bGwoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjb3B5Q2hhcnMo
ZCwgcmVwLT5kYXRhKCksIHRoaXNTaXplKTsKICAgICAgICAgICAgIGNvcHlDaGFycyhkICsgdGhp
c1NpemUsIHREYXRhLCB0U2l6ZSk7CkBAIC02MzUsNyArNjYyLDcgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0
cmluZzo6UmUKICAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0
aCwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAg
ICAgIGlmICghZCkKLSAgICAgICAgICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51bGw7CisgICAg
ICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgY29weUNoYXJzKGQsIHJlcC0+ZGF0YSgpLCB0aGlzU2l6ZSk7CiAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRTaXplOyArK2kpCkBAIC04MzEsMTIgKzg1OCw2IEBAIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3RyaW5nOjpSZXAqIHJlcCwgZG91
YmxlIGQpCiAgIHJldHVybiBjb25jYXRlbmF0ZShyZXAsIGJ1Zik7CiB9CiAKLWNvbnN0IFVTdHJp
bmcmIFVTdHJpbmc6Om51bGwoKQotewotICAgIHN0YXRpYyBVU3RyaW5nKiBuID0gbmV3IFVTdHJp
bmc7IC8vIFNob3VsZCBiZSBjYWxsZWQgZnJvbSBtYWluIHRocmVhZCBhdCBsZWFzdCBvbmNlIHRv
IGJlIHNhZmVseSBpbml0aWFsaXplZC4KLSAgICByZXR1cm4gKm47Ci19Ci0KIFVTdHJpbmcgVVN0
cmluZzo6ZnJvbShpbnQgaSkKIHsKICAgICBVQ2hhciBidWZbMSArIHNpemVvZihpKSAqIDNdOwpA
QCAtMTE4NSwxMiArMTIwNiwxMiBAQCBjaGFyKiBVU3RyaW5nOjphc2NpaSgpIGNvbnN0CiBVU3Ry
aW5nJiBVU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgY2hhciogYykKIHsKICAgICBpZiAoIWMpIHsK
LSAgICAgICAgbV9yZXAgPSAmUmVwOjpudWxsOworICAgICAgICBtX3JlcCA9ICZSZXA6Om51bGwo
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAogICAgIGlmICghY1swXSkgewotICAg
ICAgICBtX3JlcCA9ICZSZXA6OmVtcHR5OworICAgICAgICBtX3JlcCA9ICZSZXA6OmVtcHR5KCk7
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKQEAgLTE2MjYsMTMgKzE2NDcsMTMgQEAg
Q1N0cmluZyBVU3RyaW5nOjpVVEY4U3RyaW5nKGJvb2wgc3RyaWN0KSBjb25zdAogLy8gRm9yIHVz
ZSBpbiBlcnJvciBoYW5kbGluZyBjb2RlIHBhdGhzIC0tIGhhdmluZyB0aGlzIG5vdCBiZSBpbmxp
bmVkIGhlbHBzIGF2b2lkIFBJQyBicmFuY2hlcyB0byBmZXRjaCB0aGUgZ2xvYmFsIG9uIE1hYyBP
UyBYLgogTkVWRVJfSU5MSU5FIHZvaWQgVVN0cmluZzo6bWFrZU51bGwoKQogewotICAgIG1fcmVw
ID0gJlJlcDo6bnVsbDsKKyAgICBtX3JlcCA9ICZSZXA6Om51bGwoKTsKIH0KIAogLy8gRm9yIHVz
ZSBpbiBlcnJvciBoYW5kbGluZyBjb2RlIHBhdGhzIC0tIGhhdmluZyB0aGlzIG5vdCBiZSBpbmxp
bmVkIGhlbHBzIGF2b2lkIFBJQyBicmFuY2hlcyB0byBmZXRjaCB0aGUgZ2xvYmFsIG9uIE1hYyBP
UyBYLgogTkVWRVJfSU5MSU5FIFVTdHJpbmc6OlJlcCogVVN0cmluZzo6bnVsbFJlcCgpCiB7Ci0g
ICAgcmV0dXJuICZSZXA6Om51bGw7CisgICAgcmV0dXJuICZSZXA6Om51bGwoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCmluZGV4IDc1NDAzYzAuLmI2
Y2QxNTggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4
LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UHRyQW5kRmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KQEAgLTk4LDIzICsxMDAs
MjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUhhc2goY29uc3QgY2hhciosIGludCBsZW5ndGgpOwogICAgICAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGNvbXB1dGVIYXNoKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHMsIHN0
cmxlbihzKSk7IH0KIAotICAgICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFi
bGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PElkZW50aWZpZXJUYWJsZSo+KG1f
aWRlbnRpZmllclRhYmxlICYgfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOyB9Ci0gICAgICAg
ICAgICB2b2lkIHNldElkZW50aWZpZXJUYWJsZShJZGVudGlmaWVyVGFibGUqIHRhYmxlKSB7IEFT
U0VSVCghaXNTdGF0aWMoKSk7IG1faWRlbnRpZmllclRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odGFibGUpOyB9CisgICAgICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZp
ZXJUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuZ2V0KCk7
IH0KKyAgICAgICAgICAgIHZvaWQgc2V0SWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWJsZSog
dGFibGUpIHsgQVNTRVJUKCFpc1N0YXRpYygpKTsgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5z
ZXQodGFibGUpOyB9CiAKLSAgICAgICAgICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVy
biBtX2lkZW50aWZpZXJUYWJsZSAmIDE7IH0KLSAgICAgICAgICAgIHZvaWQgc2V0U3RhdGljKGJv
b2wgdikgeyBBU1NFUlQoIWlkZW50aWZpZXJUYWJsZSgpKTsgbV9pZGVudGlmaWVyVGFibGUgPSB2
OyB9CisgICAgICAgICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyVGFibGVBbmRGbGFncy5pc0ZsYWdTZXQoU3RhdGljRmxhZyk7IH0KKyAgICAgICAgICAgIHZv
aWQgc2V0U3RhdGljKGJvb2wgdikgeyBBU1NFUlQoIWlkZW50aWZpZXJUYWJsZSgpKTsgaWYgKHYp
IG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3Muc2V0RmxhZyhTdGF0aWNGbGFnKTsgZWxzZSBtX2lk
ZW50aWZpZXJUYWJsZUFuZEZsYWdzLmNsZWFyRmxhZyhTdGF0aWNGbGFnKTsgfQogCiAgICAgICAg
ICAgICBSZXAqIHJlZigpIHsgKytyYzsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBkZXJlZigpIHsgaWYgKC0tcmMgPT0gMCkgZGVzdHJveSgpOyB9CiAKICAg
ICAgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OworICAgICAgICAgICAgZW51
bSBVU3RyaW5nRmxhZ3MgeworICAgICAgICAgICAgICAgIFN0YXRpY0ZsYWcKKyAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgIC8vIHVuc2hhcmVkIGRhdGEKICAgICAgICAgICAgIGludCBvZmZz
ZXQ7CiAgICAgICAgICAgICBpbnQgbGVuOwogICAgICAgICAgICAgaW50IHJjOyAvLyBGb3IgbnVs
bCBhbmQgZW1wdHkgc3RhdGljIHN0cmluZ3MsIHRoaXMgZmllbGQgZG9lcyBub3QgcmVmbGVjdCBh
IGNvcnJlY3QgY291bnQsIGJlY2F1c2UgcmVmL2RlcmVmIGFyZSBub3QgdGhyZWFkLXNhZmUuIEEg
c3BlY2lhbCBjYXNlIGluIGRlc3Ryb3koKSBndWFyYW50ZWVzIHRoYXQgdGhlc2UgZG8gbm90IGdl
dCBkZWxldGVkLgogICAgICAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBfaGFzaDsKLSAgICAgICAg
ICAgIGludHB0cl90IG1faWRlbnRpZmllclRhYmxlOyAvLyBBIHBvaW50ZXIgdG8gaWRlbnRpZmll
ciB0YWJsZS4gVGhlIGxvd2VzdCBiaXQgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBz
dHJpbmcgaXMgc3RhdGljIChudWxsIG9yIGVtcHR5KS4KKyAgICAgICAgICAgIFB0ckFuZEZsYWdz
PElkZW50aWZpZXJUYWJsZSwgVVN0cmluZ0ZsYWdzPiBtX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdz
OwogICAgICAgICAgICAgVVN0cmluZzo6UmVwKiBiYXNlU3RyaW5nOwogICAgICAgICAgICAgc2l6
ZV90IHJlcG9ydGVkQ29zdDsKIApAQCAtMTI1LDggKzEzMCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIGludCB1c2VkUHJlQ2FwYWNpdHk7CiAgICAgICAgICAgICBpbnQgcHJlQ2Fw
YWNpdHk7CiAKLSAgICAgICAgICAgIHN0YXRpYyBSZXAgbnVsbDsKLSAgICAgICAgICAgIHN0YXRp
YyBSZXAgZW1wdHk7CisgICAgICAgICAgICBzdGF0aWMgUmVwJiBudWxsKCkgeyByZXR1cm4gKm51
bGxCYXNlU3RyaW5nOyB9CisgICAgICAgICAgICBzdGF0aWMgUmVwJiBlbXB0eSgpIHsgcmV0dXJu
ICplbXB0eUJhc2VTdHJpbmc7IH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGZyaWVu
ZCB2b2lkIGluaXRpYWxpemVVU3RyaW5nKCk7CisgICAgICAgICAgICBzdGF0aWMgUmVwKiBudWxs
QmFzZVN0cmluZzsKKyAgICAgICAgICAgIHN0YXRpYyBSZXAqIGVtcHR5QmFzZVN0cmluZzsKICAg
ICAgICAgfTsKIAogICAgIHB1YmxpYzoKQEAgLTIwNCw3ICsyMTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwLT5k
YXRhKCk7IH0KIAotICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlcCA9
PSAmUmVwOjpudWxsKTsgfQorICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICht
X3JlcCA9PSAmUmVwOjpudWxsKCkpOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuICghbV9yZXAtPmxlbik7IH0KIAogICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0OwpA
QCAtMjMwLDcgKzIzOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFVTdHJpbmcgc3Vi
c3RyKGludCBwb3MgPSAwLCBpbnQgbGVuID0gLTEpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBj
b25zdCBVU3RyaW5nJiBudWxsKCk7CisgICAgICAgIHN0YXRpYyBjb25zdCBVU3RyaW5nJiBudWxs
KCkgeyByZXR1cm4gKm51bGxVU3RyaW5nOyB9CiAKICAgICAgICAgUmVwKiByZXAoKSBjb25zdCB7
IHJldHVybiBtX3JlcC5nZXQoKTsgfQogICAgICAgICBzdGF0aWMgUmVwKiBudWxsUmVwKCk7CkBA
IC0yNTEsNyArMjYwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFrZU51bGwo
KTsKIAogICAgICAgICBSZWZQdHI8UmVwPiBtX3JlcDsKKyAgICAgICAgc3RhdGljIFVTdHJpbmcq
IG51bGxVU3RyaW5nOwogCisgICAgICAgIGZyaWVuZCB2b2lkIGluaXRpYWxpemVVU3RyaW5nKCk7
CiAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgVVN0cmluZyYsIGNvbnN0IFVT
dHJpbmcmKTsKICAgICAgICAgZnJpZW5kIFBhc3NSZWZQdHI8UmVwPiBjb25jYXRlbmF0ZShSZXAq
LCBSZXAqKTsgLy8gcmV0dXJucyAwIGlmIG91dCBvZiBtZW1vcnkKICAgICB9OwpAQCAtMzA1LDcg
KzMxNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICAgICBpbmxpbmUgVVN0cmluZzo6
VVN0cmluZygpCi0gICAgICAgIDogbV9yZXAoJlJlcDo6bnVsbCkKKyAgICAgICAgOiBtX3JlcCgm
UmVwOjpudWxsKCkpCiAgICAgewogICAgIH0KIApAQCAtMzQ3LDYgKzM1OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChKU0M6OlVTdHJpbmc6OlJlcCog
a2V5KSB7IHJldHVybiBrZXktPmNvbXB1dGVkSGFzaCgpOyB9CiAgICAgfTsKIAorICAgIHZvaWQg
aW5pdGlhbGl6ZVVTdHJpbmcoKTsKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RG
IHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QdHJBbmRGbGFncy5oIGIvSmF2YVNj
cmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDc3ZTg5MwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QdHJB
bmRGbGFncy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQdHJBbmRGbGFnc19oCisjZGVmaW5l
IFB0ckFuZEZsYWdzX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworICAgIHRlbXBsYXRlPGNsYXNzIFQsIHR5cGVuYW1lIEZsYWdFbnVtPiBjbGFzcyBQ
dHJBbmRGbGFncyB7CisgICAgcHVibGljOgorICAgICAgICBQdHJBbmRGbGFncygpIDogbV9wdHJB
bmRGbGFncygwKSB7fQorCisgICAgICAgIGJvb2wgaXNGbGFnU2V0KEZsYWdFbnVtIGZsYWdOdW1i
ZXIpIGNvbnN0IHsgQVNTRVJUKGZsYWdOdW1iZXIgPCAyKTsgcmV0dXJuIG1fcHRyQW5kRmxhZ3Mg
JiAoMSA8PCBmbGFnTnVtYmVyKTsgfQorICAgICAgICB2b2lkIHNldEZsYWcoRmxhZ0VudW0gZmxh
Z051bWJlcikgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyBtX3B0ckFuZEZsYWdzIHw9ICgxIDw8
IGZsYWdOdW1iZXIpO30KKyAgICAgICAgdm9pZCBjbGVhckZsYWcoRmxhZ0VudW0gZmxhZ051bWJl
cikgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyBtX3B0ckFuZEZsYWdzICY9IH4oMSA8PCBmbGFn
TnVtYmVyKTt9CisgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+KG1fcHRyQW5kRmxhZ3MgJiB+Myk7IH0KKyAgICAgICAgdm9pZCBzZXQoVCogcHRyKSB7
IEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHB0cikgJiAzKSk7IG1fcHRyQW5k
RmxhZ3MgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpIHwgKG1fcHRyQW5kRmxhZ3Mg
JiAzKTt9CisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50cHRyX3QgbV9wdHJBbmRGbGFnczsKKyAg
ICB9OworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UHRyQW5kRmxhZ3M7CisKKyNl
bmRpZiAvLyBQdHJBbmRGbGFnc19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VM
b2cgYi9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKaW5kZXggYmQwZmU1ZC4uNzdlZWU3YyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRHbHVlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDA5LTAxLTA5ICBEYXZpZCBMZXZpbiAgPGxldmlu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKwor
ICAgICAgICBBZGRlZCBmb3J3YXJkaW5nIGhlYWRlci4KKworICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oOiBBZGRlZC4KKwogMjAwOS0wMS0wNSAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgU3RhbXBl
ZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oIGIvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL1B0ckFuZEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzhiZGZiNAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9QdHJBbmRGbGFncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9QdHJBbmRGbGFncy5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAzODE3YTgzLi4zNjU1MzcwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDA5
LTAxLTA5ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKworICAgICAgICBBZGRlZCBmb3J3YXJkaW5nIGhlYWRl
ci4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oOiBBZGRl
ZC4KKworMjAwOS0wMS0wOSAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KIAogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxOTkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmggYi9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjM4YmRmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9QdHJBbmRGbGFncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9QdHJBbmRGbGFncy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26565</attachid>
            <date>2009-01-09 11:22:41 -0800</date>
            <delta_ts>2009-01-11 23:31:28 -0800</delta_ts>
            <desc>Minor change to previous patch.</desc>
            <filename>patch-for-bug23175_part1a.txt</filename>
            <type>text/plain</type>
            <size>2036</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2ZjhkYTlmLi4xMmU0ZjkyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAg
QEAKIDIwMDktMDEtMDkgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NQorCisgICAgICAgIEFkanVzdG1lbnQgdG8g
cHJldmlvdXMgcGF0Y2guICBSZW1vdmUgY2FsbCB0byBpbml0aWxpemVUaHJlYWRpbmcgZnJvbSBK
U0dsb2JhbENyZWF0ZQorICAgICAgICBhbmQgZml4IGpzYy5jcHAgaW5zdGVhZC4KKworICAgICAg
ICAqIGpzYy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKGpzY21haW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
OjpjcmVhdGUpOgorCisyMDA5LTAxLTA5ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9y
Zz4KKwogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KIAogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGM4Yjc5NmQu
LmFiM2IyMDUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvanNjLmNwcApAQCAtMjkyLDYgKzI5Miw5IEBAIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKICAgICBRQ29yZUFwcGxpY2F0aW9uIGFwcChhcmdjLCBhcmd2KTsKICNlbmRp
ZgogCisgICAgLy8gSW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdldHRpbmcgSlNHbG9iYWxEYXRhLgor
ICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworCiAgICAgLy8gV2UgY2FuJ3QgdXNlIGRl
c3RydWN0b3JzIGluIHRoZSBmb2xsb3dpbmcgY29kZSBiZWNhdXNlIGl0IHVzZXMgV2luZG93cwog
ICAgIC8vIFN0cnVjdHVyZWQgRXhjZXB0aW9uIEhhbmRsaW5nCiAgICAgaW50IHJlcyA9IDA7CkBA
IC00NDgsOCArNDUxLDYgQEAgc3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNo
YXIqKiBhcmd2LCBPcHRpb25zJiBvcHRpb25zKQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBKU0M6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKLQogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKIAogICAgIE9wdGlvbnMg
b3B0aW9uczsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCBkNjcx
YTY5Li5lMWJhNGJkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNvbGxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBY3Rp
dmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgpAQCAtMTQzLDcgKzE0Miw2IEBAIEpT
R2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBK
U0dsb2JhbERhdGE6OmNyZWF0ZSgpCiB7Ci0gICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26609</attachid>
            <date>2009-01-11 11:32:33 -0800</date>
            <delta_ts>2009-01-11 16:51:55 -0800</delta_ts>
            <desc>Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.</desc>
            <filename>patch-for-bug23175_part2.txt</filename>
            <type>text/plain</type>
            <size>28470</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2YTNjMTkzLi4xNTNjNDc2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMDktMDEtMTEgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NQorCisgICAgICAgIFNlcGFyYXRlIG91dCBC
YXNlU3RyaW5nIGluZm9ybWF0aW9uIGZyb20gVVN0cmluZzo6UmVwIGFuZCBtYWtlIGFsbCBiYXNl
U3RyaW5nIGFjY2VzcyBnbyB0aHJvdWdoCisgICAgICAgIGEgbWVtYmVyIGZ1bmN0aW9uLCBzbyB0
aGF0IGl0IG1heSBiZSB1c2VkIGZvciBzb21ldGhpbmcgZWxzZSAoaW4gdGhlIGZ1dHVyZSkgaW4g
dGhlIEJhc2VTdHJpbmcKKyAgICAgICAgY2FzZS4KKyAgICAgICAgCisgICAgICAgIE92ZXIgdGhl
IGNvdXJzZSBvZiBzZXZlcmFsIHJ1bnMsIHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgc2ln
bmlmaWNhbnQgY2hhbmdlIGluCisgICAgICAgIHN1bnNwaWRlciwgZHJvbWFlbywgbWVtYnVzdGVy
IGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogcnVudGltZS9TbWFsbFN0
cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3NTdG9yYWdlOjpyZXApOgorICAg
ICAgICAoSlNDOjpTbWFsbFN0cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpTbWFsbFN0cmluZ3MpOgorICAgICAgICAoSlNDOjpT
bWFsbFN0cmluZ3M6Om1hcmspOgorICAgICAgICBBZGp1c3QgdG8gYWNjb3VudCBmb3IgdGhlIGNo
YW5nZXMgaW4gVVN0cmluZyBhbmQgcHV0IHRoZSBVU3RyaW5nIGluIHBsYWNlIGluCisgICAgICAg
IFNtYWxsU3RyaW5nc1N0b3JhZ2UgdG8gYWlkIGluIGxvY2FsaXR5IG9mIHJlZmVyZW5jZSBhbW9u
ZyB0aGUgVUNoYXJbXSBhbmQgVVN0cmluZzo6UmVwJ3MuCisKKyAgICAgICAgKiBydW50aW1lL1Nt
YWxsU3RyaW5ncy5oOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZy5jcHA6CisgICAgICAgIChK
U0M6OmluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6
ZVVTdHJpbmcpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OlJlcDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJl
cDo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6OmV4cGFuZENhcGFjaXR5KToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6ZXhwYW5kUHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpj
b25jYXRlbmF0ZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmFwcGVuZCk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6YmFzZUlzU2VsZik6CisgICAgICAgIChKU0M6OlVT
dHJpbmc6OlJlcDo6c2V0QmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6
YmFzZVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6KToKKyAgICAgICAgKEpT
Qzo6VVN0cmluZzo6UmVwOjpudWxsKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjplbXB0
eSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OkJhc2VTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmRhdGEpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpj
b3N0KToKKyAgICAgICAgU2VwYXJhdGUgb3V0IHRoZSBpdGVtcyBvdXQgdXNlZCBieSBiYXNlIHN0
cmluZ3MgZnJvbSB0aG9zZSB1c2VkIGluIFJlcCdzIHRoYXQgb25seQorICAgICAgICBwb2ludCB0
byBiYXNlIHN0cmluZ3MuICAoVGhpcyBwb3RlbnRpYWxseSBzYXZlcyAyNCBieXRlcyBwZXIgUmVw
LikKKwogMjAwOS0wMS0wOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NtYWxsU3RyaW5ncy5jcHAKaW5kZXggMDY4MTFiOS4uNzVkNzFmYyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcApAQCAtMjksNDggKzI5LDU4IEBACiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKIG5hbWVzcGFjZSBKU0Mgeworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bUNoYXJhY3RlcnNUb1N0b3JlID0gMHgxMDA7IC8vIE5vdGUgdGhhdCBTbWFsbFN0cmlu
Z3M6Om1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncyBzaG91bGQgYmUgdGhlIHNhbWUgc2l6ZS4KIAot
Y2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZSB7CitjbGFzcyBTbWFsbFN0cmluZ3NTdG9yYWdlIDog
Tm9uY29weWFibGUgewogcHVibGljOgogICAgIFNtYWxsU3RyaW5nc1N0b3JhZ2UoKTsKLSAgICB+
U21hbGxTdHJpbmdzU3RvcmFnZSgpOwogCi0gICAgVVN0cmluZzo6UmVwKiByZXAodW5zaWduZWQg
Y2hhciBjaGFyYWN0ZXIpIHsgcmV0dXJuICZyZXBzW2NoYXJhY3Rlcl07IH0KKyAgICBVU3RyaW5n
OjpSZXAqIHJlcCh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gJm1fcmVwc1tjaGFy
YWN0ZXJdOyB9CiAKIHByaXZhdGU6Ci0gICAgVUNoYXIgY2hhcmFjdGVyc1sweDEwMF07Ci0gICAg
VVN0cmluZzo6UmVwKiByZXBzOworICAgIFVDaGFyIG1fY2hhcmFjdGVyc1tudW1DaGFyYWN0ZXJz
VG9TdG9yZV07CisgICAgVVN0cmluZzo6QmFzZVN0cmluZyBtX2Jhc2U7CisgICAgVVN0cmluZzo6
UmVwIG1fcmVwc1tudW1DaGFyYWN0ZXJzVG9TdG9yZV07CiB9OwogCiBTbWFsbFN0cmluZ3NTdG9y
YWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKCkKLSAgICA6IHJlcHMoc3RhdGljX2Nhc3Q8VVN0cmlu
Zzo6UmVwKj4oZmFzdFplcm9lZE1hbGxvYyhzaXplb2YoVVN0cmluZzo6UmVwKSAqIDB4MTAwKSkp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MTAwOyArK2kpIHsKLSAgICAgICAg
Y2hhcmFjdGVyc1tpXSA9IGk7Ci0gICAgICAgIHJlcHNbaV0ub2Zmc2V0ID0gaTsKLSAgICAgICAg
cmVwc1tpXS5sZW4gPSAxOwotICAgICAgICByZXBzW2ldLnJjID0gMTsKLSAgICAgICAgcmVwc1tp
XS5iYXNlU3RyaW5nID0gJnJlcHNbMF07Ci0gICAgfQotICAgIHJlcHNbMF0ucmMgPSAweDEwMTsK
LSAgICByZXBzWzBdLmJ1ZiA9IGNoYXJhY3RlcnM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUNoYXJhY3RlcnNUb1N0b3JlOyArK2kpCisgICAgICAgIG1fY2hhcmFjdGVyc1tpXSA9
IGk7CisKKyAgICBtX2Jhc2UucmMgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7CisgICAgbV9i
YXNlLmJ1ZiA9IG1fY2hhcmFjdGVyczsKKyAgICBtX2Jhc2UubGVuID0gbnVtQ2hhcmFjdGVyc1Rv
U3RvcmU7CisgICAgbV9iYXNlLm9mZnNldCA9IDA7CisgICAgbV9iYXNlLl9oYXNoID0gMDsKKyAg
ICBtX2Jhc2UubV9iYXNlU3RyaW5nID0gMDsKKyAgICBtX2Jhc2UucHJlQ2FwYWNpdHkgPSAwOwor
ICAgIG1fYmFzZS51c2VkUHJlQ2FwYWNpdHkgPSAwOworICAgIG1fYmFzZS5yZXBvcnRlZENvc3Qg
PSAwOwogCiAgICAgLy8gbWFrZSBzdXJlIFVTdHJpbmcgZG9lc24ndCB0cnkgdG8gcmV1c2UgdGhl
IGJ1ZmZlciBieSBwcmV0ZW5kaW5nIHdlIGhhdmUgb25lIG1vcmUgY2hhcmFjdGVyIGluIGl0Ci0g
ICAgcmVwc1swXS51c2VkQ2FwYWNpdHkgPSAweDEwMTsKLSAgICByZXBzWzBdLmNhcGFjaXR5ID0g
MHgxMDE7Ci19CisgICAgbV9iYXNlLnVzZWRDYXBhY2l0eSA9IG51bUNoYXJhY3RlcnNUb1N0b3Jl
ICsgMTsKKyAgICBtX2Jhc2UuY2FwYWNpdHkgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7Cisg
ICAgbV9iYXNlLmNoZWNrQ29uc2lzdGVuY3koKTsKIAotU21hbGxTdHJpbmdzU3RvcmFnZTo6flNt
YWxsU3RyaW5nc1N0b3JhZ2UoKQotewotICAgIGZhc3RGcmVlKHJlcHMpOworICAgIG1lbXNldCgm
bV9yZXBzLCAwLCBzaXplb2YobV9yZXBzKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUNoYXJhY3RlcnNUb1N0b3JlOyArK2kpIHsKKyAgICAgICAgbV9yZXBzW2ldLm9mZnNldCA9
IGk7CisgICAgICAgIG1fcmVwc1tpXS5sZW4gPSAxOworICAgICAgICBtX3JlcHNbaV0ucmMgPSAx
OworICAgICAgICBtX3JlcHNbaV0uc2V0QmFzZVN0cmluZygmbV9iYXNlKTsKKyAgICAgICAgbV9y
ZXBzW2ldLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9CiB9CiAKIFNtYWxsU3RyaW5nczo6U21h
bGxTdHJpbmdzKCkKICAgICA6IG1fZW1wdHlTdHJpbmcoMCkKICAgICAsIG1fc3RvcmFnZSgwKQog
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAweDEwMDsgKytpKQorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsgKytpKQogICAgICAgICBtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbaV0gPSAwOwogfQogCkBAIC04Miw3ICs5Miw3IEBAIHZvaWQg
U21hbGxTdHJpbmdzOjptYXJrKCkKIHsKICAgICBpZiAobV9lbXB0eVN0cmluZyAmJiAhbV9lbXB0
eVN0cmluZy0+bWFya2VkKCkpCiAgICAgICAgIG1fZW1wdHlTdHJpbmctPm1hcmsoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMHgxMDA7ICsraSkgeworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsgKytpKSB7CiAgICAgICAgIGlmIChtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbaV0gJiYgIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXS0+
bWFya2VkKCkpCiAgICAgICAgICAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0tPm1hcmso
KTsKICAgICB9CkBAIC0xMDksNCArMTE5LDQgQEAgVVN0cmluZzo6UmVwKiBTbWFsbFN0cmluZ3M6
OnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKICAgICBy
ZXR1cm4gbV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVyKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAppbmRleCA3ZTVmNWM4Li4zZDUy
YzQ1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKQEAgLTU1LDkgKzU1LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBVU3RyaW5nOjpSZXAqIHNp
bmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25lZCBjaGFyIGNoYXJhY3Rlcik7Ci0gICAgICAg
IAorCiAgICAgICAgIHZvaWQgbWFyaygpOwotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKik7CiAgICAgICAgIHZvaWQg
Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0YSosIHVuc2lnbmVkIGNoYXIp
OwpAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNTdHJpbmcqIG1f
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1sweDEwMF07CiAgICAgICAgIE93blB0cjxTbWFsbFN0cmlu
Z3NTdG9yYWdlPiBtX3N0b3JhZ2U7CiAgICAgfTsKLSAgICAKLX0KIAotI2VuZGlmCit9ICAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAgLy8gU21hbGxTdHJpbmdzX2gKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VTdHJpbmcuY3BwCmluZGV4IDQ2ZGJkMDkuLjk2NDg0M2IgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
U3RyaW5nLmNwcApAQCAtMTg3LDMyICsxODcsMzMgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENT
dHJpbmcmIGMxLCBjb25zdCBDU3RyaW5nJiBjMikKIC8vIFRoZXNlIHN0YXRpYyBzdHJpbmdzIGFy
ZSBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmMsIHdob3NlIGluaXRpYWwgdmFsdWUgaXMgY2hvc2Vu
IHRvIAogLy8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSBvZiBpdCBiZWNvbWluZyB6ZXJvIGR1ZSB0
byByZWYvZGVyZWYgbm90IGJlaW5nIHRocmVhZC1zYWZlLgogc3RhdGljIFVDaGFyIHNoYXJlZEVt
cHR5Q2hhcjsKLVVTdHJpbmc6OlJlcCogVVN0cmluZzo6UmVwOjpudWxsQmFzZVN0cmluZzsKLVVT
dHJpbmc6OlJlcCogVVN0cmluZzo6UmVwOjplbXB0eUJhc2VTdHJpbmc7CitVU3RyaW5nOjpCYXNl
U3RyaW5nKiBVU3RyaW5nOjpSZXA6Om51bGxCYXNlU3RyaW5nOworVVN0cmluZzo6QmFzZVN0cmlu
ZyogVVN0cmluZzo6UmVwOjplbXB0eUJhc2VTdHJpbmc7CiBVU3RyaW5nKiBVU3RyaW5nOjpudWxs
VVN0cmluZzsKIAotdm9pZCBpbml0aWFsaXplU3RhdGljQmFzZVN0cmluZyhpbnQgbGVuLCBVQ2hh
ciogYnVmLCBVU3RyaW5nOjpSZXAmIGJhc2UpCit2b2lkIGluaXRpYWxpemVTdGF0aWNCYXNlU3Ry
aW5nKGludCBsZW4sIFVDaGFyKiBidWYsIFVTdHJpbmc6OkJhc2VTdHJpbmcmIGJhc2UpCiB7CiAg
ICAgYmFzZS5vZmZzZXQgPSAwOwogICAgIGJhc2UubGVuID0gbGVuOwogICAgIGJhc2UucmMgPSBJ
TlRfTUFYIC8gMjsKICAgICBiYXNlLl9oYXNoID0gMDsKICAgICBiYXNlLm1faWRlbnRpZmllclRh
YmxlQW5kRmxhZ3Muc2V0RmxhZyhVU3RyaW5nOjpSZXA6OlN0YXRpY0ZsYWcpOwotICAgIGJhc2Uu
YmFzZVN0cmluZyA9ICZiYXNlOworICAgIGJhc2UubV9iYXNlU3RyaW5nID0gMDsKICAgICBiYXNl
LmJ1ZiA9IGJ1ZjsKICAgICBiYXNlLnByZUNhcGFjaXR5ID0gMDsKICAgICBiYXNlLnVzZWRQcmVD
YXBhY2l0eSA9IDA7CiAgICAgYmFzZS5jYXBhY2l0eSA9IDA7CiAgICAgYmFzZS51c2VkQ2FwYWNp
dHkgPSAwOwogICAgIGJhc2UucmVwb3J0ZWRDb3N0ID0gMDsKKyAgICBiYXNlLmNoZWNrQ29uc2lz
dGVuY3koKTsKIH0KIAogdm9pZCBpbml0aWFsaXplVVN0cmluZygpCiB7Ci0gICAgVVN0cmluZzo6
UmVwOjpudWxsQmFzZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpSZXA7CisgICAgVVN0cmluZzo6UmVw
OjpudWxsQmFzZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpCYXNlU3RyaW5nOwogICAgIGluaXRpYWxp
emVTdGF0aWNCYXNlU3RyaW5nKDAsIDAsICpVU3RyaW5nOjpSZXA6Om51bGxCYXNlU3RyaW5nKTsK
IAotICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHlCYXNlU3RyaW5nID0gbmV3IFVTdHJpbmc6OlJlcDsK
KyAgICBVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpCYXNlU3Ry
aW5nOwogICAgIGluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKDAsICZzaGFyZWRFbXB0eUNoYXIs
ICpVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZyk7CiAKICAgICBVU3RyaW5nOjpudWxsVVN0
cmluZyA9IG5ldyBVU3RyaW5nOwpAQCAtMjI5LDEyICsyMzAsMTIgQEAgUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyhjb25zdCBVQ2hhciogZCwgaW50
IGwpCiAKIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZShVQ2hh
ciogZCwgaW50IGwpCiB7Ci0gICAgUmVwKiByID0gbmV3IFJlcDsKKyAgICBCYXNlU3RyaW5nKiBy
ID0gbmV3IEJhc2VTdHJpbmc7CiAgICAgci0+b2Zmc2V0ID0gMDsKICAgICByLT5sZW4gPSBsOwog
ICAgIHItPnJjID0gMTsKICAgICByLT5faGFzaCA9IDA7Ci0gICAgci0+YmFzZVN0cmluZyA9IHI7
CisgICAgci0+bV9iYXNlU3RyaW5nID0gMDsKICAgICByLT5yZXBvcnRlZENvc3QgPSAwOwogICAg
IHItPmJ1ZiA9IGQ7CiAgICAgci0+dXNlZENhcGFjaXR5ID0gbDsKQEAgLTI0OCwzMCArMjQ5LDI0
IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZShVQ2hhciog
ZCwgaW50IGwpCiAgICAgcmV0dXJuIGFkb3B0UmVmKHIpOwogfQogCi1QYXNzUmVmUHRyPFVTdHJp
bmc6OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoUGFzc1JlZlB0cjxSZXA+IGJhc2UsIGludCBv
ZmZzZXQsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVw
OjpjcmVhdGUoUGFzc1JlZlB0cjxSZXA+IHJlcCwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkKIHsK
LSAgICBBU1NFUlQoYmFzZSk7Ci0gICAgYmFzZS0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIEFT
U0VSVChyZXApOworICAgIHJlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgaW50IGJhc2VP
ZmZzZXQgPSBiYXNlLT5vZmZzZXQ7CisgICAgaW50IHJlcE9mZnNldCA9IHJlcC0+b2Zmc2V0Owog
Ci0gICAgYmFzZSA9IGJhc2UtPmJhc2VTdHJpbmc7CisgICAgUGFzc1JlZlB0cjxCYXNlU3RyaW5n
PiBiYXNlID0gcmVwLT5iYXNlU3RyaW5nKCk7CiAKLSAgICBBU1NFUlQoLShvZmZzZXQgKyBiYXNl
T2Zmc2V0KSA8PSBiYXNlLT51c2VkUHJlQ2FwYWNpdHkpOwotICAgIEFTU0VSVChvZmZzZXQgKyBi
YXNlT2Zmc2V0ICsgbGVuZ3RoIDw9IGJhc2UtPnVzZWRDYXBhY2l0eSk7CisgICAgQVNTRVJUKC0o
b2Zmc2V0ICsgcmVwT2Zmc2V0KSA8PSBiYXNlLT51c2VkUHJlQ2FwYWNpdHkpOworICAgIEFTU0VS
VChvZmZzZXQgKyByZXBPZmZzZXQgKyBsZW5ndGggPD0gYmFzZS0+dXNlZENhcGFjaXR5KTsKIAog
ICAgIFJlcCogciA9IG5ldyBSZXA7Ci0gICAgci0+b2Zmc2V0ID0gYmFzZU9mZnNldCArIG9mZnNl
dDsKKyAgICByLT5vZmZzZXQgPSByZXBPZmZzZXQgKyBvZmZzZXQ7CiAgICAgci0+bGVuID0gbGVu
Z3RoOwogICAgIHItPnJjID0gMTsKICAgICByLT5faGFzaCA9IDA7Ci0gICAgci0+YmFzZVN0cmlu
ZyA9IGJhc2UucmVsZWFzZVJlZigpOwotICAgIHItPnJlcG9ydGVkQ29zdCA9IDA7Ci0gICAgci0+
YnVmID0gMDsKLSAgICByLT51c2VkQ2FwYWNpdHkgPSAwOwotICAgIHItPmNhcGFjaXR5ID0gMDsK
LSAgICByLT51c2VkUHJlQ2FwYWNpdHkgPSAwOwotICAgIHItPnByZUNhcGFjaXR5ID0gMDsKKyAg
ICByLT5zZXRCYXNlU3RyaW5nKGJhc2UpOwogCiAgICAgci0+Y2hlY2tDb25zaXN0ZW5jeSgpOwog
CkBAIC0zMDIsMTAgKzI5NywxMSBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6ZGVzdHJveSgpCiAgICAg
aWYgKCFpc1N0YXRpYygpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyVGFibGUoKSkKICAgICAg
ICAgICAgIElkZW50aWZpZXI6OnJlbW92ZSh0aGlzKTsKLSAgICAgICAgaWYgKGJhc2VTdHJpbmcg
PT0gdGhpcykKLSAgICAgICAgICAgIGZhc3RGcmVlKGJ1Zik7CisgICAgICAgIFVTdHJpbmc6OkJh
c2VTdHJpbmcqIGJhc2UgPSBiYXNlU3RyaW5nKCk7CisgICAgICAgIGlmIChiYXNlID09IHRoaXMp
CisgICAgICAgICAgICBmYXN0RnJlZShiYXNlLT5idWYpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiYXNlU3RyaW5nLT5kZXJlZigpOworICAgICAgICAgICAgYmFzZS0+ZGVyZWYoKTsKIAog
ICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CkBAIC00MDcsMTcgKzQwMywxMCBAQCB1bnNpZ25l
ZCBVU3RyaW5nOjpSZXA6OmNvbXB1dGVIYXNoKGNvbnN0IGNoYXIqIHMsIGludCBsKQogI2lmbmRl
ZiBOREVCVUcKIHZvaWQgVVN0cmluZzo6UmVwOjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsK
LSAgICAvLyBPbmx5IGJhc2Ugc3RyaW5ncyBoYXZlIG5vbi16ZXJvIHNoYXJlZCBkYXRhLgotICAg
IGlmICh0aGlzICE9IGJhc2VTdHJpbmcpIHsKLSAgICAgICAgQVNTRVJUKCFidWYpOwotICAgICAg
ICBBU1NFUlQoIXVzZWRDYXBhY2l0eSk7Ci0gICAgICAgIEFTU0VSVCghY2FwYWNpdHkpOwotICAg
ICAgICBBU1NFUlQoIXVzZWRQcmVDYXBhY2l0eSk7Ci0gICAgICAgIEFTU0VSVCghcHJlQ2FwYWNp
dHkpOwotICAgIH0KKyAgICBjb25zdCBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0
cmluZygpOwogCiAgICAgLy8gVGhlcmUgaXMgbm8gcmVjdXJzaW9uIGZvciBiYXNlIHN0cmluZ3Mu
Ci0gICAgQVNTRVJUKGJhc2VTdHJpbmcgPT0gYmFzZVN0cmluZy0+YmFzZVN0cmluZyk7CisgICAg
QVNTRVJUKGJhc2UgPT0gYmFzZS0+YmFzZVN0cmluZygpKTsKIAogICAgIGlmIChpc1N0YXRpYygp
KSB7CiAgICAgICAgIC8vIFRoZXJlIGFyZSBvbmx5IHR3byBzdGF0aWMgc3RyaW5nczogbnVsbCBh
bmQgZW1wdHkuCkBAIC00MjgsMTAgKzQxNywxMCBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tD
b25zaXN0ZW5jeSgpIGNvbnN0CiAgICAgfQogCiAgICAgLy8gVGhlIHN0cmluZyBmaXRzIGluIGJ1
ZmZlci4KLSAgICBBU1NFUlQoYmFzZVN0cmluZy0+dXNlZFByZUNhcGFjaXR5IDw9IGJhc2VTdHJp
bmctPnByZUNhcGFjaXR5KTsKLSAgICBBU1NFUlQoYmFzZVN0cmluZy0+dXNlZENhcGFjaXR5IDw9
IGJhc2VTdHJpbmctPmNhcGFjaXR5KTsKLSAgICBBU1NFUlQoLW9mZnNldCA8PSBiYXNlU3RyaW5n
LT51c2VkUHJlQ2FwYWNpdHkpOwotICAgIEFTU0VSVChvZmZzZXQgKyBsZW4gPD0gYmFzZVN0cmlu
Zy0+dXNlZENhcGFjaXR5KTsKKyAgICBBU1NFUlQoYmFzZS0+dXNlZFByZUNhcGFjaXR5IDw9IGJh
c2UtPnByZUNhcGFjaXR5KTsKKyAgICBBU1NFUlQoYmFzZS0+dXNlZENhcGFjaXR5IDw9IGJhc2Ut
PmNhcGFjaXR5KTsKKyAgICBBU1NFUlQoLW9mZnNldCA8PSBiYXNlLT51c2VkUHJlQ2FwYWNpdHkp
OworICAgIEFTU0VSVChvZmZzZXQgKyBsZW4gPD0gYmFzZS0+dXNlZENhcGFjaXR5KTsKIH0KICNl
bmRpZgogCkBAIC00NTEsMzUgKzQ0MCwyNCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBleHBhbmRl
ZFNpemUoc2l6ZV90IHNpemUsIHNpemVfdCBvdGhlclNpemUpCiAgICAgcmV0dXJuIGV4cGFuZGVk
U2l6ZSArIG90aGVyU2l6ZTsKIH0KIAotaW5saW5lIGludCBVU3RyaW5nOjp1c2VkQ2FwYWNpdHko
KSBjb25zdAotewotICAgIHJldHVybiBtX3JlcC0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5Owot
fQotCi1pbmxpbmUgaW50IFVTdHJpbmc6OnVzZWRQcmVDYXBhY2l0eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcmVwLT5iYXNlU3RyaW5nLT51c2VkUHJlQ2FwYWNpdHk7Ci19Ci0KLQogc3RhdGlj
IGlubGluZSBib29sIGV4cGFuZENhcGFjaXR5KFVTdHJpbmc6OlJlcCogcmVwLCBpbnQgcmVxdWly
ZWRMZW5ndGgpCiB7CiAgICAgcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBVU3RyaW5n
OjpSZXAqIHIgPSByZXAtPmJhc2VTdHJpbmc7CisgICAgVVN0cmluZzo6QmFzZVN0cmluZyogYmFz
ZSA9IHJlcC0+YmFzZVN0cmluZygpOwogCi0gICAgaWYgKHJlcXVpcmVkTGVuZ3RoID4gci0+Y2Fw
YWNpdHkpIHsKLSAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKHJlcXVp
cmVkTGVuZ3RoLCByLT5wcmVDYXBhY2l0eSk7Ci0gICAgICAgIFVDaGFyKiBvbGRCdWYgPSByLT5i
dWY7Ci0gICAgICAgIHItPmJ1ZiA9IHJlYWxsb2NDaGFycyhyLT5idWYsIG5ld0NhcGFjaXR5KTsK
LSAgICAgICAgaWYgKCFyLT5idWYpIHsKLSAgICAgICAgICAgIHItPmJ1ZiA9IG9sZEJ1ZjsKKyAg
ICBpZiAocmVxdWlyZWRMZW5ndGggPiBiYXNlLT5jYXBhY2l0eSkgeworICAgICAgICBzaXplX3Qg
bmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUocmVxdWlyZWRMZW5ndGgsIGJhc2UtPnByZUNhcGFj
aXR5KTsKKyAgICAgICAgVUNoYXIqIG9sZEJ1ZiA9IGJhc2UtPmJ1ZjsKKyAgICAgICAgYmFzZS0+
YnVmID0gcmVhbGxvY0NoYXJzKGJhc2UtPmJ1ZiwgbmV3Q2FwYWNpdHkpOworICAgICAgICBpZiAo
IWJhc2UtPmJ1ZikgeworICAgICAgICAgICAgYmFzZS0+YnVmID0gb2xkQnVmOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHItPmNhcGFjaXR5ID0gbmV3Q2Fw
YWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKKyAgICAgICAgYmFzZS0+Y2FwYWNpdHkgPSBuZXdDYXBh
Y2l0eSAtIGJhc2UtPnByZUNhcGFjaXR5OwogICAgIH0KLSAgICBpZiAocmVxdWlyZWRMZW5ndGgg
PiByLT51c2VkQ2FwYWNpdHkpCi0gICAgICAgIHItPnVzZWRDYXBhY2l0eSA9IHJlcXVpcmVkTGVu
Z3RoOworICAgIGlmIChyZXF1aXJlZExlbmd0aCA+IGJhc2UtPnVzZWRDYXBhY2l0eSkKKyAgICAg
ICAgYmFzZS0+dXNlZENhcGFjaXR5ID0gcmVxdWlyZWRMZW5ndGg7CiAKICAgICByZXAtPmNoZWNr
Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5NSwyNSArNDczLDI1IEBAIHZv
aWQgVVN0cmluZzo6ZXhwYW5kUHJlQ2FwYWNpdHkoaW50IHJlcXVpcmVkUHJlQ2FwKQogewogICAg
IG1fcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBSZXAqIHIgPSBtX3JlcC0+YmFzZVN0
cmluZzsKKyAgICBCYXNlU3RyaW5nKiBiYXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKIAotICAg
IGlmIChyZXF1aXJlZFByZUNhcCA+IHItPnByZUNhcGFjaXR5KSB7Ci0gICAgICAgIHNpemVfdCBu
ZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShyZXF1aXJlZFByZUNhcCwgci0+Y2FwYWNpdHkpOwot
ICAgICAgICBpbnQgZGVsdGEgPSBuZXdDYXBhY2l0eSAtIHItPmNhcGFjaXR5IC0gci0+cHJlQ2Fw
YWNpdHk7CisgICAgaWYgKHJlcXVpcmVkUHJlQ2FwID4gYmFzZS0+cHJlQ2FwYWNpdHkpIHsKKyAg
ICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKHJlcXVpcmVkUHJlQ2FwLCBi
YXNlLT5jYXBhY2l0eSk7CisgICAgICAgIGludCBkZWx0YSA9IG5ld0NhcGFjaXR5IC0gYmFzZS0+
Y2FwYWNpdHkgLSBiYXNlLT5wcmVDYXBhY2l0eTsKIAogICAgICAgICBVQ2hhciogbmV3QnVmID0g
YWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICghbmV3QnVmKSB7CiAgICAgICAg
ICAgICBtYWtlTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGNvcHlDaGFycyhuZXdCdWYgKyBkZWx0YSwgci0+YnVmLCByLT5jYXBhY2l0eSArIHItPnByZUNh
cGFjaXR5KTsKLSAgICAgICAgZmFzdEZyZWUoci0+YnVmKTsKLSAgICAgICAgci0+YnVmID0gbmV3
QnVmOworICAgICAgICBjb3B5Q2hhcnMobmV3QnVmICsgZGVsdGEsIGJhc2UtPmJ1ZiwgYmFzZS0+
Y2FwYWNpdHkgKyBiYXNlLT5wcmVDYXBhY2l0eSk7CisgICAgICAgIGZhc3RGcmVlKGJhc2UtPmJ1
Zik7CisgICAgICAgIGJhc2UtPmJ1ZiA9IG5ld0J1ZjsKIAotICAgICAgICByLT5wcmVDYXBhY2l0
eSA9IG5ld0NhcGFjaXR5IC0gci0+Y2FwYWNpdHk7CisgICAgICAgIGJhc2UtPnByZUNhcGFjaXR5
ID0gbmV3Q2FwYWNpdHkgLSBiYXNlLT5jYXBhY2l0eTsKICAgICB9Ci0gICAgaWYgKHJlcXVpcmVk
UHJlQ2FwID4gci0+dXNlZFByZUNhcGFjaXR5KQotICAgICAgICByLT51c2VkUHJlQ2FwYWNpdHkg
PSByZXF1aXJlZFByZUNhcDsKKyAgICBpZiAocmVxdWlyZWRQcmVDYXAgPiBiYXNlLT51c2VkUHJl
Q2FwYWNpdHkpCisgICAgICAgIGJhc2UtPnVzZWRQcmVDYXBhY2l0eSA9IHJlcXVpcmVkUHJlQ2Fw
OwogCiAgICAgbV9yZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKIH0KQEAgLTU3OCw2ICs1NTYsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5h
dGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgIGludCB0aGlzU2l6ZSA9IHJlcC0+c2l6ZSgp
OwogICAgIGludCB0aGlzT2Zmc2V0ID0gcmVwLT5vZmZzZXQ7CiAgICAgaW50IGxlbmd0aCA9IHRo
aXNTaXplICsgdFNpemU7CisgICAgVVN0cmluZzo6QmFzZVN0cmluZyogYmFzZSA9IHJlcC0+YmFz
ZVN0cmluZygpOwogCiAgICAgLy8gcG9zc2libGUgY2FzZXM6CiAgICAgaWYgKHRTaXplID09IDAp
IHsKQEAgLTU4NSw3ICs1NjQsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVT
dHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgIH0gZWxz
ZSBpZiAodGhpc1NpemUgPT0gMCkgewogICAgICAgICAvLyB0aGlzIGlzIGVtcHR5CiAgICAgICAg
IHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyh0RGF0YSwgdFNpemUpOwotICAgIH0g
ZWxzZSBpZiAocmVwLT5iYXNlSXNTZWxmKCkgJiYgcmVwLT5yYyA9PSAxKSB7CisgICAgfSBlbHNl
IGlmIChyZXAgPT0gYmFzZSAmJiByZXAtPnJjID09IDEpIHsKICAgICAgICAgLy8gdGhpcyBpcyBk
aXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRlciBpdCBkaXJl
Y3RseSkKICAgICAgICAgaWYgKCFleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIHRoaXNPZmZzZXQg
KyBsZW5ndGgpKQogICAgICAgICAgICAgcmVwID0gJlVTdHJpbmc6OlJlcDo6bnVsbCgpOwpAQCAt
NTk0LDcgKzU3Myw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6
UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgICAgICByZXAt
PmxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgIHJlcC0+X2hhc2ggPSAwOwogICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gcmVwLT5iYXNlU3RyaW5nLT51
c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlm
ICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXpl
ID49IG1pblNoYXJlU2l6ZSkgewogICAgICAgICAvLyB0aGlzIHJlYWNoZXMgdGhlIGVuZCBvZiB0
aGUgYnVmZmVyIC0gZXh0ZW5kIGl0IGlmIGl0J3MgbG9uZyBlbm91Z2ggdG8gYXBwZW5kIHRvCiAg
ICAgICAgIGlmICghZXhwYW5kQ2FwYWNpdHkocmVwLmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVuZ3Ro
KSkKICAgICAgICAgICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51bGwoKTsKQEAgLTYxMiw3ICs1
OTEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29u
Y2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAgICAgICAgY29weUNoYXJzKGQs
IHJlcC0+ZGF0YSgpLCB0aGlzU2l6ZSk7CiAgICAgICAgICAgICBjb3B5Q2hhcnMoZCArIHRoaXNT
aXplLCB0RGF0YSwgdFNpemUpOwogICAgICAgICAgICAgcmVwID0gVVN0cmluZzo6UmVwOjpjcmVh
dGUoZCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIHJlcC0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsK
KyAgICAgICAgICAgIHJlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5Owog
ICAgICAgICB9CiAgICAgfQogCkBAIC02MzEsNiArNjEwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmlu
Zzo6UmUKICAgICBpbnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0OwogICAgIGludCB0U2l6ZSA9
IHN0YXRpY19jYXN0PGludD4oc3RybGVuKHQpKTsKICAgICBpbnQgbGVuZ3RoID0gdGhpc1NpemUg
KyB0U2l6ZTsKKyAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gcmVwLT5iYXNlU3RyaW5n
KCk7CiAKICAgICAvLyBwb3NzaWJsZSBjYXNlczoKICAgICBpZiAodGhpc1NpemUgPT0gMCkgewpA
QCAtNjM4LDcgKzYxOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmlu
Zzo6UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgIHJlcCA9
IGNyZWF0ZVJlcCh0KTsKICAgICB9IGVsc2UgaWYgKHRTaXplID09IDApIHsKICAgICAgICAgLy8g
dCBpcyBlbXB0eSwgd2UnbGwganVzdCByZXR1cm4gKnRoaXMgYmVsb3cuCi0gICAgfSBlbHNlIGlm
IChyZXAtPmJhc2VJc1NlbGYoKSAmJiByZXAtPnJjID09IDEpIHsKKyAgICB9IGVsc2UgaWYgKHJl
cCA9PSBiYXNlICYmIHJlcC0+cmMgPT0gMSkgewogICAgICAgICAvLyB0aGlzIGlzIGRpcmVjdCBh
bmQgaGFzIHJlZmNvdW50IG9mIDEgKHNvIHdlIGNhbiBqdXN0IGFsdGVyIGl0IGRpcmVjdGx5KQog
ICAgICAgICBleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIHRoaXNPZmZzZXQgKyBsZW5ndGgpOwog
ICAgICAgICBVQ2hhciogZCA9IHJlcC0+ZGF0YSgpOwpAQCAtNjQ4LDcgKzYyOCw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShQYXNz
UmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgICAgICByZXAtPmxlbiA9IGxlbmd0aDsKICAgICAg
ICAgICAgIHJlcC0+X2hhc2ggPSAwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zm
c2V0ICsgdGhpc1NpemUgPT0gcmVwLT5iYXNlU3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1Np
emUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1Np
emUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSkgewog
ICAgICAgICAvLyB0aGlzIHN0cmluZyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4
dGVuZCBpdAogICAgICAgICBleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIHRoaXNPZmZzZXQgKyBs
ZW5ndGgpOwogICAgICAgICBVQ2hhciogZCA9IHJlcC0+ZGF0YSgpOwpAQCAtNjY4LDcgKzY0OCw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRl
bmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHRTaXplOyArK2kpCiAgICAgICAgICAgICAgICAgZFt0aGlzU2l6ZSArIGldID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4odFtpXSk7IC8vIHVzZSB1bnNpZ25lZCBjaGFyIHRvIHplcm8t
ZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKICAgICAgICAgICAgIHJlcCA9IFVTdHJpbmc6
OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgICAgICAgICByZXAtPmNhcGFjaXR5ID0gbmV3
Q2FwYWNpdHk7CisgICAgICAgICAgICByZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNpdHkgPSBuZXdD
YXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjk3LDE1ICs2NzcsMTcgQEAgUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6
UmVwKiBiKQogICAgIGlmIChiU2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gYTsKIAotICAgIGlm
IChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhLT5iYXNlU3RyaW5nLT51c2VkQ2Fw
YWNpdHkgJiYgYU9mZnNldCArIGxlbmd0aCA8PSBhLT5iYXNlU3RyaW5nLT5jYXBhY2l0eSkgewor
ICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGFCYXNlID0gYS0+YmFzZVN0cmluZygpOworICAgIGlm
IChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhQmFzZS0+dXNlZENhcGFjaXR5ICYm
IGFPZmZzZXQgKyBsZW5ndGggPD0gYUJhc2UtPmNhcGFjaXR5KSB7CiAgICAgICAgIC8vIGIgaXMg
YSBzaW5nbGUgY2hhcmFjdGVyIChjb21tb24gZmFzdCBjYXNlKQotICAgICAgICBhLT5iYXNlU3Ry
aW5nLT51c2VkQ2FwYWNpdHkgPSBhT2Zmc2V0ICsgbGVuZ3RoOworICAgICAgICBhQmFzZS0+dXNl
ZENhcGFjaXR5ID0gYU9mZnNldCArIGxlbmd0aDsKICAgICAgICAgYS0+ZGF0YSgpW2FTaXplXSA9
IGItPmRhdGEoKVswXTsKICAgICAgICAgcmV0dXJuIFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGEsIDAs
IGxlbmd0aCk7CiAgICAgfQogCi0gICAgaWYgKGFPZmZzZXQgKyBhU2l6ZSA9PSBhLT5iYXNlU3Ry
aW5nLT51c2VkQ2FwYWNpdHkgJiYgYVNpemUgPj0gbWluU2hhcmVTaXplICYmIDQgKiBhU2l6ZSA+
PSBiU2l6ZSAmJgotICAgICAgICAgICAgICAgKC1iT2Zmc2V0ICE9IGItPmJhc2VTdHJpbmctPnVz
ZWRQcmVDYXBhY2l0eSB8fCBhU2l6ZSA+PSBiU2l6ZSkpIHsKKyAgICBVU3RyaW5nOjpCYXNlU3Ry
aW5nKiBiQmFzZSA9IGItPmJhc2VTdHJpbmcoKTsKKyAgICBpZiAoYU9mZnNldCArIGFTaXplID09
IGFCYXNlLT51c2VkQ2FwYWNpdHkgJiYgYVNpemUgPj0gbWluU2hhcmVTaXplICYmIDQgKiBhU2l6
ZSA+PSBiU2l6ZQorICAgICAgICAmJiAoLWJPZmZzZXQgIT0gYkJhc2UtPnVzZWRQcmVDYXBhY2l0
eSB8fCBhU2l6ZSA+PSBiU2l6ZSkpIHsKICAgICAgICAgLy8gLSBhIHJlYWNoZXMgdGhlIGVuZCBv
ZiBpdHMgYnVmZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Igc2hhcmVkIGFwcGVuZAogICAgICAgICAv
LyAtIGFsc28sIGl0J3MgYXQgbGVhc3QgYSBxdWFydGVyIHRoZSBsZW5ndGggb2YgYiAtIGFwcGVu
ZGluZyB0byBhIG11Y2ggc2hvcnRlcgogICAgICAgICAvLyAgIHN0cmluZyBkb2VzIG1vcmUgaGFy
bSB0aGFuIGdvb2QKQEAgLTcyNCw3ICs3MDYsNyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4g
Y29uY2F0ZW5hdGUoVVN0cmluZzo6UmVwKiBhLCBVU3RyaW5nOjpSZXAqIGIpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKC1iT2Zmc2V0ID09IGItPmJhc2VTdHJpbmct
PnVzZWRQcmVDYXBhY2l0eSAmJiBiU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGJTaXplID49
IGFTaXplKSB7CisgICAgaWYgKC1iT2Zmc2V0ID09IGJCYXNlLT51c2VkUHJlQ2FwYWNpdHkgJiYg
YlNpemUgPj0gbWluU2hhcmVTaXplICYmIDQgKiBiU2l6ZSA+PSBhU2l6ZSkgewogICAgICAgICAv
LyAtIGIgcmVhY2hlcyB0aGUgYmVnaW5uaW5nIG9mIGl0cyBidWZmZXIgc28gaXQgcXVhbGlmaWVz
IGZvciBzaGFyZWQgcHJlcGVuZAogICAgICAgICAvLyAtIGFsc28sIGl0J3MgYXQgbGVhc3QgYSBx
dWFydGVyIHRoZSBsZW5ndGggb2YgYSAtIHByZXBlbmRpbmcgdG8gYSBtdWNoIHNob3J0ZXIKICAg
ICAgICAgLy8gICBzdHJpbmcgZG9lcyBtb3JlIGhhcm0gdGhhbiBnb29kCkBAIC03NTAsNyArNzMy
LDcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCog
YSwgVVN0cmluZzo6UmVwKiBiKQogICAgIGNvcHlDaGFycyhkLCBhLT5kYXRhKCksIGFTaXplKTsK
ICAgICBjb3B5Q2hhcnMoZCArIGFTaXplLCBiLT5kYXRhKCksIGJTaXplKTsKICAgICBQYXNzUmVm
UHRyPFVTdHJpbmc6OlJlcD4gcmVzdWx0ID0gVVN0cmluZzo6UmVwOjpjcmVhdGUoZCwgbGVuZ3Ro
KTsKLSAgICByZXN1bHQtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgcmVzdWx0LT5iYXNl
U3RyaW5nKCktPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAKICAgICBhLT5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgYi0+Y2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTA1MSw2ICsxMDMzLDcgQEAg
VVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcgJnQpCiAgICAgaW50IHRoaXNP
ZmZzZXQgPSBtX3JlcC0+b2Zmc2V0OwogICAgIGludCB0U2l6ZSA9IHQuc2l6ZSgpOwogICAgIGlu
dCBsZW5ndGggPSB0aGlzU2l6ZSArIHRTaXplOworICAgIEJhc2VTdHJpbmcqIGJhc2UgPSBtX3Jl
cC0+YmFzZVN0cmluZygpOwogCiAgICAgLy8gcG9zc2libGUgY2FzZXM6CiAgICAgaWYgKHRoaXNT
aXplID09IDApIHsKQEAgLTEwNTgsNyArMTA0MSw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVu
ZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAqdGhpcyA9IHQ7CiAgICAgfSBlbHNlIGlmICh0
U2l6ZSA9PSAwKSB7CiAgICAgICAgIC8vIHQgaXMgZW1wdHkKLSAgICB9IGVsc2UgaWYgKG1fcmVw
LT5iYXNlSXNTZWxmKCkgJiYgbV9yZXAtPnJjID09IDEpIHsKKyAgICB9IGVsc2UgaWYgKG1fcmVw
ID09IGJhc2UgJiYgbV9yZXAtPnJjID09IDEpIHsKICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3Qg
YW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBhbHRlciBpdCBkaXJlY3RseSkK
ICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNldCArIGxlbmd0aCk7CiAgICAgICAgIGlm
IChkYXRhKCkpIHsKQEAgLTEwNjYsNyArMTA0OSw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVu
ZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAgICAgbV9yZXAtPmxlbiA9IGxlbmd0aDsKICAg
ICAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRo
aXNPZmZzZXQgKyB0aGlzU2l6ZSA9PSB1c2VkQ2FwYWNpdHkoKSAmJiB0aGlzU2l6ZSA+PSBtaW5T
aGFyZVNpemUpIHsKKyAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyB0aGlzU2l6ZSA9PSBiYXNl
LT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CiAgICAgICAgIC8v
IHRoaXMgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgLSBleHRlbmQgaXQgaWYgaXQncyBs
b25nIGVub3VnaCB0byBhcHBlbmQgdG8KICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNl
dCArIGxlbmd0aCk7CiAgICAgICAgIGlmIChkYXRhKCkpIHsKQEAgLTEwODMsNyArMTA2Niw3IEBA
IFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAgICAg
Y29weUNoYXJzKGQsIGRhdGEoKSwgdGhpc1NpemUpOwogICAgICAgICAgICAgY29weUNoYXJzKGQg
KyB0aGlzU2l6ZSwgdC5kYXRhKCksIHRTaXplKTsKICAgICAgICAgICAgIG1fcmVwID0gUmVwOjpj
cmVhdGUoZCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIG1fcmVwLT5jYXBhY2l0eSA9IG5ld0NhcGFj
aXR5OworICAgICAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNpdHkgPSBuZXdDYXBh
Y2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTExMSw2ICsxMDk0LDcgQEAgVVN0cmluZyYg
VVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAKICAgICBpbnQgdGhpc09mZnNldCA9IG1fcmVwLT5v
ZmZzZXQ7CiAgICAgaW50IGxlbmd0aCA9IHNpemUoKTsKKyAgICBCYXNlU3RyaW5nKiBiYXNlID0g
bV9yZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxlIGNhc2VzOgogICAgIGlmIChs
ZW5ndGggPT0gMCkgewpAQCAtMTEyMiw5ICsxMTA2LDkgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBw
ZW5kKFVDaGFyIGMpCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZFswXSA9IGM7CiAgICAg
ICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIDEpOwotICAgICAgICAgICAgbV9yZXAtPmNh
cGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3JlcC0+YmFzZVN0cmluZygpLT5j
YXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3JlcC0+
YmFzZUlzU2VsZigpICYmIG1fcmVwLT5yYyA9PSAxKSB7CisgICAgfSBlbHNlIGlmIChtX3JlcCA9
PSBiYXNlICYmIG1fcmVwLT5yYyA9PSAxKSB7CiAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFu
ZCBoYXMgcmVmY291bnQgb2YgMSAoc28gd2UgY2FuIGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAg
ICAgICAgIGV4cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQgKyBsZW5ndGggKyAxKTsKICAgICAgICAg
VUNoYXIqIGQgPSBtX3JlcC0+ZGF0YSgpOwpAQCAtMTEzMyw3ICsxMTE3LDcgQEAgVVN0cmluZyYg
VVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgICAgICAgICBtX3JlcC0+bGVuID0gbGVuZ3Ro
ICsgMTsKICAgICAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKHRoaXNPZmZzZXQgKyBsZW5ndGggPT0gdXNlZENhcGFjaXR5KCkgJiYgbGVuZ3RoID49
IG1pblNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIGxlbmd0aCA9PSBi
YXNlLT51c2VkQ2FwYWNpdHkgJiYgbGVuZ3RoID49IG1pblNoYXJlU2l6ZSkgewogICAgICAgICAv
LyB0aGlzIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIC0gZXh0ZW5kIGl0IGFuZCBzaGFy
ZQogICAgICAgICBleHBhbmRDYXBhY2l0eSh0aGlzT2Zmc2V0ICsgbGVuZ3RoICsgMSk7CiAgICAg
ICAgIFVDaGFyKiBkID0gbV9yZXAtPmRhdGEoKTsKQEAgLTExNTEsNyArMTEzNSw3IEBAIFVTdHJp
bmcmIFVTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICAgICAgY29weUNoYXJzKGQsIGRh
dGEoKSwgbGVuZ3RoKTsKICAgICAgICAgICAgIGRbbGVuZ3RoXSA9IGM7CiAgICAgICAgICAgICBt
X3JlcCA9IFJlcDo6Y3JlYXRlKGQsIGxlbmd0aCArIDEpOwotICAgICAgICAgICAgbV9yZXAtPmNh
cGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3JlcC0+YmFzZVN0cmluZygpLT5j
YXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjE3LDggKzEy
MDEsOSBAQCBVU3RyaW5nJiBVU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgY2hhciogYykKIAogICAg
IGludCBsID0gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4oYykpOwogICAgIFVDaGFyKiBkOwotICAg
IGlmIChtX3JlcC0+cmMgPT0gMSAmJiBsIDw9IG1fcmVwLT5jYXBhY2l0eSAmJiBtX3JlcC0+YmFz
ZUlzU2VsZigpICYmIG1fcmVwLT5vZmZzZXQgPT0gMCAmJiBtX3JlcC0+cHJlQ2FwYWNpdHkgPT0g
MCkgewotICAgICAgICBkID0gbV9yZXAtPmJ1ZjsKKyAgICBCYXNlU3RyaW5nKiBiYXNlID0gbV9y
ZXAtPmJhc2VTdHJpbmcoKTsKKyAgICBpZiAobV9yZXAtPnJjID09IDEgJiYgbCA8PSBiYXNlLT5j
YXBhY2l0eSAmJiBtX3JlcCA9PSBiYXNlICYmIG1fcmVwLT5vZmZzZXQgPT0gMCAmJiBiYXNlLT5w
cmVDYXBhY2l0eSA9PSAwKSB7CisgICAgICAgIGQgPSBiYXNlLT5idWY7CiAgICAgICAgIG1fcmVw
LT5faGFzaCA9IDA7CiAgICAgICAgIG1fcmVwLT5sZW4gPSBsOwogICAgIH0gZWxzZSB7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5oCmluZGV4IGI2Y2QxNTguLjFjMmZlNjYgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVVN0cmluZy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5j
bHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNzYsNyArNzUs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RydWN0IFJlcCB7CisgICAgICAgIHN0cnVjdCBCYXNlU3RyaW5nOwor
ICAgICAgICBzdHJ1Y3QgUmVwIDogTm9uY29weWFibGUgewogICAgICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVDsKIAogICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwPiBjcmVhdGUoVUNo
YXIqLCBpbnQpOwpAQCAtODksOCArODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAg
ICAgdm9pZCBkZXN0cm95KCk7CiAKLSAgICAgICAgICAgIGJvb2wgYmFzZUlzU2VsZigpIGNvbnN0
IHsgcmV0dXJuIGJhc2VTdHJpbmcgPT0gdGhpczsgfQotICAgICAgICAgICAgVUNoYXIqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBiYXNlU3RyaW5nLT5idWYgKyBiYXNlU3RyaW5nLT5wcmVDYXBhY2l0
eSArIG9mZnNldDsgfQorICAgICAgICAgICAgYm9vbCBiYXNlSXNTZWxmKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5pc0ZsYWdTZXQoQmFzZVN0cmluZ0ZsYWcpOyB9
CisgICAgICAgICAgICBVQ2hhciogZGF0YSgpIGNvbnN0OwogICAgICAgICAgICAgaW50IHNpemUo
KSBjb25zdCB7IHJldHVybiBsZW47IH0KIAogICAgICAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgaWYgKF9oYXNoID09IDApIF9oYXNoID0gY29tcHV0ZUhhc2goZGF0YSgpLCBsZW4pOyBy
ZXR1cm4gX2hhc2g7IH0KQEAgLTEwNiwxMiArMTA2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllclRhYmxl
QW5kRmxhZ3MuaXNGbGFnU2V0KFN0YXRpY0ZsYWcpOyB9CiAgICAgICAgICAgICB2b2lkIHNldFN0
YXRpYyhib29sIHYpIHsgQVNTRVJUKCFpZGVudGlmaWVyVGFibGUoKSk7IGlmICh2KSBtX2lkZW50
aWZpZXJUYWJsZUFuZEZsYWdzLnNldEZsYWcoU3RhdGljRmxhZyk7IGVsc2UgbV9pZGVudGlmaWVy
VGFibGVBbmRGbGFncy5jbGVhckZsYWcoU3RhdGljRmxhZyk7IH0KIAorICAgICAgICAgICAgdm9p
ZCBzZXRCYXNlU3RyaW5nKFBhc3NSZWZQdHI8QmFzZVN0cmluZz4gYmFzZSkgeyBBU1NFUlQoYmFz
ZSAhPSB0aGlzKTsgbV9iYXNlU3RyaW5nID0gYmFzZS5yZWxlYXNlUmVmKCk7IH0KKyAgICAgICAg
ICAgIEJhc2VTdHJpbmcqIGJhc2VTdHJpbmcoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJh
c2VTdHJpbmcqPihiYXNlSXNTZWxmKCkgPyB0aGlzIDogbV9iYXNlU3RyaW5nKTsgfQorICAgICAg
ICAgICAgY29uc3QgQmFzZVN0cmluZyogYmFzZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Y29uc3QgQmFzZVN0cmluZyo+KGNvbnN0X2Nhc3Q8UmVwKj4odGhpcyktPmJhc2VTdHJp
bmcoKSk7ICB9CisKICAgICAgICAgICAgIFJlcCogcmVmKCkgeyArK3JjOyByZXR1cm4gdGhpczsg
fQogICAgICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRlcmVmKCkgeyBpZiAoLS1yYyA9PSAw
KSBkZXN0cm95KCk7IH0KIAogICAgICAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29u
c3Q7CiAgICAgICAgICAgICBlbnVtIFVTdHJpbmdGbGFncyB7Ci0gICAgICAgICAgICAgICAgU3Rh
dGljRmxhZworICAgICAgICAgICAgICAgIFN0YXRpY0ZsYWcsCisgICAgICAgICAgICAgICAgQmFz
ZVN0cmluZ0ZsYWcKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIC8vIHVuc2hhcmVkIGRh
dGEKQEAgLTEyMCwyMiArMTI1LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW50
IHJjOyAvLyBGb3IgbnVsbCBhbmQgZW1wdHkgc3RhdGljIHN0cmluZ3MsIHRoaXMgZmllbGQgZG9l
cyBub3QgcmVmbGVjdCBhIGNvcnJlY3QgY291bnQsIGJlY2F1c2UgcmVmL2RlcmVmIGFyZSBub3Qg
dGhyZWFkLXNhZmUuIEEgc3BlY2lhbCBjYXNlIGluIGRlc3Ryb3koKSBndWFyYW50ZWVzIHRoYXQg
dGhlc2UgZG8gbm90IGdldCBkZWxldGVkLgogICAgICAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBf
aGFzaDsKICAgICAgICAgICAgIFB0ckFuZEZsYWdzPElkZW50aWZpZXJUYWJsZSwgVVN0cmluZ0Zs
YWdzPiBtX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzOwotICAgICAgICAgICAgVVN0cmluZzo6UmVw
KiBiYXNlU3RyaW5nOwotICAgICAgICAgICAgc2l6ZV90IHJlcG9ydGVkQ29zdDsKKyAgICAgICAg
ICAgIHZvaWQqIG1fYmFzZVN0cmluZzsgLy8gSWYgInRoaXMiIGlzIGEgQmFzZVN0cmluZyBpbnN0
YW5jZSwgaXQgaXMgMC4gQmFzZVN0cmluZyogb3RoZXJ3aXNlLgorCisgICAgICAgICAgICBzdGF0
aWMgQmFzZVN0cmluZyYgbnVsbCgpIHsgcmV0dXJuICpudWxsQmFzZVN0cmluZzsgfQorICAgICAg
ICAgICAgc3RhdGljIEJhc2VTdHJpbmcmIGVtcHR5KCkgeyByZXR1cm4gKmVtcHR5QmFzZVN0cmlu
ZzsgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgZnJpZW5kIHZvaWQgaW5pdGlhbGl6
ZVVTdHJpbmcoKTsKKyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nKiBudWxsQmFzZVN0cmlu
ZzsKKyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nKiBlbXB0eUJhc2VTdHJpbmc7CisgICAg
ICAgIH07CiAKLSAgICAgICAgICAgIC8vIHBvdGVudGlhbGx5IHNoYXJlZCBkYXRhLiAwIGlmIGJh
Y2tlZCB1cCBieSBhIGJhc2Ugc3RyaW5nLgorICAgICAgICBzdHJ1Y3QgQmFzZVN0cmluZyA6IHB1
YmxpYyBSZXAgeworICAgICAgICAgICAgQmFzZVN0cmluZygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFnKEJhc2VTdHJpbmdG
bGFnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcG90ZW50aWFsbHkgc2hhcmVk
IGRhdGEuCiAgICAgICAgICAgICBVQ2hhciogYnVmOwotICAgICAgICAgICAgaW50IHVzZWRDYXBh
Y2l0eTsKLSAgICAgICAgICAgIGludCBjYXBhY2l0eTsKLSAgICAgICAgICAgIGludCB1c2VkUHJl
Q2FwYWNpdHk7CiAgICAgICAgICAgICBpbnQgcHJlQ2FwYWNpdHk7CisgICAgICAgICAgICBpbnQg
dXNlZFByZUNhcGFjaXR5OworICAgICAgICAgICAgaW50IGNhcGFjaXR5OworICAgICAgICAgICAg
aW50IHVzZWRDYXBhY2l0eTsKIAotICAgICAgICAgICAgc3RhdGljIFJlcCYgbnVsbCgpIHsgcmV0
dXJuICpudWxsQmFzZVN0cmluZzsgfQotICAgICAgICAgICAgc3RhdGljIFJlcCYgZW1wdHkoKSB7
IHJldHVybiAqZW1wdHlCYXNlU3RyaW5nOyB9Ci0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAg
ICBmcmllbmQgdm9pZCBpbml0aWFsaXplVVN0cmluZygpOwotICAgICAgICAgICAgc3RhdGljIFJl
cCogbnVsbEJhc2VTdHJpbmc7Ci0gICAgICAgICAgICBzdGF0aWMgUmVwKiBlbXB0eUJhc2VTdHJp
bmc7CisgICAgICAgICAgICBzaXplX3QgcmVwb3J0ZWRDb3N0OwogICAgICAgICB9OwogCiAgICAg
cHVibGljOgpAQCAtMjUzLDggKzI2Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXpl
X3QgY29zdCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHVzZWRDYXBhY2l0
eSgpIGNvbnN0OwotICAgICAgICBpbnQgdXNlZFByZUNhcGFjaXR5KCkgY29uc3Q7CiAgICAgICAg
IHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IHJlcXVpcmVkTGVuZ3RoKTsKICAgICAgICAgdm9pZCBl
eHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdWlyZWRQcmVDYXApOwogICAgICAgICB2b2lkIG1ha2VO
dWxsKCk7CkBAIC0zMDksNiArMzIwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgYm9vbCBl
cXVhbChjb25zdCBVU3RyaW5nOjpSZXAqLCBjb25zdCBVU3RyaW5nOjpSZXAqKTsKIAorICAgIGlu
bGluZSBVQ2hhciogVVN0cmluZzo6UmVwOjpkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIGNv
bnN0IFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSBiYXNlU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiBiYXNlLT5idWYgKyBiYXNlLT5wcmVDYXBhY2l0eSArIG9mZnNldDsKKyAgICB9CisKICNp
ZmRlZiBOREVCVUcKICAgICBpbmxpbmUgdm9pZCBVU3RyaW5nOjpSZXA6OmNoZWNrQ29uc2lzdGVu
Y3koKSBjb25zdAogICAgIHsKQEAgLTMzOSw4ICszNTYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGlubGluZSBzaXplX3QgVVN0cmluZzo6Y29zdCgpIGNvbnN0CiAgICAgewotICAgICAgICBz
aXplX3QgY2FwYWNpdHkgPSAobV9yZXAtPmJhc2VTdHJpbmctPmNhcGFjaXR5ICsgbV9yZXAtPmJh
c2VTdHJpbmctPnByZUNhcGFjaXR5KSAqIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIHNpemVfdCBy
ZXBvcnRlZENvc3QgPSBtX3JlcC0+YmFzZVN0cmluZy0+cmVwb3J0ZWRDb3N0OworICAgICAgICBV
U3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKKyAgICAgICAg
c2l6ZV90IGNhcGFjaXR5ID0gKGJhc2UtPmNhcGFjaXR5ICsgYmFzZS0+cHJlQ2FwYWNpdHkpICog
c2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgc2l6ZV90IHJlcG9ydGVkQ29zdCA9IGJhc2UtPnJlcG9y
dGVkQ29zdDsKICAgICAgICAgQVNTRVJUKGNhcGFjaXR5ID49IHJlcG9ydGVkQ29zdCk7CiAKICAg
ICAgICAgc2l6ZV90IGNhcGFjaXR5RGVsdGEgPSBjYXBhY2l0eSAtIHJlcG9ydGVkQ29zdDsKQEAg
LTM0OCw3ICszNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKGNhcGFjaXR5RGVs
dGEgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1pblNoYXJlU2l6ZSkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKIAotICAgICAgICBtX3JlcC0+YmFzZVN0cmluZy0+cmVwb3J0ZWRDb3N0ID0gY2FwYWNp
dHk7CisgICAgICAgIGJhc2UtPnJlcG9ydGVkQ29zdCA9IGNhcGFjaXR5OwogCiAgICAgICAgIHJl
dHVybiBjYXBhY2l0eURlbHRhOwogICAgIH0K
</data>
<flag name="review"
          id="12651"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26618</attachid>
            <date>2009-01-11 16:51:55 -0800</date>
            <delta_ts>2009-01-29 13:57:51 -0800</delta_ts>
            <desc>Addressed comments -- Part 2: Refactor UString::Rep into two classes which reduces memory usage for the base Rep class.</desc>
            <filename>patch-for-bug23175_part2_rev2.txt</filename>
            <type>text/plain</type>
            <size>29044</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3OTE3NzgxLi4xOTY1NjNhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMDktMDEtMTEgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKworICAgICAgICBTZXBhcmF0ZSBvdXQgQmFzZVN0cmlu
ZyBpbmZvcm1hdGlvbiBmcm9tIFVTdHJpbmc6OlJlcCBhbmQgbWFrZSBhbGwgYmFzZVN0cmluZyBh
Y2Nlc3MgZ28gdGhyb3VnaAorICAgICAgICBhIG1lbWJlciBmdW5jdGlvbiwgc28gdGhhdCBpdCBt
YXkgYmUgdXNlZCBmb3Igc29tZXRoaW5nIGVsc2UgKGluIHRoZSBmdXR1cmUpIGluIHRoZSBCYXNl
U3RyaW5nCisgICAgICAgIGNhc2UuCisKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHA6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nc1N0b3JhZ2U6OnJlcCk6CisgICAgICAgIChK
U0M6OlNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3M6OlNtYWxsU3RyaW5ncyk6CisgICAgICAgIChKU0M6OlNtYWxsU3Ry
aW5nczo6bWFyayk6CisgICAgICAgIEFkanVzdCB0byBhY2NvdW50IGZvciB0aGUgY2hhbmdlcyBp
biBVU3RyaW5nIGFuZCBwdXQgdGhlIFVTdHJpbmcgaW4gcGxhY2UgaW4KKyAgICAgICAgU21hbGxT
dHJpbmdzU3RvcmFnZSB0byBhaWQgaW4gbG9jYWxpdHkgb2YgcmVmZXJlbmNlIGFtb25nIHRoZSBV
Q2hhcltdIGFuZCBVU3RyaW5nOjpSZXAncy4KKworICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJp
bmdzLmg6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5p
dGlhbGl6ZVN0YXRpY0Jhc2VTdHJpbmcpOgorICAgICAgICAoSlNDOjppbml0aWFsaXplVVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6UmVwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6ZXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAo
SlNDOjpVU3RyaW5nOjpleHBhbmRQcmVDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OmNvbmNhdGVu
YXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6VVN0
cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6UmVwOjpiYXNlSXNTZWxmKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
UmVwOjpzZXRCYXNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpiYXNlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjopOgorICAgICAgICAoSlNDOjpVU3Ry
aW5nOjpSZXA6Om51bGwpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmVtcHR5KToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpkYXRhKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
Y29zdCk6CisgICAgICAgIFNlcGFyYXRlIG91dCB0aGUgaXRlbXMgb3V0IHVzZWQgYnkgYmFzZSBz
dHJpbmdzIGZyb20gdGhvc2UgdXNlZCBpbiBSZXAncyB0aGF0IG9ubHkKKyAgICAgICAgcG9pbnQg
dG8gYmFzZSBzdHJpbmdzLiAgKFRoaXMgcG90ZW50aWFsbHkgc2F2ZXMgMjQgYnl0ZXMgcGVyIFJl
cC4pCisKIDIwMDktMDEtMTEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKEJ1aWxkIGZpeCkuCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5jcHAKaW5kZXggMDY4MTFiOS4uMjIzOTEzZCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcApAQCAtMjksNDggKzI5LDYxIEBACiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKIG5hbWVzcGFjZSBKU0Mgeworc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bUNoYXJhY3RlcnNUb1N0b3JlID0gMHgxMDA7CiAKLWNsYXNzIFNtYWxsU3RyaW5nc1N0b3Jh
Z2UgeworY2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZSA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
ICAgICBTbWFsbFN0cmluZ3NTdG9yYWdlKCk7Ci0gICAgflNtYWxsU3RyaW5nc1N0b3JhZ2UoKTsK
IAotICAgIFVTdHJpbmc6OlJlcCogcmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJldHVy
biAmcmVwc1tjaGFyYWN0ZXJdOyB9CisgICAgVVN0cmluZzo6UmVwKiByZXAodW5zaWduZWQgY2hh
ciBjaGFyYWN0ZXIpIHsgcmV0dXJuICZtX3JlcHNbY2hhcmFjdGVyXTsgfQogCiBwcml2YXRlOgot
ICAgIFVDaGFyIGNoYXJhY3RlcnNbMHgxMDBdOwotICAgIFVTdHJpbmc6OlJlcCogcmVwczsKKyAg
ICBVQ2hhciBtX2NoYXJhY3RlcnNbbnVtQ2hhcmFjdGVyc1RvU3RvcmVdOworICAgIFVTdHJpbmc6
OkJhc2VTdHJpbmcgbV9iYXNlOworICAgIFVTdHJpbmc6OlJlcCBtX3JlcHNbbnVtQ2hhcmFjdGVy
c1RvU3RvcmVdOwogfTsKIAogU21hbGxTdHJpbmdzU3RvcmFnZTo6U21hbGxTdHJpbmdzU3RvcmFn
ZSgpCi0gICAgOiByZXBzKHN0YXRpY19jYXN0PFVTdHJpbmc6OlJlcCo+KGZhc3RaZXJvZWRNYWxs
b2Moc2l6ZW9mKFVTdHJpbmc6OlJlcCkgKiAweDEwMCkpKQogewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAweDEwMDsgKytpKSB7Ci0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSBpOwotICAg
ICAgICByZXBzW2ldLm9mZnNldCA9IGk7Ci0gICAgICAgIHJlcHNbaV0ubGVuID0gMTsKLSAgICAg
ICAgcmVwc1tpXS5yYyA9IDE7Ci0gICAgICAgIHJlcHNbaV0uYmFzZVN0cmluZyA9ICZyZXBzWzBd
OwotICAgIH0KLSAgICByZXBzWzBdLnJjID0gMHgxMDE7Ci0gICAgcmVwc1swXS5idWYgPSBjaGFy
YWN0ZXJzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9y
ZTsgKytpKQorICAgICAgICBtX2NoYXJhY3RlcnNbaV0gPSBpOworCisgICAgbV9iYXNlLnJjID0g
bnVtQ2hhcmFjdGVyc1RvU3RvcmUgKyAxOworICAgIG1fYmFzZS5idWYgPSBtX2NoYXJhY3RlcnM7
CisgICAgbV9iYXNlLmxlbiA9IG51bUNoYXJhY3RlcnNUb1N0b3JlOworICAgIG1fYmFzZS5vZmZz
ZXQgPSAwOworICAgIG1fYmFzZS5faGFzaCA9IDA7CisgICAgbV9iYXNlLm1fYmFzZVN0cmluZyA9
IDA7CisgICAgbV9iYXNlLnByZUNhcGFjaXR5ID0gMDsKKyAgICBtX2Jhc2UudXNlZFByZUNhcGFj
aXR5ID0gMDsKKyAgICBtX2Jhc2UucmVwb3J0ZWRDb3N0ID0gMDsKIAogICAgIC8vIG1ha2Ugc3Vy
ZSBVU3RyaW5nIGRvZXNuJ3QgdHJ5IHRvIHJldXNlIHRoZSBidWZmZXIgYnkgcHJldGVuZGluZyB3
ZSBoYXZlIG9uZSBtb3JlIGNoYXJhY3RlciBpbiBpdAotICAgIHJlcHNbMF0udXNlZENhcGFjaXR5
ID0gMHgxMDE7Ci0gICAgcmVwc1swXS5jYXBhY2l0eSA9IDB4MTAxOwotfQorICAgIG1fYmFzZS51
c2VkQ2FwYWNpdHkgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7CisgICAgbV9iYXNlLmNhcGFj
aXR5ID0gbnVtQ2hhcmFjdGVyc1RvU3RvcmUgKyAxOworICAgIG1fYmFzZS5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAKLVNtYWxsU3RyaW5nc1N0b3JhZ2U6On5TbWFsbFN0cmluZ3NTdG9yYWdlKCkKLXsK
LSAgICBmYXN0RnJlZShyZXBzKTsKKyAgICBtZW1zZXQoJm1fcmVwcywgMCwgc2l6ZW9mKG1fcmVw
cykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsg
KytpKSB7CisgICAgICAgIG1fcmVwc1tpXS5vZmZzZXQgPSBpOworICAgICAgICBtX3JlcHNbaV0u
bGVuID0gMTsKKyAgICAgICAgbV9yZXBzW2ldLnJjID0gMTsKKyAgICAgICAgbV9yZXBzW2ldLnNl
dEJhc2VTdHJpbmcoJm1fYmFzZSk7CisgICAgICAgIG1fcmVwc1tpXS5jaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgfQogfQogCiBTbWFsbFN0cmluZ3M6OlNtYWxsU3RyaW5ncygpCiAgICAgOiBtX2Vt
cHR5U3RyaW5nKDApCiAgICAgLCBtX3N0b3JhZ2UoMCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMHgxMDA7ICsraSkKKyAgICBDT01QSUxFX0FTU0VSVChudW1DaGFyYWN0ZXJzVG9T
dG9yZSA9PSBzaXplb2YoU21hbGxTdHJpbmdzOjptX3NpbmdsZUNoYXJhY3RlclN0cmluZ3MpIC8g
c2l6ZW9mKFNtYWxsU3RyaW5nczo6bV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzBdKSwgCisgICAg
ICAgICAgICAgICAgICAgV1RGX0lzTnVtQ2hhcmFjdGVyc0NvbnN0SW5TeW5jV2l0aENsYXNzVXNh
Z2UpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnNUb1N0b3Jl
OyArK2kpCiAgICAgICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSA9IDA7CiB9CiAKQEAg
LTgyLDcgKzk1LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6Om1hcmsoKQogewogICAgIGlmIChtX2Vt
cHR5U3RyaW5nICYmICFtX2VtcHR5U3RyaW5nLT5tYXJrZWQoKSkKICAgICAgICAgbV9lbXB0eVN0
cmluZy0+bWFyaygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAweDEwMDsgKytpKSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnNUb1N0b3JlOyArK2kp
IHsKICAgICAgICAgaWYgKG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSAmJiAhbV9zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzW2ldLT5tYXJrZWQoKSkKICAgICAgICAgICAgIG1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nc1tpXS0+bWFyaygpOwogICAgIH0KQEAgLTEwOSw0ICsxMjIsNCBAQCBVU3RyaW5n
OjpSZXAqIFNtYWxsU3RyaW5nczo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNo
YXIgY2hhcmFjdGVyKQogICAgIHJldHVybiBtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpOwogfQog
Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5o
CmluZGV4IDdlNWY1YzguLjc3MjcyMWEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmlu
Z3MuaApAQCAtNTUsOSArNTUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
ICAgIFVTdHJpbmc6OlJlcCogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNoYXIg
Y2hhcmFjdGVyKTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBtYXJrKCk7Ci0gICAgICAgIAor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2JhbERh
dGEqKTsKICAgICAgICAgdm9pZCBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9iYWxE
YXRhKiwgdW5zaWduZWQgY2hhcik7CkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU1N0cmluZyogbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzB4MTAwXTsKICAgICAg
ICAgT3duUHRyPFNtYWxsU3RyaW5nc1N0b3JhZ2U+IG1fc3RvcmFnZTsKICAgICB9OwotICAgIAot
fQogCi0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU21hbGxTdHJpbmdz
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCmluZGV4IDQ2ZGJkMDkuLjk2NDg0M2IgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcApAQCAtMTg3LDMyICsxODcsMzMgQEAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTdHJpbmcmIGMxLCBjb25zdCBDU3RyaW5nJiBjMikKIC8vIFRoZXNl
IHN0YXRpYyBzdHJpbmdzIGFyZSBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmMsIHdob3NlIGluaXRp
YWwgdmFsdWUgaXMgY2hvc2VuIHRvIAogLy8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSBvZiBpdCBi
ZWNvbWluZyB6ZXJvIGR1ZSB0byByZWYvZGVyZWYgbm90IGJlaW5nIHRocmVhZC1zYWZlLgogc3Rh
dGljIFVDaGFyIHNoYXJlZEVtcHR5Q2hhcjsKLVVTdHJpbmc6OlJlcCogVVN0cmluZzo6UmVwOjpu
dWxsQmFzZVN0cmluZzsKLVVTdHJpbmc6OlJlcCogVVN0cmluZzo6UmVwOjplbXB0eUJhc2VTdHJp
bmc7CitVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5nOjpSZXA6Om51bGxCYXNlU3RyaW5nOwor
VVN0cmluZzo6QmFzZVN0cmluZyogVVN0cmluZzo6UmVwOjplbXB0eUJhc2VTdHJpbmc7CiBVU3Ry
aW5nKiBVU3RyaW5nOjpudWxsVVN0cmluZzsKIAotdm9pZCBpbml0aWFsaXplU3RhdGljQmFzZVN0
cmluZyhpbnQgbGVuLCBVQ2hhciogYnVmLCBVU3RyaW5nOjpSZXAmIGJhc2UpCit2b2lkIGluaXRp
YWxpemVTdGF0aWNCYXNlU3RyaW5nKGludCBsZW4sIFVDaGFyKiBidWYsIFVTdHJpbmc6OkJhc2VT
dHJpbmcmIGJhc2UpCiB7CiAgICAgYmFzZS5vZmZzZXQgPSAwOwogICAgIGJhc2UubGVuID0gbGVu
OwogICAgIGJhc2UucmMgPSBJTlRfTUFYIC8gMjsKICAgICBiYXNlLl9oYXNoID0gMDsKICAgICBi
YXNlLm1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3Muc2V0RmxhZyhVU3RyaW5nOjpSZXA6OlN0YXRp
Y0ZsYWcpOwotICAgIGJhc2UuYmFzZVN0cmluZyA9ICZiYXNlOworICAgIGJhc2UubV9iYXNlU3Ry
aW5nID0gMDsKICAgICBiYXNlLmJ1ZiA9IGJ1ZjsKICAgICBiYXNlLnByZUNhcGFjaXR5ID0gMDsK
ICAgICBiYXNlLnVzZWRQcmVDYXBhY2l0eSA9IDA7CiAgICAgYmFzZS5jYXBhY2l0eSA9IDA7CiAg
ICAgYmFzZS51c2VkQ2FwYWNpdHkgPSAwOwogICAgIGJhc2UucmVwb3J0ZWRDb3N0ID0gMDsKKyAg
ICBiYXNlLmNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAogdm9pZCBpbml0aWFsaXplVVN0cmluZygp
CiB7Ci0gICAgVVN0cmluZzo6UmVwOjpudWxsQmFzZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpSZXA7
CisgICAgVVN0cmluZzo6UmVwOjpudWxsQmFzZVN0cmluZyA9IG5ldyBVU3RyaW5nOjpCYXNlU3Ry
aW5nOwogICAgIGluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKDAsIDAsICpVU3RyaW5nOjpSZXA6
Om51bGxCYXNlU3RyaW5nKTsKIAotICAgIFVTdHJpbmc6OlJlcDo6ZW1wdHlCYXNlU3RyaW5nID0g
bmV3IFVTdHJpbmc6OlJlcDsKKyAgICBVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZyA9IG5l
dyBVU3RyaW5nOjpCYXNlU3RyaW5nOwogICAgIGluaXRpYWxpemVTdGF0aWNCYXNlU3RyaW5nKDAs
ICZzaGFyZWRFbXB0eUNoYXIsICpVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmluZyk7CiAKICAg
ICBVU3RyaW5nOjpudWxsVVN0cmluZyA9IG5ldyBVU3RyaW5nOwpAQCAtMjI5LDEyICsyMzAsMTIg
QEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyhj
b25zdCBVQ2hhciogZCwgaW50IGwpCiAKIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5n
OjpSZXA6OmNyZWF0ZShVQ2hhciogZCwgaW50IGwpCiB7Ci0gICAgUmVwKiByID0gbmV3IFJlcDsK
KyAgICBCYXNlU3RyaW5nKiByID0gbmV3IEJhc2VTdHJpbmc7CiAgICAgci0+b2Zmc2V0ID0gMDsK
ICAgICByLT5sZW4gPSBsOwogICAgIHItPnJjID0gMTsKICAgICByLT5faGFzaCA9IDA7Ci0gICAg
ci0+YmFzZVN0cmluZyA9IHI7CisgICAgci0+bV9iYXNlU3RyaW5nID0gMDsKICAgICByLT5yZXBv
cnRlZENvc3QgPSAwOwogICAgIHItPmJ1ZiA9IGQ7CiAgICAgci0+dXNlZENhcGFjaXR5ID0gbDsK
QEAgLTI0OCwzMCArMjQ5LDI0IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpS
ZXA6OmNyZWF0ZShVQ2hhciogZCwgaW50IGwpCiAgICAgcmV0dXJuIGFkb3B0UmVmKHIpOwogfQog
Ci1QYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoUGFzc1JlZlB0
cjxSZXA+IGJhc2UsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFVTdHJpbmc6
OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoUGFzc1JlZlB0cjxSZXA+IHJlcCwgaW50IG9mZnNl
dCwgaW50IGxlbmd0aCkKIHsKLSAgICBBU1NFUlQoYmFzZSk7Ci0gICAgYmFzZS0+Y2hlY2tDb25z
aXN0ZW5jeSgpOworICAgIEFTU0VSVChyZXApOworICAgIHJlcC0+Y2hlY2tDb25zaXN0ZW5jeSgp
OwogCi0gICAgaW50IGJhc2VPZmZzZXQgPSBiYXNlLT5vZmZzZXQ7CisgICAgaW50IHJlcE9mZnNl
dCA9IHJlcC0+b2Zmc2V0OwogCi0gICAgYmFzZSA9IGJhc2UtPmJhc2VTdHJpbmc7CisgICAgUGFz
c1JlZlB0cjxCYXNlU3RyaW5nPiBiYXNlID0gcmVwLT5iYXNlU3RyaW5nKCk7CiAKLSAgICBBU1NF
UlQoLShvZmZzZXQgKyBiYXNlT2Zmc2V0KSA8PSBiYXNlLT51c2VkUHJlQ2FwYWNpdHkpOwotICAg
IEFTU0VSVChvZmZzZXQgKyBiYXNlT2Zmc2V0ICsgbGVuZ3RoIDw9IGJhc2UtPnVzZWRDYXBhY2l0
eSk7CisgICAgQVNTRVJUKC0ob2Zmc2V0ICsgcmVwT2Zmc2V0KSA8PSBiYXNlLT51c2VkUHJlQ2Fw
YWNpdHkpOworICAgIEFTU0VSVChvZmZzZXQgKyByZXBPZmZzZXQgKyBsZW5ndGggPD0gYmFzZS0+
dXNlZENhcGFjaXR5KTsKIAogICAgIFJlcCogciA9IG5ldyBSZXA7Ci0gICAgci0+b2Zmc2V0ID0g
YmFzZU9mZnNldCArIG9mZnNldDsKKyAgICByLT5vZmZzZXQgPSByZXBPZmZzZXQgKyBvZmZzZXQ7
CiAgICAgci0+bGVuID0gbGVuZ3RoOwogICAgIHItPnJjID0gMTsKICAgICByLT5faGFzaCA9IDA7
Ci0gICAgci0+YmFzZVN0cmluZyA9IGJhc2UucmVsZWFzZVJlZigpOwotICAgIHItPnJlcG9ydGVk
Q29zdCA9IDA7Ci0gICAgci0+YnVmID0gMDsKLSAgICByLT51c2VkQ2FwYWNpdHkgPSAwOwotICAg
IHItPmNhcGFjaXR5ID0gMDsKLSAgICByLT51c2VkUHJlQ2FwYWNpdHkgPSAwOwotICAgIHItPnBy
ZUNhcGFjaXR5ID0gMDsKKyAgICByLT5zZXRCYXNlU3RyaW5nKGJhc2UpOwogCiAgICAgci0+Y2hl
Y2tDb25zaXN0ZW5jeSgpOwogCkBAIC0zMDIsMTAgKzI5NywxMSBAQCB2b2lkIFVTdHJpbmc6OlJl
cDo6ZGVzdHJveSgpCiAgICAgaWYgKCFpc1N0YXRpYygpKSB7CiAgICAgICAgIGlmIChpZGVudGlm
aWVyVGFibGUoKSkKICAgICAgICAgICAgIElkZW50aWZpZXI6OnJlbW92ZSh0aGlzKTsKLSAgICAg
ICAgaWYgKGJhc2VTdHJpbmcgPT0gdGhpcykKLSAgICAgICAgICAgIGZhc3RGcmVlKGJ1Zik7Cisg
ICAgICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSBiYXNlU3RyaW5nKCk7CisgICAgICAg
IGlmIChiYXNlID09IHRoaXMpCisgICAgICAgICAgICBmYXN0RnJlZShiYXNlLT5idWYpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlU3RyaW5nLT5kZXJlZigpOworICAgICAgICAgICAg
YmFzZS0+ZGVyZWYoKTsKIAogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CkBAIC00MDcsMTcg
KzQwMywxMCBAQCB1bnNpZ25lZCBVU3RyaW5nOjpSZXA6OmNvbXB1dGVIYXNoKGNvbnN0IGNoYXIq
IHMsIGludCBsKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgVVN0cmluZzo6UmVwOjpjaGVja0NvbnNp
c3RlbmN5KCkgY29uc3QKIHsKLSAgICAvLyBPbmx5IGJhc2Ugc3RyaW5ncyBoYXZlIG5vbi16ZXJv
IHNoYXJlZCBkYXRhLgotICAgIGlmICh0aGlzICE9IGJhc2VTdHJpbmcpIHsKLSAgICAgICAgQVNT
RVJUKCFidWYpOwotICAgICAgICBBU1NFUlQoIXVzZWRDYXBhY2l0eSk7Ci0gICAgICAgIEFTU0VS
VCghY2FwYWNpdHkpOwotICAgICAgICBBU1NFUlQoIXVzZWRQcmVDYXBhY2l0eSk7Ci0gICAgICAg
IEFTU0VSVCghcHJlQ2FwYWNpdHkpOwotICAgIH0KKyAgICBjb25zdCBVU3RyaW5nOjpCYXNlU3Ry
aW5nKiBiYXNlID0gYmFzZVN0cmluZygpOwogCiAgICAgLy8gVGhlcmUgaXMgbm8gcmVjdXJzaW9u
IGZvciBiYXNlIHN0cmluZ3MuCi0gICAgQVNTRVJUKGJhc2VTdHJpbmcgPT0gYmFzZVN0cmluZy0+
YmFzZVN0cmluZyk7CisgICAgQVNTRVJUKGJhc2UgPT0gYmFzZS0+YmFzZVN0cmluZygpKTsKIAog
ICAgIGlmIChpc1N0YXRpYygpKSB7CiAgICAgICAgIC8vIFRoZXJlIGFyZSBvbmx5IHR3byBzdGF0
aWMgc3RyaW5nczogbnVsbCBhbmQgZW1wdHkuCkBAIC00MjgsMTAgKzQxNywxMCBAQCB2b2lkIFVT
dHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiAgICAgfQogCiAgICAgLy8gVGhl
IHN0cmluZyBmaXRzIGluIGJ1ZmZlci4KLSAgICBBU1NFUlQoYmFzZVN0cmluZy0+dXNlZFByZUNh
cGFjaXR5IDw9IGJhc2VTdHJpbmctPnByZUNhcGFjaXR5KTsKLSAgICBBU1NFUlQoYmFzZVN0cmlu
Zy0+dXNlZENhcGFjaXR5IDw9IGJhc2VTdHJpbmctPmNhcGFjaXR5KTsKLSAgICBBU1NFUlQoLW9m
ZnNldCA8PSBiYXNlU3RyaW5nLT51c2VkUHJlQ2FwYWNpdHkpOwotICAgIEFTU0VSVChvZmZzZXQg
KyBsZW4gPD0gYmFzZVN0cmluZy0+dXNlZENhcGFjaXR5KTsKKyAgICBBU1NFUlQoYmFzZS0+dXNl
ZFByZUNhcGFjaXR5IDw9IGJhc2UtPnByZUNhcGFjaXR5KTsKKyAgICBBU1NFUlQoYmFzZS0+dXNl
ZENhcGFjaXR5IDw9IGJhc2UtPmNhcGFjaXR5KTsKKyAgICBBU1NFUlQoLW9mZnNldCA8PSBiYXNl
LT51c2VkUHJlQ2FwYWNpdHkpOworICAgIEFTU0VSVChvZmZzZXQgKyBsZW4gPD0gYmFzZS0+dXNl
ZENhcGFjaXR5KTsKIH0KICNlbmRpZgogCkBAIC00NTEsMzUgKzQ0MCwyNCBAQCBzdGF0aWMgaW5s
aW5lIHNpemVfdCBleHBhbmRlZFNpemUoc2l6ZV90IHNpemUsIHNpemVfdCBvdGhlclNpemUpCiAg
ICAgcmV0dXJuIGV4cGFuZGVkU2l6ZSArIG90aGVyU2l6ZTsKIH0KIAotaW5saW5lIGludCBVU3Ry
aW5nOjp1c2VkQ2FwYWNpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcC0+YmFzZVN0cmlu
Zy0+dXNlZENhcGFjaXR5OwotfQotCi1pbmxpbmUgaW50IFVTdHJpbmc6OnVzZWRQcmVDYXBhY2l0
eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVwLT5iYXNlU3RyaW5nLT51c2VkUHJlQ2FwYWNp
dHk7Ci19Ci0KLQogc3RhdGljIGlubGluZSBib29sIGV4cGFuZENhcGFjaXR5KFVTdHJpbmc6OlJl
cCogcmVwLCBpbnQgcmVxdWlyZWRMZW5ndGgpCiB7CiAgICAgcmVwLT5jaGVja0NvbnNpc3RlbmN5
KCk7CiAKLSAgICBVU3RyaW5nOjpSZXAqIHIgPSByZXAtPmJhc2VTdHJpbmc7CisgICAgVVN0cmlu
Zzo6QmFzZVN0cmluZyogYmFzZSA9IHJlcC0+YmFzZVN0cmluZygpOwogCi0gICAgaWYgKHJlcXVp
cmVkTGVuZ3RoID4gci0+Y2FwYWNpdHkpIHsKLSAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0g
ZXhwYW5kZWRTaXplKHJlcXVpcmVkTGVuZ3RoLCByLT5wcmVDYXBhY2l0eSk7Ci0gICAgICAgIFVD
aGFyKiBvbGRCdWYgPSByLT5idWY7Ci0gICAgICAgIHItPmJ1ZiA9IHJlYWxsb2NDaGFycyhyLT5i
dWYsIG5ld0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKCFyLT5idWYpIHsKLSAgICAgICAgICAgIHIt
PmJ1ZiA9IG9sZEJ1ZjsKKyAgICBpZiAocmVxdWlyZWRMZW5ndGggPiBiYXNlLT5jYXBhY2l0eSkg
eworICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUocmVxdWlyZWRMZW5n
dGgsIGJhc2UtPnByZUNhcGFjaXR5KTsKKyAgICAgICAgVUNoYXIqIG9sZEJ1ZiA9IGJhc2UtPmJ1
ZjsKKyAgICAgICAgYmFzZS0+YnVmID0gcmVhbGxvY0NoYXJzKGJhc2UtPmJ1ZiwgbmV3Q2FwYWNp
dHkpOworICAgICAgICBpZiAoIWJhc2UtPmJ1ZikgeworICAgICAgICAgICAgYmFzZS0+YnVmID0g
b2xkQnVmOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHIt
PmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKKyAgICAgICAgYmFzZS0+
Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eSAtIGJhc2UtPnByZUNhcGFjaXR5OwogICAgIH0KLSAgICBp
ZiAocmVxdWlyZWRMZW5ndGggPiByLT51c2VkQ2FwYWNpdHkpCi0gICAgICAgIHItPnVzZWRDYXBh
Y2l0eSA9IHJlcXVpcmVkTGVuZ3RoOworICAgIGlmIChyZXF1aXJlZExlbmd0aCA+IGJhc2UtPnVz
ZWRDYXBhY2l0eSkKKyAgICAgICAgYmFzZS0+dXNlZENhcGFjaXR5ID0gcmVxdWlyZWRMZW5ndGg7
CiAKICAgICByZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5
NSwyNSArNDczLDI1IEBAIHZvaWQgVVN0cmluZzo6ZXhwYW5kUHJlQ2FwYWNpdHkoaW50IHJlcXVp
cmVkUHJlQ2FwKQogewogICAgIG1fcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBSZXAq
IHIgPSBtX3JlcC0+YmFzZVN0cmluZzsKKyAgICBCYXNlU3RyaW5nKiBiYXNlID0gbV9yZXAtPmJh
c2VTdHJpbmcoKTsKIAotICAgIGlmIChyZXF1aXJlZFByZUNhcCA+IHItPnByZUNhcGFjaXR5KSB7
Ci0gICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShyZXF1aXJlZFByZUNh
cCwgci0+Y2FwYWNpdHkpOwotICAgICAgICBpbnQgZGVsdGEgPSBuZXdDYXBhY2l0eSAtIHItPmNh
cGFjaXR5IC0gci0+cHJlQ2FwYWNpdHk7CisgICAgaWYgKHJlcXVpcmVkUHJlQ2FwID4gYmFzZS0+
cHJlQ2FwYWNpdHkpIHsKKyAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXpl
KHJlcXVpcmVkUHJlQ2FwLCBiYXNlLT5jYXBhY2l0eSk7CisgICAgICAgIGludCBkZWx0YSA9IG5l
d0NhcGFjaXR5IC0gYmFzZS0+Y2FwYWNpdHkgLSBiYXNlLT5wcmVDYXBhY2l0eTsKIAogICAgICAg
ICBVQ2hhciogbmV3QnVmID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICgh
bmV3QnVmKSB7CiAgICAgICAgICAgICBtYWtlTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGNvcHlDaGFycyhuZXdCdWYgKyBkZWx0YSwgci0+YnVmLCByLT5j
YXBhY2l0eSArIHItPnByZUNhcGFjaXR5KTsKLSAgICAgICAgZmFzdEZyZWUoci0+YnVmKTsKLSAg
ICAgICAgci0+YnVmID0gbmV3QnVmOworICAgICAgICBjb3B5Q2hhcnMobmV3QnVmICsgZGVsdGEs
IGJhc2UtPmJ1ZiwgYmFzZS0+Y2FwYWNpdHkgKyBiYXNlLT5wcmVDYXBhY2l0eSk7CisgICAgICAg
IGZhc3RGcmVlKGJhc2UtPmJ1Zik7CisgICAgICAgIGJhc2UtPmJ1ZiA9IG5ld0J1ZjsKIAotICAg
ICAgICByLT5wcmVDYXBhY2l0eSA9IG5ld0NhcGFjaXR5IC0gci0+Y2FwYWNpdHk7CisgICAgICAg
IGJhc2UtPnByZUNhcGFjaXR5ID0gbmV3Q2FwYWNpdHkgLSBiYXNlLT5jYXBhY2l0eTsKICAgICB9
Ci0gICAgaWYgKHJlcXVpcmVkUHJlQ2FwID4gci0+dXNlZFByZUNhcGFjaXR5KQotICAgICAgICBy
LT51c2VkUHJlQ2FwYWNpdHkgPSByZXF1aXJlZFByZUNhcDsKKyAgICBpZiAocmVxdWlyZWRQcmVD
YXAgPiBiYXNlLT51c2VkUHJlQ2FwYWNpdHkpCisgICAgICAgIGJhc2UtPnVzZWRQcmVDYXBhY2l0
eSA9IHJlcXVpcmVkUHJlQ2FwOwogCiAgICAgbV9yZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKIH0K
QEAgLTU3OCw2ICs1NTYsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJp
bmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgIGludCB0aGlz
U2l6ZSA9IHJlcC0+c2l6ZSgpOwogICAgIGludCB0aGlzT2Zmc2V0ID0gcmVwLT5vZmZzZXQ7CiAg
ICAgaW50IGxlbmd0aCA9IHRoaXNTaXplICsgdFNpemU7CisgICAgVVN0cmluZzo6QmFzZVN0cmlu
ZyogYmFzZSA9IHJlcC0+YmFzZVN0cmluZygpOwogCiAgICAgLy8gcG9zc2libGUgY2FzZXM6CiAg
ICAgaWYgKHRTaXplID09IDApIHsKQEAgLTU4NSw3ICs1NjQsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZQogICAgIH0gZWxzZSBpZiAodGhpc1NpemUgPT0gMCkgewogICAgICAgICAvLyB0aGlz
IGlzIGVtcHR5CiAgICAgICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyh0RGF0
YSwgdFNpemUpOwotICAgIH0gZWxzZSBpZiAocmVwLT5iYXNlSXNTZWxmKCkgJiYgcmVwLT5yYyA9
PSAxKSB7CisgICAgfSBlbHNlIGlmIChyZXAgPT0gYmFzZSAmJiByZXAtPnJjID09IDEpIHsKICAg
ICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4g
anVzdCBhbHRlciBpdCBkaXJlY3RseSkKICAgICAgICAgaWYgKCFleHBhbmRDYXBhY2l0eShyZXAu
Z2V0KCksIHRoaXNPZmZzZXQgKyBsZW5ndGgpKQogICAgICAgICAgICAgcmVwID0gJlVTdHJpbmc6
OlJlcDo6bnVsbCgpOwpAQCAtNTk0LDcgKzU3Myw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJl
CiAgICAgICAgICAgICByZXAtPmxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgIHJlcC0+X2hhc2gg
PSAwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0g
cmVwLT5iYXNlU3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXpl
KSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENh
cGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSkgewogICAgICAgICAvLyB0aGlzIHJl
YWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIC0gZXh0ZW5kIGl0IGlmIGl0J3MgbG9uZyBlbm91
Z2ggdG8gYXBwZW5kIHRvCiAgICAgICAgIGlmICghZXhwYW5kQ2FwYWNpdHkocmVwLmdldCgpLCB0
aGlzT2Zmc2V0ICsgbGVuZ3RoKSkKICAgICAgICAgICAgIHJlcCA9ICZVU3RyaW5nOjpSZXA6Om51
bGwoKTsKQEAgLTYxMiw3ICs1OTEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRy
PFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAg
ICAgICAgY29weUNoYXJzKGQsIHJlcC0+ZGF0YSgpLCB0aGlzU2l6ZSk7CiAgICAgICAgICAgICBj
b3B5Q2hhcnMoZCArIHRoaXNTaXplLCB0RGF0YSwgdFNpemUpOwogICAgICAgICAgICAgcmVwID0g
VVN0cmluZzo6UmVwOjpjcmVhdGUoZCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIHJlcC0+Y2FwYWNp
dHkgPSBuZXdDYXBhY2l0eTsKKyAgICAgICAgICAgIHJlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0
eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9CiAgICAgfQogCkBAIC02MzEsNiArNjEwLDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRl
KFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICBpbnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0
OwogICAgIGludCB0U2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKHQpKTsKICAgICBpbnQg
bGVuZ3RoID0gdGhpc1NpemUgKyB0U2l6ZTsKKyAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNl
ID0gcmVwLT5iYXNlU3RyaW5nKCk7CiAKICAgICAvLyBwb3NzaWJsZSBjYXNlczoKICAgICBpZiAo
dGhpc1NpemUgPT0gMCkgewpAQCAtNjM4LDcgKzYxOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6
OlJlCiAgICAgICAgIHJlcCA9IGNyZWF0ZVJlcCh0KTsKICAgICB9IGVsc2UgaWYgKHRTaXplID09
IDApIHsKICAgICAgICAgLy8gdCBpcyBlbXB0eSwgd2UnbGwganVzdCByZXR1cm4gKnRoaXMgYmVs
b3cuCi0gICAgfSBlbHNlIGlmIChyZXAtPmJhc2VJc1NlbGYoKSAmJiByZXAtPnJjID09IDEpIHsK
KyAgICB9IGVsc2UgaWYgKHJlcCA9PSBiYXNlICYmIHJlcC0+cmMgPT0gMSkgewogICAgICAgICAv
LyB0aGlzIGlzIGRpcmVjdCBhbmQgaGFzIHJlZmNvdW50IG9mIDEgKHNvIHdlIGNhbiBqdXN0IGFs
dGVyIGl0IGRpcmVjdGx5KQogICAgICAgICBleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIHRoaXNP
ZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICBVQ2hhciogZCA9IHJlcC0+ZGF0YSgpOwpAQCAtNjQ4
LDcgKzYyOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVw
PiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgICAgICByZXAtPmxl
biA9IGxlbmd0aDsKICAgICAgICAgICAgIHJlcC0+X2hhc2ggPSAwOwogICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gcmVwLT5iYXNlU3RyaW5nLT51c2Vk
Q2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0
aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49
IG1pblNoYXJlU2l6ZSkgewogICAgICAgICAvLyB0aGlzIHN0cmluZyByZWFjaGVzIHRoZSBlbmQg
b2YgdGhlIGJ1ZmZlciAtIGV4dGVuZCBpdAogICAgICAgICBleHBhbmRDYXBhY2l0eShyZXAuZ2V0
KCksIHRoaXNPZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICBVQ2hhciogZCA9IHJlcC0+ZGF0YSgp
OwpAQCAtNjY4LDcgKzY0OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0
cmluZzo6UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRTaXplOyArK2kpCiAgICAgICAgICAgICAgICAgZFt0aGlz
U2l6ZSArIGldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odFtpXSk7IC8vIHVzZSB1bnNp
Z25lZCBjaGFyIHRvIHplcm8tZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKICAgICAgICAg
ICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgICAgICAgICBy
ZXAtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICByZXAtPmJhc2VTdHJpbmco
KS0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjk3LDE1
ICs2NzcsMTcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6
OlJlcCogYSwgVVN0cmluZzo6UmVwKiBiKQogICAgIGlmIChiU2l6ZSA9PSAwKQogICAgICAgICBy
ZXR1cm4gYTsKIAotICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhLT5i
YXNlU3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgYU9mZnNldCArIGxlbmd0aCA8PSBhLT5iYXNlU3Ry
aW5nLT5jYXBhY2l0eSkgeworICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGFCYXNlID0gYS0+YmFz
ZVN0cmluZygpOworICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhQmFz
ZS0+dXNlZENhcGFjaXR5ICYmIGFPZmZzZXQgKyBsZW5ndGggPD0gYUJhc2UtPmNhcGFjaXR5KSB7
CiAgICAgICAgIC8vIGIgaXMgYSBzaW5nbGUgY2hhcmFjdGVyIChjb21tb24gZmFzdCBjYXNlKQot
ICAgICAgICBhLT5iYXNlU3RyaW5nLT51c2VkQ2FwYWNpdHkgPSBhT2Zmc2V0ICsgbGVuZ3RoOwor
ICAgICAgICBhQmFzZS0+dXNlZENhcGFjaXR5ID0gYU9mZnNldCArIGxlbmd0aDsKICAgICAgICAg
YS0+ZGF0YSgpW2FTaXplXSA9IGItPmRhdGEoKVswXTsKICAgICAgICAgcmV0dXJuIFVTdHJpbmc6
OlJlcDo6Y3JlYXRlKGEsIDAsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgaWYgKGFPZmZzZXQgKyBh
U2l6ZSA9PSBhLT5iYXNlU3RyaW5nLT51c2VkQ2FwYWNpdHkgJiYgYVNpemUgPj0gbWluU2hhcmVT
aXplICYmIDQgKiBhU2l6ZSA+PSBiU2l6ZSAmJgotICAgICAgICAgICAgICAgKC1iT2Zmc2V0ICE9
IGItPmJhc2VTdHJpbmctPnVzZWRQcmVDYXBhY2l0eSB8fCBhU2l6ZSA+PSBiU2l6ZSkpIHsKKyAg
ICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiQmFzZSA9IGItPmJhc2VTdHJpbmcoKTsKKyAgICBpZiAo
YU9mZnNldCArIGFTaXplID09IGFCYXNlLT51c2VkQ2FwYWNpdHkgJiYgYVNpemUgPj0gbWluU2hh
cmVTaXplICYmIDQgKiBhU2l6ZSA+PSBiU2l6ZQorICAgICAgICAmJiAoLWJPZmZzZXQgIT0gYkJh
c2UtPnVzZWRQcmVDYXBhY2l0eSB8fCBhU2l6ZSA+PSBiU2l6ZSkpIHsKICAgICAgICAgLy8gLSBh
IHJlYWNoZXMgdGhlIGVuZCBvZiBpdHMgYnVmZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Igc2hhcmVk
IGFwcGVuZAogICAgICAgICAvLyAtIGFsc28sIGl0J3MgYXQgbGVhc3QgYSBxdWFydGVyIHRoZSBs
ZW5ndGggb2YgYiAtIGFwcGVuZGluZyB0byBhIG11Y2ggc2hvcnRlcgogICAgICAgICAvLyAgIHN0
cmluZyBkb2VzIG1vcmUgaGFybSB0aGFuIGdvb2QKQEAgLTcyNCw3ICs3MDYsNyBAQCBQYXNzUmVm
UHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoVVN0cmluZzo6UmVwKiBhLCBVU3RyaW5nOjpS
ZXAqIGIpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKC1iT2Zmc2V0
ID09IGItPmJhc2VTdHJpbmctPnVzZWRQcmVDYXBhY2l0eSAmJiBiU2l6ZSA+PSBtaW5TaGFyZVNp
emUgJiYgNCAqIGJTaXplID49IGFTaXplKSB7CisgICAgaWYgKC1iT2Zmc2V0ID09IGJCYXNlLT51
c2VkUHJlQ2FwYWNpdHkgJiYgYlNpemUgPj0gbWluU2hhcmVTaXplICYmIDQgKiBiU2l6ZSA+PSBh
U2l6ZSkgewogICAgICAgICAvLyAtIGIgcmVhY2hlcyB0aGUgYmVnaW5uaW5nIG9mIGl0cyBidWZm
ZXIgc28gaXQgcXVhbGlmaWVzIGZvciBzaGFyZWQgcHJlcGVuZAogICAgICAgICAvLyAtIGFsc28s
IGl0J3MgYXQgbGVhc3QgYSBxdWFydGVyIHRoZSBsZW5ndGggb2YgYSAtIHByZXBlbmRpbmcgdG8g
YSBtdWNoIHNob3J0ZXIKICAgICAgICAgLy8gICBzdHJpbmcgZG9lcyBtb3JlIGhhcm0gdGhhbiBn
b29kCkBAIC03NTAsNyArNzMyLDcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVu
YXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6UmVwKiBiKQogICAgIGNvcHlDaGFycyhkLCBh
LT5kYXRhKCksIGFTaXplKTsKICAgICBjb3B5Q2hhcnMoZCArIGFTaXplLCBiLT5kYXRhKCksIGJT
aXplKTsKICAgICBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gcmVzdWx0ID0gVVN0cmluZzo6UmVw
OjpjcmVhdGUoZCwgbGVuZ3RoKTsKLSAgICByZXN1bHQtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7
CisgICAgcmVzdWx0LT5iYXNlU3RyaW5nKCktPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAKICAg
ICBhLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgYi0+Y2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAt
MTA1MSw2ICsxMDMzLDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcg
JnQpCiAgICAgaW50IHRoaXNPZmZzZXQgPSBtX3JlcC0+b2Zmc2V0OwogICAgIGludCB0U2l6ZSA9
IHQuc2l6ZSgpOwogICAgIGludCBsZW5ndGggPSB0aGlzU2l6ZSArIHRTaXplOworICAgIEJhc2VT
dHJpbmcqIGJhc2UgPSBtX3JlcC0+YmFzZVN0cmluZygpOwogCiAgICAgLy8gcG9zc2libGUgY2Fz
ZXM6CiAgICAgaWYgKHRoaXNTaXplID09IDApIHsKQEAgLTEwNTgsNyArMTA0MSw3IEBAIFVTdHJp
bmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAqdGhpcyA9IHQ7
CiAgICAgfSBlbHNlIGlmICh0U2l6ZSA9PSAwKSB7CiAgICAgICAgIC8vIHQgaXMgZW1wdHkKLSAg
ICB9IGVsc2UgaWYgKG1fcmVwLT5iYXNlSXNTZWxmKCkgJiYgbV9yZXAtPnJjID09IDEpIHsKKyAg
ICB9IGVsc2UgaWYgKG1fcmVwID09IGJhc2UgJiYgbV9yZXAtPnJjID09IDEpIHsKICAgICAgICAg
Ly8gdGhpcyBpcyBkaXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVzdCBh
bHRlciBpdCBkaXJlY3RseSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNldCArIGxl
bmd0aCk7CiAgICAgICAgIGlmIChkYXRhKCkpIHsKQEAgLTEwNjYsNyArMTA0OSw3IEBAIFVTdHJp
bmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAgICAgbV9yZXAt
PmxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyB0aGlzU2l6ZSA9PSB1c2VkQ2FwYWNpdHkoKSAm
JiB0aGlzU2l6ZSA+PSBtaW5TaGFyZVNpemUpIHsKKyAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQg
KyB0aGlzU2l6ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVT
aXplKSB7CiAgICAgICAgIC8vIHRoaXMgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgLSBl
eHRlbmQgaXQgaWYgaXQncyBsb25nIGVub3VnaCB0byBhcHBlbmQgdG8KICAgICAgICAgZXhwYW5k
Q2FwYWNpdHkodGhpc09mZnNldCArIGxlbmd0aCk7CiAgICAgICAgIGlmIChkYXRhKCkpIHsKQEAg
LTEwODMsNyArMTA2Niw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5n
ICZ0KQogICAgICAgICAgICAgY29weUNoYXJzKGQsIGRhdGEoKSwgdGhpc1NpemUpOwogICAgICAg
ICAgICAgY29weUNoYXJzKGQgKyB0aGlzU2l6ZSwgdC5kYXRhKCksIHRTaXplKTsKICAgICAgICAg
ICAgIG1fcmVwID0gUmVwOjpjcmVhdGUoZCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIG1fcmVwLT5j
YXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgICAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmcoKS0+
Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTExMSw2ICsx
MDk0LDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAKICAgICBpbnQgdGhp
c09mZnNldCA9IG1fcmVwLT5vZmZzZXQ7CiAgICAgaW50IGxlbmd0aCA9IHNpemUoKTsKKyAgICBC
YXNlU3RyaW5nKiBiYXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxl
IGNhc2VzOgogICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMTEyMiw5ICsxMTA2LDkgQEAgVVN0
cmluZyYgVVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgZFswXSA9IGM7CiAgICAgICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIDEpOwotICAg
ICAgICAgICAgbV9yZXAtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3Jl
cC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChtX3JlcC0+YmFzZUlzU2VsZigpICYmIG1fcmVwLT5yYyA9PSAxKSB7CisgICAg
fSBlbHNlIGlmIChtX3JlcCA9PSBiYXNlICYmIG1fcmVwLT5yYyA9PSAxKSB7CiAgICAgICAgIC8v
IHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291bnQgb2YgMSAoc28gd2UgY2FuIGp1c3QgYWx0
ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQgKyBsZW5n
dGggKyAxKTsKICAgICAgICAgVUNoYXIqIGQgPSBtX3JlcC0+ZGF0YSgpOwpAQCAtMTEzMyw3ICsx
MTE3LDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgICAgICAgICBt
X3JlcC0+bGVuID0gbGVuZ3RoICsgMTsKICAgICAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyBsZW5ndGggPT0gdXNlZENhcGFj
aXR5KCkgJiYgbGVuZ3RoID49IG1pblNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09m
ZnNldCArIGxlbmd0aCA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgbGVuZ3RoID49IG1pblNoYXJl
U2l6ZSkgewogICAgICAgICAvLyB0aGlzIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIC0g
ZXh0ZW5kIGl0IGFuZCBzaGFyZQogICAgICAgICBleHBhbmRDYXBhY2l0eSh0aGlzT2Zmc2V0ICsg
bGVuZ3RoICsgMSk7CiAgICAgICAgIFVDaGFyKiBkID0gbV9yZXAtPmRhdGEoKTsKQEAgLTExNTEs
NyArMTEzNSw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICAg
ICAgY29weUNoYXJzKGQsIGRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgICAgIGRbbGVuZ3RoXSA9
IGM7CiAgICAgICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIGxlbmd0aCArIDEpOwotICAg
ICAgICAgICAgbV9yZXAtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX3Jl
cC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xMjE3LDggKzEyMDEsOSBAQCBVU3RyaW5nJiBVU3RyaW5nOjpvcGVyYXRvcj0oY29u
c3QgY2hhciogYykKIAogICAgIGludCBsID0gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4oYykpOwog
ICAgIFVDaGFyKiBkOwotICAgIGlmIChtX3JlcC0+cmMgPT0gMSAmJiBsIDw9IG1fcmVwLT5jYXBh
Y2l0eSAmJiBtX3JlcC0+YmFzZUlzU2VsZigpICYmIG1fcmVwLT5vZmZzZXQgPT0gMCAmJiBtX3Jl
cC0+cHJlQ2FwYWNpdHkgPT0gMCkgewotICAgICAgICBkID0gbV9yZXAtPmJ1ZjsKKyAgICBCYXNl
U3RyaW5nKiBiYXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKKyAgICBpZiAobV9yZXAtPnJjID09
IDEgJiYgbCA8PSBiYXNlLT5jYXBhY2l0eSAmJiBtX3JlcCA9PSBiYXNlICYmIG1fcmVwLT5vZmZz
ZXQgPT0gMCAmJiBiYXNlLT5wcmVDYXBhY2l0eSA9PSAwKSB7CisgICAgICAgIGQgPSBiYXNlLT5i
dWY7CiAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIG1fcmVwLT5sZW4gPSBsOwog
ICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcu
aCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCmluZGV4IGI2Y2QxNTguLjk1MjM2
ZmUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVk
ZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNzYsNyArNzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVDsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgc3RydWN0IFJlcCB7CisgICAgICAgIHN0
cnVjdCBCYXNlU3RyaW5nOworICAgICAgICBzdHJ1Y3QgUmVwIDogTm9uY29weWFibGUgewogICAg
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAogICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVwPiBjcmVhdGUoVUNoYXIqLCBpbnQpOwpAQCAtODksOCArODksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICAgICAgdm9pZCBkZXN0cm95KCk7CiAKLSAgICAgICAgICAgIGJvb2wg
YmFzZUlzU2VsZigpIGNvbnN0IHsgcmV0dXJuIGJhc2VTdHJpbmcgPT0gdGhpczsgfQotICAgICAg
ICAgICAgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBiYXNlU3RyaW5nLT5idWYgKyBiYXNl
U3RyaW5nLT5wcmVDYXBhY2l0eSArIG9mZnNldDsgfQorICAgICAgICAgICAgYm9vbCBiYXNlSXNT
ZWxmKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5pc0ZsYWdTZXQo
QmFzZVN0cmluZ0ZsYWcpOyB9CisgICAgICAgICAgICBVQ2hhciogZGF0YSgpIGNvbnN0OwogICAg
ICAgICAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBsZW47IH0KIAogICAgICAgICAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgaWYgKF9oYXNoID09IDApIF9oYXNoID0gY29tcHV0ZUhh
c2goZGF0YSgpLCBsZW4pOyByZXR1cm4gX2hhc2g7IH0KQEAgLTEwNCwxNCArMTA0LDE4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgdm9pZCBzZXRJZGVudGlmaWVyVGFibGUoSWRlbnRp
ZmllclRhYmxlKiB0YWJsZSkgeyBBU1NFUlQoIWlzU3RhdGljKCkpOyBtX2lkZW50aWZpZXJUYWJs
ZUFuZEZsYWdzLnNldCh0YWJsZSk7IH0KIAogICAgICAgICAgICAgYm9vbCBpc1N0YXRpYygpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuaXNGbGFnU2V0KFN0YXRpY0Zs
YWcpOyB9Ci0gICAgICAgICAgICB2b2lkIHNldFN0YXRpYyhib29sIHYpIHsgQVNTRVJUKCFpZGVu
dGlmaWVyVGFibGUoKSk7IGlmICh2KSBtX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLnNldEZsYWco
U3RhdGljRmxhZyk7IGVsc2UgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5jbGVhckZsYWcoU3Rh
dGljRmxhZyk7IH0KKyAgICAgICAgICAgIHZvaWQgc2V0U3RhdGljKGJvb2wgdik7CisgICAgICAg
ICAgICB2b2lkIHNldEJhc2VTdHJpbmcoUGFzc1JlZlB0cjxCYXNlU3RyaW5nPiBiYXNlKTsKKyAg
ICAgICAgICAgIEJhc2VTdHJpbmcqIGJhc2VTdHJpbmcoKTsKKyAgICAgICAgICAgIGNvbnN0IEJh
c2VTdHJpbmcqIGJhc2VTdHJpbmcoKSBjb25zdDsKIAogICAgICAgICAgICAgUmVwKiByZWYoKSB7
ICsrcmM7IHJldHVybiB0aGlzOyB9CiAgICAgICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVy
ZWYoKSB7IGlmICgtLXJjID09IDApIGRlc3Ryb3koKTsgfQogCiAgICAgICAgICAgICB2b2lkIGNo
ZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKICAgICAgICAgICAgIGVudW0gVVN0cmluZ0ZsYWdzIHsK
LSAgICAgICAgICAgICAgICBTdGF0aWNGbGFnCisgICAgICAgICAgICAgICAgU3RhdGljRmxhZywK
KyAgICAgICAgICAgICAgICBCYXNlU3RyaW5nRmxhZwogICAgICAgICAgICAgfTsKIAogICAgICAg
ICAgICAgLy8gdW5zaGFyZWQgZGF0YQpAQCAtMTIwLDIyICsxMjQsMzEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBpbnQgcmM7IC8vIEZvciBudWxsIGFuZCBlbXB0eSBzdGF0aWMgc3Ry
aW5ncywgdGhpcyBmaWVsZCBkb2VzIG5vdCByZWZsZWN0IGEgY29ycmVjdCBjb3VudCwgYmVjYXVz
ZSByZWYvZGVyZWYgYXJlIG5vdCB0aHJlYWQtc2FmZS4gQSBzcGVjaWFsIGNhc2UgaW4gZGVzdHJv
eSgpIGd1YXJhbnRlZXMgdGhhdCB0aGVzZSBkbyBub3QgZ2V0IGRlbGV0ZWQuCiAgICAgICAgICAg
ICBtdXRhYmxlIHVuc2lnbmVkIF9oYXNoOwogICAgICAgICAgICAgUHRyQW5kRmxhZ3M8SWRlbnRp
ZmllclRhYmxlLCBVU3RyaW5nRmxhZ3M+IG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3M7Ci0gICAg
ICAgICAgICBVU3RyaW5nOjpSZXAqIGJhc2VTdHJpbmc7Ci0gICAgICAgICAgICBzaXplX3QgcmVw
b3J0ZWRDb3N0OworICAgICAgICAgICAgdm9pZCogbV9iYXNlU3RyaW5nOyAvLyBJZiAidGhpcyIg
aXMgYSBCYXNlU3RyaW5nIGluc3RhbmNlLCBpdCBpcyAwLiBCYXNlU3RyaW5nKiBvdGhlcndpc2Uu
CiAKLSAgICAgICAgICAgIC8vIHBvdGVudGlhbGx5IHNoYXJlZCBkYXRhLiAwIGlmIGJhY2tlZCB1
cCBieSBhIGJhc2Ugc3RyaW5nLgotICAgICAgICAgICAgVUNoYXIqIGJ1ZjsKLSAgICAgICAgICAg
IGludCB1c2VkQ2FwYWNpdHk7Ci0gICAgICAgICAgICBpbnQgY2FwYWNpdHk7Ci0gICAgICAgICAg
ICBpbnQgdXNlZFByZUNhcGFjaXR5OwotICAgICAgICAgICAgaW50IHByZUNhcGFjaXR5OworICAg
ICAgICAgICAgc3RhdGljIEJhc2VTdHJpbmcmIG51bGwoKSB7IHJldHVybiAqbnVsbEJhc2VTdHJp
bmc7IH0KKyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nJiBlbXB0eSgpIHsgcmV0dXJuICpl
bXB0eUJhc2VTdHJpbmc7IH0KIAotICAgICAgICAgICAgc3RhdGljIFJlcCYgbnVsbCgpIHsgcmV0
dXJuICpudWxsQmFzZVN0cmluZzsgfQotICAgICAgICAgICAgc3RhdGljIFJlcCYgZW1wdHkoKSB7
IHJldHVybiAqZW1wdHlCYXNlU3RyaW5nOyB9CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAg
ICBmcmllbmQgdm9pZCBpbml0aWFsaXplVVN0cmluZygpOwotICAgICAgICAgICAgc3RhdGljIFJl
cCogbnVsbEJhc2VTdHJpbmc7Ci0gICAgICAgICAgICBzdGF0aWMgUmVwKiBlbXB0eUJhc2VTdHJp
bmc7CisgICAgICAgICAgICBzdGF0aWMgQmFzZVN0cmluZyogbnVsbEJhc2VTdHJpbmc7CisgICAg
ICAgICAgICBzdGF0aWMgQmFzZVN0cmluZyogZW1wdHlCYXNlU3RyaW5nOworICAgICAgICB9Owor
CisgICAgICAgIHN0cnVjdCBCYXNlU3RyaW5nIDogcHVibGljIFJlcCB7CisgICAgICAgICAgICBC
YXNlU3RyaW5nKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2lkZW50aWZpZXJU
YWJsZUFuZEZsYWdzLnNldEZsYWcoQmFzZVN0cmluZ0ZsYWcpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YS4KKyAgICAgICAgICAgIFVDaGFy
KiBidWY7CisgICAgICAgICAgICBpbnQgcHJlQ2FwYWNpdHk7CisgICAgICAgICAgICBpbnQgdXNl
ZFByZUNhcGFjaXR5OworICAgICAgICAgICAgaW50IGNhcGFjaXR5OworICAgICAgICAgICAgaW50
IHVzZWRDYXBhY2l0eTsKKworICAgICAgICAgICAgc2l6ZV90IHJlcG9ydGVkQ29zdDsKICAgICAg
ICAgfTsKIAogICAgIHB1YmxpYzoKQEAgLTI1Myw4ICsyNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc2l6ZV90IGNvc3QoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGlu
dCB1c2VkQ2FwYWNpdHkoKSBjb25zdDsKLSAgICAgICAgaW50IHVzZWRQcmVDYXBhY2l0eSgpIGNv
bnN0OwogICAgICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCByZXF1aXJlZExlbmd0aCk7CiAg
ICAgICAgIHZvaWQgZXhwYW5kUHJlQ2FwYWNpdHkoaW50IHJlcXVpcmVkUHJlQ2FwKTsKICAgICAg
ICAgdm9pZCBtYWtlTnVsbCgpOwpAQCAtMzA5LDYgKzMyMCwzNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGJvb2wgZXF1YWwoY29uc3QgVVN0cmluZzo6UmVwKiwgY29uc3QgVVN0cmluZzo6UmVw
Kik7CiAKKyAgICBpbmxpbmUgVUNoYXIqIFVTdHJpbmc6OlJlcDo6ZGF0YSgpIGNvbnN0CisgICAg
eworICAgICAgICBjb25zdCBCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOworICAgICAg
ICByZXR1cm4gYmFzZS0+YnVmICsgYmFzZS0+cHJlQ2FwYWNpdHkgKyBvZmZzZXQ7CisgICAgfQor
CisgICAgaW5saW5lIHZvaWQgVVN0cmluZzo6UmVwOjpzZXRTdGF0aWMoYm9vbCB2KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyVGFibGUoKSk7CisgICAgICAgIGlmICh2KQorICAg
ICAgICAgICAgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFnKFN0YXRpY0ZsYWcpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLmNsZWFy
RmxhZyhTdGF0aWNGbGFnKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBVU3RyaW5nOjpSZXA6
OnNldEJhc2VTdHJpbmcoUGFzc1JlZlB0cjxCYXNlU3RyaW5nPiBiYXNlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGJhc2UgIT0gdGhpcyk7CisgICAgICAgIG1fYmFzZVN0cmluZyA9IGJhc2UucmVs
ZWFzZVJlZigpOworICAgIH0KKworICAgIGlubGluZSBVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3Ry
aW5nOjpSZXA6OmJhc2VTdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QmFzZVN0cmluZyo+KGJhc2VJc1NlbGYoKSA/IHRoaXMgOiBtX2Jhc2VTdHJpbmcpOwor
ICAgIH0KKworICAgIGlubGluZSBjb25zdCBVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5nOjpS
ZXA6OmJhc2VTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
Y29uc3QgQmFzZVN0cmluZyo+KGNvbnN0X2Nhc3Q8UmVwKj4odGhpcyktPmJhc2VTdHJpbmcoKSk7
CisgICAgfQorCiAjaWZkZWYgTkRFQlVHCiAgICAgaW5saW5lIHZvaWQgVVN0cmluZzo6UmVwOjpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CkBAIC0zMzksOCArMzgxLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBpbmxpbmUgc2l6ZV90IFVTdHJpbmc6OmNvc3QoKSBjb25zdAogICAg
IHsKLSAgICAgICAgc2l6ZV90IGNhcGFjaXR5ID0gKG1fcmVwLT5iYXNlU3RyaW5nLT5jYXBhY2l0
eSArIG1fcmVwLT5iYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSkgKiBzaXplb2YoVUNoYXIpOwotICAg
ICAgICBzaXplX3QgcmVwb3J0ZWRDb3N0ID0gbV9yZXAtPmJhc2VTdHJpbmctPnJlcG9ydGVkQ29z
dDsKKyAgICAgICAgQmFzZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CisgICAg
ICAgIHNpemVfdCBjYXBhY2l0eSA9IChiYXNlLT5jYXBhY2l0eSArIGJhc2UtPnByZUNhcGFjaXR5
KSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHNpemVfdCByZXBvcnRlZENvc3QgPSBiYXNlLT5y
ZXBvcnRlZENvc3Q7CiAgICAgICAgIEFTU0VSVChjYXBhY2l0eSA+PSByZXBvcnRlZENvc3QpOwog
CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eURlbHRhID0gY2FwYWNpdHkgLSByZXBvcnRlZENvc3Q7
CkBAIC0zNDgsNyArMzkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChjYXBhY2l0
eURlbHRhIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5TaGFyZVNpemUpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmctPnJlcG9ydGVkQ29zdCA9IGNh
cGFjaXR5OworICAgICAgICBiYXNlLT5yZXBvcnRlZENvc3QgPSBjYXBhY2l0eTsKIAogICAgICAg
ICByZXR1cm4gY2FwYWNpdHlEZWx0YTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26619</attachid>
            <date>2009-01-11 18:06:04 -0800</date>
            <delta_ts>2009-01-11 23:30:53 -0800</delta_ts>
            <desc>Addressed Darin&apos;s comments from the last review.</desc>
            <filename>patch-for-bug23175_part2_rev3.txt</filename>
            <type>text/plain</type>
            <size>28984</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3OTE3NzgxLi4xOTY1NjNhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMDktMDEtMTEgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKworICAgICAgICBTZXBhcmF0ZSBvdXQgQmFzZVN0cmlu
ZyBpbmZvcm1hdGlvbiBmcm9tIFVTdHJpbmc6OlJlcCBhbmQgbWFrZSBhbGwgYmFzZVN0cmluZyBh
Y2Nlc3MgZ28gdGhyb3VnaAorICAgICAgICBhIG1lbWJlciBmdW5jdGlvbiwgc28gdGhhdCBpdCBt
YXkgYmUgdXNlZCBmb3Igc29tZXRoaW5nIGVsc2UgKGluIHRoZSBmdXR1cmUpIGluIHRoZSBCYXNl
U3RyaW5nCisgICAgICAgIGNhc2UuCisKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHA6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nc1N0b3JhZ2U6OnJlcCk6CisgICAgICAgIChK
U0M6OlNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3M6OlNtYWxsU3RyaW5ncyk6CisgICAgICAgIChKU0M6OlNtYWxsU3Ry
aW5nczo6bWFyayk6CisgICAgICAgIEFkanVzdCB0byBhY2NvdW50IGZvciB0aGUgY2hhbmdlcyBp
biBVU3RyaW5nIGFuZCBwdXQgdGhlIFVTdHJpbmcgaW4gcGxhY2UgaW4KKyAgICAgICAgU21hbGxT
dHJpbmdzU3RvcmFnZSB0byBhaWQgaW4gbG9jYWxpdHkgb2YgcmVmZXJlbmNlIGFtb25nIHRoZSBV
Q2hhcltdIGFuZCBVU3RyaW5nOjpSZXAncy4KKworICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJp
bmdzLmg6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5p
dGlhbGl6ZVN0YXRpY0Jhc2VTdHJpbmcpOgorICAgICAgICAoSlNDOjppbml0aWFsaXplVVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6UmVwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6ZXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAo
SlNDOjpVU3RyaW5nOjpleHBhbmRQcmVDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OmNvbmNhdGVu
YXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6VVN0
cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6UmVwOjpiYXNlSXNTZWxmKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
UmVwOjpzZXRCYXNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpiYXNlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjopOgorICAgICAgICAoSlNDOjpVU3Ry
aW5nOjpSZXA6Om51bGwpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmVtcHR5KToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpkYXRhKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
Y29zdCk6CisgICAgICAgIFNlcGFyYXRlIG91dCB0aGUgaXRlbXMgb3V0IHVzZWQgYnkgYmFzZSBz
dHJpbmdzIGZyb20gdGhvc2UgdXNlZCBpbiBSZXAncyB0aGF0IG9ubHkKKyAgICAgICAgcG9pbnQg
dG8gYmFzZSBzdHJpbmdzLiAgKFRoaXMgcG90ZW50aWFsbHkgc2F2ZXMgMjQgYnl0ZXMgcGVyIFJl
cC4pCisKIDIwMDktMDEtMTEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKEJ1aWxkIGZpeCkuCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5jcHAKaW5kZXggMDY4MTFiOS4uOGEzYjhmZCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcApAQCAtMjksNDggKzI5LDYwIEBACiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKIG5hbWVzcGFjZSBKU0Mgeworc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bUNoYXJhY3RlcnNUb1N0b3JlID0gMHgxMDA7CiAKLWNsYXNzIFNtYWxsU3RyaW5nc1N0b3Jh
Z2UgeworY2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZSA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
ICAgICBTbWFsbFN0cmluZ3NTdG9yYWdlKCk7Ci0gICAgflNtYWxsU3RyaW5nc1N0b3JhZ2UoKTsK
IAotICAgIFVTdHJpbmc6OlJlcCogcmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJldHVy
biAmcmVwc1tjaGFyYWN0ZXJdOyB9CisgICAgVVN0cmluZzo6UmVwKiByZXAodW5zaWduZWQgY2hh
ciBjaGFyYWN0ZXIpIHsgcmV0dXJuICZtX3JlcHNbY2hhcmFjdGVyXTsgfQogCiBwcml2YXRlOgot
ICAgIFVDaGFyIGNoYXJhY3RlcnNbMHgxMDBdOwotICAgIFVTdHJpbmc6OlJlcCogcmVwczsKKyAg
ICBVQ2hhciBtX2NoYXJhY3RlcnNbbnVtQ2hhcmFjdGVyc1RvU3RvcmVdOworICAgIFVTdHJpbmc6
OkJhc2VTdHJpbmcgbV9iYXNlOworICAgIFVTdHJpbmc6OlJlcCBtX3JlcHNbbnVtQ2hhcmFjdGVy
c1RvU3RvcmVdOwogfTsKIAogU21hbGxTdHJpbmdzU3RvcmFnZTo6U21hbGxTdHJpbmdzU3RvcmFn
ZSgpCi0gICAgOiByZXBzKHN0YXRpY19jYXN0PFVTdHJpbmc6OlJlcCo+KGZhc3RaZXJvZWRNYWxs
b2Moc2l6ZW9mKFVTdHJpbmc6OlJlcCkgKiAweDEwMCkpKQogewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAweDEwMDsgKytpKSB7Ci0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSBpOwotICAg
ICAgICByZXBzW2ldLm9mZnNldCA9IGk7Ci0gICAgICAgIHJlcHNbaV0ubGVuID0gMTsKLSAgICAg
ICAgcmVwc1tpXS5yYyA9IDE7Ci0gICAgICAgIHJlcHNbaV0uYmFzZVN0cmluZyA9ICZyZXBzWzBd
OwotICAgIH0KLSAgICByZXBzWzBdLnJjID0gMHgxMDE7Ci0gICAgcmVwc1swXS5idWYgPSBjaGFy
YWN0ZXJzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9y
ZTsgKytpKQorICAgICAgICBtX2NoYXJhY3RlcnNbaV0gPSBpOworCisgICAgbV9iYXNlLnJjID0g
bnVtQ2hhcmFjdGVyc1RvU3RvcmUgKyAxOworICAgIG1fYmFzZS5idWYgPSBtX2NoYXJhY3RlcnM7
CisgICAgbV9iYXNlLmxlbiA9IG51bUNoYXJhY3RlcnNUb1N0b3JlOworICAgIG1fYmFzZS5vZmZz
ZXQgPSAwOworICAgIG1fYmFzZS5faGFzaCA9IDA7CisgICAgbV9iYXNlLm1fYmFzZVN0cmluZyA9
IDA7CisgICAgbV9iYXNlLnByZUNhcGFjaXR5ID0gMDsKKyAgICBtX2Jhc2UudXNlZFByZUNhcGFj
aXR5ID0gMDsKKyAgICBtX2Jhc2UucmVwb3J0ZWRDb3N0ID0gMDsKIAogICAgIC8vIG1ha2Ugc3Vy
ZSBVU3RyaW5nIGRvZXNuJ3QgdHJ5IHRvIHJldXNlIHRoZSBidWZmZXIgYnkgcHJldGVuZGluZyB3
ZSBoYXZlIG9uZSBtb3JlIGNoYXJhY3RlciBpbiBpdAotICAgIHJlcHNbMF0udXNlZENhcGFjaXR5
ID0gMHgxMDE7Ci0gICAgcmVwc1swXS5jYXBhY2l0eSA9IDB4MTAxOwotfQorICAgIG1fYmFzZS51
c2VkQ2FwYWNpdHkgPSBudW1DaGFyYWN0ZXJzVG9TdG9yZSArIDE7CisgICAgbV9iYXNlLmNhcGFj
aXR5ID0gbnVtQ2hhcmFjdGVyc1RvU3RvcmUgKyAxOworICAgIG1fYmFzZS5jaGVja0NvbnNpc3Rl
bmN5KCk7CiAKLVNtYWxsU3RyaW5nc1N0b3JhZ2U6On5TbWFsbFN0cmluZ3NTdG9yYWdlKCkKLXsK
LSAgICBmYXN0RnJlZShyZXBzKTsKKyAgICBtZW1zZXQoJm1fcmVwcywgMCwgc2l6ZW9mKG1fcmVw
cykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsg
KytpKSB7CisgICAgICAgIG1fcmVwc1tpXS5vZmZzZXQgPSBpOworICAgICAgICBtX3JlcHNbaV0u
bGVuID0gMTsKKyAgICAgICAgbV9yZXBzW2ldLnJjID0gMTsKKyAgICAgICAgbV9yZXBzW2ldLnNl
dEJhc2VTdHJpbmcoJm1fYmFzZSk7CisgICAgICAgIG1fcmVwc1tpXS5jaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgfQogfQogCiBTbWFsbFN0cmluZ3M6OlNtYWxsU3RyaW5ncygpCiAgICAgOiBtX2Vt
cHR5U3RyaW5nKDApCiAgICAgLCBtX3N0b3JhZ2UoMCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMHgxMDA7ICsraSkKKyAgICBDT01QSUxFX0FTU0VSVChudW1DaGFyYWN0ZXJzVG9T
dG9yZSA9PSBzaXplb2YobV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKSAvIHNpemVvZihtX3Npbmds
ZUNoYXJhY3RlclN0cmluZ3NbMF0pLCBJc051bUNoYXJhY3RlcnNDb25zdEluU3luY1dpdGhDbGFz
c1VzYWdlKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9T
dG9yZTsgKytpKQogICAgICAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0gPSAwOwogfQog
CkBAIC04Miw3ICs5NCw3IEBAIHZvaWQgU21hbGxTdHJpbmdzOjptYXJrKCkKIHsKICAgICBpZiAo
bV9lbXB0eVN0cmluZyAmJiAhbV9lbXB0eVN0cmluZy0+bWFya2VkKCkpCiAgICAgICAgIG1fZW1w
dHlTdHJpbmctPm1hcmsoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMHgxMDA7ICsr
aSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsg
KytpKSB7CiAgICAgICAgIGlmIChtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0gJiYgIW1fc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nc1tpXS0+bWFya2VkKCkpCiAgICAgICAgICAgICBtX3NpbmdsZUNo
YXJhY3RlclN0cmluZ3NbaV0tPm1hcmsoKTsKICAgICB9CkBAIC0xMDksNCArMTIxLDQgQEAgVVN0
cmluZzo6UmVwKiBTbWFsbFN0cmluZ3M6OnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25l
ZCBjaGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4gbV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVyKTsK
IH0KIAotfQorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmlu
Z3MuaAppbmRleCA3ZTVmNWM4Li43NzI3MjFhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmgKQEAgLTU1LDkgKzU1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgICAgICBVU3RyaW5nOjpSZXAqIHNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25lZCBj
aGFyIGNoYXJhY3Rlcik7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQgbWFyaygpOwotICAgICAg
ICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9i
YWxEYXRhKik7CiAgICAgICAgIHZvaWQgY3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xv
YmFsRGF0YSosIHVuc2lnbmVkIGNoYXIpOwpAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNTdHJpbmcqIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1sweDEwMF07CiAg
ICAgICAgIE93blB0cjxTbWFsbFN0cmluZ3NTdG9yYWdlPiBtX3N0b3JhZ2U7CiAgICAgfTsKLSAg
ICAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNtYWxsU3Ry
aW5nc19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAppbmRleCA0NmRiZDA5Li45NjQ4NDNi
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAgLTE4NywzMiArMTg3LDMzIEBAIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDU3RyaW5nJiBjMSwgY29uc3QgQ1N0cmluZyYgYzIpCiAvLyBU
aGVzZSBzdGF0aWMgc3RyaW5ncyBhcmUgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJjLCB3aG9zZSBp
bml0aWFsIHZhbHVlIGlzIGNob3NlbiB0byAKIC8vIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2Yg
aXQgYmVjb21pbmcgemVybyBkdWUgdG8gcmVmL2RlcmVmIG5vdCBiZWluZyB0aHJlYWQtc2FmZS4K
IHN0YXRpYyBVQ2hhciBzaGFyZWRFbXB0eUNoYXI7Ci1VU3RyaW5nOjpSZXAqIFVTdHJpbmc6OlJl
cDo6bnVsbEJhc2VTdHJpbmc7Ci1VU3RyaW5nOjpSZXAqIFVTdHJpbmc6OlJlcDo6ZW1wdHlCYXNl
U3RyaW5nOworVVN0cmluZzo6QmFzZVN0cmluZyogVVN0cmluZzo6UmVwOjpudWxsQmFzZVN0cmlu
ZzsKK1VTdHJpbmc6OkJhc2VTdHJpbmcqIFVTdHJpbmc6OlJlcDo6ZW1wdHlCYXNlU3RyaW5nOwog
VVN0cmluZyogVVN0cmluZzo6bnVsbFVTdHJpbmc7CiAKLXZvaWQgaW5pdGlhbGl6ZVN0YXRpY0Jh
c2VTdHJpbmcoaW50IGxlbiwgVUNoYXIqIGJ1ZiwgVVN0cmluZzo6UmVwJiBiYXNlKQordm9pZCBp
bml0aWFsaXplU3RhdGljQmFzZVN0cmluZyhpbnQgbGVuLCBVQ2hhciogYnVmLCBVU3RyaW5nOjpC
YXNlU3RyaW5nJiBiYXNlKQogewogICAgIGJhc2Uub2Zmc2V0ID0gMDsKICAgICBiYXNlLmxlbiA9
IGxlbjsKICAgICBiYXNlLnJjID0gSU5UX01BWCAvIDI7CiAgICAgYmFzZS5faGFzaCA9IDA7CiAg
ICAgYmFzZS5tX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLnNldEZsYWcoVVN0cmluZzo6UmVwOjpT
dGF0aWNGbGFnKTsKLSAgICBiYXNlLmJhc2VTdHJpbmcgPSAmYmFzZTsKKyAgICBiYXNlLm1fYmFz
ZVN0cmluZyA9IDA7CiAgICAgYmFzZS5idWYgPSBidWY7CiAgICAgYmFzZS5wcmVDYXBhY2l0eSA9
IDA7CiAgICAgYmFzZS51c2VkUHJlQ2FwYWNpdHkgPSAwOwogICAgIGJhc2UuY2FwYWNpdHkgPSAw
OwogICAgIGJhc2UudXNlZENhcGFjaXR5ID0gMDsKICAgICBiYXNlLnJlcG9ydGVkQ29zdCA9IDA7
CisgICAgYmFzZS5jaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKIHZvaWQgaW5pdGlhbGl6ZVVTdHJp
bmcoKQogewotICAgIFVTdHJpbmc6OlJlcDo6bnVsbEJhc2VTdHJpbmcgPSBuZXcgVVN0cmluZzo6
UmVwOworICAgIFVTdHJpbmc6OlJlcDo6bnVsbEJhc2VTdHJpbmcgPSBuZXcgVVN0cmluZzo6QmFz
ZVN0cmluZzsKICAgICBpbml0aWFsaXplU3RhdGljQmFzZVN0cmluZygwLCAwLCAqVVN0cmluZzo6
UmVwOjpudWxsQmFzZVN0cmluZyk7CiAKLSAgICBVU3RyaW5nOjpSZXA6OmVtcHR5QmFzZVN0cmlu
ZyA9IG5ldyBVU3RyaW5nOjpSZXA7CisgICAgVVN0cmluZzo6UmVwOjplbXB0eUJhc2VTdHJpbmcg
PSBuZXcgVVN0cmluZzo6QmFzZVN0cmluZzsKICAgICBpbml0aWFsaXplU3RhdGljQmFzZVN0cmlu
ZygwLCAmc2hhcmVkRW1wdHlDaGFyLCAqVVN0cmluZzo6UmVwOjplbXB0eUJhc2VTdHJpbmcpOwog
CiAgICAgVVN0cmluZzo6bnVsbFVTdHJpbmcgPSBuZXcgVVN0cmluZzsKQEAgLTIyOSwxMiArMjMw
LDEyIEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZUNvcHlp
bmcoY29uc3QgVUNoYXIqIGQsIGludCBsKQogCiBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0
cmluZzo6UmVwOjpjcmVhdGUoVUNoYXIqIGQsIGludCBsKQogewotICAgIFJlcCogciA9IG5ldyBS
ZXA7CisgICAgQmFzZVN0cmluZyogciA9IG5ldyBCYXNlU3RyaW5nOwogICAgIHItPm9mZnNldCA9
IDA7CiAgICAgci0+bGVuID0gbDsKICAgICByLT5yYyA9IDE7CiAgICAgci0+X2hhc2ggPSAwOwot
ICAgIHItPmJhc2VTdHJpbmcgPSByOworICAgIHItPm1fYmFzZVN0cmluZyA9IDA7CiAgICAgci0+
cmVwb3J0ZWRDb3N0ID0gMDsKICAgICByLT5idWYgPSBkOwogICAgIHItPnVzZWRDYXBhY2l0eSA9
IGw7CkBAIC0yNDgsMzAgKzI0OSwyNCBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmlu
Zzo6UmVwOjpjcmVhdGUoVUNoYXIqIGQsIGludCBsKQogICAgIHJldHVybiBhZG9wdFJlZihyKTsK
IH0KIAotUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFBhc3NS
ZWZQdHI8UmVwPiBiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFBhc3NSZWZQdHI8UmVwPiByZXAsIGludCBv
ZmZzZXQsIGludCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKGJhc2UpOwotICAgIGJhc2UtPmNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlQocmVwKTsKKyAgICByZXAtPmNoZWNrQ29uc2lzdGVu
Y3koKTsKIAotICAgIGludCBiYXNlT2Zmc2V0ID0gYmFzZS0+b2Zmc2V0OworICAgIGludCByZXBP
ZmZzZXQgPSByZXAtPm9mZnNldDsKIAotICAgIGJhc2UgPSBiYXNlLT5iYXNlU3RyaW5nOworICAg
IFBhc3NSZWZQdHI8QmFzZVN0cmluZz4gYmFzZSA9IHJlcC0+YmFzZVN0cmluZygpOwogCi0gICAg
QVNTRVJUKC0ob2Zmc2V0ICsgYmFzZU9mZnNldCkgPD0gYmFzZS0+dXNlZFByZUNhcGFjaXR5KTsK
LSAgICBBU1NFUlQob2Zmc2V0ICsgYmFzZU9mZnNldCArIGxlbmd0aCA8PSBiYXNlLT51c2VkQ2Fw
YWNpdHkpOworICAgIEFTU0VSVCgtKG9mZnNldCArIHJlcE9mZnNldCkgPD0gYmFzZS0+dXNlZFBy
ZUNhcGFjaXR5KTsKKyAgICBBU1NFUlQob2Zmc2V0ICsgcmVwT2Zmc2V0ICsgbGVuZ3RoIDw9IGJh
c2UtPnVzZWRDYXBhY2l0eSk7CiAKICAgICBSZXAqIHIgPSBuZXcgUmVwOwotICAgIHItPm9mZnNl
dCA9IGJhc2VPZmZzZXQgKyBvZmZzZXQ7CisgICAgci0+b2Zmc2V0ID0gcmVwT2Zmc2V0ICsgb2Zm
c2V0OwogICAgIHItPmxlbiA9IGxlbmd0aDsKICAgICByLT5yYyA9IDE7CiAgICAgci0+X2hhc2gg
PSAwOwotICAgIHItPmJhc2VTdHJpbmcgPSBiYXNlLnJlbGVhc2VSZWYoKTsKLSAgICByLT5yZXBv
cnRlZENvc3QgPSAwOwotICAgIHItPmJ1ZiA9IDA7Ci0gICAgci0+dXNlZENhcGFjaXR5ID0gMDsK
LSAgICByLT5jYXBhY2l0eSA9IDA7Ci0gICAgci0+dXNlZFByZUNhcGFjaXR5ID0gMDsKLSAgICBy
LT5wcmVDYXBhY2l0eSA9IDA7CisgICAgci0+c2V0QmFzZVN0cmluZyhiYXNlKTsKIAogICAgIHIt
PmNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtMzAyLDEwICsyOTcsMTEgQEAgdm9pZCBVU3RyaW5n
OjpSZXA6OmRlc3Ryb3koKQogICAgIGlmICghaXNTdGF0aWMoKSkgewogICAgICAgICBpZiAoaWRl
bnRpZmllclRhYmxlKCkpCiAgICAgICAgICAgICBJZGVudGlmaWVyOjpyZW1vdmUodGhpcyk7Ci0g
ICAgICAgIGlmIChiYXNlU3RyaW5nID09IHRoaXMpCi0gICAgICAgICAgICBmYXN0RnJlZShidWYp
OworICAgICAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOworICAg
ICAgICBpZiAoYmFzZSA9PSB0aGlzKQorICAgICAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZVN0cmluZy0+ZGVyZWYoKTsKKyAgICAgICAg
ICAgIGJhc2UtPmRlcmVmKCk7CiAKICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQpAQCAtNDA3
LDE3ICs0MDMsMTAgQEAgdW5zaWduZWQgVVN0cmluZzo6UmVwOjpjb21wdXRlSGFzaChjb25zdCBj
aGFyKiBzLCBpbnQgbCkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tD
b25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgLy8gT25seSBiYXNlIHN0cmluZ3MgaGF2ZSBub24t
emVybyBzaGFyZWQgZGF0YS4KLSAgICBpZiAodGhpcyAhPSBiYXNlU3RyaW5nKSB7Ci0gICAgICAg
IEFTU0VSVCghYnVmKTsKLSAgICAgICAgQVNTRVJUKCF1c2VkQ2FwYWNpdHkpOwotICAgICAgICBB
U1NFUlQoIWNhcGFjaXR5KTsKLSAgICAgICAgQVNTRVJUKCF1c2VkUHJlQ2FwYWNpdHkpOwotICAg
ICAgICBBU1NFUlQoIXByZUNhcGFjaXR5KTsKLSAgICB9CisgICAgY29uc3QgVVN0cmluZzo6QmFz
ZVN0cmluZyogYmFzZSA9IGJhc2VTdHJpbmcoKTsKIAogICAgIC8vIFRoZXJlIGlzIG5vIHJlY3Vy
c2lvbiBmb3IgYmFzZSBzdHJpbmdzLgotICAgIEFTU0VSVChiYXNlU3RyaW5nID09IGJhc2VTdHJp
bmctPmJhc2VTdHJpbmcpOworICAgIEFTU0VSVChiYXNlID09IGJhc2UtPmJhc2VTdHJpbmcoKSk7
CiAKICAgICBpZiAoaXNTdGF0aWMoKSkgewogICAgICAgICAvLyBUaGVyZSBhcmUgb25seSB0d28g
c3RhdGljIHN0cmluZ3M6IG51bGwgYW5kIGVtcHR5LgpAQCAtNDI4LDEwICs0MTcsMTAgQEAgdm9p
ZCBVU3RyaW5nOjpSZXA6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogICAgIH0KIAogICAgIC8v
IFRoZSBzdHJpbmcgZml0cyBpbiBidWZmZXIuCi0gICAgQVNTRVJUKGJhc2VTdHJpbmctPnVzZWRQ
cmVDYXBhY2l0eSA8PSBiYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSk7Ci0gICAgQVNTRVJUKGJhc2VT
dHJpbmctPnVzZWRDYXBhY2l0eSA8PSBiYXNlU3RyaW5nLT5jYXBhY2l0eSk7Ci0gICAgQVNTRVJU
KC1vZmZzZXQgPD0gYmFzZVN0cmluZy0+dXNlZFByZUNhcGFjaXR5KTsKLSAgICBBU1NFUlQob2Zm
c2V0ICsgbGVuIDw9IGJhc2VTdHJpbmctPnVzZWRDYXBhY2l0eSk7CisgICAgQVNTRVJUKGJhc2Ut
PnVzZWRQcmVDYXBhY2l0eSA8PSBiYXNlLT5wcmVDYXBhY2l0eSk7CisgICAgQVNTRVJUKGJhc2Ut
PnVzZWRDYXBhY2l0eSA8PSBiYXNlLT5jYXBhY2l0eSk7CisgICAgQVNTRVJUKC1vZmZzZXQgPD0g
YmFzZS0+dXNlZFByZUNhcGFjaXR5KTsKKyAgICBBU1NFUlQob2Zmc2V0ICsgbGVuIDw9IGJhc2Ut
PnVzZWRDYXBhY2l0eSk7CiB9CiAjZW5kaWYKIApAQCAtNDUxLDM1ICs0NDAsMjQgQEAgc3RhdGlj
IGlubGluZSBzaXplX3QgZXhwYW5kZWRTaXplKHNpemVfdCBzaXplLCBzaXplX3Qgb3RoZXJTaXpl
KQogICAgIHJldHVybiBleHBhbmRlZFNpemUgKyBvdGhlclNpemU7CiB9CiAKLWlubGluZSBpbnQg
VVN0cmluZzo6dXNlZENhcGFjaXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXAtPmJhc2VT
dHJpbmctPnVzZWRDYXBhY2l0eTsKLX0KLQotaW5saW5lIGludCBVU3RyaW5nOjp1c2VkUHJlQ2Fw
YWNpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcC0+YmFzZVN0cmluZy0+dXNlZFByZUNh
cGFjaXR5OwotfQotCi0KIHN0YXRpYyBpbmxpbmUgYm9vbCBleHBhbmRDYXBhY2l0eShVU3RyaW5n
OjpSZXAqIHJlcCwgaW50IHJlcXVpcmVkTGVuZ3RoKQogewogICAgIHJlcC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwogCi0gICAgVVN0cmluZzo6UmVwKiByID0gcmVwLT5iYXNlU3RyaW5nOworICAgIFVT
dHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSByZXAtPmJhc2VTdHJpbmcoKTsKIAotICAgIGlmIChy
ZXF1aXJlZExlbmd0aCA+IHItPmNhcGFjaXR5KSB7Ci0gICAgICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IGV4cGFuZGVkU2l6ZShyZXF1aXJlZExlbmd0aCwgci0+cHJlQ2FwYWNpdHkpOwotICAgICAg
ICBVQ2hhciogb2xkQnVmID0gci0+YnVmOwotICAgICAgICByLT5idWYgPSByZWFsbG9jQ2hhcnMo
ci0+YnVmLCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGlmICghci0+YnVmKSB7Ci0gICAgICAgICAg
ICByLT5idWYgPSBvbGRCdWY7CisgICAgaWYgKHJlcXVpcmVkTGVuZ3RoID4gYmFzZS0+Y2FwYWNp
dHkpIHsKKyAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKHJlcXVpcmVk
TGVuZ3RoLCBiYXNlLT5wcmVDYXBhY2l0eSk7CisgICAgICAgIFVDaGFyKiBvbGRCdWYgPSBiYXNl
LT5idWY7CisgICAgICAgIGJhc2UtPmJ1ZiA9IHJlYWxsb2NDaGFycyhiYXNlLT5idWYsIG5ld0Nh
cGFjaXR5KTsKKyAgICAgICAgaWYgKCFiYXNlLT5idWYpIHsKKyAgICAgICAgICAgIGJhc2UtPmJ1
ZiA9IG9sZEJ1ZjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAg
ICByLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5IC0gci0+cHJlQ2FwYWNpdHk7CisgICAgICAgIGJh
c2UtPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHkgLSBiYXNlLT5wcmVDYXBhY2l0eTsKICAgICB9Ci0g
ICAgaWYgKHJlcXVpcmVkTGVuZ3RoID4gci0+dXNlZENhcGFjaXR5KQotICAgICAgICByLT51c2Vk
Q2FwYWNpdHkgPSByZXF1aXJlZExlbmd0aDsKKyAgICBpZiAocmVxdWlyZWRMZW5ndGggPiBiYXNl
LT51c2VkQ2FwYWNpdHkpCisgICAgICAgIGJhc2UtPnVzZWRDYXBhY2l0eSA9IHJlcXVpcmVkTGVu
Z3RoOwogCiAgICAgcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC00OTUsMjUgKzQ3MywyNSBAQCB2b2lkIFVTdHJpbmc6OmV4cGFuZFByZUNhcGFjaXR5KGludCBy
ZXF1aXJlZFByZUNhcCkKIHsKICAgICBtX3JlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAg
UmVwKiByID0gbV9yZXAtPmJhc2VTdHJpbmc7CisgICAgQmFzZVN0cmluZyogYmFzZSA9IG1fcmVw
LT5iYXNlU3RyaW5nKCk7CiAKLSAgICBpZiAocmVxdWlyZWRQcmVDYXAgPiByLT5wcmVDYXBhY2l0
eSkgewotICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUocmVxdWlyZWRQ
cmVDYXAsIHItPmNhcGFjaXR5KTsKLSAgICAgICAgaW50IGRlbHRhID0gbmV3Q2FwYWNpdHkgLSBy
LT5jYXBhY2l0eSAtIHItPnByZUNhcGFjaXR5OworICAgIGlmIChyZXF1aXJlZFByZUNhcCA+IGJh
c2UtPnByZUNhcGFjaXR5KSB7CisgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVk
U2l6ZShyZXF1aXJlZFByZUNhcCwgYmFzZS0+Y2FwYWNpdHkpOworICAgICAgICBpbnQgZGVsdGEg
PSBuZXdDYXBhY2l0eSAtIGJhc2UtPmNhcGFjaXR5IC0gYmFzZS0+cHJlQ2FwYWNpdHk7CiAKICAg
ICAgICAgVUNoYXIqIG5ld0J1ZiA9IGFsbG9jQ2hhcnMobmV3Q2FwYWNpdHkpOwogICAgICAgICBp
ZiAoIW5ld0J1ZikgewogICAgICAgICAgICAgbWFrZU51bGwoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBjb3B5Q2hhcnMobmV3QnVmICsgZGVsdGEsIHItPmJ1Ziwg
ci0+Y2FwYWNpdHkgKyByLT5wcmVDYXBhY2l0eSk7Ci0gICAgICAgIGZhc3RGcmVlKHItPmJ1Zik7
Ci0gICAgICAgIHItPmJ1ZiA9IG5ld0J1ZjsKKyAgICAgICAgY29weUNoYXJzKG5ld0J1ZiArIGRl
bHRhLCBiYXNlLT5idWYsIGJhc2UtPmNhcGFjaXR5ICsgYmFzZS0+cHJlQ2FwYWNpdHkpOworICAg
ICAgICBmYXN0RnJlZShiYXNlLT5idWYpOworICAgICAgICBiYXNlLT5idWYgPSBuZXdCdWY7CiAK
LSAgICAgICAgci0+cHJlQ2FwYWNpdHkgPSBuZXdDYXBhY2l0eSAtIHItPmNhcGFjaXR5OworICAg
ICAgICBiYXNlLT5wcmVDYXBhY2l0eSA9IG5ld0NhcGFjaXR5IC0gYmFzZS0+Y2FwYWNpdHk7CiAg
ICAgfQotICAgIGlmIChyZXF1aXJlZFByZUNhcCA+IHItPnVzZWRQcmVDYXBhY2l0eSkKLSAgICAg
ICAgci0+dXNlZFByZUNhcGFjaXR5ID0gcmVxdWlyZWRQcmVDYXA7CisgICAgaWYgKHJlcXVpcmVk
UHJlQ2FwID4gYmFzZS0+dXNlZFByZUNhcGFjaXR5KQorICAgICAgICBiYXNlLT51c2VkUHJlQ2Fw
YWNpdHkgPSByZXF1aXJlZFByZUNhcDsKIAogICAgIG1fcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7
CiB9CkBAIC01NzgsNiArNTU2LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxV
U3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICBpbnQg
dGhpc1NpemUgPSByZXAtPnNpemUoKTsKICAgICBpbnQgdGhpc09mZnNldCA9IHJlcC0+b2Zmc2V0
OwogICAgIGludCBsZW5ndGggPSB0aGlzU2l6ZSArIHRTaXplOworICAgIFVTdHJpbmc6OkJhc2VT
dHJpbmcqIGJhc2UgPSByZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxlIGNhc2Vz
OgogICAgIGlmICh0U2l6ZSA9PSAwKSB7CkBAIC01ODUsNyArNTY0LDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8
VVN0cmluZzo6UmUKICAgICB9IGVsc2UgaWYgKHRoaXNTaXplID09IDApIHsKICAgICAgICAgLy8g
dGhpcyBpcyBlbXB0eQogICAgICAgICByZXAgPSBVU3RyaW5nOjpSZXA6OmNyZWF0ZUNvcHlpbmco
dERhdGEsIHRTaXplKTsKLSAgICB9IGVsc2UgaWYgKHJlcC0+YmFzZUlzU2VsZigpICYmIHJlcC0+
cmMgPT0gMSkgeworICAgIH0gZWxzZSBpZiAocmVwID09IGJhc2UgJiYgcmVwLT5yYyA9PSAxKSB7
CiAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291bnQgb2YgMSAoc28gd2Ug
Y2FuIGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGlmICghZXhwYW5kQ2FwYWNpdHko
cmVwLmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVuZ3RoKSkKICAgICAgICAgICAgIHJlcCA9ICZVU3Ry
aW5nOjpSZXA6Om51bGwoKTsKQEAgLTU5NCw3ICs1NzMsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5n
OjpSZQogICAgICAgICAgICAgcmVwLT5sZW4gPSBsZW5ndGg7CiAgICAgICAgICAgICByZXAtPl9o
YXNoID0gMDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIHRoaXNTaXpl
ID09IHJlcC0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJl
U2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIHRoaXNTaXplID09IGJhc2UtPnVz
ZWRDYXBhY2l0eSAmJiB0aGlzU2l6ZSA+PSBtaW5TaGFyZVNpemUpIHsKICAgICAgICAgLy8gdGhp
cyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVuZCBpdCBpZiBpdCdzIGxvbmcg
ZW5vdWdoIHRvIGFwcGVuZCB0bwogICAgICAgICBpZiAoIWV4cGFuZENhcGFjaXR5KHJlcC5nZXQo
KSwgdGhpc09mZnNldCArIGxlbmd0aCkpCiAgICAgICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVw
OjpudWxsKCk7CkBAIC02MTIsNyArNTkxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAg
ICAgICAgICAgIGNvcHlDaGFycyhkLCByZXAtPmRhdGEoKSwgdGhpc1NpemUpOwogICAgICAgICAg
ICAgY29weUNoYXJzKGQgKyB0aGlzU2l6ZSwgdERhdGEsIHRTaXplKTsKICAgICAgICAgICAgIHJl
cCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgICAgICAgICByZXAtPmNh
cGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICByZXAtPmJhc2VTdHJpbmcoKS0+Y2Fw
YWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjMxLDYgKzYxMCw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRl
bmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJlCiAgICAgaW50IHRoaXNPZmZzZXQgPSByZXAtPm9m
ZnNldDsKICAgICBpbnQgdFNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbih0KSk7CiAgICAg
aW50IGxlbmd0aCA9IHRoaXNTaXplICsgdFNpemU7CisgICAgVVN0cmluZzo6QmFzZVN0cmluZyog
YmFzZSA9IHJlcC0+YmFzZVN0cmluZygpOwogCiAgICAgLy8gcG9zc2libGUgY2FzZXM6CiAgICAg
aWYgKHRoaXNTaXplID09IDApIHsKQEAgLTYzOCw3ICs2MTgsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZQogICAgICAgICByZXAgPSBjcmVhdGVSZXAodCk7CiAgICAgfSBlbHNlIGlmICh0U2l6
ZSA9PSAwKSB7CiAgICAgICAgIC8vIHQgaXMgZW1wdHksIHdlJ2xsIGp1c3QgcmV0dXJuICp0aGlz
IGJlbG93LgotICAgIH0gZWxzZSBpZiAocmVwLT5iYXNlSXNTZWxmKCkgJiYgcmVwLT5yYyA9PSAx
KSB7CisgICAgfSBlbHNlIGlmIChyZXAgPT0gYmFzZSAmJiByZXAtPnJjID09IDEpIHsKICAgICAg
ICAgLy8gdGhpcyBpcyBkaXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChzbyB3ZSBjYW4ganVz
dCBhbHRlciBpdCBkaXJlY3RseSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkocmVwLmdldCgpLCB0
aGlzT2Zmc2V0ICsgbGVuZ3RoKTsKICAgICAgICAgVUNoYXIqIGQgPSByZXAtPmRhdGEoKTsKQEAg
LTY0OCw3ICs2MjgsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6
OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAgICAgICAgcmVw
LT5sZW4gPSBsZW5ndGg7CiAgICAgICAgICAgICByZXAtPl9oYXNoID0gMDsKICAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIHRoaXNTaXplID09IHJlcC0+YmFzZVN0cmluZy0+
dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBp
ZiAodGhpc09mZnNldCArIHRoaXNTaXplID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiB0aGlzU2l6
ZSA+PSBtaW5TaGFyZVNpemUpIHsKICAgICAgICAgLy8gdGhpcyBzdHJpbmcgcmVhY2hlcyB0aGUg
ZW5kIG9mIHRoZSBidWZmZXIgLSBleHRlbmQgaXQKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkocmVw
LmdldCgpLCB0aGlzT2Zmc2V0ICsgbGVuZ3RoKTsKICAgICAgICAgVUNoYXIqIGQgPSByZXAtPmRh
dGEoKTsKQEAgLTY2OCw3ICs2NDgsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRy
PFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0U2l6ZTsgKytpKQogICAgICAgICAgICAgICAgIGRb
dGhpc1NpemUgKyBpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHRbaV0pOyAvLyB1c2Ug
dW5zaWduZWQgY2hhciB0byB6ZXJvLWV4dGVuZCBpbnN0ZWFkIG9mIHNpZ24tZXh0ZW5kCiAgICAg
ICAgICAgICByZXAgPSBVU3RyaW5nOjpSZXA6OmNyZWF0ZShkLCBsZW5ndGgpOwotICAgICAgICAg
ICAgcmVwLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgICAgICAgICAgcmVwLT5iYXNlU3Ry
aW5nKCktPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY5
NywxNSArNjc3LDE3IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3Ry
aW5nOjpSZXAqIGEsIFVTdHJpbmc6OlJlcCogYikKICAgICBpZiAoYlNpemUgPT0gMCkKICAgICAg
ICAgcmV0dXJuIGE7CiAKLSAgICBpZiAoYlNpemUgPT0gMSAmJiBhT2Zmc2V0ICsgYVNpemUgPT0g
YS0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5ICYmIGFPZmZzZXQgKyBsZW5ndGggPD0gYS0+YmFz
ZVN0cmluZy0+Y2FwYWNpdHkpIHsKKyAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBhQmFzZSA9IGEt
PmJhc2VTdHJpbmcoKTsKKyAgICBpZiAoYlNpemUgPT0gMSAmJiBhT2Zmc2V0ICsgYVNpemUgPT0g
YUJhc2UtPnVzZWRDYXBhY2l0eSAmJiBhT2Zmc2V0ICsgbGVuZ3RoIDw9IGFCYXNlLT5jYXBhY2l0
eSkgewogICAgICAgICAvLyBiIGlzIGEgc2luZ2xlIGNoYXJhY3RlciAoY29tbW9uIGZhc3QgY2Fz
ZSkKLSAgICAgICAgYS0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5ID0gYU9mZnNldCArIGxlbmd0
aDsKKyAgICAgICAgYUJhc2UtPnVzZWRDYXBhY2l0eSA9IGFPZmZzZXQgKyBsZW5ndGg7CiAgICAg
ICAgIGEtPmRhdGEoKVthU2l6ZV0gPSBiLT5kYXRhKClbMF07CiAgICAgICAgIHJldHVybiBVU3Ry
aW5nOjpSZXA6OmNyZWF0ZShhLCAwLCBsZW5ndGgpOwogICAgIH0KIAotICAgIGlmIChhT2Zmc2V0
ICsgYVNpemUgPT0gYS0+YmFzZVN0cmluZy0+dXNlZENhcGFjaXR5ICYmIGFTaXplID49IG1pblNo
YXJlU2l6ZSAmJiA0ICogYVNpemUgPj0gYlNpemUgJiYKLSAgICAgICAgICAgICAgICgtYk9mZnNl
dCAhPSBiLT5iYXNlU3RyaW5nLT51c2VkUHJlQ2FwYWNpdHkgfHwgYVNpemUgPj0gYlNpemUpKSB7
CisgICAgVVN0cmluZzo6QmFzZVN0cmluZyogYkJhc2UgPSBiLT5iYXNlU3RyaW5nKCk7CisgICAg
aWYgKGFPZmZzZXQgKyBhU2l6ZSA9PSBhQmFzZS0+dXNlZENhcGFjaXR5ICYmIGFTaXplID49IG1p
blNoYXJlU2l6ZSAmJiA0ICogYVNpemUgPj0gYlNpemUKKyAgICAgICAgJiYgKC1iT2Zmc2V0ICE9
IGJCYXNlLT51c2VkUHJlQ2FwYWNpdHkgfHwgYVNpemUgPj0gYlNpemUpKSB7CiAgICAgICAgIC8v
IC0gYSByZWFjaGVzIHRoZSBlbmQgb2YgaXRzIGJ1ZmZlciBzbyBpdCBxdWFsaWZpZXMgZm9yIHNo
YXJlZCBhcHBlbmQKICAgICAgICAgLy8gLSBhbHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0
aGUgbGVuZ3RoIG9mIGIgLSBhcHBlbmRpbmcgdG8gYSBtdWNoIHNob3J0ZXIKICAgICAgICAgLy8g
ICBzdHJpbmcgZG9lcyBtb3JlIGhhcm0gdGhhbiBnb29kCkBAIC03MjQsNyArNzA2LDcgQEAgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmlu
Zzo6UmVwKiBiKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmICgtYk9m
ZnNldCA9PSBiLT5iYXNlU3RyaW5nLT51c2VkUHJlQ2FwYWNpdHkgJiYgYlNpemUgPj0gbWluU2hh
cmVTaXplICYmIDQgKiBiU2l6ZSA+PSBhU2l6ZSkgeworICAgIGlmICgtYk9mZnNldCA9PSBiQmFz
ZS0+dXNlZFByZUNhcGFjaXR5ICYmIGJTaXplID49IG1pblNoYXJlU2l6ZSAmJiA0ICogYlNpemUg
Pj0gYVNpemUpIHsKICAgICAgICAgLy8gLSBiIHJlYWNoZXMgdGhlIGJlZ2lubmluZyBvZiBpdHMg
YnVmZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Igc2hhcmVkIHByZXBlbmQKICAgICAgICAgLy8gLSBh
bHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0aGUgbGVuZ3RoIG9mIGEgLSBwcmVwZW5kaW5n
IHRvIGEgbXVjaCBzaG9ydGVyCiAgICAgICAgIC8vICAgc3RyaW5nIGRvZXMgbW9yZSBoYXJtIHRo
YW4gZ29vZApAQCAtNzUwLDcgKzczMiw3IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25j
YXRlbmF0ZShVU3RyaW5nOjpSZXAqIGEsIFVTdHJpbmc6OlJlcCogYikKICAgICBjb3B5Q2hhcnMo
ZCwgYS0+ZGF0YSgpLCBhU2l6ZSk7CiAgICAgY29weUNoYXJzKGQgKyBhU2l6ZSwgYi0+ZGF0YSgp
LCBiU2l6ZSk7CiAgICAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IHJlc3VsdCA9IFVTdHJpbmc6
OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgcmVzdWx0LT5jYXBhY2l0eSA9IG5ld0NhcGFj
aXR5OworICAgIHJlc3VsdC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5Owog
CiAgICAgYS0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGItPmNoZWNrQ29uc2lzdGVuY3koKTsK
QEAgLTEwNTEsNiArMTAzMyw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChjb25zdCBVU3Ry
aW5nICZ0KQogICAgIGludCB0aGlzT2Zmc2V0ID0gbV9yZXAtPm9mZnNldDsKICAgICBpbnQgdFNp
emUgPSB0LnNpemUoKTsKICAgICBpbnQgbGVuZ3RoID0gdGhpc1NpemUgKyB0U2l6ZTsKKyAgICBC
YXNlU3RyaW5nKiBiYXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKIAogICAgIC8vIHBvc3NpYmxl
IGNhc2VzOgogICAgIGlmICh0aGlzU2l6ZSA9PSAwKSB7CkBAIC0xMDU4LDcgKzEwNDEsNyBAQCBV
U3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkKICAgICAgICAgKnRoaXMg
PSB0OwogICAgIH0gZWxzZSBpZiAodFNpemUgPT0gMCkgewogICAgICAgICAvLyB0IGlzIGVtcHR5
Ci0gICAgfSBlbHNlIGlmIChtX3JlcC0+YmFzZUlzU2VsZigpICYmIG1fcmVwLT5yYyA9PSAxKSB7
CisgICAgfSBlbHNlIGlmIChtX3JlcCA9PSBiYXNlICYmIG1fcmVwLT5yYyA9PSAxKSB7CiAgICAg
ICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFuZCBoYXMgcmVmY291bnQgb2YgMSAoc28gd2UgY2FuIGp1
c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQg
KyBsZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSgpKSB7CkBAIC0xMDY2LDcgKzEwNDksNyBAQCBV
U3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkKICAgICAgICAgICAgIG1f
cmVwLT5sZW4gPSBsZW5ndGg7CiAgICAgICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gdXNlZENhcGFjaXR5
KCkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zm
c2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNo
YXJlU2l6ZSkgewogICAgICAgICAvLyB0aGlzIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVy
IC0gZXh0ZW5kIGl0IGlmIGl0J3MgbG9uZyBlbm91Z2ggdG8gYXBwZW5kIHRvCiAgICAgICAgIGV4
cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSgpKSB7
CkBAIC0xMDgzLDcgKzEwNjYsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0
cmluZyAmdCkKICAgICAgICAgICAgIGNvcHlDaGFycyhkLCBkYXRhKCksIHRoaXNTaXplKTsKICAg
ICAgICAgICAgIGNvcHlDaGFycyhkICsgdGhpc1NpemUsIHQuZGF0YSgpLCB0U2l6ZSk7CiAgICAg
ICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKGQsIGxlbmd0aCk7Ci0gICAgICAgICAgICBtX3Jl
cC0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICAgICAgICAgIG1fcmVwLT5iYXNlU3RyaW5n
KCktPmNhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExMTEs
NiArMTA5NCw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogCiAgICAgaW50
IHRoaXNPZmZzZXQgPSBtX3JlcC0+b2Zmc2V0OwogICAgIGludCBsZW5ndGggPSBzaXplKCk7Cisg
ICAgQmFzZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CiAKICAgICAvLyBwb3Nz
aWJsZSBjYXNlczoKICAgICBpZiAobGVuZ3RoID09IDApIHsKQEAgLTExMjIsOSArMTEwNiw5IEBA
IFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIGRbMF0gPSBjOwogICAgICAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShkLCAxKTsK
LSAgICAgICAgICAgIG1fcmVwLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgICAgICAgICAg
bV9yZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAobV9yZXAtPmJhc2VJc1NlbGYoKSAmJiBtX3JlcC0+cmMgPT0gMSkgewor
ICAgIH0gZWxzZSBpZiAobV9yZXAgPT0gYmFzZSAmJiBtX3JlcC0+cmMgPT0gMSkgewogICAgICAg
ICAvLyB0aGlzIGlzIGRpcmVjdCBhbmQgaGFzIHJlZmNvdW50IG9mIDEgKHNvIHdlIGNhbiBqdXN0
IGFsdGVyIGl0IGRpcmVjdGx5KQogICAgICAgICBleHBhbmRDYXBhY2l0eSh0aGlzT2Zmc2V0ICsg
bGVuZ3RoICsgMSk7CiAgICAgICAgIFVDaGFyKiBkID0gbV9yZXAtPmRhdGEoKTsKQEAgLTExMzMs
NyArMTExNyw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICAg
ICAgbV9yZXAtPmxlbiA9IGxlbmd0aCArIDE7CiAgICAgICAgICAgICBtX3JlcC0+X2hhc2ggPSAw
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgbGVuZ3RoID09IHVzZWRD
YXBhY2l0eSgpICYmIGxlbmd0aCA+PSBtaW5TaGFyZVNpemUpIHsKKyAgICB9IGVsc2UgaWYgKHRo
aXNPZmZzZXQgKyBsZW5ndGggPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIGxlbmd0aCA+PSBtaW5T
aGFyZVNpemUpIHsKICAgICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZyAtIGV4dGVuZCBpdCBhbmQgc2hhcmUKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNl
dCArIGxlbmd0aCArIDEpOwogICAgICAgICBVQ2hhciogZCA9IG1fcmVwLT5kYXRhKCk7CkBAIC0x
MTUxLDcgKzExMzUsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoVUNoYXIgYykKICAgICAg
ICAgICAgIGNvcHlDaGFycyhkLCBkYXRhKCksIGxlbmd0aCk7CiAgICAgICAgICAgICBkW2xlbmd0
aF0gPSBjOwogICAgICAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShkLCBsZW5ndGggKyAxKTsK
LSAgICAgICAgICAgIG1fcmVwLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgICAgICAgICAg
bV9yZXAtPmJhc2VTdHJpbmcoKS0+Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTIxNyw4ICsxMjAxLDkgQEAgVVN0cmluZyYgVVN0cmluZzo6b3BlcmF0b3I9
KGNvbnN0IGNoYXIqIGMpCiAKICAgICBpbnQgbCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKGMp
KTsKICAgICBVQ2hhciogZDsKLSAgICBpZiAobV9yZXAtPnJjID09IDEgJiYgbCA8PSBtX3JlcC0+
Y2FwYWNpdHkgJiYgbV9yZXAtPmJhc2VJc1NlbGYoKSAmJiBtX3JlcC0+b2Zmc2V0ID09IDAgJiYg
bV9yZXAtPnByZUNhcGFjaXR5ID09IDApIHsKLSAgICAgICAgZCA9IG1fcmVwLT5idWY7CisgICAg
QmFzZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CisgICAgaWYgKG1fcmVwLT5y
YyA9PSAxICYmIGwgPD0gYmFzZS0+Y2FwYWNpdHkgJiYgbV9yZXAgPT0gYmFzZSAmJiBtX3JlcC0+
b2Zmc2V0ID09IDAgJiYgYmFzZS0+cHJlQ2FwYWNpdHkgPT0gMCkgeworICAgICAgICBkID0gYmFz
ZS0+YnVmOwogICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAgICAgICBtX3JlcC0+bGVuID0g
bDsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3Ry
aW5nLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAppbmRleCBiNmNkMTU4Li41
OWE3NjY1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaApAQCAtMjcsNyArMjcsNiBAQAogI2lu
Y2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QdHJBbmRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KQEAgLTc2LDcgKzc1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0cnVjdCBSZXAgeworICAgICAg
ICBzdHJ1Y3QgQmFzZVN0cmluZzsKKyAgICAgICAgc3RydWN0IFJlcCA6IE5vbmNvcHlhYmxlIHsK
ICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlcD4gY3JlYXRlKFVDaGFyKiwgaW50KTsKQEAgLTg5LDggKzg5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgICAgIHZvaWQgZGVzdHJveSgpOwogCi0gICAgICAgICAgICBi
b29sIGJhc2VJc1NlbGYoKSBjb25zdCB7IHJldHVybiBiYXNlU3RyaW5nID09IHRoaXM7IH0KLSAg
ICAgICAgICAgIFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gYmFzZVN0cmluZy0+YnVmICsg
YmFzZVN0cmluZy0+cHJlQ2FwYWNpdHkgKyBvZmZzZXQ7IH0KKyAgICAgICAgICAgIGJvb2wgYmFz
ZUlzU2VsZigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuaXNGbGFn
U2V0KEJhc2VTdHJpbmdGbGFnKTsgfQorICAgICAgICAgICAgVUNoYXIqIGRhdGEoKSBjb25zdDsK
ICAgICAgICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbGVuOyB9CiAKICAgICAgICAg
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IGlmIChfaGFzaCA9PSAwKSBfaGFzaCA9IGNvbXB1
dGVIYXNoKGRhdGEoKSwgbGVuKTsgcmV0dXJuIF9oYXNoOyB9CkBAIC0xMDQsMTQgKzEwNCwxOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHZvaWQgc2V0SWRlbnRpZmllclRhYmxlKElk
ZW50aWZpZXJUYWJsZSogdGFibGUpIHsgQVNTRVJUKCFpc1N0YXRpYygpKTsgbV9pZGVudGlmaWVy
VGFibGVBbmRGbGFncy5zZXQodGFibGUpOyB9CiAKICAgICAgICAgICAgIGJvb2wgaXNTdGF0aWMo
KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLmlzRmxhZ1NldChTdGF0
aWNGbGFnKTsgfQotICAgICAgICAgICAgdm9pZCBzZXRTdGF0aWMoYm9vbCB2KSB7IEFTU0VSVCgh
aWRlbnRpZmllclRhYmxlKCkpOyBpZiAodikgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRG
bGFnKFN0YXRpY0ZsYWcpOyBlbHNlIG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuY2xlYXJGbGFn
KFN0YXRpY0ZsYWcpOyB9CisgICAgICAgICAgICB2b2lkIHNldFN0YXRpYyhib29sKTsKKyAgICAg
ICAgICAgIHZvaWQgc2V0QmFzZVN0cmluZyhQYXNzUmVmUHRyPEJhc2VTdHJpbmc+KTsKKyAgICAg
ICAgICAgIEJhc2VTdHJpbmcqIGJhc2VTdHJpbmcoKTsKKyAgICAgICAgICAgIGNvbnN0IEJhc2VT
dHJpbmcqIGJhc2VTdHJpbmcoKSBjb25zdDsKIAogICAgICAgICAgICAgUmVwKiByZWYoKSB7ICsr
cmM7IHJldHVybiB0aGlzOyB9CiAgICAgICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVyZWYo
KSB7IGlmICgtLXJjID09IDApIGRlc3Ryb3koKTsgfQogCiAgICAgICAgICAgICB2b2lkIGNoZWNr
Q29uc2lzdGVuY3koKSBjb25zdDsKICAgICAgICAgICAgIGVudW0gVVN0cmluZ0ZsYWdzIHsKLSAg
ICAgICAgICAgICAgICBTdGF0aWNGbGFnCisgICAgICAgICAgICAgICAgU3RhdGljRmxhZywKKyAg
ICAgICAgICAgICAgICBCYXNlU3RyaW5nRmxhZwogICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgLy8gdW5zaGFyZWQgZGF0YQpAQCAtMTIwLDIyICsxMjQsMzEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBpbnQgcmM7IC8vIEZvciBudWxsIGFuZCBlbXB0eSBzdGF0aWMgc3RyaW5n
cywgdGhpcyBmaWVsZCBkb2VzIG5vdCByZWZsZWN0IGEgY29ycmVjdCBjb3VudCwgYmVjYXVzZSBy
ZWYvZGVyZWYgYXJlIG5vdCB0aHJlYWQtc2FmZS4gQSBzcGVjaWFsIGNhc2UgaW4gZGVzdHJveSgp
IGd1YXJhbnRlZXMgdGhhdCB0aGVzZSBkbyBub3QgZ2V0IGRlbGV0ZWQuCiAgICAgICAgICAgICBt
dXRhYmxlIHVuc2lnbmVkIF9oYXNoOwogICAgICAgICAgICAgUHRyQW5kRmxhZ3M8SWRlbnRpZmll
clRhYmxlLCBVU3RyaW5nRmxhZ3M+IG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3M7Ci0gICAgICAg
ICAgICBVU3RyaW5nOjpSZXAqIGJhc2VTdHJpbmc7Ci0gICAgICAgICAgICBzaXplX3QgcmVwb3J0
ZWRDb3N0OworICAgICAgICAgICAgdm9pZCogbV9iYXNlU3RyaW5nOyAvLyBJZiAidGhpcyIgaXMg
YSBCYXNlU3RyaW5nIGluc3RhbmNlLCBpdCBpcyAwLiBCYXNlU3RyaW5nKiBvdGhlcndpc2UuCiAK
LSAgICAgICAgICAgIC8vIHBvdGVudGlhbGx5IHNoYXJlZCBkYXRhLiAwIGlmIGJhY2tlZCB1cCBi
eSBhIGJhc2Ugc3RyaW5nLgotICAgICAgICAgICAgVUNoYXIqIGJ1ZjsKLSAgICAgICAgICAgIGlu
dCB1c2VkQ2FwYWNpdHk7Ci0gICAgICAgICAgICBpbnQgY2FwYWNpdHk7Ci0gICAgICAgICAgICBp
bnQgdXNlZFByZUNhcGFjaXR5OwotICAgICAgICAgICAgaW50IHByZUNhcGFjaXR5OworICAgICAg
ICAgICAgc3RhdGljIEJhc2VTdHJpbmcmIG51bGwoKSB7IHJldHVybiAqbnVsbEJhc2VTdHJpbmc7
IH0KKyAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nJiBlbXB0eSgpIHsgcmV0dXJuICplbXB0
eUJhc2VTdHJpbmc7IH0KIAotICAgICAgICAgICAgc3RhdGljIFJlcCYgbnVsbCgpIHsgcmV0dXJu
ICpudWxsQmFzZVN0cmluZzsgfQotICAgICAgICAgICAgc3RhdGljIFJlcCYgZW1wdHkoKSB7IHJl
dHVybiAqZW1wdHlCYXNlU3RyaW5nOyB9CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBm
cmllbmQgdm9pZCBpbml0aWFsaXplVVN0cmluZygpOwotICAgICAgICAgICAgc3RhdGljIFJlcCog
bnVsbEJhc2VTdHJpbmc7Ci0gICAgICAgICAgICBzdGF0aWMgUmVwKiBlbXB0eUJhc2VTdHJpbmc7
CisgICAgICAgICAgICBzdGF0aWMgQmFzZVN0cmluZyogbnVsbEJhc2VTdHJpbmc7CisgICAgICAg
ICAgICBzdGF0aWMgQmFzZVN0cmluZyogZW1wdHlCYXNlU3RyaW5nOworICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBCYXNlU3RyaW5nIDogcHVibGljIFJlcCB7CisgICAgICAgICAgICBCYXNl
U3RyaW5nKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2lkZW50aWZpZXJUYWJs
ZUFuZEZsYWdzLnNldEZsYWcoQmFzZVN0cmluZ0ZsYWcpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YS4KKyAgICAgICAgICAgIFVDaGFyKiBi
dWY7CisgICAgICAgICAgICBpbnQgcHJlQ2FwYWNpdHk7CisgICAgICAgICAgICBpbnQgdXNlZFBy
ZUNhcGFjaXR5OworICAgICAgICAgICAgaW50IGNhcGFjaXR5OworICAgICAgICAgICAgaW50IHVz
ZWRDYXBhY2l0eTsKKworICAgICAgICAgICAgc2l6ZV90IHJlcG9ydGVkQ29zdDsKICAgICAgICAg
fTsKIAogICAgIHB1YmxpYzoKQEAgLTI1Myw4ICsyNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc2l6ZV90IGNvc3QoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCB1
c2VkQ2FwYWNpdHkoKSBjb25zdDsKLSAgICAgICAgaW50IHVzZWRQcmVDYXBhY2l0eSgpIGNvbnN0
OwogICAgICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCByZXF1aXJlZExlbmd0aCk7CiAgICAg
ICAgIHZvaWQgZXhwYW5kUHJlQ2FwYWNpdHkoaW50IHJlcXVpcmVkUHJlQ2FwKTsKICAgICAgICAg
dm9pZCBtYWtlTnVsbCgpOwpAQCAtMzA5LDYgKzMyMCwzNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGJvb2wgZXF1YWwoY29uc3QgVVN0cmluZzo6UmVwKiwgY29uc3QgVVN0cmluZzo6UmVwKik7
CiAKKyAgICBpbmxpbmUgVUNoYXIqIFVTdHJpbmc6OlJlcDo6ZGF0YSgpIGNvbnN0CisgICAgewor
ICAgICAgICBjb25zdCBCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOworICAgICAgICBy
ZXR1cm4gYmFzZS0+YnVmICsgYmFzZS0+cHJlQ2FwYWNpdHkgKyBvZmZzZXQ7CisgICAgfQorCisg
ICAgaW5saW5lIHZvaWQgVVN0cmluZzo6UmVwOjpzZXRTdGF0aWMoYm9vbCB2KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFpZGVudGlmaWVyVGFibGUoKSk7CisgICAgICAgIGlmICh2KQorICAgICAg
ICAgICAgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFnKFN0YXRpY0ZsYWcpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLmNsZWFyRmxh
ZyhTdGF0aWNGbGFnKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBVU3RyaW5nOjpSZXA6OnNl
dEJhc2VTdHJpbmcoUGFzc1JlZlB0cjxCYXNlU3RyaW5nPiBiYXNlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGJhc2UgIT0gdGhpcyk7CisgICAgICAgIG1fYmFzZVN0cmluZyA9IGJhc2UucmVsZWFz
ZVJlZigpOworICAgIH0KKworICAgIGlubGluZSBVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5n
OjpSZXA6OmJhc2VTdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QmFzZVN0cmluZyo+KGJhc2VJc1NlbGYoKSA/IHRoaXMgOiBtX2Jhc2VTdHJpbmcpOworICAg
IH0KKworICAgIGlubGluZSBjb25zdCBVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5nOjpSZXA6
OmJhc2VTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29u
c3QgQmFzZVN0cmluZyo+KGNvbnN0X2Nhc3Q8UmVwKj4odGhpcyktPmJhc2VTdHJpbmcoKSk7Cisg
ICAgfQorCiAjaWZkZWYgTkRFQlVHCiAgICAgaW5saW5lIHZvaWQgVVN0cmluZzo6UmVwOjpjaGVj
a0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CkBAIC0zMzksOCArMzgxLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBpbmxpbmUgc2l6ZV90IFVTdHJpbmc6OmNvc3QoKSBjb25zdAogICAgIHsK
LSAgICAgICAgc2l6ZV90IGNhcGFjaXR5ID0gKG1fcmVwLT5iYXNlU3RyaW5nLT5jYXBhY2l0eSAr
IG1fcmVwLT5iYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSkgKiBzaXplb2YoVUNoYXIpOwotICAgICAg
ICBzaXplX3QgcmVwb3J0ZWRDb3N0ID0gbV9yZXAtPmJhc2VTdHJpbmctPnJlcG9ydGVkQ29zdDsK
KyAgICAgICAgQmFzZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CisgICAgICAg
IHNpemVfdCBjYXBhY2l0eSA9IChiYXNlLT5jYXBhY2l0eSArIGJhc2UtPnByZUNhcGFjaXR5KSAq
IHNpemVvZihVQ2hhcik7CisgICAgICAgIHNpemVfdCByZXBvcnRlZENvc3QgPSBiYXNlLT5yZXBv
cnRlZENvc3Q7CiAgICAgICAgIEFTU0VSVChjYXBhY2l0eSA+PSByZXBvcnRlZENvc3QpOwogCiAg
ICAgICAgIHNpemVfdCBjYXBhY2l0eURlbHRhID0gY2FwYWNpdHkgLSByZXBvcnRlZENvc3Q7CkBA
IC0zNDgsNyArMzkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChjYXBhY2l0eURl
bHRhIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5TaGFyZVNpemUpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICAgICAgbV9yZXAtPmJhc2VTdHJpbmctPnJlcG9ydGVkQ29zdCA9IGNhcGFj
aXR5OworICAgICAgICBiYXNlLT5yZXBvcnRlZENvc3QgPSBjYXBhY2l0eTsKIAogICAgICAgICBy
ZXR1cm4gY2FwYWNpdHlEZWx0YTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26629</attachid>
            <date>2009-01-12 04:39:18 -0800</date>
            <delta_ts>2009-02-02 16:30:10 -0800</delta_ts>
            <desc>Part3: Allow UString to share a UChar* with another class.</desc>
            <filename>patch-for-bug23175_part3.txt</filename>
            <type>text/plain</type>
            <size>33556</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2OWYyMGZlLi41OGMwNTM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMDktMDEtMTIgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NQorCisgICAgICAgIEFsbG93IFVTdHJpbmcg
dG8gc2hhcmUgYSBVQ2hhciogd2l0aCBhbm90aGVyIGNsYXNzLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0
cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmcuY3BwOgorICAgICAgICAoSlNDOjppbml0aWFsaXplU3RhdGljQmFzZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmlu
Zzo6UmVwOjpzaGFyZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6ZGVzdHJveSk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnJlZkNvdW50ZWRNYWxsb2NlZCk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnNldFJlZkNvdW50ZWRNYWxsb2NlZCk6
CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnRyeVRvTWFrZVVuc2hhcmVkKToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6QmFzZVN0cmluZzo6dHJ5VG9NYWtlTW9kaWZpYWJsZSk6
CisgICAgICAgIChKU0M6OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
ZXhwYW5kUHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpjb25jYXRlbmF0ZSk6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om9wZXJhdG9y
PSk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmc6
OlJlcDo6KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6QmFzZVN0cmluZzo6cmF3UmVmQ291bnRl
ZE1hbGxvY2VkKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6cmVmQ291bnRlZE1hbGxvY2VkKToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpzZXRCYXNlU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6VVN0cmluZzo6UmVwOjpiYXNlU3RyaW5nKToKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZC5o
OgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkTWFsbG9jZWQuaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlJlZkNvdW50ZWRNYWxsb2NlZDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6UmVmQ291bnRl
ZE1hbGxvY2VkOjppc1NoYXJlZCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRNYWxsb2NlZDo6
ZGF0YUFjY2Vzc011c3RCZVRocmVhZFNhZmUpOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkTWFs
bG9jZWQ6Om1heUJlUGFzc2VkVG9Bbm90aGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZE1hbGxvY2VkOjpSZWZDb3VudGVkTWFsbG9jZWQpOgorICAgICAgICAoV1RGOjpSZWZDb3Vu
dGVkTWFsbG9jZWQ6On5SZWZDb3VudGVkTWFsbG9jZWQpOgorICAgICAgICAoV1RGOjo6OnJlZik6
CisgICAgICAgIChXVEY6Ojo6ZGVyZWYpOgorICAgICAgICAoV1RGOjo6OnJlbGVhc2VEYXRhKToK
KyAgICAgICAgKFdURjo6Ojpjb3B5Rm9yQW5vdGhlclRocmVhZCk6CisgICAgICAgIChXVEY6Ojo6
dGhyZWFkU2FmZURlcmVmKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChX
VEY6OlRocmVhZFNhZmVTaGFyZWRCYXNlOjpUaHJlYWRTYWZlU2hhcmVkQmFzZSk6CisgICAgICAg
IChXVEY6OlRocmVhZFNhZmVTaGFyZWRCYXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAoV1RGOjpU
aHJlYWRTYWZlU2hhcmVkOjpUaHJlYWRTYWZlU2hhcmVkKToKKyAgICAgICAgKFdURjo6VGhyZWFk
U2FmZVNoYXJlZDo6ZGVyZWYpOgorCiAyMDA5LTAxLTExICBEYXZpZCBMZXZpbiAgPGxldmluQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0KaW5kZXggNzQyNDYxNS4uMDIwOTZkZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0KKysrIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTIyOCw2ICsyMjgsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvUmVmQ291bnRlZC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZExl
YWtDb3VudGVyLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRl
ci5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZE1hbGxvY2VkLmggXAogCUphdmFT
Y3JpcHRDb3JlL3d0Zi9SZWZQdHIuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hN
YXAuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JldGFpblB0ci5oIFwKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvaiBiL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagppbmRleCBkNmY2
YmYzLi5mMWNiNjJlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL1dURi9XVEYudmNwcm9qCkBAIC0zOTEsNiArMzkxLDEwIEBACiAJCQk+DQogCQk8L0Zp
bGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFJlZkNvdW50ZWRNYWxs
b2NlZC5oIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlx3dGZcUmVmUHRyLmgiDQogCQkJPg0KIAkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGQ2ODA2NDIuLjIyOWU0ZmUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDAsNiArNDAsNyBAQAogCQkw
ODhGQTVCQzBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODhGQTVCQTBFRjc2RDQzMDA1NzhFNkYg
LyogUmFuZG9tTnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMDhFMjc5RTkwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNlZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RTI3OUU4
MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi87IH07CiAJCTBCMUY5MjFE
MEYxNzUzNTAwMDM2NDY4RSAvKiBQdHJBbmRGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEIxRjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFu
ZEZsYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEI3ODA0RTgwRjFCMzMzQjAwQjkyQThDIC8qIFJlZkNvdW50ZWRNYWxsb2NlZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI3ODA0RTcwRjFCMzMz
QjAwQjkyQThDIC8qIFJlZkNvdW50ZWRNYWxsb2NlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBK
U0FjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5jcHAgKi87IH07
CiAJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBEMTdENjBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0MTIxMTMxMEE0ODc5NEQwMDQ4MDI1NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3
b3JrICovOyB9OwpAQCAtNDIzLDYgKzQyNCw3IEBACiAJCTA4OEZBNUJBMEVGNzZENDMwMDU3OEU2
RiAvKiBSYW5kb21OdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFu
ZG9tTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4RTI3OUU4MEVGODNC
MTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJhbmRvbU51bWJlclNlZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEIxRjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB0ckFuZEZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBCNzgwNEU3MEYxQjMzM0IwMEI5MkE4QyAvKiBSZWZDb3VudGVkTWFsbG9jZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmQ291bnRlZE1hbGxvY2VkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAv
KiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFz
ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjExMDIwQTQ4Nzgw
OTAwNDgwMjU1IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0g
bWluaWRvbS5jOyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9t
aW5pZG9tLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMCw2ICsxMTIyLDcg
QEAKIAkJCQkxNDE5RDMyQzBDRUE3Q0RFMDBGRjUwN0EgLyogUmVmQ291bnRlZC5oICovLAogCQkJ
CTkwNUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwICov
LAogCQkJCTkwRDM0NjlCMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCAqLywKKwkJCQkwQjc4MDRFNzBGMUIzMzNCMDBCOTJBOEMgLyogUmVmQ291bnRlZE1hbGxvY2Vk
LmggKi8sCiAJCQkJNjVDNjQ3QjMwOTNFRjhENjAwMjJDMzgwIC8qIFJlZlB0ci5oICovLAogCQkJ
CTE0OEExRUNEMEQxMEMyM0IwMDY5QTQ3QyAvKiBSZWZQdHJIYXNoTWFwLmggKi8sCiAJCQkJNTFG
NjQ4RDYwQkI0RTJDQTAwMzNENzYwIC8qIFJldGFpblB0ci5oICovLApAQCAtMTYzOSw2ICsxNjQy
LDcgQEAKIAkJCQkwOEUyNzlFOTBFRjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTcwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZkNvdW50
ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBCNzgwNEU4MEYxQjMzM0Iw
MEI5MkE4QyAvKiBSZWZDb3VudGVkTWFsbG9jZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDU5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHJIYXNoTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcCBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAppbmRleCA4YTNiOGZkLi42N2JlMDlk
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCkBAIC01NSw4ICs1NSw4
IEBAIFNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UoKQogICAgIG1fYmFz
ZS5idWYgPSBtX2NoYXJhY3RlcnM7CiAgICAgbV9iYXNlLmxlbiA9IG51bUNoYXJhY3RlcnNUb1N0
b3JlOwogICAgIG1fYmFzZS5vZmZzZXQgPSAwOworICAgIG1fYmFzZS5tX3JlZkNvdW50ZWRNYWxs
b2NlZEZvckJhc2VTdHJpbmcgPSAwOwogICAgIG1fYmFzZS5faGFzaCA9IDA7Ci0gICAgbV9iYXNl
Lm1fYmFzZVN0cmluZyA9IDA7CiAgICAgbV9iYXNlLnByZUNhcGFjaXR5ID0gMDsKICAgICBtX2Jh
c2UudXNlZFByZUNhcGFjaXR5ID0gMDsKICAgICBtX2Jhc2UucmVwb3J0ZWRDb3N0ID0gMDsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCmluZGV4IDk2NDg0M2IuLjVkMzM4ZTIgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VU3RyaW5nLmNwcApAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgaW5pdGlhbGl6
ZVN0YXRpY0Jhc2VTdHJpbmcoaW50IGxlbiwgVUNoYXIqIGJ1ZiwgVVN0cmluZzo6QmFzZVN0cmlu
ZyYgYmFzZSkKICAgICBiYXNlLnJjID0gSU5UX01BWCAvIDI7CiAgICAgYmFzZS5faGFzaCA9IDA7
CiAgICAgYmFzZS5tX2lkZW50aWZpZXJUYWJsZUFuZEZsYWdzLnNldEZsYWcoVVN0cmluZzo6UmVw
OjpTdGF0aWNGbGFnKTsKLSAgICBiYXNlLm1fYmFzZVN0cmluZyA9IDA7CisgICAgYmFzZS5tX3Jl
ZkNvdW50ZWRNYWxsb2NlZEZvckJhc2VTdHJpbmcgPSAwOwogICAgIGJhc2UuYnVmID0gYnVmOwog
ICAgIGJhc2UucHJlQ2FwYWNpdHkgPSAwOwogICAgIGJhc2UudXNlZFByZUNhcGFjaXR5ID0gMDsK
QEAgLTIzNSw3ICsyMzUsNyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVw
OjpjcmVhdGUoVUNoYXIqIGQsIGludCBsKQogICAgIHItPmxlbiA9IGw7CiAgICAgci0+cmMgPSAx
OwogICAgIHItPl9oYXNoID0gMDsKLSAgICByLT5tX2Jhc2VTdHJpbmcgPSAwOworICAgIHItPm1f
cmVmQ291bnRlZE1hbGxvY2VkRm9yQmFzZVN0cmluZyA9IDA7CiAgICAgci0+cmVwb3J0ZWRDb3N0
ID0gMDsKICAgICByLT5idWYgPSBkOwogICAgIHItPnVzZWRDYXBhY2l0eSA9IGw7CkBAIC0yNDks
NiArMjQ5LDE0IEBAIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0
ZShVQ2hhciogZCwgaW50IGwpCiAgICAgcmV0dXJuIGFkb3B0UmVmKHIpOwogfQogCitQYXNzUmVm
UHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpzaGFyZShVQ2hhciogZCwgaW50IGwsIFBh
c3NSZWZQdHI8UmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiA+IHJlZkNvdW50ZWRNYWxsb2NlZCkK
K3sKKyAgICBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gciA9IGNyZWF0ZShkLCBsKTsKKyAgICBy
LT5iYXNlU3RyaW5nKCktPnNldFJlZkNvdW50ZWRNYWxsb2NlZChyZWZDb3VudGVkTWFsbG9jZWQp
OworICAgIHItPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICByZXR1cm4gcjsKK30KKwogUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKFBhc3NSZWZQdHI8UmVwPiBy
ZXAsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKHJlcCk7CkBAIC0yOTgs
OSArMzA2LDEzIEBAIHZvaWQgVVN0cmluZzo6UmVwOjpkZXN0cm95KCkKICAgICAgICAgaWYgKGlk
ZW50aWZpZXJUYWJsZSgpKQogICAgICAgICAgICAgSWRlbnRpZmllcjo6cmVtb3ZlKHRoaXMpOwog
ICAgICAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOwotICAgICAg
ICBpZiAoYmFzZSA9PSB0aGlzKQotICAgICAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKLSAg
ICAgICAgZWxzZQorICAgICAgICBpZiAoYmFzZSA9PSB0aGlzKSB7CisgICAgICAgICAgICBSZWZD
b3VudGVkTWFsbG9jZWQ8VUNoYXI+KiByZWZDb3VudGVkTWFsbG9jZWQgPSBiYXNlLT5yYXdSZWZD
b3VudGVkTWFsbG9jZWQoKTsKKyAgICAgICAgICAgIGlmIChyZWZDb3VudGVkTWFsbG9jZWQpCisg
ICAgICAgICAgICAgICAgcmVmQ291bnRlZE1hbGxvY2VkLT5kZXJlZigpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKGJhc2UtPmJ1Zik7CisgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgYmFzZS0+ZGVyZWYoKTsKIAogICAgICAgICBkZWxldGUgdGhpczsKQEAg
LTQyNCw2ICs0MzYsNDUgQEAgdm9pZCBVU3RyaW5nOjpSZXA6OmNoZWNrQ29uc2lzdGVuY3koKSBj
b25zdAogfQogI2VuZGlmCiAKK1Bhc3NSZWZQdHI8UmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiA+
IFVTdHJpbmc6OkJhc2VTdHJpbmc6OnJlZkNvdW50ZWRNYWxsb2NlZCgpCit7CisgICAgLy8gSXQg
bWFrZSBkb2Vzbid0IHNlbnNlIHRvIHNoYXJlIDwgNiBieXRlcyBvZiBkYXRhLgorICAgIEFTU0VS
VChsZW4gPiAyKTsKKyAgICBpZiAoIXJhd1JlZkNvdW50ZWRNYWxsb2NlZCgpKQorICAgICAgICBz
ZXRSZWZDb3VudGVkTWFsbG9jZWQoUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPjo6Y3JlYXRlKGJ1
ZikpOworICAgIHJldHVybiByYXdSZWZDb3VudGVkTWFsbG9jZWQoKTsKK30KKwordm9pZCBVU3Ry
aW5nOjpCYXNlU3RyaW5nOjpzZXRSZWZDb3VudGVkTWFsbG9jZWQoUGFzc1JlZlB0cjxSZWZDb3Vu
dGVkTWFsbG9jZWQ8VUNoYXI+ID4gcmVmQ291bnRlZE1hbGxvY2VkKQoreworICAgIGlmIChtX3Jl
ZkNvdW50ZWRNYWxsb2NlZEZvckJhc2VTdHJpbmcpCisgICAgICAgIG1fcmVmQ291bnRlZE1hbGxv
Y2VkRm9yQmFzZVN0cmluZy0+ZGVyZWYoKTsKKyAgICBtX3JlZkNvdW50ZWRNYWxsb2NlZEZvckJh
c2VTdHJpbmcgPSByZWZDb3VudGVkTWFsbG9jZWQucmVsZWFzZVJlZigpOworfQorCitib29sIFVT
dHJpbmc6OkJhc2VTdHJpbmc6OnRyeVRvTWFrZVVuc2hhcmVkKCkKK3sKKyAgICByZXR1cm4gcmMg
PT0gMSAmJiB0cnlUb01ha2VNb2RpZmlhYmxlKCk7Cit9CisKK2Jvb2wgVVN0cmluZzo6QmFzZVN0
cmluZzo6dHJ5VG9NYWtlTW9kaWZpYWJsZSgpCit7CisgICAgLy8gYnVmIG1heSBub3QgYmUgbW9k
aWZpZWQgYXMgc29vbiBhcyB0aGUgdW5kZXJseWluZyBkYXRhIGhhcyBiZWVuIHNoYXJlZCB3aXRo
IGFub3RoZXIgY2xhc3MuCisgICAgUmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiogcmVmQ291bnRl
ZE1hbGxvY2VkID0gcmF3UmVmQ291bnRlZE1hbGxvY2VkKCk7CisgICAgaWYgKCFyZWZDb3VudGVk
TWFsbG9jZWQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChyZWZDb3VudGVkTWFsbG9j
ZWQtPmlzU2hhcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEF0IHRoaXMg
cG9pbnQsIHdlIGtub3cgaXQgdGhhdCB0aGUgdW5kZXJseWluZyBidWZmZXIgaXNuJ3Qgc2hhcmVk
IG91dHNpZGUgb2YgdGhpcyBiYXNlIGNsYXNzLgorICAgIC8vIEluIG9yZGVyIHRvIHJlZ2FpbiBj
b250cm9sIG9mIGl0LCB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdGhlICJyZWZDb3VudGVkTWFsbG9j
ZWQiLgorICAgIFVDaGFyKiB1bnNoYXJlZEJ1ZiA9IGNvbnN0X2Nhc3Q8VUNoYXIqPihyZWZDb3Vu
dGVkTWFsbG9jZWQtPnJlbGVhc2VEYXRhKCkpOworICAgIHNldFJlZkNvdW50ZWRNYWxsb2NlZCgw
KTsKKyAgICBwcmVDYXBhY2l0eSArPSAoYnVmIC0gdW5zaGFyZWRCdWYpOworICAgIGJ1ZiA9IHVu
c2hhcmVkQnVmOworICAgIHJldHVybiB0cnVlOworfQorCiAvLyBwdXQgdGhlc2UgZWFybHkgc28g
dGhleSBjYW4gYmUgaW5saW5lZAogc3RhdGljIGlubGluZSBzaXplX3QgZXhwYW5kZWRTaXplKHNp
emVfdCBzaXplLCBzaXplX3Qgb3RoZXJTaXplKQogewpAQCAtNDQzLDYgKzQ5NCw3IEBAIHN0YXRp
YyBpbmxpbmUgc2l6ZV90IGV4cGFuZGVkU2l6ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IG90aGVyU2l6
ZSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBleHBhbmRDYXBhY2l0eShVU3RyaW5nOjpSZXAqIHJlcCwg
aW50IHJlcXVpcmVkTGVuZ3RoKQogewogICAgIHJlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAg
IEFTU0VSVCghcmVwLT5iYXNlU3RyaW5nKCktPnJhd1JlZkNvdW50ZWRNYWxsb2NlZCgpKTsKIAog
ICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSByZXAtPmJhc2VTdHJpbmcoKTsKIApAQCAt
NDcyLDYgKzUyNCw3IEBAIHZvaWQgVVN0cmluZzo6ZXhwYW5kQ2FwYWNpdHkoaW50IHJlcXVpcmVk
TGVuZ3RoKQogdm9pZCBVU3RyaW5nOjpleHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdWlyZWRQcmVD
YXApCiB7CiAgICAgbV9yZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlQoIW1fcmVw
LT5iYXNlU3RyaW5nKCktPnJhd1JlZkNvdW50ZWRNYWxsb2NlZCgpKTsKIAogICAgIEJhc2VTdHJp
bmcqIGJhc2UgPSBtX3JlcC0+YmFzZVN0cmluZygpOwogCkBAIC01NjQsNyArNjE3LDcgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBh
c3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICB9IGVsc2UgaWYgKHRoaXNTaXplID09IDApIHsKICAg
ICAgICAgLy8gdGhpcyBpcyBlbXB0eQogICAgICAgICByZXAgPSBVU3RyaW5nOjpSZXA6OmNyZWF0
ZUNvcHlpbmcodERhdGEsIHRTaXplKTsKLSAgICB9IGVsc2UgaWYgKHJlcCA9PSBiYXNlICYmIHJl
cC0+cmMgPT0gMSkgeworICAgIH0gZWxzZSBpZiAocmVwID09IGJhc2UgJiYgYmFzZS0+dHJ5VG9N
YWtlVW5zaGFyZWQoKSkgewogICAgICAgICAvLyB0aGlzIGlzIGRpcmVjdCBhbmQgaGFzIHJlZmNv
dW50IG9mIDEgKHNvIHdlIGNhbiBqdXN0IGFsdGVyIGl0IGRpcmVjdGx5KQogICAgICAgICBpZiAo
IWV4cGFuZENhcGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0aCkpCiAgICAgICAg
ICAgICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CkBAIC01NzMsNyArNjI2LDcgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBh
c3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcC0+bGVuID0gbGVuZ3RoOwogICAg
ICAgICAgICAgcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRoaXNP
ZmZzZXQgKyB0aGlzU2l6ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWlu
U2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFz
ZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSAmJiBiYXNlLT50cnlU
b01ha2VNb2RpZmlhYmxlKCkpIHsKICAgICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2Yg
dGhlIGJ1ZmZlciAtIGV4dGVuZCBpdCBpZiBpdCdzIGxvbmcgZW5vdWdoIHRvIGFwcGVuZCB0bwog
ICAgICAgICBpZiAoIWV4cGFuZENhcGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0
aCkpCiAgICAgICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CkBAIC01ODIsNyAr
NjM1LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNv
bmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcCA9IFVTdHJp
bmc6OlJlcDo6Y3JlYXRlKHJlcCwgMCwgbGVuZ3RoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFj
aXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmluZworICAgICAgICAvLyB0aGlzIGlzIHNo
YXJlZCBpbiBzb21lIHdheSB0aGF0IHByZXZlbnRzIHVzIGZyb20gbW9kaWZ5aW5nIGJhc2UsIGdv
dHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9
IGV4cGFuZGVkU2l6ZShsZW5ndGgsIDApOwogICAgICAgICBVQ2hhciogZCA9IGFsbG9jQ2hhcnMo
bmV3Q2FwYWNpdHkpOwogICAgICAgICBpZiAoIWQpCkBAIC02MTgsNyArNjcxLDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NS
ZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgcmVwID0gY3JlYXRlUmVwKHQpOwogICAgIH0gZWxz
ZSBpZiAodFNpemUgPT0gMCkgewogICAgICAgICAvLyB0IGlzIGVtcHR5LCB3ZSdsbCBqdXN0IHJl
dHVybiAqdGhpcyBiZWxvdy4KLSAgICB9IGVsc2UgaWYgKHJlcCA9PSBiYXNlICYmIHJlcC0+cmMg
PT0gMSkgeworICAgIH0gZWxzZSBpZiAocmVwID09IGJhc2UgJiYgYmFzZS0+dHJ5VG9NYWtlVW5z
aGFyZWQoKSkgewogICAgICAgICAvLyB0aGlzIGlzIGRpcmVjdCBhbmQgaGFzIHJlZmNvdW50IG9m
IDEgKHNvIHdlIGNhbiBqdXN0IGFsdGVyIGl0IGRpcmVjdGx5KQogICAgICAgICBleHBhbmRDYXBh
Y2l0eShyZXAuZ2V0KCksIHRoaXNPZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICBVQ2hhciogZCA9
IHJlcC0+ZGF0YSgpOwpAQCAtNjI4LDcgKzY4MSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShQYXNzUmVmUHRyPFVTdHJpbmc6OlJl
CiAgICAgICAgICAgICByZXAtPmxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgIHJlcC0+X2hhc2gg
PSAwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0g
YmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSkgeworICAgIH0g
ZWxzZSBpZiAodGhpc09mZnNldCArIHRoaXNTaXplID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiB0
aGlzU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgYmFzZS0+dHJ5VG9NYWtlTW9kaWZpYWJsZSgpKSB7
CiAgICAgICAgIC8vIHRoaXMgc3RyaW5nIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIC0g
ZXh0ZW5kIGl0CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCAr
IGxlbmd0aCk7CiAgICAgICAgIFVDaGFyKiBkID0gcmVwLT5kYXRhKCk7CkBAIC02MzgsNyArNjkx
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNh
dGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcCA9IFVTdHJpbmc6
OlJlcDo6Y3JlYXRlKHJlcCwgMCwgbGVuZ3RoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5
LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmluZworICAgICAgICAvLyB0aGlzIGlzIHNoYXJl
ZCBpbiBzb21lIHdheSB0aGF0IHByZXZlbnRzIHVzIGZyb20gbW9kaWZ5aW5nIGJhc2UsIGdvdHRh
IG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4
cGFuZGVkU2l6ZShsZW5ndGgsIDApOwogICAgICAgICBVQ2hhciogZCA9IGFsbG9jQ2hhcnMobmV3
Q2FwYWNpdHkpOwogICAgICAgICBpZiAoIWQpCkBAIC02NzgsNyArNzMxLDcgQEAgUGFzc1JlZlB0
cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6UmVw
KiBiKQogICAgICAgICByZXR1cm4gYTsKIAogICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGFCYXNl
ID0gYS0+YmFzZVN0cmluZygpOwotICAgIGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6
ZSA9PSBhQmFzZS0+dXNlZENhcGFjaXR5ICYmIGFPZmZzZXQgKyBsZW5ndGggPD0gYUJhc2UtPmNh
cGFjaXR5KSB7CisgICAgaWYgKGJTaXplID09IDEgJiYgYU9mZnNldCArIGFTaXplID09IGFCYXNl
LT51c2VkQ2FwYWNpdHkgJiYgYU9mZnNldCArIGxlbmd0aCA8PSBhQmFzZS0+Y2FwYWNpdHkgJiYg
YUJhc2UtPnRyeVRvTWFrZU1vZGlmaWFibGUoKSkgewogICAgICAgICAvLyBiIGlzIGEgc2luZ2xl
IGNoYXJhY3RlciAoY29tbW9uIGZhc3QgY2FzZSkKICAgICAgICAgYUJhc2UtPnVzZWRDYXBhY2l0
eSA9IGFPZmZzZXQgKyBsZW5ndGg7CiAgICAgICAgIGEtPmRhdGEoKVthU2l6ZV0gPSBiLT5kYXRh
KClbMF07CkBAIC02ODcsNyArNzQwLDcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNh
dGVuYXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6UmVwKiBiKQogCiAgICAgVVN0cmluZzo6
QmFzZVN0cmluZyogYkJhc2UgPSBiLT5iYXNlU3RyaW5nKCk7CiAgICAgaWYgKGFPZmZzZXQgKyBh
U2l6ZSA9PSBhQmFzZS0+dXNlZENhcGFjaXR5ICYmIGFTaXplID49IG1pblNoYXJlU2l6ZSAmJiA0
ICogYVNpemUgPj0gYlNpemUKLSAgICAgICAgJiYgKC1iT2Zmc2V0ICE9IGJCYXNlLT51c2VkUHJl
Q2FwYWNpdHkgfHwgYVNpemUgPj0gYlNpemUpKSB7CisgICAgICAgICYmICgtYk9mZnNldCAhPSBi
QmFzZS0+dXNlZFByZUNhcGFjaXR5IHx8IGFTaXplID49IGJTaXplKSAmJiBhQmFzZS0+dHJ5VG9N
YWtlTW9kaWZpYWJsZSgpKSB7CiAgICAgICAgIC8vIC0gYSByZWFjaGVzIHRoZSBlbmQgb2YgaXRz
IGJ1ZmZlciBzbyBpdCBxdWFsaWZpZXMgZm9yIHNoYXJlZCBhcHBlbmQKICAgICAgICAgLy8gLSBh
bHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0aGUgbGVuZ3RoIG9mIGIgLSBhcHBlbmRpbmcg
dG8gYSBtdWNoIHNob3J0ZXIKICAgICAgICAgLy8gICBzdHJpbmcgZG9lcyBtb3JlIGhhcm0gdGhh
biBnb29kCkBAIC03MDYsNyArNzU5LDcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNh
dGVuYXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6UmVwKiBiKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIGlmICgtYk9mZnNldCA9PSBiQmFzZS0+dXNlZFByZUNhcGFj
aXR5ICYmIGJTaXplID49IG1pblNoYXJlU2l6ZSAmJiA0ICogYlNpemUgPj0gYVNpemUpIHsKKyAg
ICBpZiAoLWJPZmZzZXQgPT0gYkJhc2UtPnVzZWRQcmVDYXBhY2l0eSAmJiBiU2l6ZSA+PSBtaW5T
aGFyZVNpemUgJiYgNCAqIGJTaXplID49IGFTaXplICYmIGJCYXNlLT50cnlUb01ha2VNb2RpZmlh
YmxlKCkpIHsKICAgICAgICAgLy8gLSBiIHJlYWNoZXMgdGhlIGJlZ2lubmluZyBvZiBpdHMgYnVm
ZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Igc2hhcmVkIHByZXBlbmQKICAgICAgICAgLy8gLSBhbHNv
LCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0aGUgbGVuZ3RoIG9mIGEgLSBwcmVwZW5kaW5nIHRv
IGEgbXVjaCBzaG9ydGVyCiAgICAgICAgIC8vICAgc3RyaW5nIGRvZXMgbW9yZSBoYXJtIHRoYW4g
Z29vZApAQCAtMTA0MSw3ICsxMDk0LDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0
IFVTdHJpbmcgJnQpCiAgICAgICAgICp0aGlzID0gdDsKICAgICB9IGVsc2UgaWYgKHRTaXplID09
IDApIHsKICAgICAgICAgLy8gdCBpcyBlbXB0eQotICAgIH0gZWxzZSBpZiAobV9yZXAgPT0gYmFz
ZSAmJiBtX3JlcC0+cmMgPT0gMSkgeworICAgIH0gZWxzZSBpZiAobV9yZXAgPT0gYmFzZSAmJiBi
YXNlLT50cnlUb01ha2VVbnNoYXJlZCgpKSB7CiAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IGFu
ZCBoYXMgcmVmY291bnQgb2YgMSAoc28gd2UgY2FuIGp1c3QgYWx0ZXIgaXQgZGlyZWN0bHkpCiAg
ICAgICAgIGV4cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQgKyBsZW5ndGgpOwogICAgICAgICBpZiAo
ZGF0YSgpKSB7CkBAIC0xMDQ5LDcgKzExMDIsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQo
Y29uc3QgVVN0cmluZyAmdCkKICAgICAgICAgICAgIG1fcmVwLT5sZW4gPSBsZW5ndGg7CiAgICAg
ICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlz
T2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1p
blNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIHRoaXNTaXplID09IGJh
c2UtPnVzZWRDYXBhY2l0eSAmJiB0aGlzU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgYmFzZS0+dHJ5
VG9NYWtlTW9kaWZpYWJsZSgpKSB7CiAgICAgICAgIC8vIHRoaXMgcmVhY2hlcyB0aGUgZW5kIG9m
IHRoZSBidWZmZXIgLSBleHRlbmQgaXQgaWYgaXQncyBsb25nIGVub3VnaCB0byBhcHBlbmQgdG8K
ICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNldCArIGxlbmd0aCk7CiAgICAgICAgIGlm
IChkYXRhKCkpIHsKQEAgLTEwNTcsNyArMTExMCw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVu
ZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShtX3Jl
cCwgMCwgbGVuZ3RoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHRoaXMg
aXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5LCBnb3R0YSBtYWtlIGEg
d2hvbGUgbmV3IHN0cmluZworICAgICAgICAvLyB0aGlzIGlzIHNoYXJlZCBpbiBzb21lIHdheSB0
aGF0IHByZXZlbnRzIHVzIGZyb20gbW9kaWZ5aW5nIGJhc2UsIGdvdHRhIG1ha2UgYSB3aG9sZSBu
ZXcgc3RyaW5nCiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShsZW5n
dGgsIDApOwogICAgICAgICBVQ2hhciogZCA9IGFsbG9jQ2hhcnMobmV3Q2FwYWNpdHkpOwogICAg
ICAgICBpZiAoIWQpCkBAIC0xMTA4LDcgKzExNjEsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBl
bmQoVUNoYXIgYykKICAgICAgICAgICAgIG1fcmVwID0gUmVwOjpjcmVhdGUoZCwgMSk7CiAgICAg
ICAgICAgICBtX3JlcC0+YmFzZVN0cmluZygpLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3JlcCA9PSBiYXNlICYmIG1fcmVwLT5yYyA9PSAxKSB7
CisgICAgfSBlbHNlIGlmIChtX3JlcCA9PSBiYXNlICYmIGJhc2UtPnRyeVRvTWFrZVVuc2hhcmVk
KCkpIHsKICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgYW5kIGhhcyByZWZjb3VudCBvZiAxIChz
byB3ZSBjYW4ganVzdCBhbHRlciBpdCBkaXJlY3RseSkKICAgICAgICAgZXhwYW5kQ2FwYWNpdHko
dGhpc09mZnNldCArIGxlbmd0aCArIDEpOwogICAgICAgICBVQ2hhciogZCA9IG1fcmVwLT5kYXRh
KCk7CkBAIC0xMTE3LDcgKzExNzAsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoVUNoYXIg
YykKICAgICAgICAgICAgIG1fcmVwLT5sZW4gPSBsZW5ndGggKyAxOwogICAgICAgICAgICAgbV9y
ZXAtPl9oYXNoID0gMDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIGxl
bmd0aCA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgbGVuZ3RoID49IG1pblNoYXJlU2l6ZSkgewor
ICAgIH0gZWxzZSBpZiAodGhpc09mZnNldCArIGxlbmd0aCA9PSBiYXNlLT51c2VkQ2FwYWNpdHkg
JiYgbGVuZ3RoID49IG1pblNoYXJlU2l6ZSAmJiBiYXNlLT50cnlUb01ha2VNb2RpZmlhYmxlKCkp
IHsKICAgICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIHN0cmluZyAtIGV4dGVu
ZCBpdCBhbmQgc2hhcmUKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkodGhpc09mZnNldCArIGxlbmd0
aCArIDEpOwogICAgICAgICBVQ2hhciogZCA9IG1fcmVwLT5kYXRhKCk7CkBAIC0xMTI2LDcgKzEx
NzksNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjphcHBlbmQoVUNoYXIgYykKICAgICAgICAgICAgIG1f
cmVwID0gUmVwOjpjcmVhdGUobV9yZXAsIDAsIGxlbmd0aCArIDEpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5nIG1v
cmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCisgICAgICAgIC8vIHRo
aXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVudHMgdXMgZnJvbSBtb2RpZnlpbmcg
YmFzZSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKICAgICAgICAgc2l6ZV90IG5ld0Nh
cGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCArIDEsIDApOwogICAgICAgICBVQ2hhciogZCA9
IGFsbG9jQ2hhcnMobmV3Q2FwYWNpdHkpOwogICAgICAgICBpZiAoIWQpCkBAIC0xMjAyLDcgKzEy
NTUsNyBAQCBVU3RyaW5nJiBVU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgY2hhciogYykKICAgICBp
bnQgbCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKGMpKTsKICAgICBVQ2hhciogZDsKICAgICBC
YXNlU3RyaW5nKiBiYXNlID0gbV9yZXAtPmJhc2VTdHJpbmcoKTsKLSAgICBpZiAobV9yZXAtPnJj
ID09IDEgJiYgbCA8PSBiYXNlLT5jYXBhY2l0eSAmJiBtX3JlcCA9PSBiYXNlICYmIG1fcmVwLT5v
ZmZzZXQgPT0gMCAmJiBiYXNlLT5wcmVDYXBhY2l0eSA9PSAwKSB7CisgICAgaWYgKGJhc2UtPnRy
eVRvTWFrZVVuc2hhcmVkKCkgJiYgbCA8PSBiYXNlLT5jYXBhY2l0eSAmJiBtX3JlcCA9PSBiYXNl
ICYmIG1fcmVwLT5vZmZzZXQgPT0gMCAmJiBiYXNlLT5wcmVDYXBhY2l0eSA9PSAwKSB7CiAgICAg
ICAgIGQgPSBiYXNlLT5idWY7CiAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIG1f
cmVwLT5sZW4gPSBsOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAppbmRleCA1OWE3NjY1Li5mNzcw
NmYxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUHRyQW5kRmxhZ3MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZE1hbGxvY2Vk
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CkBAIC04Myw2ICs4NCw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwPiBjcmVhdGVDb3B5aW5n
KGNvbnN0IFVDaGFyKiwgaW50KTsKICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4g
Y3JlYXRlKFBhc3NSZWZQdHI8UmVwPiBiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKIAor
ICAgICAgICAgICAgLy8gVXNlcyBSZWZDb3VudGVkTWFsbG9jZWQgdG8gaGF2ZSBqb2ludCBvd25l
cnNoaXAgb3ZlciB0aGUgVUNoYXIqLgorICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVw
PiBzaGFyZShVQ2hhciosIGludCwgUGFzc1JlZlB0cjxSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+
ID4pOworCiAgICAgICAgICAgICAvLyBDb25zdHJ1Y3RzIGEgc3RyaW5nIGZyb20gYSBVVEYtOCBz
dHJpbmcsIHVzaW5nIHN0cmljdCBjb252ZXJzaW9uIChzZWUgY29tbWVudHMgaW4gVVRGOC5oKS4K
ICAgICAgICAgICAgIC8vIFJldHVybnMgVVN0cmluZzo6UmVwOjpudWxsIGZvciBudWxsIGlucHV0
IG9yIGNvbnZlcnNpb24gZmFpbHVyZS4KICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
cD4gY3JlYXRlRnJvbVVURjgoY29uc3QgY2hhciopOwpAQCAtMTI0LDcgKzEyOCwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGludCByYzsgLy8gRm9yIG51bGwgYW5kIGVtcHR5IHN0
YXRpYyBzdHJpbmdzLCB0aGlzIGZpZWxkIGRvZXMgbm90IHJlZmxlY3QgYSBjb3JyZWN0IGNvdW50
LCBiZWNhdXNlIHJlZi9kZXJlZiBhcmUgbm90IHRocmVhZC1zYWZlLiBBIHNwZWNpYWwgY2FzZSBp
biBkZXN0cm95KCkgZ3VhcmFudGVlcyB0aGF0IHRoZXNlIGRvIG5vdCBnZXQgZGVsZXRlZC4KICAg
ICAgICAgICAgIG11dGFibGUgdW5zaWduZWQgX2hhc2g7CiAgICAgICAgICAgICBQdHJBbmRGbGFn
czxJZGVudGlmaWVyVGFibGUsIFVTdHJpbmdGbGFncz4gbV9pZGVudGlmaWVyVGFibGVBbmRGbGFn
czsKLSAgICAgICAgICAgIHZvaWQqIG1fYmFzZVN0cmluZzsgLy8gSWYgInRoaXMiIGlzIGEgQmFz
ZVN0cmluZyBpbnN0YW5jZSwgaXQgaXMgMC4gQmFzZVN0cmluZyogb3RoZXJ3aXNlLgorICAgICAg
ICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIC8vIElmICFiYXNlSXNTZWxmKCkKKyAgICAg
ICAgICAgICAgICBCYXNlU3RyaW5nKiBtX2Jhc2VTdHJpbmdGb3JSZXA7CisgICAgICAgICAgICAg
ICAgLy8gSWYgYmFzZUlzU2VsZigpCisgICAgICAgICAgICAgICAgUmVmQ291bnRlZE1hbGxvY2Vk
PFVDaGFyPiogbV9yZWZDb3VudGVkTWFsbG9jZWRGb3JCYXNlU3RyaW5nOworICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgc3RhdGljIEJhc2VTdHJpbmcmIG51bGwoKSB7IHJldHVybiAqbnVs
bEJhc2VTdHJpbmc7IH0KICAgICAgICAgICAgIHN0YXRpYyBCYXNlU3RyaW5nJiBlbXB0eSgpIHsg
cmV0dXJuICplbXB0eUJhc2VTdHJpbmc7IH0KQEAgLTE0MSw2ICsxNTAsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAgICAgbV9pZGVudGlmaWVyVGFibGVBbmRGbGFncy5zZXRGbGFn
KEJhc2VTdHJpbmdGbGFnKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgdm9pZCBzZXRS
ZWZDb3VudGVkTWFsbG9jZWQoUGFzc1JlZlB0cjxSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+ID4p
OworCisgICAgICAgICAgICBSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+KiByYXdSZWZDb3VudGVk
TWFsbG9jZWQoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50ZWRNYWxsb2NlZEZvckJhc2VTdHJp
bmc7IH0KKyAgICAgICAgICAgIFBhc3NSZWZQdHI8UmVmQ291bnRlZE1hbGxvY2VkPFVDaGFyPiA+
IHJlZkNvdW50ZWRNYWxsb2NlZCgpOworCisgICAgICAgICAgICBib29sIHRyeVRvTWFrZVVuc2hh
cmVkKCk7CisgICAgICAgICAgICBib29sIHRyeVRvTWFrZU1vZGlmaWFibGUoKTsKKwogICAgICAg
ICAgICAgLy8gcG90ZW50aWFsbHkgc2hhcmVkIGRhdGEuCiAgICAgICAgICAgICBVQ2hhciogYnVm
OwogICAgICAgICAgICAgaW50IHByZUNhcGFjaXR5OwpAQCAtMjY1LDYgKzI4Miw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCBjb3N0KCkgY29uc3Q7CiAKKyAgICAgICAgUGFz
c1JlZlB0cjxSZWZDb3VudGVkTWFsbG9jZWQ8VUNoYXI+ID4gcmVmQ291bnRlZE1hbGxvY2VkKCkg
eyByZXR1cm4gbV9yZXAtPmJhc2VTdHJpbmcoKS0+cmVmQ291bnRlZE1hbGxvY2VkKCk7IH0KKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IHJlcXVpcmVkTGVu
Z3RoKTsKICAgICAgICAgdm9pZCBleHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdWlyZWRQcmVDYXAp
OwpAQCAtMzM3LDE4ICszNTYsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgdm9p
ZCBVU3RyaW5nOjpSZXA6OnNldEJhc2VTdHJpbmcoUGFzc1JlZlB0cjxCYXNlU3RyaW5nPiBiYXNl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGJhc2UgIT0gdGhpcyk7Ci0gICAgICAgIG1fYmFzZVN0
cmluZyA9IGJhc2UucmVsZWFzZVJlZigpOworICAgICAgICBBU1NFUlQoYmFzZSAhPSB0aGlzICYm
ICFiYXNlSXNTZWxmKCkpOworICAgICAgICBtX2Jhc2VTdHJpbmdGb3JSZXAgPSBiYXNlLnJlbGVh
c2VSZWYoKTsKICAgICB9CiAKICAgICBpbmxpbmUgVVN0cmluZzo6QmFzZVN0cmluZyogVVN0cmlu
Zzo6UmVwOjpiYXNlU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEJhc2VTdHJpbmcqPihiYXNlSXNTZWxmKCkgPyB0aGlzIDogbV9iYXNlU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIGJhc2VJc1NlbGYoKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8QmFzZVN0cmluZyo+
KHRoaXMpIDogbV9iYXNlU3RyaW5nRm9yUmVwOwogICAgIH0KIAogICAgIGlubGluZSBjb25zdCBV
U3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5nOjpSZXA6OmJhc2VTdHJpbmcoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgQmFzZVN0cmluZyo+KGNvbnN0X2Nh
c3Q8UmVwKj4odGhpcyktPmJhc2VTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0
PFJlcCo+KHRoaXMpLT5iYXNlU3RyaW5nKCk7CiAgICAgfQogCiAjaWZkZWYgTkRFQlVHCkBAIC00
MzcsNCArNDU2LDQgQEAgbmFtZXNwYWNlIFdURiB7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBVU3RyaW5nX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0
Zi9SZWZDb3VudGVkLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oCmluZGV4IGFj
OGUxNjcuLjc2ZmU2ZDkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVk
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaApAQCAtNzYsNiArNzYsOSBA
QCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgdGVtcGxhdGU8Y2xhc3MgVD4K
KyAgICBmcmllbmQgY2xhc3MgUmVmQ291bnRlZE1hbGxvY2VkOworCiAgICAgaW50IG1fcmVmQ291
bnQ7CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgbV9kZWxldGlvbkhhc0JlZ3VuOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRNYWxsb2NlZC5oIGIvSmF2YVNjcmlw
dENvcmUvd3RmL1JlZkNvdW50ZWRNYWxsb2NlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFiYjI4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYv
UmVmQ291bnRlZE1hbGxvY2VkLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWZDb3VudGVk
TWFsbG9jZWRfaAorI2RlZmluZSBSZWZDb3VudGVkTWFsbG9jZWRfaAorCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworICAgIC8vIFVzZWQgdG8gYWxs
b3dpbmcgc2hhcmluZyBkYXRhIGFjcm9zcyBjbGFzc2VzIGFuZCB0aHJlYWRzIChsaWtlIFRocmVh
ZGVkU2FmZVNoYXJlZCkuCisgICAgLy8KKyAgICAvLyBXaHkgbm90IGp1c3QgdXNlIFRocmVhZFNh
ZmVTaGFyZWQ/CisgICAgLy8gVGhyZWFkU2FmZVNoYXJlZCBjYW4gaGF2ZSBhIHNpZ2luaWZpY2Fu
dCBwZXJmIGltcGFjdCB3aGVuIHVzZWQgaW4gbG93IGxldmVsIGNsYXNzZXMKKyAgICAvLyAobGlr
ZSBVU3RyaW5nKSB0aGF0IGdldCByZWYvZGVyZWYnZWQgYSBsb3QuIFRoaXMgY2xhc3MgaGFzIHRo
ZSBiZW5lZml0IG9mIGRvaW5nIGZhc3QgcmVmCisgICAgLy8gY291bnRzIGxpa2UgUmVmUHRyIHdo
ZW5ldmVyIHBvc3NpYmxlLCBidXQgaXQgaGFzIHRoZSBkb3duc2lkZSB0aGF0IHlvdSBuZWVkIHRv
IGNvcHkgaXQKKyAgICAvLyB0byB1c2UgaXQgb24gYW5vdGhlciB0aHJlYWQuCisgICAgLy8KKyAg
ICAvLyBJcyB0aGlzIGNsYXNzIHRocmVhZHNhZmU/CisgICAgLy8gV2hpbGUgZWFjaCBpbnN0YW5j
ZSBvZiB0aGUgY2xhc3MgaXMgbm90IHRocmVhZHNhZmUsIHRoZSBjb3BpZWQgaW5zdGFuY2UgaXMg
dGhyZWFkc2FmZQorICAgIC8vIHdpdGggcmVzcGVjdCB0byB0aGUgb3JpZ2luYWwgYW5kIGFueSBv
dGhlciBjb3BpZXMuICBUaGUgdW5kZXJseWluZyBtX2RhdGEgaXMgam9pbnRseQorICAgIC8vIG93
bmVkIGJ5IHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBhbmQgYWxsIGNvcGllcy4KKyAgICB0ZW1wbGF0
ZTxjbGFzcyBUPgorICAgIGNsYXNzIFJlZkNvdW50ZWRNYWxsb2NlZCA6IE5vbmNvcHlhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIC8vIGRhdGEgaXMgZnJlZWQgdXNpbmcgKmZhc3RGcmVlKi4K
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZE1hbGxvY2VkPFQ+ID4gY3JlYXRl
KGNvbnN0IFQqIGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUmVmQ291bnRlZE1hbGxvY2VkPFQ+KGRhdGEsIDApKTsKKyAgICAgICAgfQorCisgICAgICAg
IFBhc3NSZWZQdHI8UmVmQ291bnRlZE1hbGxvY2VkPFQ+ID4gY29weUZvckFub3RoZXJUaHJlYWQo
KTsKKworICAgICAgICB2b2lkIHJlZigpOworICAgICAgICB2b2lkIGRlcmVmKCk7CisgICAgICAg
IGNvbnN0IFQqIHJlbGVhc2VEYXRhKCk7CisKKyAgICAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0
IHsgcmV0dXJuICFtX3JlZkNvdW50ZXIuaGFzT25lUmVmKCkgfHwgZGF0YUFjY2Vzc011c3RCZVRo
cmVhZFNhZmUoKTsgfQorICAgICAgICBib29sIGRhdGFBY2Nlc3NNdXN0QmVUaHJlYWRTYWZlKCkg
Y29uc3QgeyByZXR1cm4gbV90aHJlYWRTYWZlUmVmQ291bnRlciAmJiAhbV90aHJlYWRTYWZlUmVm
Q291bnRlci0+aGFzT25lUmVmKCk7IH0KKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9vbCBt
YXlCZVBhc3NlZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0IHsgQVNTRVJUKCFtX3RocmVhZElkKTsg
cmV0dXJuIG1fcmVmQ291bnRlci5oYXNPbmVSZWYoKTsgfQorI2VuZGlmCisKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZDb3VudGVkTWFsbG9jZWQoY29uc3QgVCogZGF0YSwgVGhyZWFkU2FmZVNo
YXJlZEJhc2UqIHRocmVhZGVkQ291bnRlcikKKyAgICAgICAgICAgIDogbV9yZWZDb3VudGVyKDEp
CisgICAgICAgICAgICAsIG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIodGhyZWFkZWRDb3VudGVyKQor
ICAgICAgICAgICAgLCBtX2RhdGEoZGF0YSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAs
IG1fdGhyZWFkSWQoMCkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+
UmVmQ291bnRlZE1hbGxvY2VkKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZGF0YSAm
JiAhbV90aHJlYWRTYWZlUmVmQ291bnRlcikKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShjb25z
dF9jYXN0PFQqPihtX2RhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdGhyZWFkU2Fm
ZURlcmVmKCk7CisKKyAgICAgICAgUmVmQ291bnRlZEJhc2UgbV9yZWZDb3VudGVyOworICAgICAg
ICBUaHJlYWRTYWZlU2hhcmVkQmFzZSogbV90aHJlYWRTYWZlUmVmQ291bnRlcjsKKyAgICAgICAg
Y29uc3QgVCogbV9kYXRhOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgVGhyZWFkSWRlbnRpZmll
ciBtX3RocmVhZElkOworI2VuZGlmCisgICAgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIFQ+Cisg
ICAgdm9pZCBSZWZDb3VudGVkTWFsbG9jZWQ8VD46OnJlZigpCisgICAgeworICAgICAgICBBU1NF
UlQoIW1fdGhyZWFkSWQgfHwgbV90aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCkpOworICAgICAg
ICBtX3JlZkNvdW50ZXIucmVmKCk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBTdG9yZSB0
aGUgdGhyZWFkIGFzIHNvb24gYXMgdGhlIHJlZiBjb3VudCBnZXRzIHRvIDIuCisgICAgICAgIC8v
IFRoZSBjbGFzcyBnZXRzIGNyZWF0ZWQgd2l0aCBhIHJlZiBjb3VudCBvZiAxIGFuZCB0aGVuIHBh
c3NlZAorICAgICAgICAvLyB0byBhbm90aGVyIHRocmVhZCB3aGVyZSB0byByZWYgY291bnQgZ2V0
IGluY3JlYXNlZC4KKyAgICAgICAgaWYgKCFtX3RocmVhZElkICYmIG1fcmVmQ291bnRlci5yZWZD
b3VudCgpID09IDIpCisgICAgICAgICAgICBtX3RocmVhZElkID0gY3VycmVudFRocmVhZCgpOwor
I2VuZGlmCisgICAgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICB2b2lkIFJlZkNvdW50
ZWRNYWxsb2NlZDxUPjo6ZGVyZWYoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3RocmVhZElk
IHx8IG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgaWYgKG1fcmVmQ291
bnRlci5kZXJlZkJhc2UoKSkgeworICAgICAgICAgICAgdGhyZWFkU2FmZURlcmVmKCk7CisgICAg
ICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPGNs
YXNzIFQ+CisgICAgY29uc3QgVCogUmVmQ291bnRlZE1hbGxvY2VkPFQ+OjpyZWxlYXNlRGF0YSgp
CisgICAgeworICAgICAgICBBU1NFUlQoIWlzU2hhcmVkKCkpOworCisgICAgICAgIGNvbnN0IFQq
IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIHJldHVybiBkYXRh
OworICAgIH0KKworICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgUGFzc1JlZlB0cjxSZWZDb3Vu
dGVkTWFsbG9jZWQ8VD4gPiBSZWZDb3VudGVkTWFsbG9jZWQ8VD46OmNvcHlGb3JBbm90aGVyVGhy
ZWFkKCkKKyAgICB7CisgICAgICAgIGlmIChtX3RocmVhZFNhZmVSZWZDb3VudGVyKQorICAgICAg
ICAgICAgbV90aHJlYWRTYWZlUmVmQ291bnRlci0+cmVmKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIgPSBuZXcgVGhyZWFkU2FmZVNoYXJlZEJhc2Uo
Mik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZE1hbGxvY2VkPFQ+KG1f
ZGF0YSwgbV90aHJlYWRTYWZlUmVmQ291bnRlcikpOworICAgIH0KKworCisgICAgdGVtcGxhdGU8
Y2xhc3MgVD4KKyAgICB2b2lkIFJlZkNvdW50ZWRNYWxsb2NlZDxUPjo6dGhyZWFkU2FmZURlcmVm
KCkKKyAgICB7CisgICAgICAgIGlmIChtX3RocmVhZFNhZmVSZWZDb3VudGVyICYmIG1fdGhyZWFk
U2FmZVJlZkNvdW50ZXItPmRlcmVmQmFzZSgpKSB7CisgICAgICAgICAgICBkZWxldGUgbV90aHJl
YWRTYWZlUmVmQ291bnRlcjsKKyAgICAgICAgICAgIG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIgPSAw
OworICAgICAgICB9CisgICAgfQorfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmVm
Q291bnRlZE1hbGxvY2VkOworCisjZW5kaWYgLy8gUmVmQ291bnRlZE1hbGxvY2VkX2gKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaCBiL0phdmFTY3JpcHRDb3JlL3d0
Zi9UaHJlYWRpbmcuaAppbmRleCAxNTYwMTNkLi41NjNjMjA4IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGlu
Zy5oCkBAIC0yMDEsOSArMjAxLDkgQEAgaW5saW5lIGludCBhdG9taWNEZWNyZW1lbnQoaW50IHZv
bGF0aWxlKiBhZGRlbmQpIHsgcmV0dXJuIF9fZ251X2N4eDo6X19leGNoYW5nZV8KIAogI2VuZGlm
CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFRocmVhZFNhZmVTaGFyZWQgOiBOb25jb3B5YWJs
ZSB7CitjbGFzcyBUaHJlYWRTYWZlU2hhcmVkQmFzZSA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
LSAgICBUaHJlYWRTYWZlU2hhcmVkKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQorICAgIFRocmVh
ZFNhZmVTaGFyZWRCYXNlKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQogICAgICAgICA6IG1fcmVm
Q291bnQoaW5pdGlhbFJlZkNvdW50KQogICAgIHsKICAgICB9CkBAIC0yMTgsMjAgKzIxOCw2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgZGVyZWYoKQotICAgIHsKLSNpZiBV
U0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKLSAgICAgICAgaWYgKGF0b21pY0RlY3JlbWVu
dCgmbV9yZWZDb3VudCkgPD0gMCkKLSNlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgICAgIC0tbV9yZWZDb3VudDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobV9yZWZDb3VudCA8PSAwKQotI2VuZGlmCi0gICAgICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOwotICAgIH0KLQogICAgIGJvb2wgaGFzT25lUmVm
KCkKICAgICB7CiAgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CkBAIC0yNDUsMTMgKzIz
MSw0NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQgY29uc3Qgdm9s
YXRpbGUgJj4obV9yZWZDb3VudCk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgLy8gUmV0dXJu
cyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3QuCisgICAgYm9vbCBk
ZXJlZkJhc2UoKQorICAgIHsKKyNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVNIQVJFRCkKKyAg
ICAgICAgaWYgKGF0b21pY0RlY3JlbWVudCgmbV9yZWZDb3VudCkgPD0gMCkKKyNlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAg
ICAgIC0tbV9yZWZDb3VudDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWZDb3VudCA8PSAw
KQorI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKwogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIGZyaWVuZCBj
bGFzcyBSZWZDb3VudGVkTWFsbG9jZWQ7CisKICAgICBpbnQgbV9yZWZDb3VudDsKICNpZiAhVVNF
KExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCiAgICAgbXV0YWJsZSBNdXRleCBtX211dGV4Owog
I2VuZGlmCiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBUaHJlYWRTYWZlU2hhcmVkIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWRCYXNlIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRTYWZlU2hh
cmVkKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQorICAgICAgICA6IFRocmVhZFNhZmVTaGFyZWRC
YXNlKGluaXRpYWxSZWZDb3VudCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkZXJlZigpCisg
ICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KK307CisKIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBj
YWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRl
ZGx5LgogLy8gRGFyd2luIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRv
IGNhbGwgaXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHRo
ZSBjYWxscyBhcmUgbm90IHJlZW50cmFudC4KIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCmluZGV4IDI4YmI2MTAuLjM2NWM4ODggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAwOS0wMS0xMiAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTc1CisKKyAgICAgICAgQWRkIGZvcndhcmRpbmcg
aGVhZGVyLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1JlZkNvdW50ZWRNYWxs
b2NlZC5oOiBBZGRlZC4KKwogMjAwOS0wMS0wOSAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUmVmQ291bnRlZE1hbGxvY2VkLmgg
Yi9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUmVmQ291bnRlZE1hbGxvY2Vk
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlNDc5NAotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9SZWZDb3VudGVk
TWFsbG9jZWQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVmQ291
bnRlZE1hbGxvY2VkLmg+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGM3ODIxOGYuLjgzNDQ5OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDEt
MTIgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzE3NQorCisgICAgICAgIEFkZCBmb3J3YXJkaW5nIGhlYWRlci4KKwor
ICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9SZWZDb3VudGVkTWFsbG9jZWQuaDogQWRk
ZWQuCisKIDIwMDktMDEtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9SZWZDb3VudGVkTWFsbG9jZWQuaCBiL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL1JlZkNvdW50ZWRNYWxsb2NlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM2ZTQ3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9SZWZDb3VudGVkTWFsbG9jZWQuaApAQCAtMCwwICsxIEBACisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvUmVmQ291bnRlZE1hbGxvY2VkLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27266</attachid>
            <date>2009-02-02 16:30:10 -0800</date>
            <delta_ts>2009-03-09 14:06:24 -0700</delta_ts>
            <desc>Part 3: Add CrossThreadRefCounted.</desc>
            <filename>bug23175-part3.txt</filename>
            <type>text/plain</type>
            <size>10290</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjZTg5NGQ4Li41ZDIzYThlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMDktMDItMDIgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyMzE3NTogU3Ry
aW5nIGFuZCBVU3RyaW5nIHNob3VsZCBiZSBhYmxlIHRvIHNoYXJlIGEgVUNoYXIqIGJ1ZmZlci4K
KyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE3NT4K
KworICAgICAgICBBZGQgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLgorCisgICAgICAgICogd3RmL0Ny
b3NzVGhyZWFkUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q3Jvc3NUaHJlYWRS
ZWZDb3VudGVkOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpDcm9zc1RocmVhZFJlZkNvdW50ZWQ6
OmlzU2hhcmVkKToKKyAgICAgICAgKFdURjo6Q3Jvc3NUaHJlYWRSZWZDb3VudGVkOjpkYXRhQWNj
ZXNzTXVzdEJlVGhyZWFkU2FmZSk6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUmVmQ291bnRl
ZDo6bWF5QmVQYXNzZWRUb0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpDcm9zc1RocmVh
ZFJlZkNvdW50ZWQ6OkNyb3NzVGhyZWFkUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkNyb3Nz
VGhyZWFkUmVmQ291bnRlZDo6fkNyb3NzVGhyZWFkUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6
OkNyb3NzVGhyZWFkUmVmQ291bnRlZDo6cmVmKToKKyAgICAgICAgKFdURjo6Q3Jvc3NUaHJlYWRS
ZWZDb3VudGVkOjpkZXJlZik6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUmVmQ291bnRlZDo6
cmVsZWFzZSk6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUmVmQ291bnRlZDo6Y29weSk6Cisg
ICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUmVmQ291bnRlZDo6dGhyZWFkU2FmZURlcmVmKToKKyAg
ICAgICAgKiB3dGYvUmVmQ291bnRlZC5oOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkU2FmZVNoYXJlZEJhc2U6OlRocmVhZFNhZmVTaGFyZWRCYXNlKToK
KyAgICAgICAgKFdURjo6VGhyZWFkU2FmZVNoYXJlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAg
IChXVEY6OlRocmVhZFNhZmVTaGFyZWQ6OlRocmVhZFNhZmVTaGFyZWQpOgorICAgICAgICAoV1RG
OjpUaHJlYWRTYWZlU2hhcmVkOjpkZXJlZik6CisKIDIwMDktMDEtMzAgIERhdmlkIExldmluICA8
bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3Vy
eWFrb3YuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZDb3Vu
dGVkLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxMTViYgotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaApAQCAtMCwwICsxLDE2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkX2gKKyNkZWZpbmUgQ3Jvc3NUaHJlYWRS
ZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKyAgICAvLyBVc2VkIHRvIGFsbG93aW5nIHNoYXJpbmcgZGF0YSBhY3Jvc3MgY2xh
c3NlcyBhbmQgdGhyZWFkcyAobGlrZSBUaHJlYWRlZFNhZmVTaGFyZWQpLgorICAgIC8vCisgICAg
Ly8gV2h5IG5vdCBqdXN0IHVzZSBUaHJlYWRTYWZlU2hhcmVkPworICAgIC8vIFRocmVhZFNhZmVT
aGFyZWQgY2FuIGhhdmUgYSBzaWdpbmlmaWNhbnQgcGVyZiBpbXBhY3Qgd2hlbiB1c2VkIGluIGxv
dyBsZXZlbCBjbGFzc2VzCisgICAgLy8gKGxpa2UgVVN0cmluZykgdGhhdCBnZXQgcmVmL2RlcmVm
J2VkIGEgbG90LiBUaGlzIGNsYXNzIGhhcyB0aGUgYmVuZWZpdCBvZiBkb2luZyBmYXN0IHJlZgor
ICAgIC8vIGNvdW50cyBsaWtlIFJlZlB0ciB3aGVuZXZlciBwb3NzaWJsZSwgYnV0IGl0IGhhcyB0
aGUgZG93bnNpZGUgdGhhdCB5b3UgbmVlZCB0byBjb3B5IGl0CisgICAgLy8gdG8gdXNlIGl0IG9u
IGFub3RoZXIgdGhyZWFkLgorICAgIC8vCisgICAgLy8gSXMgdGhpcyBjbGFzcyB0aHJlYWRzYWZl
PworICAgIC8vIFdoaWxlIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGlzIG5vdCB0aHJlYWRz
YWZlLCB0aGUgY29waWVkIGluc3RhbmNlIGlzIHRocmVhZHNhZmUKKyAgICAvLyB3aXRoIHJlc3Bl
Y3QgdG8gdGhlIG9yaWdpbmFsIGFuZCBhbnkgb3RoZXIgY29waWVzLiAgVGhlIHVuZGVybHlpbmcg
bV9kYXRhIGlzIGpvaW50bHkKKyAgICAvLyBvd25lZCBieSB0aGUgb3JpZ2luYWwgaW5zdGFuY2Ug
YW5kIGFsbCBjb3BpZXMuCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBjbGFzcyBDcm9zc1Ro
cmVhZFJlZkNvdW50ZWQgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICAvLyBk
YXRhIGlzIGZyZWVkIHVzaW5nICpmYXN0RnJlZSouCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPiA+IGNyZWF0ZShUKiBkYXRhKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPihk
YXRhLCAwKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2VkIHRvIG1ha2UgYW4gaW5zdGFu
Y2UgdGhhdCBjYW4gYmUgdXNlZCBvbiBhbm90aGVyIHRocmVhZC4KKyAgICAgICAgUGFzc1JlZlB0
cjxDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD4gPiBjb3B5KCk7CisKKyAgICAgICAgdm9pZCByZWYo
KTsKKyAgICAgICAgdm9pZCBkZXJlZigpOworICAgICAgICBUKiByZWxlYXNlKCk7CisKKyAgICAg
ICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3JlZkNvdW50ZXIuaGFzT25lUmVm
KCkgfHwgZGF0YUFjY2Vzc011c3RCZVRocmVhZFNhZmUoKTsgfQorICAgICAgICBib29sIGRhdGFB
Y2Nlc3NNdXN0QmVUaHJlYWRTYWZlKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRTYWZlUmVmQ291
bnRlciAmJiAhbV90aHJlYWRTYWZlUmVmQ291bnRlci0+aGFzT25lUmVmKCk7IH0KKworI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgYm9vbCBtYXlCZVBhc3NlZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0
IHsgQVNTRVJUKCFtX3RocmVhZElkKTsgcmV0dXJuIG1fcmVmQ291bnRlci5oYXNPbmVSZWYoKTsg
fQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBDcm9zc1RocmVhZFJlZkNvdW50ZWQo
VCogZGF0YSwgVGhyZWFkU2FmZVNoYXJlZEJhc2UqIHRocmVhZGVkQ291bnRlcikKKyAgICAgICAg
ICAgIDogbV90aHJlYWRTYWZlUmVmQ291bnRlcih0aHJlYWRlZENvdW50ZXIpCisgICAgICAgICAg
ICAsIG1fZGF0YShkYXRhKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV90aHJlYWRJ
ZCgwKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5Dcm9zc1RocmVh
ZFJlZkNvdW50ZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9kYXRhICYmICFtX3Ro
cmVhZFNhZmVSZWZDb3VudGVyKQorICAgICAgICAgICAgICAgIGRlbGV0ZSBtX2RhdGE7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIHRocmVhZFNhZmVEZXJlZigpOworCisgICAgICAgIFJlZkNv
dW50ZWRCYXNlIG1fcmVmQ291bnRlcjsKKyAgICAgICAgVGhyZWFkU2FmZVNoYXJlZEJhc2UqIG1f
dGhyZWFkU2FmZVJlZkNvdW50ZXI7CisgICAgICAgIFQqIG1fZGF0YTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyNlbmRpZgorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIHZvaWQgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+
OjpyZWYoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3RocmVhZElkIHx8IG1fdGhyZWFkSWQg
PT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgbV9yZWZDb3VudGVyLnJlZigpOworI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgLy8gU3RvcmUgdGhlIHRocmVhZElkIGFzIHNvb24gYXMgdGhlIHJl
ZiBjb3VudCBnZXRzIHRvIDIuCisgICAgICAgIC8vIFRoZSBjbGFzcyBnZXRzIGNyZWF0ZWQgd2l0
aCBhIHJlZiBjb3VudCBvZiAxIGFuZCB0aGVuIHBhc3NlZAorICAgICAgICAvLyB0byBhbm90aGVy
IHRocmVhZCB3aGVyZSB0byByZWYgY291bnQgZ2V0IGluY3JlYXNlZC4gIFRoaXMKKyAgICAgICAg
Ly8gaXMgYSBoZXVyaXN0aWMgYnV0IGl0IHNlZW1zIHRvIGFsd2F5cyB3b3JrIGFuZCBoYXMgaGVs
cGVkCisgICAgICAgIC8vIGZpbmQgc29tZSBidWdzLgorICAgICAgICBpZiAoIW1fdGhyZWFkSWQg
JiYgbV9yZWZDb3VudGVyLnJlZkNvdW50KCkgPT0gMikKKyAgICAgICAgICAgIG1fdGhyZWFkSWQg
PSBjdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBU
PgorICAgIHZvaWQgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+OjpkZXJlZigpCisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fdGhyZWFkSWQgfHwgbV90aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCkp
OworICAgICAgICBpZiAobV9yZWZDb3VudGVyLmRlcmVmQmFzZSgpKSB7CisgICAgICAgICAgICB0
aHJlYWRTYWZlRGVyZWYoKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICB9IGVs
c2UgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIC8vIENsZWFyIHRoZSB0aHJlYWRJZCB3
aGVuIHRoZSByZWYgZ29lcyB0byAxIGJlY2F1c2UgaXQKKyAgICAgICAgICAgIC8vIGlzIHNhZmUg
dG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAg
ICBpZiAobV90aHJlYWRJZCAmJiBtX3JlZkNvdW50ZXIucmVmQ291bnQoKSA9PSAxKQorICAgICAg
ICAgICAgICAgIG1fdGhyZWFkSWQgPSAwOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIFQqIENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPjo6cmVs
ZWFzZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIWlzU2hhcmVkKCkpOworCisgICAgICAgIFQq
IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIHJldHVybiBkYXRh
OworICAgIH0KKworICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgUGFzc1JlZlB0cjxDcm9zc1Ro
cmVhZFJlZkNvdW50ZWQ8VD4gPiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD46OmNvcHkoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIpCisgICAgICAgICAgICBtX3Ro
cmVhZFNhZmVSZWZDb3VudGVyLT5yZWYoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV90
aHJlYWRTYWZlUmVmQ291bnRlciA9IG5ldyBUaHJlYWRTYWZlU2hhcmVkQmFzZSgyKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD4obV9kYXRhLCBt
X3RocmVhZFNhZmVSZWZDb3VudGVyKSk7CisgICAgfQorCisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBU
PgorICAgIHZvaWQgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+Ojp0aHJlYWRTYWZlRGVyZWYoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIgJiYgbV90aHJlYWRTYWZl
UmVmQ291bnRlci0+ZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3RocmVhZFNh
ZmVSZWZDb3VudGVyOworICAgICAgICAgICAgbV90aHJlYWRTYWZlUmVmQ291bnRlciA9IDA7Cisg
ICAgICAgIH0KKyAgICB9Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDcm9zc1Ro
cmVhZFJlZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBDcm9zc1RocmVhZFJlZkNvdW50ZWRfaApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaCBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9SZWZDb3VudGVkLmgKaW5kZXggZGM4M2I5Yi4uOTNlZTBkYSAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUmVm
Q291bnRlZC5oCkBAIC03Niw2ICs3Niw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByb3RlY3Rl
ZDoKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIGZyaWVuZCBjbGFzcyBDcm9zc1RocmVhZFJl
ZkNvdW50ZWQ7CisKICAgICBpbnQgbV9yZWZDb3VudDsKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9v
bCBtX2RlbGV0aW9uSGFzQmVndW47CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhy
ZWFkaW5nLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKaW5kZXggMWYzNjg3ZS4u
OGQwNGYxYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaApAQCAtMjA1LDkgKzIwNSw5IEBAIGlubGlu
ZSBpbnQgYXRvbWljRGVjcmVtZW50KGludCB2b2xhdGlsZSogYWRkZW5kKSB7IHJldHVybiBfX2du
dV9jeHg6Ol9fZXhjaGFuZ2VfCiAKICNlbmRpZgogCi10ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBU
aHJlYWRTYWZlU2hhcmVkIDogTm9uY29weWFibGUgeworY2xhc3MgVGhyZWFkU2FmZVNoYXJlZEJh
c2UgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgVGhyZWFkU2FmZVNoYXJlZChpbnQgaW5p
dGlhbFJlZkNvdW50ID0gMSkKKyAgICBUaHJlYWRTYWZlU2hhcmVkQmFzZShpbnQgaW5pdGlhbFJl
ZkNvdW50ID0gMSkKICAgICAgICAgOiBtX3JlZkNvdW50KGluaXRpYWxSZWZDb3VudCkKICAgICB7
CiAgICAgfQpAQCAtMjIyLDIwICsyMjIsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAg
ICB2b2lkIGRlcmVmKCkKLSAgICB7Ci0jaWYgVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQp
Ci0gICAgICAgIGlmIChhdG9taWNEZWNyZW1lbnQoJm1fcmVmQ291bnQpIDw9IDApCi0jZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAg
ICAgICAgICAtLW1fcmVmQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fcmVmQ291bnQg
PD0gMCkKLSNlbmRpZgotICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsK
LSAgICB9Ci0KICAgICBib29sIGhhc09uZVJlZigpCiAgICAgewogICAgICAgICByZXR1cm4gcmVm
Q291bnQoKSA9PSAxOwpAQCAtMjQ5LDEzICsyMzUsNDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50IGNvbnN0IHZvbGF0aWxlICY+KG1fcmVmQ291bnQpOwogICAgIH0K
IAorcHJvdGVjdGVkOgorICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcG9pbnRlciBzaG91bGQg
YmUgZnJlZWQgb3Igbm90LgorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisjaWYgVVNFKExP
Q0tGUkVFX1RIUkVBRFNBRkVTSEFSRUQpCisgICAgICAgIGlmIChhdG9taWNEZWNyZW1lbnQoJm1f
cmVmQ291bnQpIDw9IDApCisjZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgICAgICAtLW1fcmVmQ291bnQ7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1fcmVmQ291bnQgPD0gMCkKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKIHByaXZhdGU6CisgICAgdGVt
cGxhdGU8Y2xhc3MgVD4KKyAgICBmcmllbmQgY2xhc3MgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkOwor
CiAgICAgaW50IG1fcmVmQ291bnQ7CiAjaWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFU0hBUkVE
KQogICAgIG11dGFibGUgTXV0ZXggbV9tdXRleDsKICNlbmRpZgogfTsKIAordGVtcGxhdGU8Y2xh
c3MgVD4gY2xhc3MgVGhyZWFkU2FmZVNoYXJlZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkQmFz
ZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2FmZVNoYXJlZChpbnQgaW5pdGlhbFJlZkNvdW50ID0g
MSkKKyAgICAgICAgOiBUaHJlYWRTYWZlU2hhcmVkQmFzZShpbml0aWFsUmVmQ291bnQpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFz
ZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9Cit9
OworCiAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFk
LiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KIC8vIERhcndpbiBpcyBhbiBleGNl
cHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwg
dGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQu
CiB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>