<?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>17425</bug_id>
          
          <creation_ts>2008-02-18 09:52:21 -0800</creation_ts>
          <short_desc>Eliminate DeprecatedPtrList</short_desc>
          <delta_ts>2011-02-27 11:12:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</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>54972</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>71053</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-18 09:52:21 -0800</bug_when>
    <thetext>I&apos;m working on this one. It&apos;s a little tricky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71057</commentid>
    <comment_count>1</comment_count>
      <attachid>19190</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-18 10:17:41 -0800</bug_when>
    <thetext>Created attachment 19190
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102471</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-13 17:28:04 -0800</bug_when>
    <thetext>Remaining uses:

    1) CSSRuleList -- Moderate difficulty to change; should be a memory use improvement when we fix it. Area needs other kinds of cleanup too.

    2) Document image load event lists -- Should be trivial to replace these with ListHashSet.

    3) RenderBlock floating object list -- I don&apos;t know exactly what to replace that one with.

    4) Node chain in EventTargetNode::dispatchGenericEvent -- Should be trivial to replace this with Vector.

    5) m_pendingCallbacks in XMLTokenizer -- Should be replaced with Deque.

    6) unstyledSpans in ApplyStyleCommand::applyRelativeFontStyleChange -- Should be trivial to replace this with Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102472</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-13 20:05:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt;     2) Document image load event lists -- Should be trivial to replace these
&gt; with ListHashSet.

Can&apos;t actually use ListHashSet for this, because we allow the same loader to be in the list twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102498</commentid>
    <comment_count>4</comment_count>
      <attachid>26012</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-14 08:37:15 -0800</bug_when>
    <thetext>Created attachment 26012
patch for part of this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102514</commentid>
    <comment_count>5</comment_count>
      <attachid>26012</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-12-14 16:40:19 -0800</bug_when>
    <thetext>Comment on attachment 26012
patch for part of this

&gt; +++ ChangeLog	(working copy)
&gt; @@ -1,3 +1,29 @@
&gt; +2008-12-13  Cameron Zwarich  &lt;zwarich@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Bug 22562: REGRESSION (r37971): events not firing after going back in back/forward cache
&gt; +        &lt;https://bugs.webkit.org/show_bug.cgi?id=22562&gt;
&gt; +        &lt;rdar://problem/6414593&gt;
&gt; +
&gt; +        Restore the Frame&apos;s DOMWindow to its previous value when going back in
&gt; +        the back/forward cache. The fact that it was not getting set before may
&gt; +        have always caused some subtle bugs with the back/forward cache, but
&gt; +        after r37971, it causes no events to fire after restoring a page.
&gt; +
&gt; +        Unfortunately, there is no way to test this with a layout test because
&gt; +        it involves the back/forward cache.
&gt; +
&gt; +        * history/CachedPage.cpp:
&gt; +        (WebCore::CachedPage::domWindow): Add.
&gt; +        * history/CachedPage.h:
&gt; +        * loader/FrameLoader.cpp:
&gt; +        (WebCore::FrameLoader::open): Restore the DOMWindow of the Frame to its
&gt; +        saved value when navigating in the back/forward cache.
&gt; +        * page/Frame.cpp:
&gt; +        (WebCore::Frame::setDOMWindow): Add.
&gt; +        * page/Frame.h:

I don&apos;t think you meant to include this.


&gt; +    // Set up a pointer to indicate whether to dispatch window events.
&gt; +    // We don&apos;t dispatch load events to the window as a quirk, because
&gt; +    // Mozilla used to never propagate load events to the window object.

Is this not true anymore?  Should we stop behaving this way?

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102515</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-14 17:49:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; +    // Set up a pointer to indicate whether to dispatch window events.
&gt; &gt; +    // We don&apos;t dispatch load events to the window as a quirk, because
&gt; &gt; +    // Mozilla used to never propagate load events to the window object.
&gt; 
&gt; Is this not true anymore?  Should we stop behaving this way?

I&apos;ll try to correct the wording so this doesn&apos;t sound temporary. I don&apos;t think it&apos;s temporary -- and in fact someone more familiar with the situation could probably fix the comment further. When Hyatt originally wrote it a long time ago, we were less clear on things than we are now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102528</commentid>
    <comment_count>7</comment_count>
      <attachid>26012</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-14 18:40:20 -0800</bug_when>
    <thetext>Comment on attachment 26012
patch for part of this

Clearing review flag since I landed this as http://trac.webkit.org/changeset/39296 and took care of (2), (4), (5), and (6) above. Here&apos;s what remains:

    1) CSSRuleList::m_lstCSSRules. This can almost certainly be a Vector. But things are little tangled in the CSS classes at the moment and there is some other improvement that can be made too.

    3) RenderBlock::m_floatingObjects. Probably simple to change this to a ListHashSet as m_positionedObjects is. But it might be even more efficient if the objects didn&apos;t each have to be in a separate memory block.

The old patch attached to this bug includes has a cut at fixing both of these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104206</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-02 18:05:22 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/39566</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104245</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-03 11:17:39 -0800</bug_when>
    <thetext>Oops, closed the wrong bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116709</commentid>
    <comment_count>10</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-04-06 20:38:16 -0700</bug_when>
    <thetext>m_floatingObjects seems to be a really bad one actually.  There are some pages where this list gets to be enormous.  The problem is how to make this efficient without using more memory.  Just using a ListHashSet isn&apos;t enough since we have to index by the RenderBox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124605</commentid>
    <comment_count>11</comment_count>
      <attachid>31023</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-05 18:07:16 -0700</bug_when>
    <thetext>Created attachment 31023
another attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125128</commentid>
    <comment_count>12</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-06-10 05:44:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=31023) [review]
&gt; another attempt
&gt; 

The patch is only intended to remove the ptr list without improving performance, right?  It might make sense to leave this as-is until we can solve the performance issue because it&apos;s a nice big red flag about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125526</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-12 14:02:45 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; There are some pages where this list gets to be enormous.

Could you file a bug about the performance issue?

I don&apos;t think DeprecatedPtrList works as a big red flag. Nothing in the name says &quot;bad for performance&quot; to me.

I also think you&apos;re being a bit enigmatic here saying &quot;some pages&quot; and &quot;enormous&quot; without specifics. I&apos;d like to see a bug report about the performance problem and some test cases that demonstrate the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137617</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-06 12:17:13 -0700</bug_when>
    <thetext>*** Bug 26194 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352103</commentid>
    <comment_count>15</comment_count>
      <attachid>82644</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-16 08:47:06 -0800</bug_when>
    <thetext>Created attachment 82644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352106</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-16 08:48:26 -0800</bug_when>
    <thetext>I will try that with Qt benchmarks, see if that causes any regressions.

George, do you had a specific test in mind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352132</commentid>
    <comment_count>17</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-16 09:24:18 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I will try that with Qt benchmarks, see if that causes any regressions.

I tried the benchmarks and there is no difference in timing. But that is on regular websites, if someone have an idea of a better test case I would be happy to test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352175</commentid>
    <comment_count>18</comment_count>
      <attachid>82644</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-16 10:28:40 -0800</bug_when>
    <thetext>Comment on attachment 82644
Patch

You could have a Vector of OwnPtrs, and then you don&apos;t have to walk the list deleting everything.

I still think it&apos;s better if you&apos;re making this conversion to move to a ListHashSet instead though.  I&apos;m not quite sure if ListHashSet has everything you need, since you have to construct the hash key by using the RenderObject* rather than the FloatingObject*, but then you&apos;d be fixing the performance problem with large float lists at the same time.

It just feels strange to me to convert to another list data structure when we know that a list is not what we want to stick with long-term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352177</commentid>
    <comment_count>19</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-16 10:32:06 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 82644 [details])
&gt; You could have a Vector of OwnPtrs, and then you don&apos;t have to walk the list deleting everything.
&gt; 
&gt; I still think it&apos;s better if you&apos;re making this conversion to move to a ListHashSet instead though.

I totally agree with you :)
I made that per George comments, hoping to get the discussion started on those pages with lots of float.

If you are ok with ListHashSet, I&apos;ll update the patch with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354699</commentid>
    <comment_count>20</comment_count>
      <attachid>83194</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-21 11:09:52 -0800</bug_when>
    <thetext>Created attachment 83194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354704</commentid>
    <comment_count>21</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-21 11:21:43 -0800</bug_when>
    <thetext>ListHashTable interface is a lot like ListHashSet. I did not do the custom allocator because that would make the patch quite more complex and that does not have as much value for this use case as it had for the ListHashSet.

I can still add custom allocator in a followup patch without changing anything in RenderBlock.

I did not use RefPtr to store the FloatingObject because that would add quite some mess (with floatMap deleting objects its own way). If you think the memory management is not clear here, I can add RefPtr later and refactor RenderBlock for that. I think that could be in a follow up patch because this one is already quite big to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355423</commentid>
    <comment_count>22</comment_count>
      <attachid>83194</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 11:17:47 -0800</bug_when>
    <thetext>Comment on attachment 83194
Patch

Clearing the review flag, I split the diff in https://bugs.webkit.org/show_bug.cgi?id=54973 and https://bugs.webkit.org/show_bug.cgi?id=54972.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358719</commentid>
    <comment_count>23</comment_count>
      <attachid>83978</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-27 10:29:54 -0800</bug_when>
    <thetext>Created attachment 83978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358723</commentid>
    <comment_count>24</comment_count>
      <attachid>83978</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-27 10:34:21 -0800</bug_when>
    <thetext>Comment on attachment 83978
Patch

Rejecting attachment 83978 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
e.xcodeproj/project.pbxproj
patching file Source/WebCore/platform/DeprecatedPtrList.h
rm &apos;Source/WebCore/platform/DeprecatedPtrList.h&apos;
patching file Source/WebCore/platform/DeprecatedPtrListImpl.cpp
rm &apos;Source/WebCore/platform/DeprecatedPtrListImpl.cpp&apos;
patching file Source/WebCore/platform/DeprecatedPtrListImpl.h
rm &apos;Source/WebCore/platform/DeprecatedPtrListImpl.h&apos;

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Andreas Kling&apos;, u&apos;--fo...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8070153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358734</commentid>
    <comment_count>25</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-27 11:12:32 -0800</bug_when>
    <thetext>Committed r79825: &lt;http://trac.webkit.org/changeset/79825&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19190</attachid>
            <date>2008-02-18 10:17:41 -0800</date>
            <delta_ts>2008-12-14 08:37:15 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>DepPtrListPatch.txt</filename>
            <type>text/plain</type>
            <size>95285</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NHcmFtbWFyLnkJKHJldmlzaW9uIDMwMzY4KQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NSdWxlLmgi
Ci0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTI3LDcg
KzEyNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldFZhbHVlSUQoY29uc3QgY2hhcioKICAgICBi
b29sIG9rOwogICAgIE1lZGlhTGlzdCAqbWVkaWFMaXN0OwogICAgIENTU01lZGlhUnVsZSogbWVk
aWFSdWxlOwotICAgIENTU1J1bGVMaXN0KiBydWxlTGlzdDsKKyAgICBTdHlsZUxpc3QqIHJ1bGVM
aXN0OwogICAgIFBhcnNlU3RyaW5nIHN0cmluZzsKICAgICBmbG9hdCB2YWw7CiAgICAgaW50IHBy
b3BfaWQ7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHJldmlzaW9uIDMwMzY4KQorKysgV2ViQ29y
ZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKLS8q
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKKy8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3Jn
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTMxLDE5ICsyOSwyMSBAQAogI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DU1NNZWRpYVJ1bGU6OkNTU01lZGlhUnVsZShTdHlsZUJhc2Uq
IHBhcmVudCwgTWVkaWFMaXN0KiBtZWRpYUxpc3QsIENTU1J1bGVMaXN0KiBydWxlTGlzdCkKK0NT
U01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBQYXNzUmVmUHRyPE1l
ZGlhTGlzdD4gbWVkaWFMaXN0LCBQYXNzUmVmUHRyPFN0eWxlTGlzdD4gcnVsZUxpc3QpCiAgICAg
OiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fbHN0TWVkaWEobWVkaWFMaXN0KQotICAgICwgbV9s
c3RDU1NSdWxlcyhydWxlTGlzdCkKKyAgICAsIG1fcnVsZXMocnVsZUxpc3QpCiB7CiB9CiAKIENT
U01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50KQogICAgIDogQ1NTUnVs
ZShwYXJlbnQpCiAgICAgLCBtX2xzdE1lZGlhKDApCi0gICAgLCBtX2xzdENTU1J1bGVzKG5ldyBD
U1NSdWxlTGlzdCgpKQorICAgICwgbV9ydWxlcyhuZXcgU3R5bGVMaXN0KDApKQogCiB7CiB9CkBA
IC01MSw3ICs1MSw3IEBAIENTU01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGEK
IENTU01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJp
bmcgJm1lZGlhKQogICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAgLCBtX2xzdE1lZGlhKG5ldyBN
ZWRpYUxpc3QodGhpcywgbWVkaWEpKQotICAgICwgbV9sc3RDU1NSdWxlcyhuZXcgQ1NTUnVsZUxp
c3QoKSkKKyAgICAsIG1fcnVsZXMobmV3IFN0eWxlTGlzdCgwKSkKIHsKIH0KIApAQCAtNjAsMjMg
KzYwLDIyIEBAIENTU01lZGlhUnVsZTo6fkNTU01lZGlhUnVsZSgpCiAgICAgaWYgKG1fbHN0TWVk
aWEpCiAgICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCgwKTsKIAotICAgIGludCBsZW5ndGgg
PSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKKyAgICBpbnQgbGVuZ3RoID0gbV9ydWxlcy0+bGVu
Z3RoKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgbV9s
c3RDU1NSdWxlcy0+aXRlbShpKS0+c2V0UGFyZW50KDApOworICAgICAgICBtX3J1bGVzLT5pdGVt
KGkpLT5zZXRQYXJlbnQoMCk7CiB9CiAKLXVuc2lnbmVkIENTU01lZGlhUnVsZTo6YXBwZW5kKENT
U1J1bGUqIHJ1bGUpCit2b2lkIENTU01lZGlhUnVsZTo6YXBwZW5kKFBhc3NSZWZQdHI8Q1NTUnVs
ZT4gcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybiAwOwotCisgICAgICAg
IHJldHVybjsKICAgICBydWxlLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgcmV0dXJuIG1fbHN0Q1NT
UnVsZXMtPmluc2VydFJ1bGUocnVsZSwgbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCkpOworICAgIG1f
cnVsZXMtPmFwcGVuZChydWxlKTsKIH0KIAogdW5zaWduZWQgQ1NTTWVkaWFSdWxlOjppbnNlcnRS
dWxlKGNvbnN0IFN0cmluZyYgcnVsZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmIChpbmRleCA+IG1fbHN0Q1NTUnVsZXMtPmxlbmd0aCgpKSB7CisgICAgaWYg
KGluZGV4ID4gbV9ydWxlcy0+bGVuZ3RoKCkpIHsKICAgICAgICAgLy8gSU5ERVhfU0laRV9FUlI6
IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIG5vdCBhIHZhbGlkIGluc2VydGlvbiBw
b2ludC4KICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xMDMsMjQgKzEwMiwyNCBAQCB1bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29u
c3QgCiAgICAgfQogCiAgICAgbmV3UnVsZS0+c2V0UGFyZW50KHRoaXMpOwotICAgIHVuc2lnbmVk
IHJldHVybmVkSW5kZXggPSBtX2xzdENTU1J1bGVzLT5pbnNlcnRSdWxlKG5ld1J1bGUuZ2V0KCks
IGluZGV4KTsKKyAgICBtX3J1bGVzLT5pbnNlcnQoaW5kZXgsIG5ld1J1bGUucmVsZWFzZSgpKTsK
IAogICAgIC8vIHN0eWxlc2hlZXQoKSBjYW4gb25seSByZXR1cm4gMCBmb3IgY29tcHV0ZWQgc3R5
bGUgZGVjbGFyYXRpb25zLgogICAgIHN0eWxlc2hlZXQoKS0+c3R5bGVTaGVldENoYW5nZWQoKTsK
IAotICAgIHJldHVybiByZXR1cm5lZEluZGV4OworICAgIHJldHVybiBtaW4oaW5kZXgsIG1fcnVs
ZXMtPmxlbmd0aCgpIC0gMSk7CiB9CiAKIHZvaWQgQ1NTTWVkaWFSdWxlOjpkZWxldGVSdWxlKHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoaW5kZXggPj0gbV9s
c3RDU1NSdWxlcy0+bGVuZ3RoKCkpIHsKKyAgICBpZiAoaW5kZXggPj0gbV9ydWxlcy0+bGVuZ3Ro
KCkpIHsKICAgICAgICAgLy8gSU5ERVhfU0laRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVk
IGluZGV4IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYQogICAgICAgICAvLyBydWxlIGluIHRoZSBt
ZWRpYSBydWxlIGxpc3QuCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2xzdENTU1J1bGVzLT5kZWxldGVSdWxlKGluZGV4KTsKKyAg
ICBtX3J1bGVzLT5yZW1vdmUoaW5kZXgpOwogCiAgICAgLy8gc3R5bGVzaGVldCgpIGNhbiBvbmx5
IHJldHVybiAwIGZvciBjb21wdXRlZCBzdHlsZSBkZWNsYXJhdGlvbnMuCiAgICAgc3R5bGVzaGVl
dCgpLT5zdHlsZVNoZWV0Q2hhbmdlZCgpOwpAQCAtMTM0LDE4ICsxMzMsMjEgQEAgU3RyaW5nIENT
U01lZGlhUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSAiICI7CiAgICAg
fQogICAgIHJlc3VsdCArPSAieyBcbiI7Ci0KLSAgICBpZiAobV9sc3RDU1NSdWxlcykgewotICAg
ICAgICB1bnNpZ25lZCBsZW4gPSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKKyAgICBpZiAobV9y
dWxlcykgeworICAgICAgICB1bnNpZ25lZCBsZW4gPSBtX3J1bGVzLT5sZW5ndGgoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICByZXN1
bHQgKz0gIiAgIjsKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2xzdENTU1J1bGVzLT5pdGVtKGkp
LT5jc3NUZXh0KCk7CisgICAgICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+
KG1fcnVsZXMtPml0ZW0oaSkpLT5jc3NUZXh0KCk7CiAgICAgICAgICAgICByZXN1bHQgKz0gIlxu
IjsKICAgICAgICAgfQogICAgIH0KLQogICAgIHJlc3VsdCArPSAifSI7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAorUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTTWVkaWFSdWxlOjpjc3NSdWxl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIENTU1J1bGVMaXN0OjpjcmVhdGUobV9ydWxlcyk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU01lZGlhUnVs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCShyZXZpc2lvbiAz
MDM2OCkKKysrIFdlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50
YXRpb24gZm9yIEtERS4KLSAqCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTI2LDEyICsyNCwxNCBAQAogI2RlZmluZSBDU1NNZWRpYVJ1bGVfaAog
CiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1J1bGVM
aXN0OwogY2xhc3MgTWVkaWFMaXN0OworY2xhc3MgU3R5bGVMaXN0OwogCiB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCkBAIC0zOSwyOCArMzksMjcgQEAgY2xhc3MgQ1NTTWVkaWFSdWxlIDog
cHVibGljIENTU1J1bGUgewogcHVibGljOgogICAgIENTU01lZGlhUnVsZShTdHlsZUJhc2UqIHBh
cmVudCk7CiAgICAgQ1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcm
IG1lZGlhKTsKLSAgICBDU1NNZWRpYVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIE1lZGlhTGlzdCog
bWVkaWFMaXN0LCBDU1NSdWxlTGlzdCogcnVsZUxpc3QpOworICAgIENTU01lZGlhUnVsZShTdHls
ZUJhc2UqIHBhcmVudCwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+LCBQYXNzUmVmUHRyPFN0eWxlTGlz
dD4gcnVsZUxpc3QpOwogICAgIHZpcnR1YWwgfkNTU01lZGlhUnVsZSgpOwogCiAgICAgdmlydHVh
bCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgTWVkaWFMaXN0KiBt
ZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0KLSAgICBDU1NSdWxlTGlz
dCogY3NzUnVsZXMoKSB7IHJldHVybiBtX2xzdENTU1J1bGVzLmdldCgpOyB9CisgICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVsZXMoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGluc2Vy
dFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgLy8gSW5oZXJpdGVkIGZyb20gQ1NTUnVsZQogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hv
cnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1FRElBX1JVTEU7IH0KLQogICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKIAogICAgIC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTQotICAg
IHVuc2lnbmVkIGFwcGVuZChDU1NSdWxlKik7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxD
U1NSdWxlPik7CiAKIHByb3RlY3RlZDoKICAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlh
OwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9sc3RDU1NSdWxlczsKKyAgICBSZWZQdHI8U3R5
bGVMaXN0PiBtX3J1bGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCShyZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDE1ICsyMiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkNT
U1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTQ2hhcnNldFJ1bGUuaCIKICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZh
bHVlLmgiCi0jaW5jbHVkZSAiQ1NTSGVscGVyLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3Jj
VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgogI2luY2x1ZGUgIkNTU0luaGVyaXRlZFZh
bHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmgiCkBAIC00NCwxMCArNDIsMTIgQEAK
ICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTVHJhbnNmb3JtVmFsdWUuaCIKICNpbmNsdWRlICJDU1NVbmljb2Rl
UmFuZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ291bnRlci5o
IgogI2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBA
IC0zODY0LDcgKzM4NjQsNyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUltcG9ydFJ1bGUo
Y29uCiAgICAgcmV0dXJuIHJ1bGU7CiB9CiAKLUNTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlTWVk
aWFSdWxlKE1lZGlhTGlzdCogbWVkaWEsIENTU1J1bGVMaXN0KiBydWxlcykKK0NTU1J1bGUqIENT
U1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKE1lZGlhTGlzdCogbWVkaWEsIFBhc3NSZWZQdHI8U3R5
bGVMaXN0PiBydWxlcykKIHsKICAgICBpZiAoIW1lZGlhKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTM4NzksOSArMzg3OSw5IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKE1l
ZGkKICAgICByZXR1cm4gcnVsZTsKIH0KIAotQ1NTUnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRl
UnVsZUxpc3QoKQorU3R5bGVMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKIHsKLSAg
ICBDU1NSdWxlTGlzdCogbGlzdCA9IG5ldyBDU1NSdWxlTGlzdDsKKyAgICBTdHlsZUxpc3QqIGxp
c3QgPSBuZXcgU3R5bGVMaXN0KDApOwogICAgIG1fcGFyc2VkUnVsZUxpc3RzLmFwcGVuZChsaXN0
KTsKICAgICByZXR1cm4gbGlzdDsKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAzMDM2OCkKKysr
IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKICAgICBj
bGFzcyBDU1NQcm9wZXJ0eTsKICAgICBjbGFzcyBDU1NSdWxlOwotICAgIGNsYXNzIENTU1J1bGVM
aXN0OwogICAgIGNsYXNzIENTU1NlbGVjdG9yOwogICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAg
ICAgY2xhc3MgQ1NTVmFsdWU7CkBAIC0yMDUsOCArMjA0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBNZWRpYUxpc3QqIGNyZWF0ZU1lZGlhTGlzdCgpOwogICAgICAgICBDU1NSdWxl
KiBjcmVhdGVDaGFyc2V0UnVsZShjb25zdCBQYXJzZVN0cmluZyYpOwogICAgICAgICBDU1NSdWxl
KiBjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IFBhcnNlU3RyaW5nJiwgTWVkaWFMaXN0Kik7Ci0gICAg
ICAgIENTU1J1bGUqIGNyZWF0ZU1lZGlhUnVsZShNZWRpYUxpc3QqLCBDU1NSdWxlTGlzdCopOwot
ICAgICAgICBDU1NSdWxlTGlzdCogY3JlYXRlUnVsZUxpc3QoKTsKKyAgICAgICAgQ1NTUnVsZSog
Y3JlYXRlTWVkaWFSdWxlKE1lZGlhTGlzdCosIFBhc3NSZWZQdHI8U3R5bGVMaXN0Pik7CisgICAg
ICAgIFN0eWxlTGlzdCogY3JlYXRlUnVsZUxpc3QoKTsKICAgICAgICAgQ1NTUnVsZSogY3JlYXRl
U3R5bGVSdWxlKENTU1NlbGVjdG9yKik7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZUZvbnRGYWNl
UnVsZSgpOwogCkBAIC0yNjQsNyArMjYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBpbnQgeXlfc3RhcnQ7CiAKICAgICAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZUJhc2U+ID4gbV9w
YXJzZWRTdHlsZU9iamVjdHM7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZUxpc3Q+ID4g
bV9wYXJzZWRSdWxlTGlzdHM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVMaXN0PiA+IG1f
cGFyc2VkUnVsZUxpc3RzOwogICAgICAgICBIYXNoU2V0PENTU1NlbGVjdG9yKj4gbV9mbG9hdGlu
Z1NlbGVjdG9yczsKICAgICAgICAgSGFzaFNldDxWYWx1ZUxpc3QqPiBtX2Zsb2F0aW5nVmFsdWVM
aXN0czsKICAgICAgICAgSGFzaFNldDxGdW5jdGlvbio+IG1fZmxvYXRpbmdGdW5jdGlvbnM7Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NSdWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTUnVsZUxpc3QuY3BwCShyZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvY3NzL0NTU1J1
bGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKLS8qKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0y
MDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIs
IDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNCw3NiArMjIsNTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJDU1NSdWxlTGlzdC5oIgogCi0jaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUg
IlN0eWxlTGlzdC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1J1bGVMaXN0OjpDU1NS
dWxlTGlzdCgpCi0gICAgOiBSZWZDb3VudGVkPENTU1J1bGVMaXN0PigwKQorQ1NTUnVsZUxpc3Q6
OkNTU1J1bGVMaXN0KFBhc3NSZWZQdHI8U3R5bGVMaXN0PiBsaXN0LCBib29sIG9taXRDaGFyc2V0
UnVsZXMpCisgICAgOiBSZWZDb3VudGVkPENTU1J1bGVMaXN0PigxKQorICAgICwgbV9saXN0KGxp
c3QpCisgICAgLCBtX29taXRDaGFyc2V0UnVsZXMob21pdENoYXJzZXRSdWxlcykKIHsKIH0KIAot
Q1NTUnVsZUxpc3Q6OkNTU1J1bGVMaXN0KFN0eWxlTGlzdCogbGlzdCwgYm9vbCBvbWl0Q2hhcnNl
dFJ1bGVzKQotICAgIDogUmVmQ291bnRlZDxDU1NSdWxlTGlzdD4oMCkKK1Bhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IENTU1J1bGVMaXN0OjpjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZUxpc3Q+IGxpc3Qp
CiB7Ci0gICAgbV9saXN0ID0gbGlzdDsKLSAgICBpZiAobGlzdCAmJiBvbWl0Q2hhcnNldFJ1bGVz
KSB7Ci0gICAgICAgIG1fbGlzdCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxl
bmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAg
ICAgICAgICAgIFN0eWxlQmFzZSogc3R5bGUgPSBsaXN0LT5pdGVtKGkpOwotICAgICAgICAgICAg
aWYgKHN0eWxlLT5pc1J1bGUoKSAmJiAhc3R5bGUtPmlzQ2hhcnNldFJ1bGUoKSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlKSk7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgQVNTRVJUKGxpc3QpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUnVs
ZUxpc3QobGlzdCwgZmFsc2UpKTsKIH0KIAotQ1NTUnVsZUxpc3Q6On5DU1NSdWxlTGlzdCgpCitQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NSdWxlTGlzdDo6Y3JlYXRlT21pdHRpbmdDaGFyc2V0
UnVsZXMoUGFzc1JlZlB0cjxTdHlsZUxpc3Q+IGxpc3QpCiB7Ci0gICAgQ1NTUnVsZSogcnVsZTsK
LSAgICB3aGlsZSAoIW1fbHN0Q1NTUnVsZXMuaXNFbXB0eSgpICYmIChydWxlID0gbV9sc3RDU1NS
dWxlcy50YWtlKDApKSkKLSAgICAgICAgcnVsZS0+ZGVyZWYoKTsKKyAgICBBU1NFUlQobGlzdCk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlTGlzdChsaXN0LCB0cnVlKSk7CiB9CiAK
IHVuc2lnbmVkIENTU1J1bGVMaXN0OjpsZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBtX2xp
c3QgPyBtX2xpc3QtPmxlbmd0aCgpIDogbV9sc3RDU1NSdWxlcy5jb3VudCgpOwotfQotCi1DU1NS
dWxlKiBDU1NSdWxlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBpZiAobV9saXN0
KSB7Ci0gICAgICAgIFN0eWxlQmFzZSogcnVsZSA9IG1fbGlzdC0+aXRlbShpbmRleCk7Ci0gICAg
ICAgIEFTU0VSVCghcnVsZSB8fCBydWxlLT5pc1J1bGUoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NSdWxlKj4ocnVsZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2xzdENTU1J1bGVz
LmF0KGluZGV4KTsKLX0KLQotdm9pZCBDU1NSdWxlTGlzdDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBp
bmRleCkKLXsKLSAgICBBU1NFUlQoIW1fbGlzdCk7Ci0gICAgQ1NTUnVsZSogcnVsZSA9IG1fbHN0
Q1NTUnVsZXMudGFrZShpbmRleCk7Ci0gICAgaWYgKHJ1bGUpCi0gICAgICAgIHJ1bGUtPmRlcmVm
KCk7Ci0gICAgLy8gRklYTUU6IFRocm93IElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbiBoZXJlIGlm
ICFydWxlCi19Ci0KLXZvaWQgQ1NTUnVsZUxpc3Q6OmFwcGVuZChDU1NSdWxlKiBydWxlKQotewot
ICAgIGluc2VydFJ1bGUocnVsZSwgbV9sc3RDU1NSdWxlcy5jb3VudCgpKSA7Ci19CisgICAgaWYg
KCFtX29taXRDaGFyc2V0UnVsZXMpCisgICAgICAgIHJldHVybiBtX2xpc3QtPmxlbmd0aCgpOwog
Ci11bnNpZ25lZCBDU1NSdWxlTGlzdDo6aW5zZXJ0UnVsZShDU1NSdWxlKiBydWxlLCB1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICBBU1NFUlQoIW1fbGlzdCk7Ci0gICAgaWYgKHJ1bGUgJiYgbV9sc3RD
U1NSdWxlcy5pbnNlcnQoaW5kZXgsIHJ1bGUpKSB7Ci0gICAgICAgIHJ1bGUtPnJlZigpOwotICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICB1bnNpZ25l
ZCBsaXN0TGVuZ3RoID0gbV9saXN0LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdExlbmd0aDsgKytpKQorICAgICAgICBsZW5ndGggKz0gIXN0YXRpY19jYXN0PENT
U1J1bGUqPihtX2xpc3QtPml0ZW0oaSkpLT5pc0NoYXJzZXRSdWxlKCk7CisgICAgcmV0dXJuIGxl
bmd0aDsKK30KKworQ1NTUnVsZSogQ1NTUnVsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX29taXRDaGFyc2V0UnVsZXMpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NSdWxlKj4obV9saXN0LT5pdGVtKGluZGV4KSk7CisKKyAgICB1bnNpZ25lZCBs
aXN0TGVuZ3RoID0gbV9saXN0LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBzdGF0aWNfY2Fz
dDxDU1NSdWxlKj4obV9saXN0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzQ2hhcnNl
dFJ1bGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWluZGV4KQorICAg
ICAgICAgICAgcmV0dXJuIHJ1bGU7CisgICAgICAgIC0taW5kZXg7CiAgICAgfQotCi0gICAgLy8g
RklYTUU6IFNob3VsZCB0aHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24gaW5zdGVhZCEKICAg
ICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NSdWxlTGlzdC5oCShyZXZpc2lvbiAzMDM2OCkKKysrIFdl
YkNvcmUvY3NzL0NTU1J1bGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChD
KSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
MiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI0LDMzICsyMiwyNyBAQAogI2lmbmRlZiBDU1NSdWxlTGlzdF9oCiAjZGVm
aW5lIENTU1J1bGVMaXN0X2gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCi0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUnVsZTsKLWNsYXNz
IFN0eWxlTGlzdDsKIAogY2xhc3MgQ1NTUnVsZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NS
dWxlTGlzdD4gewogcHVibGljOgotICAgIENTU1J1bGVMaXN0KCk7Ci0gICAgQ1NTUnVsZUxpc3Qo
U3R5bGVMaXN0KiwgYm9vbCBvbWl0Q2hhcnNldFJ1bGVzID0gZmFsc2UpOwotICAgIH5DU1NSdWxl
TGlzdCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxTdHlsZUxpc3Q+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gY3Jl
YXRlT21pdHRpbmdDaGFyc2V0UnVsZXMoUGFzc1JlZlB0cjxTdHlsZUxpc3Q+KTsKIAogICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
OworICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi0gICAgLy8gRklY
TUU6IE5vdCBwYXJ0IG9mIHRoZSBET00uICBPbmx5IHVzZWQgYnkgbWVkaWEgcnVsZXMuICBXZSBz
aG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhlbSBpZiB3ZSBjaGFuZ2VkIG1lZGlhIHJ1bGVzIHRv
IHdvcmsKLSAgICAvLyBhcyBTdHlsZUxpc3RzIGluc3RlYWQuCi0gICAgdW5zaWduZWQgaW5zZXJ0
UnVsZShDU1NSdWxlKiwgdW5zaWduZWQgaW5kZXgpOwotICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNp
Z25lZCBpbmRleCk7Ci0gICAgdm9pZCBhcHBlbmQoQ1NTUnVsZSopOworcHJpdmF0ZToKKyAgICBD
U1NSdWxlTGlzdChQYXNzUmVmUHRyPFN0eWxlTGlzdD4sIGJvb2wgb21pdENoYXJzZXRSdWxlcyk7
CiAKLXByb3RlY3RlZDoKICAgICBSZWZQdHI8U3R5bGVMaXN0PiBtX2xpc3Q7Ci0gICAgRGVwcmVj
YXRlZFB0ckxpc3Q8Q1NTUnVsZT4gbV9sc3RDU1NSdWxlczsgLy8gRklYTUU6IFdhbnQgdG8gZWxp
bWluYXRlLCBidXQgdXNlZCBieSBJRSBydWxlcygpIGV4dGVuc2lvbiBhbmQgc3RpbGwgdXNlZCBi
eSBtZWRpYSBydWxlcy4KKyAgICBib29sIG1fb21pdENoYXJzZXRSdWxlczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biAzMDM2OCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisjaW5jbHVkZSAiU3R5
bGVMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTI0Niw3ICsyNDcsNyBAQCBzdGF0aWMg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFCiAgICAgcmV0dXJuIHN0YXRpY1ByaW50
RXZhbDsKIH0KIAotQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCog
ZG9jLCBjb25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0LCBTdHlsZVNoZWV0TGlzdCAqc3R5bGVT
aGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwgYm9vbCBfc3RyaWN0UGFy
c2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCitDU1NTdHlsZVNlbGVjdG9yOjpD
U1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgdXNlclN0eWxlU2hl
ZXQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxl
bWVudFNoZWV0LCBib29sIF9zdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykKIHsKICAgICBpbml0KCk7CiAgICAgCkBAIC0yOTksMTAgKzMwMCwxMiBAQCBDU1NTdHls
ZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgaWYgKG1hcHBlZEVsZW1lbnRT
aGVldCkKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxl
bWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwogCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxTdHlsZVNoZWV0PiBpdChzdHlsZVNoZWV0cy0+c3R5bGVTaGVldHMpOwotICAgIGZvciAo
OyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAgIGlmIChpdC5jdXJyZW50KCktPmlzQ1NTU3R5
bGVTaGVldCgpICYmICFpdC5jdXJyZW50KCktPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBtX2F1
dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
aXQuY3VycmVudCgpKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHlsZVNoZWV0cy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0o
aSk7CisgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNh
YmxlZCgpKQorICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICB9
CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdCgpCkBAIC00MTMsNyArNDE2LDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKENTU1J1bAogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkr
KykgewogICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAgICAgICAgICAgICAgIG1fcnVs
ZUxpc3QgPSBuZXcgQ1NTUnVsZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0g
bmV3IFN0eWxlTGlzdCgwKTsKICAgICAgICAgICAgIG1fcnVsZUxpc3QtPmFwcGVuZChtX21hdGNo
ZWRSdWxlc1tpXS0+cnVsZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNjksMTAgKzEzNzIs
MTAgQEAgUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpzdAogCiAgICAgbV9j
b2xsZWN0UnVsZXNPbmx5ID0gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1fcnVsZUxpc3Q7Cisg
ICAgcmV0dXJuIENTU1J1bGVMaXN0OjpjcmVhdGUobV9ydWxlTGlzdCA/IG1fcnVsZUxpc3QucmVs
ZWFzZSgpIDogbmV3IFN0eWxlTGlzdCgwKSk7CiB9CiAKLVJlZlB0cjxDU1NSdWxlTGlzdD4gQ1NT
U3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgU3Ry
aW5nSW1wbCogcHNldWRvU3R5bGUsIGJvb2wgYXV0aG9yT25seSkKK1JlZlB0cjxDU1NSdWxlTGlz
dD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCos
IFN0cmluZ0ltcGwqLCBib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KICAg
ICByZXR1cm4gMDsKQEAgLTIyNDMsNyArMjI0Niw3IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3QKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpdGVtLT5pc01l
ZGlhUnVsZSgpKSB7CiAgICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIHIgPSBzdGF0aWNfY2FzdDxD
U1NNZWRpYVJ1bGUqPihpdGVtKTsKLSAgICAgICAgICAgIENTU1J1bGVMaXN0KiBydWxlcyA9IHIt
PmNzc1J1bGVzKCk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVzID0gci0+
Y3NzUnVsZXMoKTsKIAogICAgICAgICAgICAgaWYgKCghci0+bWVkaWEoKSB8fCBtZWRpdW0uZXZh
bChyLT5tZWRpYSgpKSkgJiYgcnVsZXMpIHsKICAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBj
aGlsZCBlbGVtZW50cyBvZiB0aGUgQG1lZGlhIHJ1bGUuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oCShyZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBLVVJMOwogY2xhc3MgTWVkaWFR
dWVyeUV2YWx1YXRvcjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBTZXR0aW5nczsKK2NsYXNzIFN0eWxl
TGlzdDsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIFN0
eWxlZEVsZW1lbnQ7CkBAIC0yMTMsNyArMjE0LDcgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICAg
ICAgICAgLy8gbWVyZ2Ugc29ydGluZy4KICAgICAgICAgVmVjdG9yPENTU1J1bGVEYXRhKj4gbV9t
YXRjaGVkUnVsZXM7CiAKLSAgICAgICAgQ1NTUnVsZUxpc3QqIG1fcnVsZUxpc3Q7CisgICAgICAg
IFJlZlB0cjxTdHlsZUxpc3Q+IG1fcnVsZUxpc3Q7CiAgICAgICAgIGJvb2wgbV9jb2xsZWN0UnVs
ZXNPbmx5OwogCiAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IqIG1fbWVkaXVtOwpJbmRleDog
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDMwMzY4KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw5ICsxMDcsMTQgQEAgaW50IENTU1N0
eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJgogfQogCiAKLUNTU1J1bGVMaXN0KiBDU1NT
dHlsZVNoZWV0Ojpjc3NSdWxlcyhib29sIG9taXRDaGFyc2V0UnVsZXMpCitQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBDU1NTdHlsZVNoZWV0Ojpjc3NSdWxlcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBD
U1NSdWxlTGlzdCh0aGlzLCBvbWl0Q2hhcnNldFJ1bGVzKTsKKyAgICByZXR1cm4gQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVT
aGVldDo6cnVsZXMoKQoreworICAgIHJldHVybiBDU1NSdWxlTGlzdDo6Y3JlYXRlT21pdHRpbmdD
aGFyc2V0UnVsZXModGhpcyk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1
bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCShy
ZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsMTIgKzQ3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBl
KCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQogCiAgICAgQ1NTUnVsZSogb3duZXJSdWxl
KCkgY29uc3Q7Ci0gICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVzKGJvb2wgb21pdENoYXJzZXRSdWxl
cyA9IGZhbHNlKTsKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOwogICAg
IHVuc2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gSUUgRXh0ZW5zaW9ucwotICAgIENTU1J1bGVMaXN0KiBy
dWxlcygpIHsgcmV0dXJuIGNzc1J1bGVzKHRydWUpOyB9CisgICAgUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gcnVsZXMoKTsKICAgICBpbnQgYWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBj
b25zdCBTdHJpbmcmIHN0eWxlLCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBpbnQg
YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBjb25zdCBTdHJpbmcmIHN0eWxlLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCByZW1vdmVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykgeyBkZWxldGVSdWxlKGluZGV4LCBlYyk7IH0KSW5kZXg6IFdlYkNvcmUvY3Nz
L1N0eWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU3R5bGVMaXN0LmNwcAko
cmV2aXNpb24gMzAzNjgpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExICsxLDkgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAgICAgMTk5OSBXYWxkbyBC
YXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgICAgIDIwMDEgQW5kcmVhcyBT
Y2hsYXBiYWNoIChzY2hscGJjaEBpYW0udW5pYmUuY2gpCiAgKiAgICAgICAgICAgICAgIDIwMDEt
MjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
MiwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsMjYgKzIwLDMwIEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxl
TGlzdC5oIgogCisjaW5jbHVkZSAiU3R5bGVCYXNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFN0eWxlTGlzdDo6YXBwZW5kKFBh
c3NSZWZQdHI8U3R5bGVCYXNlPiBjaGlsZCkKK3ZvaWQgU3R5bGVMaXN0OjphcHBlbmQoUGFzc1Jl
ZlB0cjxTdHlsZUJhc2U+IHBhc3NDaGlsZCkKIHsKLSAgICBTdHlsZUJhc2UqIGMgPSBjaGlsZC5n
ZXQoKTsKKyAgICBSZWZQdHI8U3R5bGVCYXNlPiBjaGlsZCA9IHBhc3NDaGlsZDsKICAgICBtX2No
aWxkcmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgYy0+aW5zZXJ0ZWRJbnRvUGFyZW50KCk7CisgICAg
Y2hpbGQtPmluc2VydGVkSW50b1BhcmVudCgpOwogfQogCi12b2lkIFN0eWxlTGlzdDo6aW5zZXJ0
KHVuc2lnbmVkIHBvc2l0aW9uLCBQYXNzUmVmUHRyPFN0eWxlQmFzZT4gY2hpbGQpCit2b2lkIFN0
eWxlTGlzdDo6aW5zZXJ0KHVuc2lnbmVkIHBvc2l0aW9uLCBQYXNzUmVmUHRyPFN0eWxlQmFzZT4g
cGFzc0NoaWxkKQogewotICAgIFN0eWxlQmFzZSogYyA9IGNoaWxkLmdldCgpOworICAgIFJlZlB0
cjxTdHlsZUJhc2U+IGNoaWxkID0gcGFzc0NoaWxkOwogICAgIGlmIChwb3NpdGlvbiA+PSBsZW5n
dGgoKSkKICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogICAgIGVsc2UKICAgICAg
ICAgbV9jaGlsZHJlbi5pbnNlcnQocG9zaXRpb24sIGNoaWxkKTsKLSAgICBjLT5pbnNlcnRlZElu
dG9QYXJlbnQoKTsKKyAgICBjaGlsZC0+aW5zZXJ0ZWRJbnRvUGFyZW50KCk7CiB9CiAKIHZvaWQg
U3R5bGVMaXN0OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24pCkluZGV4OiBXZWJDb3JlL2Nzcy9T
dHlsZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZUxpc3QuaAkocmV2aXNp
b24gMzAzNjgpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ1NTIGltcGxlbWVu
dGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAgICAgMTk5OSBXYWxkbyBCYXN0aWFuIChi
YXN0aWFuQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBDb21wdXRl
ciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSw3ICsyMyw3IEBACiAjZGVmaW5lIFN0
eWxlTGlzdF9oCiAKICNpbmNsdWRlICJTdHlsZUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCShyZXZp
c2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw4ICsxLDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjMsNzIgKzIxLDM1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVN0eWxlU2hlZXRM
aXN0OjpTdHlsZVNoZWV0TGlzdChEb2N1bWVudCogZG9jKQotICAgIDogUmVmQ291bnRlZDxTdHls
ZVNoZWV0TGlzdD4oMCkKLSAgICAsIG1fZG9jKGRvYykKK2lubGluZSBTdHlsZVNoZWV0TGlzdDo6
U3R5bGVTaGVldExpc3QoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogUmVmQ291bnRlZDxTdHls
ZVNoZWV0TGlzdD4oMSkKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiB9CiAKLVN0eWxl
U2hlZXRMaXN0Ojp+U3R5bGVTaGVldExpc3QoKQorUGFzc1JlZlB0cjxTdHlsZVNoZWV0TGlzdD4g
U3R5bGVTaGVldExpc3Q6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgZm9yIChE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0IChzdHlsZVNoZWV0cyk7IGl0
LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaXQuY3VycmVudCgpLT5kZXJlZigpOwotfQotCi12
b2lkIFN0eWxlU2hlZXRMaXN0Ojpkb2N1bWVudERlc3Ryb3llZCgpCi17Ci0gICAgbV9kb2MgPSAw
OwotfQotCi12b2lkIFN0eWxlU2hlZXRMaXN0OjphZGQoU3R5bGVTaGVldCogcykKLXsKLSAgICBp
ZiAoIXN0eWxlU2hlZXRzLmNvbnRhaW5zUmVmKHMpKSB7Ci0gICAgICAgIHMtPnJlZigpOwotICAg
ICAgICBzdHlsZVNoZWV0cy5hcHBlbmQocyk7Ci0gICAgfQotfQotCi12b2lkIFN0eWxlU2hlZXRM
aXN0OjpyZW1vdmUoU3R5bGVTaGVldCogcykKLXsKLSAgICBpZiAoc3R5bGVTaGVldHMucmVtb3Zl
UmVmKHMpKQotICAgICAgICBzLT5kZXJlZigpOwotfQotCi11bnNpZ25lZCBTdHlsZVNoZWV0TGlz
dDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3R5bGVTaGVldHMuY291bnQoKTsKLX0K
LQotU3R5bGVTaGVldCogU3R5bGVTaGVldExpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgcmV0dXJuIGluZGV4IDwgbGVuZ3RoKCkgPyBzdHlsZVNoZWV0cy5hdChpbmRleCkgOiAwOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldExpc3QoZG9jdW1lbnQpKTsKIH0KIAog
SFRNTFN0eWxlRWxlbWVudCogU3R5bGVTaGVldExpc3Q6OmdldE5hbWVkSXRlbShjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RvYykKKyAgICBpZiAoIW1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gSUUgYWxzbyBzdXBwb3J0cyByZXRyaWV2aW5n
IGEgc3R5bGVzaGVldCBieSBuYW1lLCB1c2luZyB0aGUgbmFtZS9pZCBvZiB0aGUgPHN0eWxlPiB0
YWcKLSAgICAvLyAodGhpcyBpcyBjb25zaXN0ZW50IHdpdGggYWxsIHRoZSBvdGhlciBjb2xsZWN0
aW9ucykKLSAgICAvLyAjIyMgQmFkIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgcmV0dXJucyBhIHNp
bmdsZSBlbGVtZW50IChhcmUgSURzIGFsd2F5cyB1bmlxdWU/KQotICAgIC8vIGFuZCBkb2Vzbid0
IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlLgotICAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hl
ZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCi0gICAgCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChuYW1lKTsKLSAgICBpZiAoZWxlbWVudCAmJiBl
bGVtZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVtZW50KTsKLSAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhN
RTogVGhpcyBzZWFyY2hlcyBvbmx5IGJ5IElELCBub3QgbmFtZSwgYW5kIG9ubHkgcmV0dXJucyBh
IHNpbmdsZSBpdGVtLgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvY3VtZW50LT5nZXRFbGVt
ZW50QnlJZChuYW1lKTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmhhc1RhZ05hbWUo
c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRMaXN0LmgJKHJldmlzaW9uIDMwMzY4KQorKysgV2ViQ29yZS9jc3MvU3R5
bGVTaGVldExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykg
MTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsOCArMjEsOSBAQAogI2lmbmRlZiBTdHls
ZVNoZWV0TGlzdF9oCiAjZGVmaW5lIFN0eWxlU2hlZXRMaXN0X2gKIAorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlICJEZXByZWNh
dGVkUHRyTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zMSwyNSArMzIsMzUgQEAgY2xhc3MgSFRNTFN0eWxlRWxlbWVudDsKIGNsYXNz
IFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHJpbmc7CiAKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0PiA+IFN0eWxlU2hlZXRWZWN0b3I7CisKIGNsYXNzIFN0eWxlU2hlZXRMaXN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8U3R5bGVTaGVldExpc3Q+IHsKIHB1YmxpYzoKLSAgICBTdHlsZVNoZWV0
TGlzdChEb2N1bWVudCopOwotICAgIH5TdHlsZVNoZWV0TGlzdCgpOwotCi0gICAgdm9pZCBkb2N1
bWVudERlc3Ryb3llZCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRMaXN0PiBj
cmVhdGUoRG9jdW1lbnQqKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIFN0
eWxlU2hlZXQqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwotCi0gICAgdm9pZCBhZGQoU3R5bGVTaGVl
dCopOwotICAgIHZvaWQgcmVtb3ZlKFN0eWxlU2hlZXQqKTsKKyAgICB2b2lkIGRvY3VtZW50RGVz
dHJveWVkKCkKKyAgICB7CisgICAgICAgIG1fZG9jdW1lbnQgPSAwOworICAgIH0KKworICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRzLnNpemUoKTsgfQorICAgIFN0
eWxlU2hlZXQqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaW5kZXggPCBtX3NoZWV0cy5zaXplKCkgPyBtX3NoZWV0c1tpbmRleF0uZ2V0KCkgOiAwOwor
ICAgIH0KIAogICAgIEhUTUxTdHlsZUVsZW1lbnQqIGdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcm
KSBjb25zdDsKIAotICAgIERlcHJlY2F0ZWRQdHJMaXN0PFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXRz
OworICAgIHZvaWQgc3dhcChTdHlsZVNoZWV0VmVjdG9yJiBzaGVldHMpCisgICAgeworICAgICAg
ICBtX3NoZWV0cy5zd2FwKHNoZWV0cyk7CisgICAgfQogCiBwcml2YXRlOgotICAgIERvY3VtZW50
KiBtX2RvYzsKKyAgICBTdHlsZVNoZWV0TGlzdChEb2N1bWVudCopOworCisgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CisgICAgU3R5bGVTaGVldFZlY3RvciBtX3NoZWV0czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwMzY4KQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWROYW1lUGFydChVQ2hhcgogfQogCiBzdGF0aWMgV2lk
Z2V0KiB3aWRnZXRGb3JOb2RlKE5vZGUqIGZvY3VzZWROb2RlKQotICB7Cit7CiAgICAgaWYgKCFm
b2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGZvY3VzZWROb2RlLT5yZW5kZXJlcigpOwpAQCAtMjU3LDE0ICsyNTcsMTQgQEAgc3RhdGlj
IGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlICpubwogICAgIHJldHVybiBmcmFtZS0+ZWRp
dG9yKCktPnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZU9mQ29udGVudHMocm9vdCkuZ2V0KCkpOwog
fQogCi1EZXByZWNhdGVkUHRyTGlzdDxEb2N1bWVudD4qICBEb2N1bWVudDo6Y2hhbmdlZERvY3Vt
ZW50cyA9IDA7CitzdGF0aWMgTGlzdEhhc2hTZXQ8RG9jdW1lbnQqPiogY2hhbmdlZERvY3VtZW50
cyA9IDA7CiAKIC8vIEZyYW1lVmlldyBtaWdodCBiZSAwCiBEb2N1bWVudDo6RG9jdW1lbnQoRE9N
SW1wbGVtZW50YXRpb24qIGltcGwsIEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MKQogICAgIDog
Q29udGFpbmVyTm9kZSgwKQogICAgICwgbV9pbXBsZW1lbnRhdGlvbihpbXBsKQogICAgICwgbV9k
b210cmVlX3ZlcnNpb24oMCkKLSAgICAsIG1fc3R5bGVTaGVldHMobmV3IFN0eWxlU2hlZXRMaXN0
KHRoaXMpKQorICAgICwgbV9zdHlsZVNoZWV0cyhTdHlsZVNoZWV0TGlzdDo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV90aXRsZSgiIikKICAgICAsIG1fdGl0bGVTZXRFeHBsaWNpdGx5KGZhbHNlKQog
ICAgICwgbV9pbWFnZUxvYWRFdmVudFRpbWVyKHRoaXMsICZEb2N1bWVudDo6aW1hZ2VMb2FkRXZl
bnRUaW1lckZpcmVkKQpAQCAtMTAzNCw4ICsxMDM0LDggQEAgdm9pZCBEb2N1bWVudDo6c2V0RG9j
dW1lbnRDaGFuZ2VkKGJvb2wgYgogICAgIGlmIChiKSB7CiAgICAgICAgIGlmICghbV9kb2NDaGFu
Z2VkKSB7CiAgICAgICAgICAgICBpZiAoIWNoYW5nZWREb2N1bWVudHMpCi0gICAgICAgICAgICAg
ICAgY2hhbmdlZERvY3VtZW50cyA9IG5ldyBEZXByZWNhdGVkUHRyTGlzdDxEb2N1bWVudD47Ci0g
ICAgICAgICAgICBjaGFuZ2VkRG9jdW1lbnRzLT5hcHBlbmQodGhpcyk7CisgICAgICAgICAgICAg
ICAgY2hhbmdlZERvY3VtZW50cyA9IG5ldyBMaXN0SGFzaFNldDxEb2N1bWVudCo+OworICAgICAg
ICAgICAgY2hhbmdlZERvY3VtZW50cy0+YWRkKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChtX2FjY2Vzc0tleU1hcFZhbGlkKSB7CiAgICAgICAgICAgICBtX2FjY2Vzc0tleU1hcFZhbGlk
ID0gZmFsc2U7CkBAIC0xMTQ0LDkgKzExNDQsMTYgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlRG9j
dW1lbnRzUmVuZGVyaW5nKAogICAgIGlmICghY2hhbmdlZERvY3VtZW50cykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgd2hpbGUgKERvY3VtZW50KiBkb2MgPSBjaGFuZ2VkRG9jdW1lbnRzLT50YWtl
KCkpIHsKLSAgICAgICAgZG9jLT5tX2RvY0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZG9jLT51
cGRhdGVSZW5kZXJpbmcoKTsKKyAgICBWZWN0b3I8UmVmUHRyPERvY3VtZW50PiA+IGRvY3VtZW50
czsKKyAgICBMaXN0SGFzaFNldDxEb2N1bWVudCo+OjppdGVyYXRvciBlbmQgPSBjaGFuZ2VkRG9j
dW1lbnRzLT5lbmQoKTsKKyAgICBmb3IgKExpc3RIYXNoU2V0PERvY3VtZW50Kj46Oml0ZXJhdG9y
IGl0ID0gY2hhbmdlZERvY3VtZW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBkb2N1bWVudHMuYXBwZW5kKCppdCk7CisgICAgY2hhbmdlZERvY3VtZW50cy0+Y2xlYXIoKTsK
KworICAgIHVuc2lnbmVkIHNpemUgPSBkb2N1bWVudHMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgZG9jdW1lbnRzW2ldLT5tX2RvY0No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZG9jdW1lbnRzW2ldLT51cGRhdGVSZW5kZXJpbmcoKTsK
ICAgICB9CiB9CiAKQEAgLTIwODIsOCArMjA4OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0
eWxlU2VsZWN0b3IoKQogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhYXR0YWNoZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8U3R5bGVTaGVldD4gb2xkU3R5bGVT
aGVldHMgPSBtX3N0eWxlU2hlZXRzLT5zdHlsZVNoZWV0czsKLSAgICBtX3N0eWxlU2hlZXRzLT5z
dHlsZVNoZWV0cy5jbGVhcigpOworICAgIFN0eWxlU2hlZXRWZWN0b3Igc2hlZXRzOwogCiAgICAg
Ym9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSB0cnVlOwogICAgIGlmIChTZXR0aW5ncyog
c2V0dGluZ3MgPSB0aGlzLT5zZXR0aW5ncygpKQpAQCAtMjE4NywxMCArMjE5Myw4IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKHNoZWV0KSB7Ci0gICAgICAgICAgICBzaGVldC0+cmVmKCk7Ci0gICAg
ICAgICAgICBtX3N0eWxlU2hlZXRzLT5zdHlsZVNoZWV0cy5hcHBlbmQoc2hlZXQpOwotICAgICAg
ICB9CisgICAgICAgIGlmIChzaGVldCkKKyAgICAgICAgICAgIHNoZWV0cy5hcHBlbmQoc2hlZXQp
OwogCiAgICAgICAgIC8vIEZvciBIVE1MIGRvY3VtZW50cywgc3R5bGVzaGVldHMgYXJlIG5vdCBh
bGxvd2VkIHdpdGhpbi9hZnRlciB0aGUgPEJPRFk+IHRhZy4gU28gd2UKICAgICAgICAgLy8gY2Fu
IHN0b3Agc2VhcmNoaW5nIGhlcmUuCkBAIC0yMTk4LDEwICsyMjAyLDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICAvLyBEZS1yZWZlcmVuY2UgYWxsIHRoZSBzdHlsZXNoZWV0cyBpbiB0aGUgb2xkIGxpc3QKLSAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KG9sZFN0eWxlU2hlZXRz
KTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBpdC5jdXJyZW50KCkt
PmRlcmVmKCk7CisgICAgbV9zdHlsZVNoZWV0cy0+c3dhcChzaGVldHMpOwogCiAgICAgLy8gQ3Jl
YXRlIGEgbmV3IHN0eWxlIHNlbGVjdG9yCiAgICAgZGVsZXRlIG1fc3R5bGVTZWxlY3RvcjsKQEAg
LTI1NTEsMTcgKzI1NTIsMTYgQEAgdm9pZCBEb2N1bWVudDo6c2V0SFRNTFdpbmRvd0V2ZW50TGlz
dGVuZQogCiB2b2lkIERvY3VtZW50OjpkaXNwYXRjaEltYWdlTG9hZEV2ZW50U29vbihIVE1MSW1h
Z2VMb2FkZXIgKmltYWdlKQogewotICAgIG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaFNvb25MaXN0
LmFwcGVuZChpbWFnZSk7CisgICAgbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3QuYWRk
KGltYWdlKTsKICAgICBpZiAoIW1faW1hZ2VMb2FkRXZlbnRUaW1lci5pc0FjdGl2ZSgpKQogICAg
ICAgICBtX2ltYWdlTG9hZEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCiB2b2lkIERv
Y3VtZW50OjpyZW1vdmVJbWFnZShIVE1MSW1hZ2VMb2FkZXIqIGltYWdlKQogewotICAgIC8vIFJl
bW92ZSBpbnN0YW5jZXMgb2YgdGhpcyBpbWFnZSBmcm9tIGJvdGggbGlzdHMuCi0gICAgLy8gVXNl
IGxvb3BzIGJlY2F1c2Ugd2UgYWxsb3cgbXVsdGlwbGUgaW5zdGFuY2VzIHRvIGdldCBpbnRvIHRo
ZSBsaXN0cy4KLSAgICB3aGlsZSAobV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3QucmVt
b3ZlUmVmKGltYWdlKSkgeyB9Ci0gICAgd2hpbGUgKG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaGlu
Z0xpc3QucmVtb3ZlUmVmKGltYWdlKSkgeyB9CisgICAgLy8gUmVtb3ZlIHRoaXMgaW1hZ2UgZnJv
bSBib3RoIGxpc3RzLgorICAgIG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaFNvb25MaXN0LnJlbW92
ZShpbWFnZSk7CisgICAgbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdC5yZW1vdmUoaW1h
Z2UpOwogICAgIGlmIChtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlzdC5pc0VtcHR5KCkp
CiAgICAgICAgIG1faW1hZ2VMb2FkRXZlbnRUaW1lci5zdG9wKCk7CiB9CkBAIC0yNTc5LDEzICsy
NTc5LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRzTm8KICAgICAK
ICAgICBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0ID0gbV9pbWFnZUxvYWRFdmVudERp
c3BhdGNoU29vbkxpc3Q7CiAgICAgbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3QuY2xl
YXIoKTsKLSAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8SFRNTEltYWdlTG9hZGVy
PiBpdChtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0KTsgaXQuY3VycmVudCgpOykgewot
ICAgICAgICBIVE1MSW1hZ2VMb2FkZXIqIGltYWdlID0gaXQuY3VycmVudCgpOwotICAgICAgICAv
LyBNdXN0IGFkdmFuY2UgaXRlcmF0b3IgKmJlZm9yZSogZGlzcGF0Y2hpbmcgY2FsbC4KLSAgICAg
ICAgLy8gT3RoZXJ3aXNlLCBpdCBtaWdodCBiZSBhZHZhbmNlZCBhdXRvbWF0aWNhbGx5IGlmIGRp
c3BhdGNoaW5nIHRoZSBjYWxsIGhhZCBhIHNpZGUgZWZmZWN0Ci0gICAgICAgIC8vIG9mIGRlc3Ry
b3lpbmcgdGhlIGN1cnJlbnQgSFRNTEltYWdlTG9hZGVyLCBhbmQgdGhlbiB3ZSB3b3VsZCBhZHZh
bmNlIHBhc3QgdGhlICpuZXh0KiBpdGVtLAotICAgICAgICAvLyBtaXNzaW5nIG9uZSBhbHRvZ2V0
aGVyLgotICAgICAgICArK2l0OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIExpc3RIYXNoU2V0
PEhUTUxJbWFnZUxvYWRlcio+OjppdGVyYXRvciBmaXJzdCA9IG1faW1hZ2VMb2FkRXZlbnREaXNw
YXRjaGluZ0xpc3QuYmVnaW4oKTsKKyAgICAgICAgaWYgKGZpcnN0ID09IG1faW1hZ2VMb2FkRXZl
bnREaXNwYXRjaGluZ0xpc3QuZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSFRN
TEltYWdlTG9hZGVyKiBpbWFnZSA9ICpmaXJzdDsKKyAgICAgICAgbV9pbWFnZUxvYWRFdmVudERp
c3BhdGNoaW5nTGlzdC5yZW1vdmUoZmlyc3QpOwogICAgICAgICBpbWFnZS0+ZGlzcGF0Y2hMb2Fk
RXZlbnQoKTsKICAgICB9CiAgICAgbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdC5jbGVh
cigpOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCiAjaW5j
bHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgi
CiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKQEAgLTM0Myw3ICszNDIsNiBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxFZGl0aW5nVGV4dD4gY3JlYXRlRWRpdGluZ1RleHROb2RlKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9
IE5vQ2hhbmdlICk7Ci0gICAgc3RhdGljIERlcHJlY2F0ZWRQdHJMaXN0PERvY3VtZW50PiogY2hh
bmdlZERvY3VtZW50czsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVuZGVyaW5nKCk7CiAgICAg
dm9pZCB1cGRhdGVMYXlvdXQoKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwpAQCAtNzkwLDggKzc4OCw4IEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxl
IEFYT2JqZWN0Q2FjaGUqIG1fYXhPYmplY3RDYWNoZTsKICAgICAKLSAgICBEZXByZWNhdGVkUHRy
TGlzdDxIVE1MSW1hZ2VMb2FkZXI+IG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaFNvb25MaXN0Owot
ICAgIERlcHJlY2F0ZWRQdHJMaXN0PEhUTUxJbWFnZUxvYWRlcj4gbV9pbWFnZUxvYWRFdmVudERp
c3BhdGNoaW5nTGlzdDsKKyAgICBMaXN0SGFzaFNldDxIVE1MSW1hZ2VMb2FkZXIqPiBtX2ltYWdl
TG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlzdDsKKyAgICBMaXN0SGFzaFNldDxIVE1MSW1hZ2VMb2Fk
ZXIqPiBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0OwogICAgIFRpbWVyPERvY3VtZW50
PiBtX2ltYWdlTG9hZEV2ZW50VGltZXI7CiAKICAgICBUaW1lcjxEb2N1bWVudD4gbV91cGRhdGVG
b2N1c0FwcGVhcmFuY2VUaW1lcjsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDMwMzY4
KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
ICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoK
QEAgLTM0LDE2ICszMiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCiAKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNp
bmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJr
anNfcHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzAz
NjgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NiBAQAogCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2lu
Y2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDMwMzY4KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisj
aW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEludGVyY2hhbmdlLmgiCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTIy
IEBAIHN0cnVjdCBDb2x1bW5JbmZvIHsKICAgICBWZWN0b3I8SW50UmVjdD4gbV9jb2x1bW5SZWN0
czsKIH07CiAKK2VudW0gRmxvYXRpbmdPYmplY3RUeXBlIHsgRmxvYXRMZWZ0LCBGbG9hdFJpZ2h0
IH07CisKK2NsYXNzIEZsb2F0aW5nT2JqZWN0RGV0YWlscyB7CitwdWJsaWM6CisgICAgRmxvYXRp
bmdPYmplY3REZXRhaWxzKCkKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRpbmdPYmplY3REZXRh
aWxzKEZsb2F0aW5nT2JqZWN0VHlwZSB0eXBlLCBib29sIG5vUGFpbnQsIGludCBzdGFydFksIGlu
dCBlbmRZLCBpbnQgbGVmdCwgaW50IHdpZHRoKQorICAgICAgICA6IG1fc3RhcnRZKHN0YXJ0WSkK
KyAgICAgICAgLCBtX2VuZFkoZW5kWSkKKyAgICAgICAgLCBtX2xlZnQobGVmdCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fbm9Q
YWludChub1BhaW50KQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdGluZ09iamVjdFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZsb2F0aW5nT2JqZWN0VHlwZT4obV90eXBl
KTsgfQorICAgIGJvb2wgbm9QYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9QYWludDsgfQorICAg
IGludCBzdGFydFkoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0WTsgfQorICAgIGludCBlbmRZKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmRZOyB9CisgICAgaW50IGxlZnQoKSBjb25zdCB7IHJldHVybiBt
X2xlZnQ7IH0KKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisKKyAg
ICBib29sIGlzUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRZICE9IC0xOyB9CisK
KyAgICB2b2lkIHNldE5vUGFpbnQoYm9vbCBub1BhaW50KSB7IG1fbm9QYWludCA9IG5vUGFpbnQ7
IH0KKyAgICB2b2lkIHNldFkoaW50IHN0YXJ0LCBpbnQgZW5kKSB7IG1fc3RhcnRZID0gc3RhcnQ7
IG1fZW5kWSA9IGVuZDsgfQorICAgIHZvaWQgc2V0TGVmdChpbnQgbGVmdCkgeyBtX2xlZnQgPSBs
ZWZ0OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fc3RhcnRZOworICAgIGludCBtX2VuZFk7Cisg
ICAgaW50IG1fbGVmdDsKKyAgICBpbnQgbV93aWR0aDsKKyAgICB1bnNpZ25lZCBtX3R5cGUgOiAx
OyAvLyBGbG9hdGluZ09iamVjdFR5cGUKKyAgICBib29sIG1fbm9QYWludCA6IDE7Cit9OworCitj
bGFzcyBGbG9hdGluZ09iamVjdE1hcHMgeworcHVibGljOgorICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3RzLmlzRW1wdHkoKTsKKyAgICB9CisK
KyAgICBib29sIGNvbnRhaW5zKFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2JqZWN0cy5jb250YWlucyhvYmplY3QpOworICAgIH0KKworICAgIExp
c3RIYXNoU2V0PFJlbmRlck9iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3RzLmJlZ2luKCk7CisgICAgfQorCisgICAgTGlz
dEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGxhc3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0cy5sYXN0KCk7CisgICAgfQorCisgICAgTGlzdEhh
c2hTZXQ8UmVuZGVyT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vYmplY3RzLmVuZCgpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0RGV0YWlscyYgZGV0YWlscyhSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29iamVjdHMuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAg
IEFTU0VSVChtX2RldGFpbHMuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIHJldHVybiBtX2Rl
dGFpbHMuZmluZChvYmplY3QpLT5zZWNvbmQ7CisgICAgfQorCisgICAgRmxvYXRpbmdPYmplY3RE
ZXRhaWxzJiBkZXRhaWxzKFJlbmRlck9iamVjdCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fb2JqZWN0cy5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgQVNTRVJUKG1fZGV0YWls
cy5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgcmV0dXJuIG1fZGV0YWlscy5maW5kKG9iamVj
dCktPnNlY29uZDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1f
b2JqZWN0cy5jbGVhcigpOworICAgICAgICBtX2RldGFpbHMuY2xlYXIoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZChSZW5kZXJPYmplY3QqIG9iamVjdCwgRmxvYXRpbmdPYmplY3RUeXBlIHR5cGUs
IGJvb2wgbm9QYWludCwgaW50IHdpZHRoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX29iamVj
dHMuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEFTU0VSVCghbV9kZXRhaWxzLmNvbnRhaW5z
KG9iamVjdCkpOworICAgICAgICBtX29iamVjdHMuYWRkKG9iamVjdCk7CisgICAgICAgIG1fZGV0
YWlscy5hZGQob2JqZWN0LCBGbG9hdGluZ09iamVjdERldGFpbHModHlwZSwgbm9QYWludCwgLTEs
IC0xLCAwLCB3aWR0aCkpOworICAgIH0KKworICAgIHZvaWQgYWRkKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBGbG9hdGluZ09iamVjdFR5cGUgdHlwZSwgYm9vbCBub1BhaW50LCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSwgaW50IGxlZnQsIGludCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9v
YmplY3RzLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBBU1NFUlQoIW1fZGV0YWlscy5jb250
YWlucyhvYmplY3QpKTsKKyAgICAgICAgbV9vYmplY3RzLmFkZChvYmplY3QpOworICAgICAgICBt
X2RldGFpbHMuYWRkKG9iamVjdCwgRmxvYXRpbmdPYmplY3REZXRhaWxzKHR5cGUsIG5vUGFpbnQs
IHN0YXJ0WSwgZW5kWSwgbGVmdCwgd2lkdGgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZShS
ZW5kZXJPYmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29iamVjdHMuY29u
dGFpbnMob2JqZWN0KSk7CisgICAgICAgIEFTU0VSVChtX2RldGFpbHMuY29udGFpbnMob2JqZWN0
KSk7CisgICAgICAgIG1fb2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKKyAgICAgICAgbV9kZXRhaWxz
LnJlbW92ZShvYmplY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMaXN0SGFzaFNldDxSZW5k
ZXJPYmplY3QqPiBtX29iamVjdHM7CisgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGbG9hdGlu
Z09iamVjdERldGFpbHM+IG1fZGV0YWlsczsKK307CisKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNv
bnN0IFJlbmRlckJveCosIENvbHVtbkluZm8qPiBDb2x1bW5JbmZvTWFwOwogc3RhdGljIENvbHVt
bkluZm9NYXAqIGdDb2x1bW5JbmZvTWFwID0gMDsKIApAQCAtMTAwLDkgKzIxNiw2IEBAIFJlbmRl
ckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJlbmQKIAogUmVuZGVyQmxvY2s6OlJlbmRl
ckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICA6IFJlbmRlckZsb3cobm9kZSkKLSAgICAgICwgbV9m
bG9hdGluZ09iamVjdHMoMCkKLSAgICAgICwgbV9wb3NpdGlvbmVkT2JqZWN0cygwKQotICAgICAg
LCBtX21heE1hcmdpbigwKQogICAgICAgLCBtX292ZXJmbG93SGVpZ2h0KDApCiAgICAgICAsIG1f
b3ZlcmZsb3dXaWR0aCgwKQogICAgICAgLCBtX292ZXJmbG93TGVmdCgwKQpAQCAtMTExLDExICsy
MjQsNyBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkKIH0KIAogUmVuZGVy
QmxvY2s6On5SZW5kZXJCbG9jaygpCi17Ci0gICAgZGVsZXRlIG1fZmxvYXRpbmdPYmplY3RzOwot
ICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRlbGV0ZSBtX21heE1hcmdpbjsK
LSAgICAKK3sgICAgCiAgICAgaWYgKG1faGFzQ29sdW1ucykKICAgICAgICAgZGVsZXRlIGdDb2x1
bW5JbmZvTWFwLT50YWtlKHRoaXMpOwogfQpAQCAtMTMxNyw2NiArMTQyNiw3MSBAQCBib29sIFJl
bmRlckJsb2NrOjpsYXlvdXRPbmx5UG9zaXRpb25lZE9iCiAKIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKLSAgICBpZiAo
bV9wb3NpdGlvbmVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIHI7Ci0gICAgICAg
IEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwotICAgICAgICBmb3Ig
KEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICByID0gKml0OwotICAgICAgICAgICAgLy8gV2hlbiBhIG5vbi1w
b3NpdGlvbmVkIGJsb2NrIGVsZW1lbnQgbW92ZXMsIGl0IG1heSBoYXZlIHBvc2l0aW9uZWQgY2hp
bGRyZW4gdGhhdCBhcmUgaW1wbGljaXRseSBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvIHRoZQotICAg
ICAgICAgICAgLy8gbm9uLXBvc2l0aW9uZWQgYmxvY2suICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8g
ZGV0ZWN0IGFsbCBvZiB0aGVzZSBtb3ZlbWVudCBjYXNlcywgd2UganVzdCBhbHdheXMgbGF5IG91
dCBwb3NpdGlvbmVkCi0gICAgICAgICAgICAvLyBvYmplY3RzIHRoYXQgYXJlIHBvc2l0aW9uZWQg
aW1wbGljaXRseSBsaWtlIHRoaXMuICBTdWNoIG9iamVjdHMgYXJlIHJhcmUsIGFuZCBzbyBpbiB0
eXBpY2FsIERIVE1MIG1lbnUgdXNhZ2UgKHdoZXJlIGV2ZXJ5dGhpbmcgaXMKLSAgICAgICAgICAg
IC8vIHBvc2l0aW9uZWQgZXhwbGljaXRseSkgdGhpcyBzaG91bGQgbm90IGluY3VyIGEgcGVyZm9y
bWFuY2UgcGVuYWx0eS4KLSAgICAgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuIHx8IChyLT5o
YXNTdGF0aWNZKCkgJiYgci0+cGFyZW50KCkgIT0gdGhpcyAmJiByLT5wYXJlbnQoKS0+aXNCbG9j
a0Zsb3coKSkpCi0gICAgICAgICAgICAgICAgci0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBm
YWxzZSk7CisgICAgaWYgKCFtX3Bvc2l0aW9uZWRPYmplY3RzKQorICAgICAgICByZXR1cm47CisK
KyAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKKyAgICBmb3Ig
KEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogciA9ICppdDsKKworICAgICAgICAvLyBXaGVu
IGEgbm9uLXBvc2l0aW9uZWQgYmxvY2sgZWxlbWVudCBtb3ZlcywgaXQgbWF5IGhhdmUgcG9zaXRp
b25lZCBjaGlsZHJlbiB0aGF0IGFyZSBpbXBsaWNpdGx5IHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8g
dGhlCisgICAgICAgIC8vIG5vbi1wb3NpdGlvbmVkIGJsb2NrLiAgUmF0aGVyIHRoYW4gdHJ5aW5n
IHRvIGRldGVjdCBhbGwgb2YgdGhlc2UgbW92ZW1lbnQgY2FzZXMsIHdlIGp1c3QgYWx3YXlzIGxh
eSBvdXQgcG9zaXRpb25lZAorICAgICAgICAvLyBvYmplY3RzIHRoYXQgYXJlIHBvc2l0aW9uZWQg
aW1wbGljaXRseSBsaWtlIHRoaXMuICBTdWNoIG9iamVjdHMgYXJlIHJhcmUsIGFuZCBzbyBpbiB0
eXBpY2FsIERIVE1MIG1lbnUgdXNhZ2UgKHdoZXJlIGV2ZXJ5dGhpbmcgaXMKKyAgICAgICAgLy8g
cG9zaXRpb25lZCBleHBsaWNpdGx5KSB0aGlzIHNob3VsZCBub3QgaW5jdXIgYSBwZXJmb3JtYW5j
ZSBwZW5hbHR5LgorICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCAoci0+aGFzU3RhdGlj
WSgpICYmIHItPnBhcmVudCgpICE9IHRoaXMgJiYgci0+cGFyZW50KCktPmlzQmxvY2tGbG93KCkp
KQorICAgICAgICAgICAgci0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgLy8gSWYgcmVsYXlvdXRDaGlsZHJlbiBpcyBzZXQgYW5kIHdlIGhh
dmUgcGVyY2VudGFnZSBwYWRkaW5nLCB3ZSBhbHNvIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2hp
bGQncyBwcmVmIHdpZHRocy4KKyAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgKHItPnN0
eWxlKCktPnBhZGRpbmdMZWZ0KCkuaXNQZXJjZW50KCkgfHwgci0+c3R5bGUoKS0+cGFkZGluZ1Jp
Z2h0KCkuaXNQZXJjZW50KCkpKQorICAgICAgICAgICAgci0+c2V0UHJlZldpZHRoc0RpcnR5KHRy
dWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHJlbGF5b3V0
Q2hpbGRyZW4gaXMgc2V0IGFuZCB3ZSBoYXZlIHBlcmNlbnRhZ2UgcGFkZGluZywgd2UgYWxzbyBu
ZWVkIHRvIGludmFsaWRhdGUgdGhlIGNoaWxkJ3MgcHJlZiB3aWR0aHMuCi0gICAgICAgICAgICBp
ZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoci0+c3R5bGUoKS0+cGFkZGluZ0xlZnQoKS5pc1BlcmNl
bnQoKSB8fCByLT5zdHlsZSgpLT5wYWRkaW5nUmlnaHQoKS5pc1BlcmNlbnQoKSkpCi0gICAgICAg
ICAgICAgICAgci0+c2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICByLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICB9Cisg
ICAgICAgIHItPmxheW91dElmTmVlZGVkKCk7CiAgICAgfQogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjptYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKQogewotICAgIGlmIChtX3Bvc2l0aW9u
ZWRPYmplY3RzKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcjsKLSAgICAgICAgSXRlcmF0b3Ig
ZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3Ig
aXQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIHIgPSAqaXQ7Ci0gICAgICAgICAgICByLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRy
dWUpOwotICAgICAgICB9CisgICAgaWYgKCFtX3Bvc2l0aW9uZWRPYmplY3RzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsK
KyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogciA9ICppdDsKKyAgICAgICAg
ci0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlKTsKICAgICB9CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiB7
CiAgICAgLy8gUmVwYWludCBhbnkgb3ZlcmhhbmdpbmcgZmxvYXRzIChpZiB3ZSBrbm93IHdlJ3Jl
IHRoZSBvbmUgdG8gcGFpbnQgdGhlbSkuCi0gICAgaWYgKGhhc092ZXJoYW5naW5nRmxvYXRzKCkp
IHsKLSAgICAgICAgLy8gV2UgdGhpbmsgdGhhdCB3ZSBtdXN0IGJlIGluIGEgYmFkIHN0YXRlIGlm
IG1fZmxvYXRpbmdPYmplY3RzIGlzIG5pbCBhdCB0aGlzIHBvaW50LCBzbyAKLSAgICAgICAgLy8g
d2UgYXNzZXJ0IG9uIERlYnVnIGJ1aWxkcyBhbmQgbmlsLWNoZWNrIFJlbGVhc2UgYnVpbGRzLgot
ICAgICAgICBBU1NFUlQobV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHI7Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdP
YmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CisgICAgaWYgKCFoYXNPdmVyaGFuZ2luZ0Zs
b2F0cygpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gRklYTUU6IEF2b2lkIGRpc2Fi
bGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2FibGUgaXQgZm9y
IGZsb2F0cyBvcmlnaW5hdGluZwotICAgICAgICAvLyBpbiB0aGlzIGJsb2NrLiBCZXR0ZXIgeWV0
IHdvdWxkIGJlIHRvIHB1c2ggZXh0cmEgc3RhdGUgZm9yIHRoZSBjb250YWluZXJzIG9mIG90aGVy
IGZsb2F0cy4KLSAgICAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKLSAgICAgICAg
Zm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKLSAgICAgICAgICAgIC8vIE9ubHkg
cmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93
biBsYXllciwgYW5kCi0gICAgICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFp
bnQgKG5vUGFpbnQgaXNuJ3Qgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUs
IHRoZSBsYXR0ZXIKLSAgICAgICAgICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3aXRoIGJl
aW5nIGEgZGVzY2VuZGFudCBvZiB1cy4KLSAgICAgICAgICAgIGlmIChyLT5lbmRZID4gbV9oZWln
aHQgJiYgKHBhaW50QWxsRGVzY2VuZGFudHMgJiYgci0+bm9kZS0+aXNEZXNjZW5kYW50T2YodGhp
cykgfHwgIXItPm5vUGFpbnQpICYmICFyLT5ub2RlLT5oYXNMYXllcigpKSB7ICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHItPm5vZGUtPnJlcGFpbnQoKTsKLSAgICAgICAgICAgICAg
ICByLT5ub2RlLT5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoKTsKLSAgICAgICAgICAgIH0KKyAg
ICAvLyBXZSB0aGluayB0aGF0IHdlIG11c3QgYmUgaW4gYSBiYWQgc3RhdGUgaWYgbV9mbG9hdGlu
Z09iamVjdHMgaXMgbmlsIGF0IHRoaXMgcG9pbnQsIHNvIAorICAgIC8vIHdlIGFzc2VydCBvbiBE
ZWJ1ZyBidWlsZHMgYW5kIG5pbC1jaGVjayBSZWxlYXNlIGJ1aWxkcy4KKyAgICBBU1NFUlQobV9m
bG9hdGluZ09iamVjdHMpOworICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogQXZvaWQgZGlzYWJsaW5nIExheW91dFN0YXRlLiBB
dCB0aGUgdmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJsZSBpdCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5n
CisgICAgLy8gaW4gdGhpcyBibG9jay4gQmV0dGVyIHlldCB3b3VsZCBiZSB0byBwdXNoIGV4dHJh
IHN0YXRlIGZvciB0aGUgY29udGFpbmVycyBvZiBvdGhlciBmbG9hdHMuCisgICAgdmlldygpLT5k
aXNhYmxlTGF5b3V0U3RhdGUoKTsKKworICAgIEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5lbmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSAqaXQ7
CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0RGV0YWlscyYgZiA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5kZXRhaWxzKHIpOworCisgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2JqZWN0IGlm
IGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5kCisgICAgICAg
IC8vIGlzIG91ciByZXNwb25zaWJpbGl0eSB0byBwYWludCAobm9QYWludCBpc24ndCBzZXQpLiBX
aGVuIHBhaW50QWxsRGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgorICAgICAgICAvLyBj
b25kaXRpb24gaXMgcmVwbGFjZWQgd2l0aCBiZWluZyBhIGRlc2NlbmRhbnQgb2YgdXMuCisgICAg
ICAgIGlmIChmLmVuZFkoKSA+IG1faGVpZ2h0ICYmIChwYWludEFsbERlc2NlbmRhbnRzICYmIHIt
PmlzRGVzY2VuZGFudE9mKHRoaXMpIHx8ICFmLm5vUGFpbnQoKSkgJiYgIXItPmhhc0xheWVyKCkp
IHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByLT5yZXBhaW50KCk7CisgICAgICAgICAg
ICByLT5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoKTsKICAgICAgICAgfQotICAgICAgICB2aWV3
KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAgfQorCisgICAgdmlldygpLT5lbmFibGVMYXlv
dXRTdGF0ZSgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0xNjMzLDI1ICsxNzQ3LDI3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3Rz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMp
OwotICAgIGZvciAoOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICBJdGVyYXRvciBl
bmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChJdGVyYXRvciBpdCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByID0gKml0OworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdERldGFpbHMm
IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGV0YWlscyhyKTsKKwogICAgICAgICAvLyBPbmx5IHBh
aW50IHRoZSBvYmplY3QgaWYgb3VyIG5vUGFpbnQgZmxhZyBpc24ndCBzZXQuCi0gICAgICAgIGlm
ICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+aGFzTGF5ZXIoKSkgeworICAgICAgICBpZiAoIWYu
bm9QYWludCgpICYmICFyLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3Vy
cmVudFBhaW50SW5mbyhwYWludEluZm8pOwogICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5w
aGFzZSA9IHBhaW50U2VsZWN0aW9uID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VC
bG9ja0JhY2tncm91bmQ7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFRYID0gdHggKyByLT5sZWZ0
IC0gci0+bm9kZS0+eFBvcygpICsgci0+bm9kZS0+bWFyZ2luTGVmdCgpOwotICAgICAgICAgICAg
aW50IGN1cnJlbnRUWSA9IHR5ICsgci0+c3RhcnRZIC0gci0+bm9kZS0+eVBvcygpICsgci0+bm9k
ZS0+bWFyZ2luVG9wKCk7Ci0gICAgICAgICAgICByLT5ub2RlLT5wYWludChjdXJyZW50UGFpbnRJ
bmZvLCBjdXJyZW50VFgsIGN1cnJlbnRUWSk7CisgICAgICAgICAgICBpbnQgY3VycmVudFRYID0g
dHggKyBmLmxlZnQoKSAtIHItPnhQb3MoKSArIHItPm1hcmdpbkxlZnQoKTsKKyAgICAgICAgICAg
IGludCBjdXJyZW50VFkgPSB0eSArIGYuc3RhcnRZKCkgLSByLT55UG9zKCkgKyByLT5tYXJnaW5U
b3AoKTsKKyAgICAgICAgICAgIHItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwg
Y3VycmVudFRZKTsKICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3Rpb24pIHsKICAgICAgICAg
ICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNr
Z3JvdW5kczsKLSAgICAgICAgICAgICAgICByLT5ub2RlLT5wYWludChjdXJyZW50UGFpbnRJbmZv
LCBjdXJyZW50VFgsIGN1cnJlbnRUWSk7CisgICAgICAgICAgICAgICAgci0+cGFpbnQoY3VycmVu
dFBhaW50SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkpOwogICAgICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7Ci0gICAgICAgICAgICAgICAgci0+
bm9kZS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkpOworICAg
ICAgICAgICAgICAgIHItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwgY3VycmVu
dFRZKTsKICAgICAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFz
ZUZvcmVncm91bmQ7Ci0gICAgICAgICAgICAgICAgci0+bm9kZS0+cGFpbnQoY3VycmVudFBhaW50
SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkpOworICAgICAgICAgICAgICAgIHItPnBhaW50KGN1
cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwgY3VycmVudFRZKTsKICAgICAgICAgICAgICAgICBj
dXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZU91dGxpbmU7Ci0gICAgICAgICAgICAg
ICAgci0+bm9kZS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkp
OworICAgICAgICAgICAgICAgIHItPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwg
Y3VycmVudFRZKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIwNjQsMTYg
KzIxODAsMTUgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodFNlbGVjdGlvbk9mZnNldChSZQogICAg
IHJldHVybiByaWdodDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0UG9zaXRpb25lZE9i
amVjdChSZW5kZXJPYmplY3QgKm8pCit2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRQb3NpdGlvbmVk
T2JqZWN0KFJlbmRlck9iamVjdCogbykKIHsKICAgICAvLyBDcmVhdGUgdGhlIGxpc3Qgb2Ygc3Bl
Y2lhbCBvYmplY3RzIGlmIHdlIGRvbid0IGFsZWFkeSBoYXZlIG9uZQogICAgIGlmICghbV9wb3Np
dGlvbmVkT2JqZWN0cykKLSAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cyA9IG5ldyBMaXN0SGFz
aFNldDxSZW5kZXJPYmplY3QqPjsKLQorICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLnNldChu
ZXcgTGlzdEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4pOwogICAgIG1fcG9zaXRpb25lZE9iamVjdHMt
PmFkZChvKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdChS
ZW5kZXJPYmplY3QgKm8pCit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQb3NpdGlvbmVkT2JqZWN0
KFJlbmRlck9iamVjdCogbykKIHsKICAgICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykKICAgICAg
ICAgbV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKG8pOwpAQCAtMjEwOCwxMDkgKzIyMjMsOTIg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdAogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWFkT2JqZWN0cy5zaXpl
KCk7IGkrKykKLSAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3Rz
LmF0KGkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVhZE9iamVjdHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHMtPnJlbW92ZShkZWFkT2JqZWN0c1tp
XSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlck9i
amVjdCAqbykKK3ZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlck9i
amVjdCogbykKIHsKKyAgICBBU1NFUlQoby0+aXNGbG9hdGluZygpKTsKKyAgICBpZiAoIW8tPmlz
RmxvYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9m
IHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKLSAgICBpZiAoIW1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3IERlcHJl
Y2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PjsKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgfQorICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLnNldChuZXcgRmxvYXRpbmdPYmplY3RNYXBzKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IHRoZSBvYmplY3QgYWdhaW4gaWYg
aXQncyBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0
b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmOwotICAgICAgICB3aGlsZSAoIChmID0gaXQuY3VycmVudCgpKSApIHsKLSAg
ICAgICAgICAgIGlmIChmLT5ub2RlID09IG8pIHJldHVybjsKLSAgICAgICAgICAgICsraXQ7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5jb250YWlucyhvKSkKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2Jq
ZWN0IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CisgICAgby0+bGF5b3V0SWZOZWVkZWQo
KTsKIAotICAgIEZsb2F0aW5nT2JqZWN0ICpuZXdPYmo7Ci0gICAgaWYgKG8tPmlzRmxvYXRpbmco
KSkgewotICAgICAgICAvLyBmbG9hdGluZyBvYmplY3QKLSAgICAgICAgby0+bGF5b3V0SWZOZWVk
ZWQoKTsKKyAgICBGbG9hdGluZ09iamVjdFR5cGUgdHlwZSA9IChvLT5zdHlsZSgpLT5mbG9hdGlu
ZygpID09IEZMRUZUKSA/IEZsb2F0TGVmdCA6IEZsb2F0UmlnaHQ7CiAKLSAgICAgICAgaWYoby0+
c3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBGTEVGVCkKLSAgICAgICAgICAgIG5ld09iaiA9IG5ldyBG
bG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbmV3T2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0OjpG
bG9hdFJpZ2h0KTsKKyAgICAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFp
bnQgaXRzZWxmLiBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCisgICAgYm9vbCBub1BhaW50
ID0gby0+aGFzTGF5ZXIoKTsKIAotICAgICAgICBuZXdPYmotPnN0YXJ0WSA9IC0xOwotICAgICAg
ICBuZXdPYmotPmVuZFkgPSAtMTsKLSAgICAgICAgbmV3T2JqLT53aWR0aCA9IG8tPndpZHRoKCkg
KyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5tYXJnaW5SaWdodCgpOwotICAgICAgICBuZXdPYmotPm5v
UGFpbnQgPSBvLT5oYXNMYXllcigpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdp
bGwgcGFpbnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxzZSB3aWxsLgotICAgIH0KLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBhcyBpbnNlcnRG
bG9hdGluZ09iamVjdCgpIHNob3VsZCBvbmx5IGV2ZXIgYmUgY2FsbGVkIHdpdGggZmxvYXRpbmcK
LSAgICAgICAgLy8gb2JqZWN0cy4KLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgbmV3
T2JqID0gMDsgLy8ga2VlcCBnY2MncyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmdzIGhh
cHB5Ci0gICAgfQotCi0gICAgbmV3T2JqLT5ub2RlID0gbzsKLQotICAgIG1fZmxvYXRpbmdPYmpl
Y3RzLT5hcHBlbmQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG8sIHR5cGUs
IG5vUGFpbnQsIG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5tYXJnaW5SaWdodCgp
KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyT2Jq
ZWN0ICpvKQordm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyT2Jq
ZWN0KiBvKQogewotICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMp
OwotICAgICAgICB3aGlsZSAoaXQuY3VycmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQuY3Vy
cmVudCgpLT5ub2RlID09IG8pCi0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJl
bW92ZVJlZihpdC5jdXJyZW50KCkpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgfQotICAg
IH0KKyAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKG8pOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwb3Np
dGlvbk5ld0Zsb2F0cygpCiB7CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKTsKKworICAgIEl0ZXJhdG9yIHN0YXJ0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2lu
KCk7CisgICAgSXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGlm
IChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIEl0ZXJhdG9yIGl0ID0gbV9m
bG9hdGluZ09iamVjdHMtPmxhc3QoKTsKIAogICAgIC8vIElmIGFsbCBmbG9hdHMgaGF2ZSBhbHJl
YWR5IGJlZW4gcG9zaXRpb25lZCwgdGhlbiB3ZSBoYXZlIG5vIHdvcmsgdG8gZG8uCi0gICAgaWYg
KCFmIHx8IGYtPnN0YXJ0WSAhPSAtMSkKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPmRldGFp
bHMoKml0KS5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTW92ZSBi
YWNrd2FyZHMgdGhyb3VnaCBvdXIgZmxvYXRpbmcgb2JqZWN0IGxpc3QgdW50aWwgd2UgZmluZCBh
IGZsb2F0IHRoYXQgaGFzCi0gICAgLy8gYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQuICBUaGVuIHdl
J2xsIGJlIGFibGUgdG8gbW92ZSBmb3J3YXJkLCBwb3NpdGlvbmluZyBhbGwgb2YKKyAgICAvLyBh
bHJlYWR5IGJlZW4gcG9zaXRpb25lZC4gVGhlbiB3ZSdsbCBiZSBhYmxlIHRvIG1vdmUgZm9yd2Fy
ZCwgcG9zaXRpb25pbmcgYWxsIG9mCiAgICAgLy8gdGhlIG5ldyBmbG9hdHMgdGhhdCBuZWVkIGl0
LgotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Z2V0
UHJldigpOwotICAgIHdoaWxlIChsYXN0RmxvYXQgJiYgbGFzdEZsb2F0LT5zdGFydFkgPT0gLTEp
IHsKLSAgICAgICAgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCk7Ci0gICAgICAgIGxhc3RG
bG9hdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5nZXRQcmV2KCk7CisgICAgaW50IGxhc3RQb3NpdGlv
bmVkRmxvYXRZID0gMDsKKyAgICBJdGVyYXRvciBmaXJzdFVucG9zaXRpb25lZEZsb2F0ID0gaXQ7
CisgICAgd2hpbGUgKGl0ICE9IHN0YXJ0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogbyA9ICot
LWl0OworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdERldGFpbHMmIGRldGFpbHMgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+ZGV0YWlscyhvKTsKKyAgICAgICAgaWYgKGRldGFpbHMuaXNQb3NpdGlv
bmVkKCkpIHsKKyAgICAgICAgICAgIGxhc3RQb3NpdGlvbmVkRmxvYXRZID0gZGV0YWlscy5zdGFy
dFkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZpcnN0VW5wb3Np
dGlvbmVkRmxvYXQgPSBpdDsKICAgICB9CiAKLSAgICBpbnQgeSA9IG1faGVpZ2h0OwotICAgIAot
ICAgIC8vIFRoZSBmbG9hdCBjYW5ub3Qgc3RhcnQgYWJvdmUgdGhlIHkgcG9zaXRpb24gb2YgdGhl
IGxhc3QgcG9zaXRpb25lZCBmbG9hdC4KLSAgICBpZiAobGFzdEZsb2F0KQotICAgICAgICB5ID0g
bWF4KGxhc3RGbG9hdC0+c3RhcnRZLCB5KTsKKyAgICAvLyBUaGUgdW5wb3NpdGlvbmVkIGZsb2F0
cyBjYW5ub3Qgc3RhcnQgYWJvdmUgdGhlIHkgcG9zaXRpb24gb2YgdGhlIGxhc3QgcG9zaXRpb25l
ZCBmbG9hdC4KKyAgICBpbnQgeSA9IG1heChtX2hlaWdodCwgbGFzdFBvc2l0aW9uZWRGbG9hdFkp
OwogCiAgICAgLy8gTm93IHdhbGsgdGhyb3VnaCB0aGUgc2V0IG9mIHVucG9zaXRpb25lZCBmbG9h
dHMgYW5kIHBsYWNlIHRoZW0uCi0gICAgd2hpbGUgKGYpIHsKKyAgICBmb3IgKGl0ID0gZmlyc3RV
bnBvc2l0aW9uZWRGbG9hdDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVj
dCogbyA9ICppdDsKKwogICAgICAgICAvLyBUaGUgY29udGFpbmluZyBibG9jayBpcyByZXNwb25z
aWJsZSBmb3IgcG9zaXRpb25pbmcgZmxvYXRzLCBzbyBpZiB3ZSBoYXZlIGZsb2F0cyBpbiBvdXIK
ICAgICAgICAgLy8gbGlzdCB0aGF0IGNvbWUgZnJvbSBzb21ld2hlcmUgZWxzZSwgZG8gbm90IGF0
dGVtcHQgdG8gcG9zaXRpb24gdGhlbS4KLSAgICAgICAgaWYgKGYtPm5vZGUtPmNvbnRhaW5pbmdC
bG9jaygpICE9IHRoaXMpIHsKLSAgICAgICAgICAgIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4
dCgpOworICAgICAgICBpZiAoby0+Y29udGFpbmluZ0Jsb2NrKCkgIT0gdGhpcykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gZi0+
bm9kZTsKLSAgICAgICAgaW50IF9oZWlnaHQgPSBvLT5oZWlnaHQoKSArIG8tPm1hcmdpblRvcCgp
ICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0RGV0YWlscyYgZiA9
IG1fZmxvYXRpbmdPYmplY3RzLT5kZXRhaWxzKG8pOworCisgICAgICAgIGludCBoZWlnaHQgPSBv
LT5oZWlnaHQoKSArIG8tPm1hcmdpblRvcCgpICsgby0+bWFyZ2luQm90dG9tKCk7CiAKICAgICAg
ICAgaW50IHJvID0gcmlnaHRPZmZzZXQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZz
ZXQuCiAgICAgICAgIGludCBsbyA9IGxlZnRPZmZzZXQoKTsgLy8gQ29uc3RhdCBwYXJ0IG9mIGxl
ZnQgb2Zmc2V0LgotICAgICAgICBpbnQgZndpZHRoID0gZi0+d2lkdGg7IC8vIFRoZSB3aWR0aCB3
ZSBsb29rIGZvci4KKyAgICAgICAgaW50IGZ3aWR0aCA9IGYud2lkdGgoKTsgLy8gVGhlIHdpZHRo
IHdlIGxvb2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAg
IGZ3aWR0aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwg
YmUgYXZhaWxhYmxlLgogICAgICAgICAKQEAgLTIyMzAsNyArMjMyOCw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgICAgICBmeCA9IGxlZnRSZWxP
ZmZzZXQoeSxsbywgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdMZWZ0KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGZ4ID0gbWF4KDAsIGZ4KTsKLSAgICAgICAgICAgIGYtPmxlZnQgPSBmeDsK
KyAgICAgICAgICAgIGYuc2V0TGVmdChmeCk7CiAgICAgICAgICAgICBvLT5zZXRQb3MoZnggKyBv
LT5tYXJnaW5MZWZ0KCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpbnQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7CkBAIC0yMjQwLDE5ICsyMzM4
LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAg
ICAgICB5ICs9IG1pbihoZWlnaHRSZW1haW5pbmdMZWZ0LCBoZWlnaHRSZW1haW5pbmdSaWdodCk7
CiAgICAgICAgICAgICAgICAgZnggPSByaWdodFJlbE9mZnNldCh5LCBybywgZmFsc2UsICZoZWln
aHRSZW1haW5pbmdSaWdodCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmeCA9IG1heChm
LT53aWR0aCwgZngpOwotICAgICAgICAgICAgZi0+bGVmdCA9IGZ4IC0gZi0+d2lkdGg7CisgICAg
ICAgICAgICBmeCA9IG1heChmLndpZHRoKCksIGZ4KTsKKyAgICAgICAgICAgIGYuc2V0TGVmdChm
eCAtIGYud2lkdGgoKSk7CiAgICAgICAgICAgICBvLT5zZXRQb3MoZnggLSBvLT5tYXJnaW5SaWdo
dCgpIC0gby0+d2lkdGgoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGYtPnN0YXJ0WSA9IHk7Ci0gICAgICAgIGYtPmVuZFkgPSBmLT5zdGFydFkgKyBfaGVpZ2h0
OworICAgICAgICBmLnNldFkoeSwgeSArIGhlaWdodCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGNo
aWxkIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQgaXQuCiAgICAgICAgIGlmIChvLT5jaGVja0Zv
clJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAgICAgICAgICAgIG8tPnJlcGFpbnREdXJpbmdMYXlv
dXRJZk1vdmVkKG9sZFJlY3QpOwotCi0gICAgICAgIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4
dCgpOwogICAgIH0KIH0KIApAQCAtMjI3OSwxMjggKzIzNzQsMTIwIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6Om5ld0xpbmUoKQogICAgIG1fY2xlYXJTdGF0dXMgPSBDTk9ORTsKIH0KIAotaW50Ci1SZW5k
ZXJCbG9jazo6bGVmdE9mZnNldCgpIGNvbnN0CitpbnQgUmVuZGVyQmxvY2s6OmxlZnRPZmZzZXQo
KSBjb25zdAogewotICAgIHJldHVybiBib3JkZXJMZWZ0KCkrcGFkZGluZ0xlZnQoKTsKKyAgICBy
ZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKIH0KIAotaW50Ci1SZW5kZXJCbG9j
azo6bGVmdFJlbE9mZnNldChpbnQgeSwgaW50IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dElu
ZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaGVpZ2h0UmVtYWluaW5nICkg
Y29uc3QKK2ludCBSZW5kZXJCbG9jazo6bGVmdFJlbE9mZnNldChpbnQgeSwgaW50IGZpeGVkT2Zm
c2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgaW50KiBoZWlnaHRSZW1haW5pbmcgKSBjb25zdAog
ewogICAgIGludCBsZWZ0ID0gZml4ZWRPZmZzZXQ7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3Rz
KSB7Ci0gICAgICAgIGlmICggaGVpZ2h0UmVtYWluaW5nICkgKmhlaWdodFJlbWFpbmluZyA9IDE7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0
ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICBm
b3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8va2REZWJ1ZyggNjA0MCApIDw8KHZvaWQgKil0aGlzIDw8ICIgbGVmdDogc3ksIGV5LCB4LCB3
ICIgPDwgci0+c3RhcnRZIDw8ICIsIiA8PCByLT5lbmRZIDw8ICIsIiA8PCByLT5sZWZ0IDw8ICIs
IiA8PCByLT53aWR0aCA8PCAiICIgPDwgZW5kbDsKLSAgICAgICAgICAgIGlmIChyLT5zdGFydFkg
PD0geSAmJiByLT5lbmRZID4geSAmJgotICAgICAgICAgICAgICAgIHItPnR5cGUoKSA9PSBGbG9h
dGluZ09iamVjdDo6RmxvYXRMZWZ0ICYmCi0gICAgICAgICAgICAgICAgci0+bGVmdCArIHItPndp
ZHRoID4gbGVmdCkgewotICAgICAgICAgICAgICAgIGxlZnQgPSByLT5sZWZ0ICsgci0+d2lkdGg7
Ci0gICAgICAgICAgICAgICAgaWYgKCBoZWlnaHRSZW1haW5pbmcgKSAqaGVpZ2h0UmVtYWluaW5n
ID0gci0+ZW5kWSAtIHk7CisgICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCisgICAgICAgICAg
ICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKKyAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9mbG9hdGlu
Z09iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09i
amVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3REZXRhaWxzJiByID0gbV9mbG9hdGluZ09iamVjdHMtPmRldGFpbHMoKml0KTsK
KyAgICAgICAgICAgIGlmIChyLnN0YXJ0WSgpIDw9IHkgJiYgci5lbmRZKCkgPiB5ICYmIHIudHlw
ZSgpID09IEZsb2F0TGVmdCAmJiByLmxlZnQoKSArIHIud2lkdGgoKSA+IGxlZnQpIHsKKyAgICAg
ICAgICAgICAgICBsZWZ0ID0gci5sZWZ0KCkgKyByLndpZHRoKCk7CisgICAgICAgICAgICAgICAg
aWYgKGhlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAgICAgKmhlaWdodFJlbWFpbmlu
ZyA9IHIuZW5kWSgpIC0geTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAg
IGlmIChhcHBseVRleHRJbmRlbnQgJiYgbV9maXJzdExpbmUgJiYgc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSKSB7Ci0gICAgICAgIGludCBjdz0wOworICAgICAgICBpbnQgY3cgPSAwOwogICAg
ICAgICBpZiAoc3R5bGUoKS0+dGV4dEluZGVudCgpLmlzUGVyY2VudCgpKQogICAgICAgICAgICAg
Y3cgPSBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlV2lkdGgoKTsKICAgICAgICAgbGVmdCAr
PSBzdHlsZSgpLT50ZXh0SW5kZW50KCkuY2FsY01pblZhbHVlKGN3KTsKICAgICB9CiAKLSAgICAv
L2tkRGVidWcoIDYwNDAgKSA8PCAibGVmdE9mZnNldCgiIDw8IHkgPDwgIikgPSAiIDw8IGxlZnQg
PDwgZW5kbDsKICAgICByZXR1cm4gbGVmdDsKIH0KIAotaW50Ci1SZW5kZXJCbG9jazo6cmlnaHRP
ZmZzZXQoKSBjb25zdAoraW50IFJlbmRlckJsb2NrOjpyaWdodE9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBhdmFpbGFibGVXaWR0aCgp
OwogfQogCi1pbnQKLVJlbmRlckJsb2NrOjpyaWdodFJlbE9mZnNldChpbnQgeSwgaW50IGZpeGVk
T2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgKmhlaWdodFJlbWFpbmluZyApIGNvbnN0CitpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0UmVs
T2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LCBpbnQq
IGhlaWdodFJlbWFpbmluZyApIGNvbnN0CiB7CiAgICAgaW50IHJpZ2h0ID0gZml4ZWRPZmZzZXQ7
CiAKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgaWYgKGhlaWdodFJlbWFp
bmluZykgKmhlaWdodFJlbWFpbmluZyA9IDE7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwot
ICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9m
bG9hdGluZ09iamVjdHMpOwotICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytp
dCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJyaWdodDog
c3ksIGV5LCB4LCB3ICIgPDwgci0+c3RhcnRZIDw8ICIsIiA8PCByLT5lbmRZIDw8ICIsIiA8PCBy
LT5sZWZ0IDw8ICIsIiA8PCByLT53aWR0aCA8PCAiICIgPDwgZW5kbDsKLSAgICAgICAgICAgIGlm
IChyLT5zdGFydFkgPD0geSAmJiByLT5lbmRZID4geSAmJgotICAgICAgICAgICAgICAgIHItPnR5
cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCAmJgotICAgICAgICAgICAgICAgIHIt
PmxlZnQgPCByaWdodCkgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0gci0+bGVmdDsKLSAgICAg
ICAgICAgICAgICBpZiAoIGhlaWdodFJlbWFpbmluZyApICpoZWlnaHRSZW1haW5pbmcgPSByLT5l
bmRZIC0geTsKKyAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICpoZWln
aHRSZW1haW5pbmcgPSAxOworICAgICAgICBJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+ZW5kKCk7CisgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdERldGFpbHMmIHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGV0YWlscygqaXQpOworICAgICAg
ICAgICAgaWYgKHIuc3RhcnRZKCkgPD0geSAmJiByLmVuZFkoKSA+IHkgJiYgci50eXBlKCkgPT0g
RmxvYXRSaWdodCAmJiByLmxlZnQoKSA8IHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmlnaHQg
PSByLmxlZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQorICAgICAg
ICAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gci5lbmRZKCkgLSB5OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYg
bV9maXJzdExpbmUgJiYgc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7Ci0gICAgICAgIGlu
dCBjdz0wOworICAgICAgICBpbnQgY3cgPSAwOwogICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dElu
ZGVudCgpLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgY3cgPSBjb250YWluaW5nQmxvY2soKS0+
YXZhaWxhYmxlV2lkdGgoKTsKICAgICAgICAgcmlnaHQgLT0gc3R5bGUoKS0+dGV4dEluZGVudCgp
LmNhbGNNaW5WYWx1ZShjdyk7CiAgICAgfQogICAgIAotICAgIC8va2REZWJ1ZyggNjA0MCApIDw8
ICJyaWdodE9mZnNldCgiIDw8IHkgPDwgIikgPSAiIDw8IHJpZ2h0IDw8IGVuZGw7CiAgICAgcmV0
dXJuIHJpZ2h0OwogfQogCi1pbnQKLVJlbmRlckJsb2NrOjpsaW5lV2lkdGgoaW50IHkpIGNvbnN0
CitpbnQgUmVuZGVyQmxvY2s6OmxpbmVXaWR0aChpbnQgeSkgY29uc3QKIHsKLSAgICAvL2tkRGVi
dWcoIDYwNDAgKSA8PCAibGluZVdpZHRoKCIgPDwgeSA8PCAiKT0iIDw8IHJpZ2h0T2Zmc2V0KHkp
IC0gbGVmdE9mZnNldCh5KSA8PCBlbmRsOwotICAgIGludCByZXN1bHQgPSByaWdodE9mZnNldCh5
KSAtIGxlZnRPZmZzZXQoeSk7Ci0gICAgcmV0dXJuIChyZXN1bHQgPCAwKSA/IDAgOiByZXN1bHQ7
CisgICAgcmV0dXJuIG1heCgwLCByaWdodE9mZnNldCh5KSAtIGxlZnRPZmZzZXQoeSkpOwogfQog
Ci1pbnQKLVJlbmRlckJsb2NrOjpuZWFyZXN0RmxvYXRCb3R0b20oaW50IGhlaWdodCkgY29uc3QK
K2ludCBSZW5kZXJCbG9jazo6bmVhcmVzdEZsb2F0Qm90dG9tKGludCBoZWlnaHQpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykgcmV0dXJuIDA7CisgICAgaWYgKCFtX2Zsb2F0
aW5nT2JqZWN0cykKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBpbnQgYm90dG9tID0gMDsKLSAg
ICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0
aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoIDsgKHIgPSBpdC5j
dXJyZW50KCkpOyArK2l0ICkKLSAgICAgICAgaWYgKHItPmVuZFk+aGVpZ2h0ICYmIChyLT5lbmRZ
PGJvdHRvbSB8fCBib3R0b209PTApKQotICAgICAgICAgICAgYm90dG9tPXItPmVuZFk7CisgICAg
SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAoSXRlcmF0
b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0RGV0YWlscyYgciA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5kZXRhaWxzKCppdCk7CisgICAgICAgIGlmIChyLmVuZFkoKSA+IGhlaWdodCAmJiAoci5lbmRZ
KCkgPCBib3R0b20gfHwgYm90dG9tID09IDApKQorICAgICAgICAgICAgYm90dG9tID0gci5lbmRZ
KCk7CisgICAgfQogICAgIHJldHVybiBtYXgoYm90dG9tLCBoZWlnaHQpOwogfQogCiBpbnQKIFJl
bmRlckJsb2NrOjpmbG9hdEJvdHRvbSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykgcmV0dXJuIDA7Ci0gICAgaW50IGJvdHRvbT0wOwotICAgIEZsb2F0aW5nT2JqZWN0KiBy
OwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zs
b2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQgKQot
ICAgICAgICBpZiAoci0+ZW5kWT5ib3R0b20pCi0gICAgICAgICAgICBib3R0b209ci0+ZW5kWTsK
KyAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlu
dCBib3R0b20gPSAwOworICAgIEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQo
KTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdERldGFpbHMmIHIg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGV0YWlscygqaXQpOworICAgICAgICBpZiAoci5lbmRZKCkg
PiBib3R0b20pCisgICAgICAgICAgICBib3R0b20gPSByLmVuZFkoKTsKKyAgICB9CiAgICAgcmV0
dXJuIGJvdHRvbTsKIH0KIAogSW50UmVjdCBSZW5kZXJCbG9jazo6ZmxvYXRSZWN0KCkgY29uc3QK
IHsKLSAgICBJbnRSZWN0IHJlc3VsdDsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzIHx8IGhh
c092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIEZsb2F0aW5nT2Jq
ZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0
KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytp
dCkgewotICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXItPm5vZGUtPmhhc0xheWVyKCkpIHsK
LSAgICAgICAgICAgIEludFJlY3QgY2hpbGRSZWN0ID0gci0+bm9kZS0+b3ZlcmZsb3dSZWN0KGZh
bHNlKTsKLSAgICAgICAgICAgIGNoaWxkUmVjdC5tb3ZlKHItPmxlZnQgKyByLT5ub2RlLT5tYXJn
aW5MZWZ0KCksIHItPnN0YXJ0WSArIHItPm5vZGUtPm1hcmdpblRvcCgpKTsKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKworICAgIEludFJlY3QgcmVzdWx0OworICAgIEl0ZXJhdG9yIGVuZCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mbG9h
dGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJP
YmplY3QqIG8gPSAqaXQ7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0RGV0YWlscyYgciA9
IG1fZmxvYXRpbmdPYmplY3RzLT5kZXRhaWxzKG8pOworICAgICAgICBpZiAoIXIubm9QYWludCgp
ICYmICFvLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdCA9IG8t
Pm92ZXJmbG93UmVjdChmYWxzZSk7CisgICAgICAgICAgICBjaGlsZFJlY3QubW92ZShyLmxlZnQo
KSArIG8tPm1hcmdpbkxlZnQoKSwgci5zdGFydFkoKSArIG8tPm1hcmdpblRvcCgpKTsKICAgICAg
ICAgICAgIHJlc3VsdC51bml0ZShjaGlsZFJlY3QpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQy
OCwxMCArMjUxNSw4IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdvcmsgZm9yIG92ZXJmbG93IHNlY3Rp
b25zIHRvby4KICAgICAgICAgICAgICAgICAvLyBJZiBhIHBvc2l0aW9uZWQgb2JqZWN0IGxpZXMg
Y29tcGxldGVseSB0byB0aGUgbGVmdCBvZiB0aGUgcm9vdCBpdCB3aWxsIGJlIHVucmVhY2hhYmxl
IHZpYSBzY3JvbGxpbmcuCiAgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlIHdlIHNob3VsZCBu
b3QgYWxsb3cgaXQgdG8gY29udHJpYnV0ZSB0byB0aGUgbG93ZXN0IHBvc2l0aW9uLgotICAgICAg
ICAgICAgICAgIGlmICghaXNSZW5kZXJWaWV3KCkgfHwgci0+eFBvcygpICsgci0+d2lkdGgoKSA+
IDAgfHwgci0+eFBvcygpICsgci0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpID4gMCkgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT55UG9zKCkgKyByLT5sb3dlc3RQb3NpdGlvbihm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGxwKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSB8fCBy
LT54UG9zKCkgKyByLT53aWR0aCgpID4gMCB8fCByLT54UG9zKCkgKyByLT5yaWdodG1vc3RQb3Np
dGlvbihmYWxzZSkgPiAwKQorICAgICAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9t
LCByLT55UG9zKCkgKyByLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMjQ0NCwyMSArMjUyOSwxNyBAQCBpbnQgUmVuZGVyQmxvY2s6
Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAgICAgfQogCiAgICAgaWYgKG1fZmxvYXRpbmdPYmpl
Y3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAg
ICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAgICAgICAgICAgIGlm
ICghci0+bm9QYWludCB8fCByLT5ub2RlLT5oYXNMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAg
aW50IGxwID0gci0+c3RhcnRZICsgci0+bm9kZS0+bWFyZ2luVG9wKCkgKyByLT5ub2RlLT5sb3dl
c3RQb3NpdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwg
bHApOwotICAgICAgICAgICAgfQorICAgICAgICBJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+ZW5kKCk7CisgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IG8gPSAqaXQ7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdERldGFpbHMmIHIgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+ZGV0YWlscyhvKTsKKyAgICAgICAgICAgIGlmICghci5ub1BhaW50
KCkgfHwgby0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9t
LCByLnN0YXJ0WSgpICsgby0+bWFyZ2luVG9wKCkgKyBvLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkp
OwogICAgICAgICB9CiAgICAgfQogCi0KLSAgICBpZiAoIWluY2x1ZGVTZWxmICYmIGxhc3RMaW5l
Qm94KCkpIHsKLSAgICAgICAgaW50IGxwID0gbGFzdExpbmVCb3goKS0+eVBvcygpICsgbGFzdExp
bmVCb3goKS0+aGVpZ2h0KCk7Ci0gICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGxwKTsKLSAg
ICB9CisgICAgaWYgKCFpbmNsdWRlU2VsZiAmJiBsYXN0TGluZUJveCgpKQorICAgICAgICBib3R0
b20gPSBtYXgoYm90dG9tLCBsYXN0TGluZUJveCgpLT55UG9zKCkgKyBsYXN0TGluZUJveCgpLT5o
ZWlnaHQoKSk7CiAgICAgCiAgICAgcmV0dXJuIGJvdHRvbTsKIH0KQEAgLTI0NzUsNyArMjU1Niw3
IEBAIGludCBSZW5kZXJCbG9jazo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAKICAgICBpZiAobV9w
b3NpdGlvbmVkT2JqZWN0cykgewogICAgICAgICBSZW5kZXJPYmplY3QqIHI7CiAgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwotICAgICAgICBmb3IgKEl0
ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKSA7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICByID0gKml0OwogICAgICAgICAg
ICAgLy8gRml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIGRvIG5vdCBzY3JvbGwgYW5kIHRodXMgc2hv
dWxkIG5vdCBjb25zdGl0dXRlCiAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSByaWdodG1vc3Qg
cG9zaXRpb24uCkBAIC0yNDgzLDEwICsyNTY0LDggQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1v
c3RQb3NpdGlvbihib29sIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd29yayBm
b3Igb3ZlcmZsb3cgc2VjdGlvbnMgdG9vLgogICAgICAgICAgICAgICAgIC8vIElmIGEgcG9zaXRp
b25lZCBvYmplY3QgbGllcyBjb21wbGV0ZWx5IGFib3ZlIHRoZSByb290IGl0IHdpbGwgYmUgdW5y
ZWFjaGFibGUgdmlhIHNjcm9sbGluZy4KICAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUgd2Ug
c2hvdWxkIG5vdCBhbGxvdyBpdCB0byBjb250cmlidXRlIHRvIHRoZSByaWdodG1vc3QgcG9zaXRp
b24uCi0gICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSB8fCByLT55UG9zKCkgKyBy
LT5oZWlnaHQoKSA+IDAgfHwgci0+eVBvcygpICsgci0+bG93ZXN0UG9zaXRpb24oZmFsc2UpID4g
MCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgcnAgPSByLT54UG9zKCkgKyByLT5yaWdodG1v
c3RQb3NpdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0
LCBycCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJW
aWV3KCkgfHwgci0+eVBvcygpICsgci0+aGVpZ2h0KCkgPiAwIHx8IHItPnlQb3MoKSArIHItPmxv
d2VzdFBvc2l0aW9uKGZhbHNlKSA+IDApCisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4
KHJpZ2h0LCByLT54UG9zKCkgKyByLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjQ5OSwxMyArMjU3OCwxMiBAQCBpbnQgUmVu
ZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgfQogCiAgICAgaWYgKG1fZmxv
YXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAgICBEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVj
dHMpOwotICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAgICAg
ICAgICAgIGlmICghci0+bm9QYWludCB8fCByLT5ub2RlLT5oYXNMYXllcigpKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IHJwID0gci0+bGVmdCArIHItPm5vZGUtPm1hcmdpbkxlZnQoKSArIHItPm5v
ZGUtPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKTsKLSAgICAgICAgICAgICAgICByaWdodCA9IG1h
eChyaWdodCwgcnApOwotICAgICAgICAgICAgfQorICAgICAgICBJdGVyYXRvciBlbmQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIG8gPSAqaXQ7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdERldGFp
bHMmIHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGV0YWlscyhvKTsKKyAgICAgICAgICAgIGlmICgh
ci5ub1BhaW50KCkgfHwgby0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICByaWdodCA9IG1h
eChyaWdodCwgci5sZWZ0KCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5yaWdodG1vc3RQb3NpdGlv
bihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTU5LDEzICsyNjM3LDEyIEBAIGlu
dCBSZW5kZXJCbG9jazo6bGVmdG1vc3RQb3NpdGlvbihib29sIGkKICAgICB9CiAKICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgICAg
IERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5n
T2JqZWN0cyk7Ci0gICAgICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0ICkgewot
ICAgICAgICAgICAgaWYgKCFyLT5ub1BhaW50IHx8IHItPm5vZGUtPmhhc0xheWVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQgbHAgPSByLT5sZWZ0ICsgci0+bm9kZS0+bWFyZ2luTGVmdCgpICsg
ci0+bm9kZS0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgbGVmdCA9
IG1pbihsZWZ0LCBscCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFJl
bmRlck9iamVjdCogbyA9ICppdDsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0RGV0
YWlscyYgciA9IG1fZmxvYXRpbmdPYmplY3RzLT5kZXRhaWxzKG8pOworICAgICAgICAgICAgaWYg
KCFyLm5vUGFpbnQoKSB8fCBvLT5oYXNMYXllcigpKQorICAgICAgICAgICAgICAgIGxlZnQgPSBt
aW4obGVmdCwgci5sZWZ0KCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5sZWZ0bW9zdFBvc2l0aW9u
KGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1NzcsMzYgKzI2NTQsMzcgQEAgaW50
IFJlbmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgIHJldHVybiBsZWZ0Owog
fQogCi1pbnQKLVJlbmRlckJsb2NrOjpsZWZ0Qm90dG9tKCkKK2ludCBSZW5kZXJCbG9jazo6bGVm
dEJvdHRvbSgpCiB7Ci0gICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykgcmV0dXJuIDA7Ci0gICAg
aW50IGJvdHRvbT0wOwotICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJM
aXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAg
Zm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQgKQotICAgICAgICBpZiAoci0+ZW5kWSA+
IGJvdHRvbSAmJiByLT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKLSAgICAg
ICAgICAgIGJvdHRvbT1yLT5lbmRZOwotCisgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaW50IGJvdHRvbSA9IDA7CisgICAgSXRlcmF0b3IgZW5kID0g
bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9i
amVjdCogbyA9ICppdDsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3REZXRhaWxzJiByID0g
bV9mbG9hdGluZ09iamVjdHMtPmRldGFpbHMobyk7CisgICAgICAgIGlmIChyLmVuZFkoKSA+IGJv
dHRvbSAmJiByLnR5cGUoKSA9PSBGbG9hdExlZnQpCisgICAgICAgICAgICBib3R0b20gPSByLmVu
ZFkoKTsKKyAgICB9CiAgICAgcmV0dXJuIGJvdHRvbTsKIH0KIAotaW50Ci1SZW5kZXJCbG9jazo6
cmlnaHRCb3R0b20oKQoraW50IFJlbmRlckJsb2NrOjpyaWdodEJvdHRvbSgpCiB7Ci0gICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cykgcmV0dXJuIDA7Ci0gICAgaW50IGJvdHRvbT0wOwotICAgIEZs
b2F0aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdP
YmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9IGl0LmN1cnJl
bnQoKSk7ICsraXQgKQotICAgICAgICBpZiAoci0+ZW5kWT5ib3R0b20gJiYgci0+dHlwZSgpID09
IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KQotICAgICAgICAgICAgYm90dG9tPXItPmVuZFk7
Ci0KKyAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
bnQgYm90dG9tID0gMDsKKyAgICBJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5k
KCk7CisgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gKml0OworICAgICAg
ICBjb25zdCBGbG9hdGluZ09iamVjdERldGFpbHMmIHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGV0
YWlscyhvKTsKKyAgICAgICAgaWYgKHIuZW5kWSgpID4gYm90dG9tICYmIHIudHlwZSgpID09IEZs
b2F0UmlnaHQpCisgICAgICAgICAgICBib3R0b20gPSByLmVuZFkoKTsKKyAgICB9CiAgICAgcmV0
dXJuIGJvdHRvbTsKIH0KIAotdm9pZAotUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKK3ZvaWQg
UmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMp
CiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOwpAQCAtMjYzOSw3ICsyNzE3LDYg
QEAgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgcHJldiA9IHBhcmVudCgpOwog
ICAgICAgICB4b2Zmc2V0ICs9IHByZXYtPmJvcmRlckxlZnQoKSArIHByZXYtPnBhZGRpbmdMZWZ0
KCk7CiAgICAgfQotICAgIC8va2REZWJ1ZygpIDw8ICJSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMg
Zm91bmQgcHJldmlvdXMgIjw8ICh2b2lkICopdGhpcyA8PCAiIHByZXY9IiA8PCAodm9pZCAqKXBy
ZXY8PCBlbmRsOwogCiAgICAgLy8gQWRkIG92ZXJoYW5naW5nIGZsb2F0cyBmcm9tIHRoZSBwcmV2
aW91cyBSZW5kZXJCbG9jaywgYnV0IG9ubHkgaWYgaXQgaGFzIGEgZmxvYXQgdGhhdCBpbnRydWRl
cyBpbnRvIG91ciBzcGFjZS4KICAgICBpZiAoIXByZXYtPmlzUmVuZGVyQmxvY2soKSkgcmV0dXJu
OwpAQCAtMjY2MCw1MSArMjczNyw0OCBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5n
RmxvYXRzKFJlCiAgICAgLy8gRmxvYXRzIHRoYXQgd2lsbCByZW1haW4gdGhlIGNoaWxkJ3MgcmVz
cG9uc2libGl0eSB0byBwYWludCBzaG91bGQgZmFjdG9yIGludG8gaXRzCiAgICAgLy8gdmlzdWFs
IG92ZXJmbG93LgogICAgIEludFJlY3QgZmxvYXRzT3ZlcmZsb3dSZWN0OwotICAgIERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpjaGlsZC0+bV9mbG9hdGluZ09i
amVjdHMpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIHI7IChyID0gaXQuY3VycmVudCgpKTsg
KytpdCkgewotICAgICAgICBpbnQgYm90dG9tID0gY2hpbGQtPnlQb3MoKSArIHItPmVuZFk7Cisg
ICAgSXRlcmF0b3IgZW5kID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBm
b3IgKEl0ZXJhdG9yIGl0ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gKml0OworICAgICAgICBG
bG9hdGluZ09iamVjdERldGFpbHMmIHIgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPmRldGFp
bHMobyk7CisKKyAgICAgICAgaW50IGJvdHRvbSA9IGNoaWxkLT55UG9zKCkgKyByLmVuZFkoKTsK
ICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIGJvdHRv
bSk7CiAKICAgICAgICAgaWYgKGJvdHRvbSA+IGhlaWdodCgpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgb2JqZWN0IGlzIG5vdCBpbiB0aGUgbGlzdCwgd2UgYWRkIGl0IG5vdy4KLSAgICAgICAg
ICAgIGlmICghY29udGFpbnNGbG9hdChyLT5ub2RlKSkgewotICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0ICpmbG9hdGluZ09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChyLT50eXBlKCkpOwot
ICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5zdGFydFkgPSByLT5zdGFydFkgLSB5b2ZmOwot
ICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5lbmRZID0gci0+ZW5kWSAtIHlvZmY7Ci0gICAg
ICAgICAgICAgICAgZmxvYXRpbmdPYmotPmxlZnQgPSByLT5sZWZ0IC0geG9mZjsKLSAgICAgICAg
ICAgICAgICBmbG9hdGluZ09iai0+d2lkdGggPSByLT53aWR0aDsKLSAgICAgICAgICAgICAgICBm
bG9hdGluZ09iai0+bm9kZSA9IHItPm5vZGU7Ci0KKyAgICAgICAgICAgIGlmICghbV9mbG9hdGlu
Z09iamVjdHMgfHwgIW1fZmxvYXRpbmdPYmplY3RzLT5jb250YWlucyhvKSkgewogICAgICAgICAg
ICAgICAgIC8vIFRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciBhbHdheXMgcGFpbnRzIHRoZSBm
bG9hdCAoc28gdGhhdCB6aW5kZXggYW5kIHN0YWNraW5nCiAgICAgICAgICAgICAgICAgLy8gYmVo
YXZlcyBwcm9wZXJseSkuICBXZSBhbHdheXMgd2FudCB0byBwcm9wYWdhdGUgdGhlIGRlc2lyZSB0
byBwYWludCB0aGUgZmxvYXQgYXMKICAgICAgICAgICAgICAgICAvLyBmYXIgb3V0IGFzIHdlIGNh
biwgdG8gdGhlIG91dGVybW9zdCBibG9jayB0aGF0IG92ZXJsYXBzIHRoZSBmbG9hdCwgc3RvcHBp
bmcgb25seQogICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhpdCBhIGxheWVyIGJvdW5kYXJ5Lgot
ICAgICAgICAgICAgICAgIGlmIChyLT5ub2RlLT5lbmNsb3NpbmdMYXllcigpID09IGVuY2xvc2lu
Z0xheWVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHItPm5vUGFpbnQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJvb2wgbm9QYWludCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChvLT5l
bmNsb3NpbmdMYXllcigpID09IGVuY2xvc2luZ0xheWVyKCkpCisgICAgICAgICAgICAgICAgICAg
IHIuc2V0Tm9QYWludCh0cnVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGZsb2F0aW5nT2JqLT5ub1BhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
bm9QYWludCA9IHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ug
Y3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCi0gICAgICAgICAgICAgICAg
aWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cyA9IG5ldyBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD47Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRBdXRvRGVsZXRlKHRydWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YXBwZW5k
KGZsb2F0aW5nT2JqKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQor
ICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy5zZXQobmV3IEZsb2F0aW5nT2Jq
ZWN0TWFwcyk7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChvLCByLnR5
cGUoKSwgbm9QYWludCwgci5zdGFydFkoKSAtIHlvZmYsIHIuZW5kWSgpIC0geW9mZiwgci5sZWZ0
KCkgLSB4b2ZmLCByLndpZHRoKCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMgJiYgci0+bm9QYWludCAmJiAhci0+bm9kZS0+aGFz
TGF5ZXIoKSAmJiByLT5ub2RlLT5pc0Rlc2NlbmRhbnRPZihjaGlsZCkgJiYgci0+bm9kZS0+ZW5j
bG9zaW5nTGF5ZXIoKSA9PSBjaGlsZC0+ZW5jbG9zaW5nTGF5ZXIoKSkKKyAgICAgICAgfSBlbHNl
IGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmIHIubm9QYWludCgpICYmICFvLT5oYXNM
YXllcigpICYmIG8tPmlzRGVzY2VuZGFudE9mKGNoaWxkKSAmJiBvLT5lbmNsb3NpbmdMYXllcigp
ID09IGNoaWxkLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgZmxvYXQg
aXMgbm90IG92ZXJoYW5naW5nIGZyb20gdGhpcyBibG9jaywgc28gaWYgaXQgaXMgYSBkZXNjZW5k
YW50IG9mIHRoZSBjaGlsZCwgdGhlIGNoaWxkIHNob3VsZAogICAgICAgICAgICAgLy8gcGFpbnQg
aXQgKHRoZSBvdGhlciBjYXNlIGlzIHRoYXQgaXQgaXMgaW50cnVkaW5nIGludG8gdGhlIGNoaWxk
KSwgdW5sZXNzIGl0IGhhcyBpdHMgb3duIGxheWVyIG9yIGVuY2xvc2luZwogICAgICAgICAgICAg
Ly8gbGF5ZXIuCiAgICAgICAgICAgICAvLyBJZiBtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzIGlz
IGZhbHNlLCBpdCBtZWFucyB0aGF0IHRoZSBjaGlsZCBtdXN0IGFscmVhZHkga25vdyBhYm91dCBh
bGwgdGhlIGZsb2F0cwogICAgICAgICAgICAgLy8gaXQgc2hvdWxkIHBhaW50LgotICAgICAgICAg
ICAgci0+bm9QYWludCA9IGZhbHNlOworICAgICAgICAgICAgci5zZXROb1BhaW50KGZhbHNlKTsK
KyAgICAgICAgfQogCi0gICAgICAgIGlmICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+aGFzTGF5
ZXIoKSkgewotICAgICAgICAgICAgSW50UmVjdCBmbG9hdE92ZXJmbG93UmVjdCA9IHItPm5vZGUt
Pm92ZXJmbG93UmVjdChmYWxzZSk7Ci0gICAgICAgICAgICBmbG9hdE92ZXJmbG93UmVjdC5tb3Zl
KHItPmxlZnQgKyByLT5ub2RlLT5tYXJnaW5MZWZ0KCksIHItPnN0YXJ0WSArIHItPm5vZGUtPm1h
cmdpblRvcCgpKTsKKyAgICAgICAgaWYgKCFyLm5vUGFpbnQoKSAmJiAhby0+aGFzTGF5ZXIoKSkg
eworICAgICAgICAgICAgSW50UmVjdCBmbG9hdE92ZXJmbG93UmVjdCA9IG8tPm92ZXJmbG93UmVj
dChmYWxzZSk7CisgICAgICAgICAgICBmbG9hdE92ZXJmbG93UmVjdC5tb3ZlKHIubGVmdCgpICsg
by0+bWFyZ2luTGVmdCgpLCByLnN0YXJ0WSgpICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICAg
ICAgZmxvYXRzT3ZlcmZsb3dSZWN0LnVuaXRlKGZsb2F0T3ZlcmZsb3dSZWN0KTsKICAgICAgICAg
fQogICAgIH0KKwogICAgIGNoaWxkLT5hZGRWaXN1YWxPdmVyZmxvdyhmbG9hdHNPdmVyZmxvd1Jl
Y3QpOwogICAgIHJldHVybiBsb3dlc3RGbG9hdEJvdHRvbTsKIH0KQEAgLTI3MTUsNDQgKzI3ODks
MzAgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbgogICAgIGlmICgh
cHJldi0+bV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpwcmV2LT5tX2Zsb2F0aW5nT2Jq
ZWN0cyk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdCAqcjsgKHIgPSBpdC5jdXJyZW50KCkpOyAr
K2l0KSB7Ci0gICAgICAgIGlmIChyLT5lbmRZID4geW9mZikgewotICAgICAgICAgICAgLy8gVGhl
IG9iamVjdCBtYXkgYWxyZWFkeSBiZSBpbiBvdXIgbGlzdC4gQ2hlY2sgZm9yIGl0IHVwIGZyb250
IHRvIGF2b2lkCi0gICAgICAgICAgICAvLyBjcmVhdGluZyBkdXBsaWNhdGUgZW50cmllcy4KLSAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gMDsKLSAgICAgICAgICAgIGlmIChtX2Zsb2F0
aW5nT2JqZWN0cykgewotICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8
RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKChmID0gaXQuY3VycmVudCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+
bm9kZSA9PSByLT5ub2RlKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgKytpdDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWYpIHsKLSAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCAqZmxvYXRpbmdPYmogPSBuZXcgRmxvYXRpbmdPYmpl
Y3Qoci0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBmbG9hdGluZ09iai0+c3RhcnRZID0gci0+
c3RhcnRZIC0geW9mZjsKLSAgICAgICAgICAgICAgICBmbG9hdGluZ09iai0+ZW5kWSA9IHItPmVu
ZFkgLSB5b2ZmOwotICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5sZWZ0ID0gci0+bGVmdCAt
IHhvZmY7Ci0gICAgICAgICAgICAgICAgLy8gQXBwbHlpbmcgdGhlIGNoaWxkJ3MgbWFyZ2luIG1h
a2VzIG5vIHNlbnNlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBjaGlsZCB3YXMgcGFzc2VkIGluLgot
ICAgICAgICAgICAgICAgIC8vIHNpbmNlIGhpcyBvd24gbWFyZ2luIHdhcyBhZGRlZCBhbHJlYWR5
IHRocm91Z2ggdGhlIHN1YnRyYWN0aW9uIG9mIHRoZSB8eG9mZnwgdmFyaWFibGUKLSAgICAgICAg
ICAgICAgICAvLyBhYm92ZS4gIHx4b2ZmfCB3aWxsIGVxdWFsIC1mbG93LT5tYXJnaW5MZWZ0KCkg
aW4gdGhpcyBjYXNlLCBzbyBpdCdzIGFscmVhZHkgYmVlbiB0YWtlbgotICAgICAgICAgICAgICAg
IC8vIGludG8gYWNjb3VudC4gIE9ubHkgYXBwbHkgdGhpcyBjb2RlIGlmIHxjaGlsZHwgaXMgZmFs
c2UsIHNpbmNlIG90aGVyd2lzZSB0aGUgbGVmdCBtYXJnaW4KLSAgICAgICAgICAgICAgICAvLyB3
aWxsIGdldCBhcHBsaWVkIHR3aWNlLgotICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9IHBhcmVu
dCgpKQotICAgICAgICAgICAgICAgICAgICBmbG9hdGluZ09iai0+bGVmdCArPSBwcmV2LT5tYXJn
aW5MZWZ0KCk7Ci0gICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPmxlZnQgLT0gbWFyZ2luTGVm
dCgpOwotICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5ub1BhaW50ID0gdHJ1ZTsgIC8vIFdl
IGFyZSBub3QgaW4gdGhlIGRpcmVjdCBpbmhlcml0YW5jZSBjaGFpbiBmb3IgdGhpcyBmbG9hdC4g
V2Ugd2lsbCBuZXZlciBwYWludCBpdC4KLSAgICAgICAgICAgICAgICBmbG9hdGluZ09iai0+d2lk
dGggPSByLT53aWR0aDsKLSAgICAgICAgICAgICAgICBmbG9hdGluZ09iai0+bm9kZSA9IHItPm5v
ZGU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBm
bG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0
aW5nT2JqZWN0cykgewotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IG5l
dyBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD47Ci0gICAgICAgICAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXRBdXRvRGVsZXRlKHRydWUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YXBwZW5kKGZsb2F0aW5nT2Jq
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIEl0ZXJhdG9yIGVuZCA9IHByZXYtPm1f
ZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcHJldi0+bV9m
bG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5k
ZXJPYmplY3QqIG8gPSAqaXQ7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0RGV0YWlscyYg
ciA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5kZXRhaWxzKG8pOworICAgICAgICBpZiAoci5l
bmRZKCkgPD0geW9mZikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobV9mbG9h
dGluZ09iamVjdHMgJiYgbV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKG8pKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGludCBsZWZ0ID0gci5sZWZ0KCkgLSB4b2ZmOworICAgICAg
ICAvLyBBcHBseWluZyB0aGUgY2hpbGQncyBtYXJnaW4gbWFrZXMgbm8gc2Vuc2UgaW4gdGhlIGNh
c2Ugd2hlcmUgdGhlIGNoaWxkIHdhcyBwYXNzZWQgaW4uCisgICAgICAgIC8vIHNpbmNlIGhpcyBv
d24gbWFyZ2luIHdhcyBhZGRlZCBhbHJlYWR5IHRocm91Z2ggdGhlIHN1YnRyYWN0aW9uIG9mIHRo
ZSB8eG9mZnwgdmFyaWFibGUKKyAgICAgICAgLy8gYWJvdmUuICB8eG9mZnwgd2lsbCBlcXVhbCAt
Zmxvdy0+bWFyZ2luTGVmdCgpIGluIHRoaXMgY2FzZSwgc28gaXQncyBhbHJlYWR5IGJlZW4gdGFr
ZW4KKyAgICAgICAgLy8gaW50byBhY2NvdW50LiAgT25seSBhcHBseSB0aGlzIGNvZGUgaWYgfGNo
aWxkfCBpcyBmYWxzZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZSBsZWZ0IG1hcmdpbgorICAgICAgICAv
LyB3aWxsIGdldCBhcHBsaWVkIHR3aWNlLgorICAgICAgICBpZiAocHJldiAhPSBwYXJlbnQoKSkK
KyAgICAgICAgICAgIGxlZnQgKz0gcHJldi0+bWFyZ2luTGVmdCgpOworICAgICAgICBsZWZ0IC09
IG1hcmdpbkxlZnQoKTsKKworICAgICAgICBib29sIG5vUGFpbnQgPSB0cnVlOyAgLy8gV2UgYXJl
IG5vdCBpbiB0aGUgZGlyZWN0IGluaGVyaXRhbmNlIGNoYWluIGZvciB0aGlzIGZsb2F0LiBXZSB3
aWxsIG5ldmVyIHBhaW50IGl0LgorCisgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcg
b2JqZWN0IGxpc3QgbGF6aWx5LgorICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQorICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMuc2V0KG5ldyBGbG9hdGluZ09iamVjdE1hcHMpOwor
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG8sIHIudHlwZSgpLCBub1BhaW50LCByLnN0
YXJ0WSgpIC0geW9mZiwgci5lbmRZKCkgLSB5b2ZmLCBsZWZ0LCByLndpZHRoKCkpOwogICAgIH0K
IH0KIApAQCAtMjc2NCwxNSArMjgyNCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmF2b2lkc0Zsb2F0
cygpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVyT2JqZWN0
KiBvKQogewotICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwot
ICAgICAgICB3aGlsZSAoaXQuY3VycmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQuY3VycmVu
dCgpLT5ub2RlID09IG8pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICArK2l0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bV9mbG9hdGluZ09iamVjdHMgJiYgbV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKG8pOwogfQog
CiB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0
KFJlbmRlck9iamVjdCogZmxvYXRUb1JlbW92ZSkKQEAgLTI4OTEsMTcgKzI5NDMsMjMgQEAgYm9v
bCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICAgICAgICAgIHNj
cm9sbGVkWCArPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4odGhpcyktPmZyYW1lVmlldygpLT5j
b250ZW50c1goKTsKICAgICAgICAgICAgICAgICBzY3JvbGxlZFkgKz0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVmlldyo+KHRoaXMpLT5mcmFtZVZpZXcoKS0+Y29udGVudHNZKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBvOwotICAgICAgICAg
ICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRp
bmdPYmplY3RzKTsKLSAgICAgICAgICAgIGZvciAoaXQudG9MYXN0KCk7IChvID0gaXQuY3VycmVu
dCgpKTsgLS1pdCkgewotICAgICAgICAgICAgICAgIGlmICghby0+bm9QYWludCAmJiAhby0+bm9k
ZS0+aGFzTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgeG9mZnNldCA9IHNjcm9s
bGVkWCArIG8tPmxlZnQgKyBvLT5ub2RlLT5tYXJnaW5MZWZ0KCkgLSBvLT5ub2RlLT54UG9zKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGludCB5b2Zmc2V0ID0gIHNjcm9sbGVkWSArIG8tPnN0YXJ0
WSArIG8tPm5vZGUtPm1hcmdpblRvcCgpIC0gby0+bm9kZS0+eVBvcygpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoby0+bm9kZS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIEludFBvaW50KF94
LCBfeSksIHhvZmZzZXQsIHlvZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB4b2Zmc2V0LCBfeSAtIHlvZmZz
ZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBJ
dGVyYXRvciBzdGFydCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+bGFzdCgpOyA7IC0taXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBv
ID0gKml0OworICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdERldGFpbHMm
IHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGV0YWlscyhvKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFyLm5vUGFpbnQoKSAmJiAhby0+aGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHhvZmZzZXQgPSBzY3JvbGxlZFggKyByLmxlZnQoKSArIG8tPm1hcmdpbkxlZnQo
KSAtIG8tPnhQb3MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB5b2Zmc2V0ID0gc2Ny
b2xsZWRZICsgci5zdGFydFkoKSArIG8tPm1hcmdpblRvcCgpIC0gby0+eVBvcygpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG8tPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBJbnRQb2lu
dChfeCwgX3kpLCB4b2Zmc2V0LCB5b2Zmc2V0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHhvZmZzZXQsIF95
IC0geW9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdCA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDE5
NSw1MSArNDI1Myw1MSBAQCBzdGF0aWMgYm9vbCBzaG91bGRDaGVja0xpbmVzKFJlbmRlck9iamVj
CiAKIHN0YXRpYyBSb290SW5saW5lQm94KiBnZXRMaW5lQXRJbmRleChSZW5kZXJCbG9jayogYmxv
Y2ssIGludCBpLCBpbnQmIGNvdW50KQogewotICAgIGlmIChibG9jay0+c3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgaWYgKGJsb2NrLT5jaGlsZHJlbklubGluZSgp
KSB7Ci0gICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGJsb2NrLT5maXJzdFJv
b3RCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY291bnQrKyA9PSBpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94OwotICAg
ICAgICAgICAgfQorICAgIGlmIChibG9jay0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGJsb2NrLT5jaGlsZHJlbklubGluZSgp
KSB7CisgICAgICAgIGZvciAoUm9vdElubGluZUJveCogYm94ID0gYmxvY2stPmZpcnN0Um9vdEJv
eCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkgeworICAgICAgICAgICAgaWYgKGNv
dW50KysgPT0gaSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYm94OwogICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IGJsb2NrLT5m
aXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkgewotICAgICAgICAgICAgICAgICAgICBS
b290SW5saW5lQm94ICpib3ggPSBnZXRMaW5lQXRJbmRleChzdGF0aWNfY2FzdDxSZW5kZXJCbG9j
ayo+KG9iaiksIGksIGNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJveCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBib3g7Ci0gICAgICAgICAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmogPSBibG9jay0+Zmlyc3RDaGls
ZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKHNo
b3VsZENoZWNrTGluZXMob2JqKSkgeworICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGJv
eCA9IGdldExpbmVBdEluZGV4KHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKSwgaSwgY291
bnQpOworICAgICAgICAgICAgICAgIGlmIChib3gpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBib3g7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKICAgICByZXR1cm4gMDsK
IH0KIAogaW50IGdldEhlaWdodEZvckxpbmVDb3VudChSZW5kZXJCbG9jayogYmxvY2ssIGludCBs
LCBib29sIGluY2x1ZGVCb3R0b20sIGludCYgY291bnQpCiB7Ci0gICAgaWYgKGJsb2NrLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewotICAgICAgICBpZiAoYmxvY2stPmNoaWxk
cmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogYm94ID0gYmxv
Y2stPmZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkgewotICAg
ICAgICAgICAgICAgIGlmICgrK2NvdW50ID09IGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBib3gtPmJvdHRvbU92ZXJmbG93KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVy
Qm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IDApOwotICAgICAgICAgICAgfQor
ICAgIGlmIChibG9jay0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAg
IHJldHVybiAtMTsKKworICAgIGlmIChibG9jay0+Y2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAg
ICBmb3IgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGJsb2NrLT5maXJzdFJvb3RCb3goKTsgYm94OyBi
b3ggPSBib3gtPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGlmICgrK2NvdW50ID09IGwp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+Ym90dG9tT3ZlcmZsb3coKSArIChpbmNsdWRl
Qm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkp
IDogMCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmpl
Y3QqIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IDA7Ci0gICAgICAgICAgICBmb3IgKFJl
bmRlck9iamVjdCogb2JqID0gYmxvY2stPmZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tMaW5lcyhvYmop
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBnZXRIZWlnaHRGb3JMaW5lQ291
bnQoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvYmopLCBsLCBmYWxzZSwgY291bnQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdCArIG9iai0+eVBvcygpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2st
PmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpICYmICFvYmotPmlzQ29tcGFjdCgpICYmICFvYmotPmlzUnVuSW4oKSkKLSAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyAmJiBs
ID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5l
cy0+eVBvcygpICsgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzLT5oZWlnaHQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBSZW5kZXJPYmplY3QqIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5l
cyA9IDA7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmogPSBibG9jay0+Zmlyc3RDaGls
ZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKHNo
b3VsZENoZWNrTGluZXMob2JqKSkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBnZXRI
ZWlnaHRGb3JMaW5lQ291bnQoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvYmopLCBsLCBmYWxz
ZSwgY291bnQpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQgKyBvYmotPnlQb3MoKSArIChpbmNsdWRlQm90dG9tID8g
KGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogMCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFvYmotPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAh
b2JqLT5pc0NvbXBhY3QoKSAmJiAhb2JqLT5pc1J1bkluKCkpCisgICAgICAgICAgICAgICAgbm9y
bWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwogICAgICAgICB9CisgICAgICAgIGlmIChu
b3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMgJiYgbCA9PSAwKQorICAgICAgICAgICAgcmV0dXJu
IG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcy0+eVBvcygpICsgbm9ybWFsRmxvd0NoaWxkV2l0
aG91dExpbmVzLT5oZWlnaHQoKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gLTE7CiB9CiAK
QEAgLTQyNTEsMTUgKzQzMDksMTcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmxpbmVB
dEluZGV4KAogCiBpbnQgUmVuZGVyQmxvY2s6OmxpbmVDb3VudCgpCiB7CisgICAgaWYgKHN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIGlu
dCBjb3VudCA9IDA7Ci0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7
Ci0gICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICAgICAgZm9yIChSb290SW5s
aW5lQm94KiBib3ggPSBmaXJzdFJvb3RCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94
KCkpCi0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkK
LSAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihv
YmopLT5saW5lQ291bnQoKTsKKyAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAgICBm
b3IgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+
bmV4dFJvb3RCb3goKSkKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmot
Pm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tMaW5lcyhvYmopKQor
ICAgICAgICAgICAgICAgIGNvdW50ICs9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKS0+
bGluZUNvdW50KCk7CiAgICAgfQogICAgIHJldHVybiBjb3VudDsKIH0KQEAgLTQyNzQsNDAgKzQz
MzQsMzkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludAogewogICAg
IC8vIFdlIGRvbid0IGRlYWwgd2l0aCByZWxhdGl2ZSBwb3NpdGlvbmluZy4gIE91ciBhc3N1bXB0
aW9uIGlzIHRoYXQgeW91IHNocmluayB0byBmaXQgdGhlIGxpbmVzIHdpdGhvdXQgYWNjb3VudGlu
ZwogICAgIC8vIGZvciBlaXRoZXIgb3ZlcmZsb3cgb3IgdHJhbnNsYXRpb25zIHZpYSByZWxhdGl2
ZSBwb3NpdGlvbmluZy4KLSAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUp
IHsKLSAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIGZvciAoUm9v
dElubGluZUJveCogYm94ID0gZmlyc3RSb290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9v
dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJveC0+Zmlyc3RDaGlsZCgpKQotICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBib3gtPmZpcnN0Q2hpbGQoKS0+eFBv
cygpKTsKLSAgICAgICAgICAgICAgICBpZiAoYm94LT5sYXN0Q2hpbGQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHggKyBib3gtPmxhc3RDaGlsZCgpLT54UG9zKCkg
KyBib3gtPmxhc3RDaGlsZCgpLT53aWR0aCgpKTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoc3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChjaGlsZHJlbklubGluZSgpKSB7CisgICAgICAgIGZvciAoUm9vdElubGluZUJveCogYm94ID0g
Zmlyc3RSb290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAg
ICAgICBpZiAoYm94LT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihs
ZWZ0LCB4ICsgYm94LT5maXJzdENoaWxkKCktPnhQb3MoKSk7CisgICAgICAgICAgICBpZiAoYm94
LT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgeCArIGJv
eC0+bGFzdENoaWxkKCktPnhQb3MoKSArIGJveC0+bGFzdENoaWxkKCktPndpZHRoKCkpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9i
aiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChvYmotPmlzQmxvY2tGbG93KCkgJiYgIW9iai0+aGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KG9iaiktPmFkanVzdEZvckJvcmRlckZpdCh4ICsgb2JqLT54UG9zKCksIGxlZnQsIHJpZ2h0KTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGEgcmVwbGFj
ZWQgZWxlbWVudCBvciBzb21lIGtpbmQgb2Ygbm9uLWJsb2NrLWZsb3cgb2JqZWN0LgotICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCB4ICsgb2JqLT54UG9zKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHggKyBvYmotPnhQb3MoKSAr
IG9iai0+d2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9i
ai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFvYmotPmlzRmxvYXRpbmdPclBv
c2l0aW9uZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChvYmotPmlzQmxvY2tGbG93KCkgJiYg
IW9iai0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4ob2JqKS0+YWRqdXN0Rm9yQm9yZGVyRml0KHggKyBvYmotPnhQb3MoKSwg
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iai0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGEg
cmVwbGFjZWQgZWxlbWVudCBvciBzb21lIGtpbmQgb2Ygbm9uLWJsb2NrLWZsb3cgb2JqZWN0Lgor
ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBvYmotPnhQb3MoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCB4ICsgb2JqLT54UG9zKCkgKyBv
YmotPndpZHRoKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAg
ICBGbG9hdGluZ09iamVjdCogcjsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0
b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICBm
b3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgLy8gT25s
eSBleGFtaW5lIHRoZSBvYmplY3QgaWYgb3VyIG5vUGFpbnQgZmxhZyBpc24ndCBzZXQuCi0gICAg
ICAgICAgICAgICAgaWYgKCFyLT5ub1BhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBm
bG9hdExlZnQgPSByLT5sZWZ0IC0gci0+bm9kZS0+eFBvcygpICsgci0+bm9kZS0+bWFyZ2luTGVm
dCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHIt
Pm5vZGUtPndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgZmxv
YXRMZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGZsb2F0Umln
aHQpOwotICAgICAgICAgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzKSB7CisgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQo
KTsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9ICppdDsK
KyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0RGV0YWlscyYgciA9IG1fZmxvYXRpbmdP
YmplY3RzLT5kZXRhaWxzKG8pOworICAgICAgICAgICAgaWYgKCFyLm5vUGFpbnQoKSkgeworICAg
ICAgICAgICAgICAgIGludCBmbG9hdExlZnQgPSByLmxlZnQoKSAtIG8tPnhQb3MoKSArIG8tPm1h
cmdpbkxlZnQoKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGZsb2F0TGVmdCk7
CisgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGZsb2F0TGVmdCArIG8tPndpZHRo
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNDMzOSwxNiArNDM5OCwx
NiBAQCB2b2lkIFJlbmRlckJsb2NrOjpib3JkZXJGaXRBZGp1c3QoaW50JiB4CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OmNsZWFyVHJ1bmNhdGlvbigpCiB7Ci0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKSB7Ci0gICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpICYmIGhhc01h
cmt1cFRydW5jYXRpb24oKSkgewotICAgICAgICAgICAgc2V0SGFzTWFya3VwVHJ1bmNhdGlvbihm
YWxzZSk7Ci0gICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGZpcnN0Um9vdEJv
eCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkKLSAgICAgICAgICAgICAgICBib3gt
PmNsZWFyVHJ1bmNhdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBvYmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5u
ZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja0xpbmVzKG9iaikp
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKS0+Y2xl
YXJUcnVuY2F0aW9uKCk7CisgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkgJiYgaGFzTWFya3Vw
VHJ1bmNhdGlvbigpKSB7CisgICAgICAgIHNldEhhc01hcmt1cFRydW5jYXRpb24oZmFsc2UpOwor
ICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGZpcnN0Um9vdEJveCgpOyBib3g7IGJv
eCA9IGJveC0+bmV4dFJvb3RCb3goKSkKKyAgICAgICAgICAgIGJveC0+Y2xlYXJUcnVuY2F0aW9u
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IGZpcnN0
Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBpZiAo
c2hvdWxkQ2hlY2tMaW5lcyhvYmopKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
ckJsb2NrKj4ob2JqKS0+Y2xlYXJUcnVuY2F0aW9uKCk7CiAgICAgfQogfQogCkBAIC00MzU3LDcg
KzQ0MTYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhUb3BNYXJnaW5zKGludCBwCiAgICAg
aWYgKCFtX21heE1hcmdpbikgewogICAgICAgICBpZiAocG9zID09IE1heE1hcmdpbjo6dG9wUG9z
RGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4o
dGhpcyk7CisgICAgICAgIG1fbWF4TWFyZ2luLnNldChuZXcgTWF4TWFyZ2luKHRoaXMpKTsKICAg
ICB9CiAgICAgbV9tYXhNYXJnaW4tPm1fdG9wUG9zID0gcG9zOwogICAgIG1fbWF4TWFyZ2luLT5t
X3RvcE5lZyA9IG5lZzsKQEAgLTQzNjgsNyArNDQyNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNl
dE1heEJvdHRvbU1hcmdpbnMoaW4KICAgICBpZiAoIW1fbWF4TWFyZ2luKSB7CiAgICAgICAgIGlm
IChwb3MgPT0gTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpICYmIG5lZyA9PSBNYXhN
YXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcykpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fbWF4TWFyZ2luID0gbmV3IE1heE1hcmdpbih0aGlzKTsKKyAgICAgICAgbV9tYXhNYXJn
aW4uc2V0KG5ldyBNYXhNYXJnaW4odGhpcykpOwogICAgIH0KICAgICBtX21heE1hcmdpbi0+bV9i
b3R0b21Qb3MgPSBwb3M7CiAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnID0gbmVnOwpAQCAt
NDM3Nyw4ICs0NDM2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9tTWFyZ2lucyhp
bgogY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogewogICAgIGlm
IChpc0JvZHkoKSkKLSAgICAgICAgcmV0dXJuICJSZW5kZXJCb2R5IjsgLy8gRklYTUU6IFRlbXBv
cmFyeSBoYWNrIHVudGlsIHdlIGtub3cgdGhhdCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBwYXNzLgot
ICAgIAorICAgICAgICByZXR1cm4gIlJlbmRlckJvZHkiOyAvLyBGSVhNRTogVGVtcG9yYXJ5IGhh
Y2sgdW50aWwgd2UgcmVnZW5lcmF0ZSBhbGwgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMuCiAgICAg
aWYgKGlzRmxvYXRpbmcoKSkKICAgICAgICAgcmV0dXJuICJSZW5kZXJCbG9jayAoZmxvYXRpbmcp
IjsKICAgICBpZiAoaXNQb3NpdGlvbmVkKCkpCkBAIC00Mzk2LDM0ICs0NDU0LDQgQEAgY29uc3Qg
Y2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjbwogICAgIHJldHVybiAiUmVuZGVyQmxv
Y2siOwogfQogCi0jaWZuZGVmIE5ERUJVRwotCi12b2lkIFJlbmRlckJsb2NrOjpkdW1wKFRleHRT
dHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
Y2hpbGRyZW5JbmxpbmUpIHsgKnN0cmVhbSA8PCAiIGNoaWxkcmVuSW5saW5lIjsgfQotICAgIGlm
IChtX2ZpcnN0TGluZSkgeyAqc3RyZWFtIDw8ICIgZmlyc3RMaW5lIjsgfQotCi0gICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpKQotICAgIHsK
LSAgICAgICAgKnN0cmVhbSA8PCAiIHNwZWNpYWwoIjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxp
c3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAg
ICAgRmxvYXRpbmdPYmplY3QgKnI7Ci0gICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgICAg
ICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghZmlyc3QpCi0gICAgICAgICAgICAgICAgKnN0cmVhbSA8PCAiLCI7Ci0gICAgICAg
ICAgICAqc3RyZWFtIDw8IHItPm5vZGUtPnJlbmRlck5hbWUoKTsKLSAgICAgICAgICAgIGZpcnN0
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgKnN0cmVhbSA8PCAiKSI7Ci0gICAgfQotCi0g
ICAgLy8gIyMjIEVDbGVhciBtX2NsZWFyU3RhdHVzCi0KLSAgICBSZW5kZXJGbG93OjpkdW1wKHN0
cmVhbSxpbmQpOwotfQotCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAzMDM2OCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByZW5kZXIgb2JqZWN0IGltcGxlbWVudGF0aW9uIGZv
ciBLSFRNTC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21h
aWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSw3ICsyMyw2IEBACiAjaWZuZGVmIFJlbmRlckJsb2NrX2gKICNkZWZpbmUgUmVu
ZGVyQmxvY2tfaAogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKICNpbmNsdWRlICJH
YXBSZWN0cy5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3cuaCIKICNpbmNsdWRlICJSb290SW5saW5l
Qm94LmgiCkBAIC0zNSw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmlk
aUl0ZXJhdG9yOwogY2xhc3MgQmlkaVJ1bjsKK2NsYXNzIEZsb2F0aW5nT2JqZWN0TWFwczsKIGNs
YXNzIFBvc2l0aW9uOwogY2xhc3MgUm9vdElubGluZUJveDsKIApAQCAtMjc3LDEwICsyNzUsNiBA
QCBwdWJsaWM6CiAgICAgaW50IGxlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RC
bG9jaywgaW50IHkpOwogICAgIGludCByaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCBpbnQgeSk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgdmlydHVhbCB2b2lkIGR1
bXAoVGV4dFN0cmVhbSosIERlcHJlY2F0ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OwotI2VuZGlm
Ci0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgY29tcHV0aW5nIGxpbmUgY291bnRzIGFuZCBo
ZWlnaHRzIGZvciBsaW5lIGNvdW50cy4KICAgICBSb290SW5saW5lQm94KiBsaW5lQXRJbmRleChp
bnQpOwogICAgIGludCBsaW5lQ291bnQoKTsKQEAgLTMwMSw4ICsyOTUsOSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JikgY29uc3Q7CiAg
ICAgdm9pZCBhZGp1c3RGb3JCb3JkZXJGaXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkg
Y29uc3Q7IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYm9yZGVyRml0QWRqdXN0CiAKLXByb3RlY3Rl
ZDoKICAgICB2b2lkIG5ld0xpbmUoKTsKKworcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBo
YXNMaW5lSWZFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgbGF5b3V0T25seVBvc2l0aW9uZWRPYmpl
Y3RzKCk7CiAKQEAgLTMxNCwzNSArMzA5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbGNDb2x1
bW5XaWR0aCgpOwogICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAtMSk7
CiAKLXByb3RlY3RlZDoKLSAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgewotICAgICAgICBlbnVt
IFR5cGUgewotICAgICAgICAgICAgRmxvYXRMZWZ0LAotICAgICAgICAgICAgRmxvYXRSaWdodAot
ICAgICAgICB9OwotCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSkKLSAgICAgICAg
ICAgIDogbm9kZSgwKQotICAgICAgICAgICAgLCBzdGFydFkoMCkKLSAgICAgICAgICAgICwgZW5k
WSgwKQotICAgICAgICAgICAgLCBsZWZ0KDApCi0gICAgICAgICAgICAsIHdpZHRoKDApCi0gICAg
ICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBub1BhaW50KGZhbHNlKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBub2RlOwotICAg
ICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICAgICAgaW50IGxlZnQ7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgdW5zaWduZWQgbV90eXBlIDogMTsgLy8gVHlwZSAo
bGVmdCBvciByaWdodCBhbGlnbmVkKQotICAgICAgICBib29sIG5vUGFpbnQgOiAxOwotICAgIH07
Ci0KICAgICAvLyBUaGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHMgYXJl
IHVzZWQgYnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4KICAgICBjbGFzcyBDb21wYWN0SW5mbyB7CiAg
ICAgICAgIC8vIEEgY29tcGFjdCBjaGlsZCB0aGF0IG5lZWRzIHRvIGJlIGNvbGxhcHNlZCBpbnRv
IHRoZSBtYXJnaW4gb2YgdGhlIGZvbGxvd2luZyBibG9jay4KQEAgLTQ0NCwxMCArNDEwLDEwIEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBNYXJn
aW5JbmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHMgdXNlZCBi
eSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogCi1wcml2YXRlOgorICAgIE93blB0cjxGbG9hdGluZ09i
amVjdE1hcHM+IG1fZmxvYXRpbmdPYmplY3RzOworCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxS
ZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgRGVwcmVjYXRlZFB0
ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKLSAgICBMaXN0SGFzaFNl
dDxSZW5kZXJPYmplY3QqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKKyAgICBPd25QdHI8TGlzdEhh
c2hTZXQ8UmVuZGVyT2JqZWN0Kj4gPiBtX3Bvc2l0aW9uZWRPYmplY3RzOwogICAgICAgICAgCiAg
ICAgIC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMgaGF2ZSBub24t
ZGVmYXVsdCB2YWx1ZXMKICAgICAgc3RydWN0IE1heE1hcmdpbiB7CkBAIC00NjksNyArNDM1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgIGludCBtX2JvdHRvbU5lZzsKICAgICAgfTsKIAotICAgIE1h
eE1hcmdpbiogbV9tYXhNYXJnaW47CisgICAgT3duUHRyPE1heE1hcmdpbj4gbV9tYXhNYXJnaW47
CiAKIHByb3RlY3RlZDoKICAgICAvLyBIb3cgbXVjaCBjb250ZW50IG92ZXJmbG93cyBvdXQgb2Yg
b3VyIGJsb2NrIHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26012</attachid>
            <date>2008-12-14 08:37:15 -0800</date>
            <delta_ts>2011-02-16 08:46:53 -0800</delta_ts>
            <desc>patch for part of this</desc>
            <filename>PtrListPatch.txt</filename>
            <type>text/plain</type>
            <size>26337</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5Mjkz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMDgtMTIt
MTMgIENhbWVyb24gWndhcmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyMjU2MjogUkVHUkVTU0lPTiAo
cjM3OTcxKTogZXZlbnRzIG5vdCBmaXJpbmcgYWZ0ZXIgZ29pbmcgYmFjayBpbiBiYWNrL2Zvcndh
cmQgY2FjaGUKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU2Mj4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY0MTQ1OTM+CisKKyAgICAgICAgUmVz
dG9yZSB0aGUgRnJhbWUncyBET01XaW5kb3cgdG8gaXRzIHByZXZpb3VzIHZhbHVlIHdoZW4gZ29p
bmcgYmFjayBpbgorICAgICAgICB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLiBUaGUgZmFjdCB0aGF0
IGl0IHdhcyBub3QgZ2V0dGluZyBzZXQgYmVmb3JlIG1heQorICAgICAgICBoYXZlIGFsd2F5cyBj
YXVzZWQgc29tZSBzdWJ0bGUgYnVncyB3aXRoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIGJ1dAor
ICAgICAgICBhZnRlciByMzc5NzEsIGl0IGNhdXNlcyBubyBldmVudHMgdG8gZmlyZSBhZnRlciBy
ZXN0b3JpbmcgYSBwYWdlLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vIHdh
eSB0byB0ZXN0IHRoaXMgd2l0aCBhIGxheW91dCB0ZXN0IGJlY2F1c2UKKyAgICAgICAgaXQgaW52
b2x2ZXMgdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KKworICAgICAgICAqIGhpc3RvcnkvQ2FjaGVk
UGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdlOjpkb21XaW5kb3cpOiBBZGQu
CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpvcGVuKTogUmVzdG9y
ZSB0aGUgRE9NV2luZG93IG9mIHRoZSBGcmFtZSB0byBpdHMKKyAgICAgICAgc2F2ZWQgdmFsdWUg
d2hlbiBuYXZpZ2F0aW5nIGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCisgICAgICAgICogcGFn
ZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RE9NV2luZG93KTogQWRk
LgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKwogMjAwOC0xMi0xMiAgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KIAogICAgICAgICBCYWNrIG91dCByMzky
MjIgYXMgdGhpcyBpcyBicmVha2luZyB0aGUgYnVpbGQgb24gR2VudG9vIChhY2xvY2FsLTEuMTAp
CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMzkyOTMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtOTMsNiArOTMsNTcgQEAKIAogMjAwOC0xMi0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBoYWxmIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyNQor
ICAgICAgICAgIGVsaW1pbmF0ZSBEZXByZWNhdGVkUHRyTGlzdAorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZSk6IENo
YW5nZSB0byBzZXQgc2xvdHMgaW4gdGhlIHZlY3RvcgorICAgICAgICB0byAwIHJhdGhlciB0aGFu
IHJlbW92aW5nIGl0ZW1zIGZyb20gYSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRzTm93KTogUmV3cml0ZSB0byBwcm9jZXNzCisgICAgICAg
IHRoZSBsaXN0LiBTaW5jZSB3ZSBub3cgdXNlIGEgInNldCB0byB6ZXJvIiBkZXNpZ24sIHdlIGRv
bid0IG5lZWQgdG8KKyAgICAgICAgYmUgY2FyZWZ1bCBhYm91dCB3aGVyZSB0aGUgaXRlcmF0b3Ig
cG9pbnRzIHdoaWxlIGl0ZXJhdGluZyB0aGUgbGlzdCwKKyAgICAgICAgaW5zdGVhZCB3ZSBqdXN0
IGhhdmUgdG8gc2tpcCB6ZXJvcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBVc2UgVmVj
dG9yIGluc3RlYWQgb2YgRGVwcmVjYXRlZFB0ckxpc3QuCisKKyAgICAgICAgKiBkb20vRXZlbnRU
YXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0
Y2hHZW5lcmljRXZlbnQpOiBVc2UgYSBWZWN0b3IgaW5zdGVhZAorICAgICAgICBvZiBhIERlcHJl
Y2F0ZWRQdHJMaXN0IGZvciB0aGUgbGlzdCBvZiBub2RlcyB0byBoYW5kbGUuIEFsc28gc3RyZWFt
bGluZWQKKyAgICAgICAgdGhlIGxvZ2ljIGEgYml0IGFuZCB1c2VkIGdvdG8gaW4gYSBjb3VwbGUg
a2V5IHBsYWNlcy4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmV2ZW50UGFyZW50Tm9kZSk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaW50byB0aGlzIGZp
bGUKKyAgICAgICAgYmVjYXVzZSBpdCdzIGEgdmlydHVhbCBmdW5jdGlvbiBzbyBhbHJlYWR5IGNh
bid0IGJlIGlubGluZWQuIEFsc28gdXBkYXRlZAorICAgICAgICB0byByZXR1cm4gYSBDb250YWlu
ZXJOb2RlLCBzbyBpdCBuZWVkcyB0byBiZSBpbiBhIHBsYWNlIHdoZXJlIHRoZQorICAgICAgICBk
ZWZpbml0aW9uIG9mIENvbnRhaW5lck5vZGUgaXMgdmlzaWJsZSwgbm90IHRoZSBoZWFkZXIgZmls
ZS4KKworICAgICAgICAqIGRvbS9Ob2RlLmg6IENoYW5nZWQgcmV0dXJuIHR5cGUgb2YgZXZlbnRQ
YXJlbnROb2RlIHRvIENvbnRhaW5lck5vZGUKKyAgICAgICAgYW5kIG1vdmVkIGl0cyBkZWZpbml0
aW9uIGludG8gdGhlIGNwcCBmaWxlLgorCisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnht
bDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6flBlbmRpbmdDYWxs
YmFja3MpOiBBZGRlZCBhIGNhbGwgdG8KKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzIGhlcmUgaW5z
dGVhZCBvZiBzZXRBdXRvRGVsZXRlIGluIHRoZSBjb25zdHJ1Y3Rvciwgc2luY2UKKyAgICAgICAg
d2UncmUgdXNpbmcgRGVxdWUgaW5zdGVhZCBvZiBEZXByZWNhdGVkUHRyTGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdDYWxsYmFja3M6OmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKTog
Q2hhbmdlZCB0aGUKKyAgICAgICAgY29kZSB0byB1c2UgYW4gT3duUHRyIHNpbmNlIHRoZSBkZXF1
ZSB3b24ndCBkZWxldGUgdGhlIGNhbGxiYWNrIG9iamVjdC4KKworICAgICAgICAqIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOiBVc2UgYQorICAgICAgICBWZWN0b3Ig
aW5zdGVhZCBvZiBhIERlcHJlY2F0ZWRQdHJMaXN0LgorCisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6ZXZlbnRQYXJlbnROb2RlKTog
TW92ZWQgdGhpcyBmdW5jdGlvbiBpbnRvIHRoaXMgZmlsZQorICAgICAgICBiZWNhdXNlIGl0J3Mg
YSB2aXJ0dWFsIGZ1bmN0aW9uIHNvIGFscmVhZHkgY2FuJ3QgYmUgaW5saW5lZC4gQWxzbyB1cGRh
dGVkCisgICAgICAgIHRvIHJldHVybiBhIENvbnRhaW5lck5vZGUuCisKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5oOiBDaGFuZ2VkIHNldFNoYWRvd1BhcmVudE5vZGUgdG8gdGFrZSBhIENvbnRh
aW5lck5vZGUqLAorICAgICAgICBtYWRlIGV2ZW50UGFyZW50Tm9kZSByZXR1cm4gYSBDb250YWlu
ZXJOb2RlKiwgYW5kIG1hZGUgbV9zaGFkb3dQYXJlbnQgYQorICAgICAgICBDb250YWluZXJOb2Rl
Ki4KKworMjAwOC0xMi0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKICAgICAg
ICAgLSBmaXggUmVsZWFzZSBidWlsZAogCiAgICAgICAgICogZG9tL05vZGUuY3BwOgpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkocmV2aXNpb24gMzkyOTMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4NDcsMzIgKzI4NDcsMzYgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3Zl
SW1hZ2UoSW1hZ2VMb2FkZXIqIAogewogICAgIC8vIFJlbW92ZSBpbnN0YW5jZXMgb2YgdGhpcyBp
bWFnZSBmcm9tIGJvdGggbGlzdHMuCiAgICAgLy8gVXNlIGxvb3BzIGJlY2F1c2Ugd2UgYWxsb3cg
bXVsdGlwbGUgaW5zdGFuY2VzIHRvIGdldCBpbnRvIHRoZSBsaXN0cy4KLSAgICB3aGlsZSAobV9p
bWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3QucmVtb3ZlUmVmKGltYWdlKSkgeyB9Ci0gICAg
d2hpbGUgKG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaGluZ0xpc3QucmVtb3ZlUmVmKGltYWdlKSkg
eyB9CisgICAgc2l6ZV90IHNpemUgPSBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlzdC5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
aWYgKG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaFNvb25MaXN0W2ldID09IGltYWdlKQorICAgICAg
ICAgICAgbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3RbaV0gPSAwOworICAgIH0KKyAg
ICBzaXplID0gbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdC5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1faW1hZ2VMb2Fk
RXZlbnREaXNwYXRjaGluZ0xpc3RbaV0gPT0gaW1hZ2UpCisgICAgICAgICAgICBtX2ltYWdlTG9h
ZEV2ZW50RGlzcGF0Y2hpbmdMaXN0W2ldID0gMDsKKyAgICB9CiAgICAgaWYgKG1faW1hZ2VMb2Fk
RXZlbnREaXNwYXRjaFNvb25MaXN0LmlzRW1wdHkoKSkKICAgICAgICAgbV9pbWFnZUxvYWRFdmVu
dFRpbWVyLnN0b3AoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hJbWFnZUxvYWRFdmVu
dHNOb3coKQogewotICAgIC8vIG5lZWQgdG8gYXZvaWQgcmUtZW50ZXJpbmcgdGhpcyBmdW5jdGlv
bjsgaWYgbmV3IGRpc3BhdGNoZXMgYXJlCisgICAgLy8gTmVlZCB0byBhdm9pZCByZS1lbnRlcmlu
ZyB0aGlzIGZ1bmN0aW9uOyBpZiBuZXcgZGlzcGF0Y2hlcyBhcmUKICAgICAvLyBzY2hlZHVsZWQg
YmVmb3JlIHRoZSBwYXJlbnQgZmluaXNoZXMgcHJvY2Vzc2luZyB0aGUgbGlzdCwgdGhleQotICAg
IC8vIHdpbGwgc2V0IGEgdGltZXIgYW5kIGV2ZW50dWFsbHkgYmUgcHJvY2Vzc2VkCisgICAgLy8g
d2lsbCBzZXQgYSB0aW1lciBhbmQgZXZlbnR1YWxseSBiZSBwcm9jZXNzZWQuCiAgICAgaWYgKCFt
X2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9pbWFnZUxvYWRFdmVudFRpbWVyLnN0b3AoKTsKLSAgICAKKwogICAgIG1faW1h
Z2VMb2FkRXZlbnREaXNwYXRjaGluZ0xpc3QgPSBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29u
TGlzdDsKICAgICBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlzdC5jbGVhcigpOwotICAg
IGZvciAoRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxJbWFnZUxvYWRlcj4gaXQobV9pbWFnZUxv
YWRFdmVudERpc3BhdGNoaW5nTGlzdCk7IGl0LmN1cnJlbnQoKTspIHsKLSAgICAgICAgSW1hZ2VM
b2FkZXIqIGltYWdlID0gaXQuY3VycmVudCgpOwotICAgICAgICAvLyBNdXN0IGFkdmFuY2UgaXRl
cmF0b3IgKmJlZm9yZSogZGlzcGF0Y2hpbmcgY2FsbC4KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBp
dCBtaWdodCBiZSBhZHZhbmNlZCBhdXRvbWF0aWNhbGx5IGlmIGRpc3BhdGNoaW5nIHRoZSBjYWxs
IGhhZCBhIHNpZGUgZWZmZWN0Ci0gICAgICAgIC8vIG9mIGRlc3Ryb3lpbmcgdGhlIGN1cnJlbnQg
SW1hZ2VMb2FkZXIsIGFuZCB0aGVuIHdlIHdvdWxkIGFkdmFuY2UgcGFzdCB0aGUgKm5leHQqIGl0
ZW0sCi0gICAgICAgIC8vIG1pc3Npbmcgb25lIGFsdG9nZXRoZXIuCi0gICAgICAgICsraXQ7Ci0g
ICAgICAgIGltYWdlLT5kaXNwYXRjaExvYWRFdmVudCgpOworICAgIHNpemVfdCBzaXplID0gbV9p
bWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKEltYWdlTG9hZGVyKiBpbWFnZSA9IG1f
aW1hZ2VMb2FkRXZlbnREaXNwYXRjaGluZ0xpc3RbaV0pCisgICAgICAgICAgICBpbWFnZS0+ZGlz
cGF0Y2hMb2FkRXZlbnQoKTsKICAgICB9CiAgICAgbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoaW5n
TGlzdC5jbGVhcigpOwogfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzOTI5MykKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1
ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJM
aXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVj
dGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgpAQCAtOTA3LDggKzkwNiw4IEBA
IHByaXZhdGU6CiAKICAgICBtdXRhYmxlIEFYT2JqZWN0Q2FjaGUqIG1fYXhPYmplY3RDYWNoZTsK
ICAgICAKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxJbWFnZUxvYWRlcj4gbV9pbWFnZUxvYWRFdmVu
dERpc3BhdGNoU29vbkxpc3Q7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8SW1hZ2VMb2FkZXI+IG1f
aW1hZ2VMb2FkRXZlbnREaXNwYXRjaGluZ0xpc3Q7CisgICAgVmVjdG9yPEltYWdlTG9hZGVyKj4g
bV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3Q7CisgICAgVmVjdG9yPEltYWdlTG9hZGVy
Kj4gbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdDsKICAgICBUaW1lcjxEb2N1bWVudD4g
bV9pbWFnZUxvYWRFdmVudFRpbWVyOwogCiAgICAgVGltZXI8RG9jdW1lbnQ+IG1fdXBkYXRlRm9j
dXNBcHBlYXJhbmNlVGltZXI7CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9u
IDM5MjkzKQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjczLDEzMSArMjczLDEyNSBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hF
dmVudChQYXNzCiAgICAgcmV0dXJuIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2dC5yZWxlYXNlKCks
IGVjKTsKIH0KIAotYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBFdmVudFRhcmdldE5v
ZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dChlKTsKKyAgICBSZWZQdHI8
RXZlbnQ+IGV2ZW50KHBycEV2ZW50KTsKIAogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJp
ZGRlbigpKTsKLSAgICBBU1NFUlQoZXZ0LT50YXJnZXQoKSk7Ci0gICAgQVNTRVJUKCFldnQtPnR5
cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjb3VsZCBjcmVhdGUgYW4gZXZlbnQg
d2l0aCBhbiBlbXB0eSBuYW1lCi0KLSAgICAvLyB3b3JrIG91dCB3aGF0IG5vZGVzIHRvIHNlbmQg
ZXZlbnQgdG8KLSAgICBEZXByZWNhdGVkUHRyTGlzdDxOb2RlPiBub2RlQ2hhaW47CisgICAgQVNT
RVJUKGV2ZW50LT50YXJnZXQoKSk7CisgICAgQVNTRVJUKCFldmVudC0+dHlwZSgpLmlzTnVsbCgp
KTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBu
YW1lLCBidXQgbm90IG51bGwuCiAKKyAgICAvLyBNYWtlIGEgdmVjdG9yIG9mIGFuY2VzdG9ycyB0
byBzZW5kIHRoZSBldmVudCB0by4KKyAgICAvLyBCZSBzdXJlIHRvIHJlZiBhbGwgb2YgdGhlbSBz
aW5jZSBldmVudCBoYW5kbGVycyBjb3VsZCByZXN1bHQgaW4gdGhlIGxhc3QgcmVmZXJlbmNlIGdv
aW5nIGF3YXkuCisgICAgUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gdGhpc05vZGUodGhpcyk7Cisg
ICAgVmVjdG9yPFJlZlB0cjxDb250YWluZXJOb2RlPiA+IGFuY2VzdG9yczsKICAgICBpZiAoaW5E
b2N1bWVudCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IHRoaXM7IG47IG4gPSBuLT5ldmVu
dFBhcmVudE5vZGUoKSkgeworICAgICAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0g
ZXZlbnRQYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5ldmVudFBh
cmVudE5vZGUoKSkgewogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgICAgICAvLyBTa2lwIDx1c2U+
IHNoYWRvdyB0cmVlIGVsZW1lbnRzICAgIAotICAgICAgICAgICAgaWYgKG4tPmlzU1ZHRWxlbWVu
dCgpICYmIG4tPmlzU2hhZG93Tm9kZSgpKQorICAgICAgICAgICAgLy8gU2tpcCA8dXNlPiBzaGFk
b3cgdHJlZSBlbGVtZW50cy4KKyAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aXNTVkdFbGVtZW50
KCkgJiYgYW5jZXN0b3ItPmlzU2hhZG93Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogI2VuZGlmCi0gICAgICAgICAgICBuLT5yZWYoKTsKLSAgICAgICAgICAgIG5vZGVDaGFpbi5w
cmVwZW5kKG4pOworICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChhbmNlc3Rvcik7CiAgICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBpZiBub2RlIGlzIG5vdCBpbiB0aGUgZG9j
dW1lbnQganVzdCBzZW5kIGV2ZW50IHRvIGl0c2VsZiAKLSAgICAgICAgcmVmKCk7Ci0gICAgICAg
IG5vZGVDaGFpbi5wcmVwZW5kKHRoaXMpOwogICAgIH0KIAotICAgIERlcHJlY2F0ZWRQdHJMaXN0
SXRlcmF0b3I8Tm9kZT4gaXQobm9kZUNoYWluKTsKKyAgICAvLyBTZXQgdXAgYSBwb2ludGVyIHRv
IGluZGljYXRlIHdoZXRoZXIgdG8gZGlzcGF0Y2ggd2luZG93IGV2ZW50cy4KKyAgICAvLyBXZSBk
b24ndCBkaXNwYXRjaCBsb2FkIGV2ZW50cyB0byB0aGUgd2luZG93IGFzIGEgcXVpcmssIGJlY2F1
c2UKKyAgICAvLyBNb3ppbGxhIHVzZWQgdG8gbmV2ZXIgcHJvcGFnYXRlIGxvYWQgZXZlbnRzIHRv
IHRoZSB3aW5kb3cgb2JqZWN0LgorICAgIERvY3VtZW50KiBkb2N1bWVudEZvcldpbmRvd0V2ZW50
cyA9IDA7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmxvYWRFdmVudCkg
eworICAgICAgICBFdmVudFRhcmdldE5vZGUqIHRvcExldmVsQ29udGFpbmVyID0gYW5jZXN0b3Jz
LmlzRW1wdHkoKSA/IHRoaXMgOiBhbmNlc3RvcnMubGFzdCgpLmdldCgpOworICAgICAgICBpZiAo
dG9wTGV2ZWxDb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICBkb2N1bWVu
dEZvcldpbmRvd0V2ZW50cyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4odG9wTGV2ZWxDb250YWlu
ZXIpOworICAgIH0KIAogICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBkaXNwYXRjaGluZyBldmVudHMs
IGdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvcgogICAg
IC8vIHRvIHRoZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0dGluZyBhIGNyYWNrLgotICAgIHZvaWQq
IGRhdGEgPSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwotCi0gICAgLy8gdHJp
Z2dlciBhbnkgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkgZG93bgotICAgIGV2
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKLSAgICBpdC50b0ZpcnN0
KCk7Ci0KLSAgICAvLyBIYW5kbGUgd2luZG93IGV2ZW50cyBmb3IgY2FwdHVyZSBwaGFzZSwgZXhj
ZXB0IGxvYWQgZXZlbnRzLCB0aGlzIHF1aXJrIGlzIG5lZWRlZAotICAgIC8vIGJlY2F1c2UgTW96
aWxsYSB1c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyB0byB0aGUgd2luZG93IG9i
amVjdAotICAgIGlmIChldnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubG9hZEV2ZW50ICYmIGl0
LmN1cnJlbnQoKS0+aXNEb2N1bWVudE5vZGUoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQo
KSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVX
aW5kb3dFdmVudChldnQuZ2V0KCksIHRydWUpOwotCi0gICAgRXZlbnRUYXJnZXROb2RlKiBldmVu
dFRhcmdldE5vZGUgPSAwOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCkgJiYgaXQuY3VycmVudCgp
ICE9IHRoaXMgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7ICsraXQpIHsKLSAgICAgICAg
ZXZlbnRUYXJnZXROb2RlID0gRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpOwotICAg
ICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0
UnVsZXMoZXZlbnRUYXJnZXROb2RlKSk7Ci0KLSAgICAgICAgZXZlbnRUYXJnZXROb2RlLT5oYW5k
bGVMb2NhbEV2ZW50cyhldnQuZ2V0KCksIHRydWUpOwotICAgIH0KLQotICAgIC8vIGRpc3BhdGNo
IHRvIHRoZSBhY3R1YWwgdGFyZ2V0IG5vZGUKLSAgICBpdC50b0xhc3QoKTsKLQotICAgIGlmICgh
ZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkgewotICAgICAgICBldnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkFUX1RBUkdFVCk7Ci0KLSAgICAgICAgZXZlbnRUYXJnZXROb2RlID0gRXZlbnRUYXJn
ZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQo
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoZXZlbnRUYXJnZXROb2RlKSk7Ci0K
LSAgICAgICAgLy8gV2UgZG8gd2FudCBjYXB0dXJpbmcgZXZlbnQgbGlzdGVuZXJzIHRvIGJlIGlu
dm9rZWQgaGVyZSwgZXZlbiB0aG91Z2gKLSAgICAgICAgLy8gdGhhdCB2aW9sYXRlcyB0aGUgc3Bl
Y2lmaWNhdGlvbiBzaW5jZSBNb3ppbGxhIGRvZXMgaXQuCi0gICAgICAgIGV2ZW50VGFyZ2V0Tm9k
ZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCB0cnVlKTsKLQotICAgICAgICBldmVudFRh
cmdldE5vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLQot
ICAgIC0taXQ7Ci0KLSAgICAvLyBvaywgbm93IGJ1YmJsZSB1cCBhZ2FpbiAob25seSBub24tY2Fw
dHVyaW5nIGV2ZW50IGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkKQotICAgIC8vICMjIyByZWNhbGN1
bGF0ZSB0aGUgbm9kZSBjaGFpbiBoZXJlPyAoZS5nLiBpZiB0YXJnZXQgbm9kZSBtb3ZlZCBpbiBk
b2N1bWVudCBieSBwcmV2aW91cyBldmVudCBoYW5kbGVycykKLSAgICAvLyBuby4gdGhlIERPTSBz
cGVjcyBzYXlzOgotICAgIC8vIFRoZSBjaGFpbiBvZiBFdmVudFRhcmdldHMgZnJvbSB0aGUgZXZl
bnQgdGFyZ2V0IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUKLSAgICAvLyBpcyBkZXRlcm1pbmVkIGJl
Zm9yZSB0aGUgaW5pdGlhbCBkaXNwYXRjaCBvZiB0aGUgZXZlbnQuCi0gICAgLy8gSWYgbW9kaWZp
Y2F0aW9ucyBvY2N1ciB0byB0aGUgdHJlZSBkdXJpbmcgZXZlbnQgcHJvY2Vzc2luZywKLSAgICAv
LyBldmVudCBmbG93IHdpbGwgcHJvY2VlZCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0
aGUgdHJlZS4KLSAgICAvLwotICAgIC8vIHNpbmNlIHRoZSBpbml0aWFsIGRpc3BhdGNoIGlzIGJl
Zm9yZSB0aGUgY2FwdHVyaW5nIHBoYXNlLAotICAgIC8vIHRoZXJlJ3Mgbm8gbmVlZCB0byByZWNh
bGN1bGF0ZSB0aGUgbm9kZSBjaGFpbi4KLSAgICAvLyAodG9iaWFzKQotCi0gICAgaWYgKGV2dC0+
YnViYmxlcygpKSB7Ci0gICAgICAgIGV2dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdf
UEhBU0UpOwotCi0gICAgICAgIGZvciAoOyBpdC5jdXJyZW50KCkgJiYgIWV2dC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxlKCk7IC0taXQpIHsKLSAgICAgICAgICAg
IGV2ZW50VGFyZ2V0Tm9kZSA9IEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKTsKLSAg
ICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdU
YXJnZXRSdWxlcyhldmVudFRhcmdldE5vZGUpKTsKLQotICAgICAgICAgICAgZXZlbnRUYXJnZXRO
b2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldnQuZ2V0KCksIGZhbHNlKTsKKyAgICB2b2lkKiBkYXRh
ID0gcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOworICAgIGlmIChldmVudC0+
cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisg
ICAgLy8gVHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0
b3AgYW5kIHdvcmtpbmcgb3VyIHdheSBkb3duLgorICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2
ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworCisgICAgaWYgKGRvY3VtZW50Rm9yV2luZG93RXZlbnRz
KSB7CisgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGRvY3VtZW50Rm9yV2luZG93RXZl
bnRzKTsKKyAgICAgICAgZG9jdW1lbnRGb3JXaW5kb3dFdmVudHMtPmhhbmRsZVdpbmRvd0V2ZW50
KGV2ZW50LmdldCgpLCB0cnVlKTsKKyAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3Bw
ZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworICAgIH0KKyAgICBmb3Ig
KHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7CisgICAgICAgIENvbnRhaW5l
ck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2kgLSAxXS5nZXQoKTsKKyAgICAgICAgZXZlbnQt
PnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoYW5j
ZXN0b3IpKTsKKyAgICAgICAgYW5jZXN0b3ItPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgp
LCB0cnVlKTsKKyAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAg
ICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworICAgIH0KKworICAgIGV2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworCisgICAgLy8gV2UgZG8gd2FudCBjYXB0dXJpbmcg
ZXZlbnQgbGlzdGVuZXJzIHRvIGJlIGludm9rZWQgaGVyZSwgZXZlbiB0aG91Z2gKKyAgICAvLyB0
aGF0IHZpb2xhdGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjaWZpY2F0aW9uOyBNb3pp
bGxhIGRvZXMgaXQuCisgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNw
ZWN0aW5nU1ZHVGFyZ2V0UnVsZXModGhpcykpOworICAgIGhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50
LmdldCgpLCB0cnVlKTsKKyAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAg
ICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKKyAgICBoYW5kbGVMb2NhbEV2ZW50cyhldmVudC5n
ZXQoKSwgZmFsc2UpOworICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAg
ICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisgICAgaWYgKGV2ZW50LT5idWJibGVzKCkgJiYg
IWV2ZW50LT5jYW5jZWxCdWJibGUoKSkgeworICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2
ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3YXkg
dXAuCisgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7
CisKKyAgICAgICAgc2l6ZV90IHNpemUgPSBhbmNlc3RvcnMuc2l6ZSgpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgQ29udGFpbmVyTm9k
ZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaV0uZ2V0KCk7CisgICAgICAgICAgICBldmVudC0+c2V0
Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3Rv
cikpOworICAgICAgICAgICAgYW5jZXN0b3ItPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgp
LCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8
IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRj
aGluZzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZG9jdW1lbnRGb3JXaW5kb3dFdmVudHMpIHsK
KyAgICAgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGRvY3VtZW50Rm9yV2luZG93RXZl
bnRzKTsKKyAgICAgICAgICAgIGRvY3VtZW50Rm9yV2luZG93RXZlbnRzLT5oYW5kbGVXaW5kb3dF
dmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgICAgICAgICAg
Z290byBkb25lRGlzcGF0Y2hpbmc7CiAgICAgICAgIH0KLQotICAgICAgICBpdC50b0ZpcnN0KCk7
Ci0KLSAgICAgICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBl
eGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsgaXMgbmVlZGVkCi0gICAgICAgIC8vIGJlY2F1
c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKLSAg
ICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQgJiYgaXQuY3Vy
cmVudCgpLT5pc0RvY3VtZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYm
ICFldnQtPmNhbmNlbEJ1YmJsZSgpKSB7Ci0gICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJn
ZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0Lmdl
dCgpLCBmYWxzZSk7Ci0gICAgICAgIH0gCiAgICAgfQogCi0gICAgZXZ0LT5zZXRDdXJyZW50VGFy
Z2V0KDApOwotICAgIGV2dC0+c2V0RXZlbnRQaGFzZSgwKTsgLy8gSSBndWVzcyB0aGlzIGlzIGNv
cnJlY3QsIHRoZSBzcGVjIGRvZXMgbm90IHNlZW0gdG8gc2F5Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhbnl0aGluZyBhYm91dCB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIHBoYXNl
LgotCitkb25lRGlzcGF0Y2hpbmc6CisgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Cisg
ICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAKICAgICAvLyBOb3cgY2FsbCB0aGUgcG9zdCBk
aXNwYXRjaC4KLSAgICBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZ0LmdldCgpLCBkYXRhKTsK
KyAgICBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCksIGRhdGEpOwogCi0gICAg
Ly8gbm93IHdlIGNhbGwgYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgKHRoaXMgaXMgbm90IHBh
cnQgb2YgRE9NIC0gaXQgaXMgaW50ZXJuYWwgdG8gV2ViQ29yZSkKLSAgICBpdC50b0xhc3QoKTsK
LQotICAgIGlmIChldnQtPmJ1YmJsZXMoKSkKLSAgICAgICAgZm9yICg7IGl0LmN1cnJlbnQoKSAm
JiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKTsgLS1p
dCkKLSAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwotICAgIGVsc2UgaWYgKCFldnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBFdmVudFRhcmdldE5v
ZGVDYXN0KGl0LmN1cnJlbnQoKSktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0LmdldCgpKTsKLQot
ICAgIC8vIGRlcmVmIGFsbCBub2RlcyBpbiBjaGFpbgotICAgIGl0LnRvRmlyc3QoKTsKLSAgICBm
b3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBpdC5jdXJyZW50KCktPmRlcmVmKCk7
IC8vIHRoaXMgbWF5IGRlbGV0ZSB1cworICAgIC8vIE5vdyB3ZSBjYWxsIGRlZmF1bHQgZXZlbnQg
aGFuZGxlcnMgKG5vdCBwYXJ0IG9mIHRoZSBET00sIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9u
IGRldGFpbCkuCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVudC0+
ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgICAgICAvLyBOb24tYnViYmxpbmcgZXZlbnRzIGNhbGwg
b25seSBvbmUgZGVmYXVsdCBldmVudCBoYW5kbGVyLCB0aGUgb25lIGZvciB0aGUgdGFyZ2V0Lgor
ICAgICAgICBkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKKyAgICAgICAgQVNTRVJU
KCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQorICAgICAgICAgICAgZ290byBkb25lV2l0aERlZmF1bHQ7CisgICAgICAgIGlm
IChldmVudC0+YnViYmxlcygpKSB7CisgICAgICAgICAgICAvLyBCdWJibGluZyBldmVudHMgY2Fs
bCB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVycyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgYnVi
YmxpbmcgcGhhc2UuCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGFuY2VzdG9ycy5zaXplKCk7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgIENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2ldLmdldCgpOwor
ICAgICAgICAgICAgICAgIGFuY2VzdG9yLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOwor
ICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZ290byBkb25lV2l0aERlZmF1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CiAKK2RvbmVXaXRoRGVmYXVsdDoKICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRz
UmVuZGVyaW5nKCk7CiAKLSAgICByZXR1cm4gIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpOyAvLyAj
IyMgd2hhdCBpZiBkZWZhdWx0UHJldmVudGVkIHdhcyBjYWxsZWQgYmVmb3JlIGRpc3BhdGNoRXZl
bnQ/CisgICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCiBib29sIEV2
ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpCkluZGV4OiBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2
aXNpb24gMzkyOTMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkxNiw2ICsxOTE2LDEzIEBAIHZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxzKExpc3RIYXNo
U2UKICAgICBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiB9CiAKK0NvbnRhaW5l
ck5vZGUqIE5vZGU6OmV2ZW50UGFyZW50Tm9kZSgpCit7CisgICAgTm9kZSogcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOworICAgIEFTU0VSVCghcGFyZW50IHx8IHBhcmVudC0+aXNDb250YWluZXJOb2Rl
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4ocGFyZW50KTsKK30K
KwogLy8gLS0tLS0tLS0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9k
b20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMzky
OTMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0luU2hhZG93VHJlZSgpOwogCiAgICAgLy8gVGhlIG5v
ZGUncyBwYXJlbnQgZm9yIHRoZSBwdXJwb3NlIG9mIGV2ZW50IGNhcHR1cmUgYW5kIGJ1YmJsaW5n
LgotICAgIHZpcnR1YWwgTm9kZSogZXZlbnRQYXJlbnROb2RlKCkgeyByZXR1cm4gcGFyZW50Tm9k
ZSgpOyB9CisgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBldmVudFBhcmVudE5vZGUoKTsKIAog
ICAgIGJvb2wgaXNCbG9ja0Zsb3coKSBjb25zdDsKICAgICBib29sIGlzQmxvY2tGbG93T3JCbG9j
a1RhYmxlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkocmV2
aXNpb24gMzkyOTMpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsMTYgKzYxLDE1IEBACiAjaW5jbHVkZSA8bGlieHNsdC94c2x0Lmg+
CiAjZW5kaWYKIAotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFBlbmRpbmdDYWxsYmFja3MgeworY2xhc3MgUGVuZGluZ0NhbGxiYWNrcyA6IE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBQZW5kaW5nQ2FsbGJhY2tzKCkKKyAgICB+UGVuZGlu
Z0NhbGxiYWNrcygpCiAgICAgewotICAgICAgICBtX2NhbGxiYWNrcy5zZXRBdXRvRGVsZXRlKHRy
dWUpOworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jYWxsYmFja3MpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGFwcGVuZFN0YXJ0RWxlbWVudE5TQ2FsbGJhY2soY29uc3QgeG1sQ2hhciogeG1s
TG9jYWxOYW1lLCBjb25zdCB4bWxDaGFyKiB4bWxQcmVmaXgsIGNvbnN0IHhtbENoYXIqIHhtbFVS
SSwgaW50IG5iX25hbWVzcGFjZXMsCkBAIC04Nyw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGNhbGxiYWNrLT5uYW1lc3BhY2VzW2ldID0geG1sU3RyZHVwKG5hbWVzcGFjZXNbaV0pOwog
ICAgICAgICBjYWxsYmFjay0+bmJfYXR0cmlidXRlcyA9IG5iX2F0dHJpYnV0ZXM7CiAgICAgICAg
IGNhbGxiYWNrLT5uYl9kZWZhdWx0ZWQgPSBuYl9kZWZhdWx0ZWQ7Ci0gICAgICAgIGNhbGxiYWNr
LT5hdHRyaWJ1dGVzID0gIHJlaW50ZXJwcmV0X2Nhc3Q8eG1sQ2hhcioqPih4bWxNYWxsb2Moc2l6
ZW9mKHhtbENoYXIqKSAqIG5iX2F0dHJpYnV0ZXMgKiA1KSk7CisgICAgICAgIGNhbGxiYWNrLT5h
dHRyaWJ1dGVzID0gcmVpbnRlcnByZXRfY2FzdDx4bWxDaGFyKio+KHhtbE1hbGxvYyhzaXplb2Yo
eG1sQ2hhciopICogbmJfYXR0cmlidXRlcyAqIDUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuYl9hdHRyaWJ1dGVzOyBpKyspIHsKICAgICAgICAgICAgIC8vIEVhY2ggYXR0cmlidXRl
IGhhcyA1IGVsZW1lbnRzIGluIHRoZSBhcnJheToKICAgICAgICAgICAgIC8vIG5hbWUsIHByZWZp
eCwgdXJpLCB2YWx1ZSBhbmQgYW4gZW5kIHBvaW50ZXIuCkBAIC0xMTgsNyArMTE3LDcgQEAgcHVi
bGljOgogICAgICAgICBjYWxsYmFjay0+cyA9IHhtbFN0cm5kdXAocywgbGVuKTsKICAgICAgICAg
Y2FsbGJhY2stPmxlbiA9IGxlbjsKICAgICAgICAgCi0gICAgICAgIG1fY2FsbGJhY2tzLmFwcGVu
ZChjYWxsYmFjayk7ICAgICAgICAKKyAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNr
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DYWxs
YmFjayhjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0IHhtbENoYXIqIGRhdGEpCkBAIC0xNzUs
MjMgKzE3NCwyMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhbGxBbmRSZW1vdmVGaXJzdENhbGxi
YWNrKFhNTFRva2VuaXplciogdG9rZW5pemVyKQogICAgIHsKLSAgICAgICAgUGVuZGluZ0NhbGxi
YWNrKiBjYiA9IG1fY2FsbGJhY2tzLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2ItPmNhbGwodG9rZW5pemVyKTsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gY2Fs
bGJhY2sobV9jYWxsYmFja3MuZmlyc3QoKSk7CiAgICAgICAgIG1fY2FsbGJhY2tzLnJlbW92ZUZp
cnN0KCk7CisgICAgICAgIGNhbGxiYWNrLT5jYWxsKHRva2VuaXplcik7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tzLmlzRW1wdHkoKTsg
fQogICAgIAogcHJpdmF0ZTogICAgCi0gICAgc3RydWN0IFBlbmRpbmdDYWxsYmFjayB7ICAgICAg
ICAKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgflBlbmRpbmdDYWxsYmFjaygpIHsgfSAKLQor
ICAgIHN0cnVjdCBQZW5kaW5nQ2FsbGJhY2sgeyAgCisgICAgICAgIHZpcnR1YWwgflBlbmRpbmdD
YWxsYmFjaygpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChYTUxUb2tlbml6ZXIqIHRv
a2VuaXplcikgPSAwOwogICAgIH07ICAKICAgICAKLSAgICBzdHJ1Y3QgUGVuZGluZ1N0YXJ0RWxl
bWVudE5TQ2FsbGJhY2sgOiBwdWJsaWMgUGVuZGluZ0NhbGxiYWNrIHsgICAgICAgIAorICAgIHN0
cnVjdCBQZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjayA6IHB1YmxpYyBQZW5kaW5nQ2FsbGJh
Y2sgewogICAgICAgICB2aXJ0dWFsIH5QZW5kaW5nU3RhcnRFbGVtZW50TlNDYWxsYmFjaygpIHsK
ICAgICAgICAgICAgIHhtbEZyZWUoeG1sTG9jYWxOYW1lKTsKICAgICAgICAgICAgIHhtbEZyZWUo
eG1sUHJlZml4KTsKQEAgLTMyMyw4ICszMTksNyBAQCBwcml2YXRlOiAgICAKICAgICAgICAgaW50
IGNvbHVtbk51bWJlcjsKICAgICB9OwogICAgIAotcHVibGljOgotICAgIERlcHJlY2F0ZWRQdHJM
aXN0PFBlbmRpbmdDYWxsYmFjaz4gbV9jYWxsYmFja3M7CisgICAgRGVxdWU8UGVuZGluZ0NhbGxi
YWNrKj4gbV9jYWxsYmFja3M7CiB9OwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIApAQCAtMTM1Miw1ICsxMzQ3LDMgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VB
dHRyaWJ1dGVzKAogfQogCiB9Ci0KLQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCShyZXZpc2lvbiAzOTI5MykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNSwzMCArNTE1LDMwIEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24KICAgICAgICAgc3RhcnRpbmdGb250U2l6ZXMu
c2V0KG5vZGUsIGNvbXB1dGVkRm9udFNpemUobm9kZSkpOwogCiAgICAgLy8gVGhlc2Ugc3BhbnMg
d2VyZSBhZGRlZCBieSB1cy4gSWYgZW1wdHkgYWZ0ZXIgZm9udCBzaXplIGNoYW5nZXMsIHRoZXkg
Y2FuIGJlIHJlbW92ZWQuCi0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8Tm9kZT4gdW5zdHlsZWRTcGFu
czsKKyAgICBWZWN0b3I8UmVmUHRyPEhUTUxFbGVtZW50PiA+IHVuc3R5bGVkU3BhbnM7CiAgICAg
Ci0gICAgTm9kZSAqbGFzdFN0eWxlZE5vZGUgPSAwOwotICAgIGZvciAoTm9kZSAqbm9kZSA9IHN0
YXJ0Tm9kZTsgbm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQgKmVsZW0gPSAwOworICAgIE5vZGUqIGxhc3RTdHls
ZWROb2RlID0gMDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gYmV5
b25kRW5kOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIFJlZlB0
cjxIVE1MRWxlbWVudD4gZWxlbWVudDsKICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkgewogICAgICAgICAgICAgLy8gT25seSB3b3JrIG9uIGZ1bGx5IHNlbGVjdGVkIG5vZGVzLgog
ICAgICAgICAgICAgaWYgKCFub2RlRnVsbHlTZWxlY3RlZChub2RlLCBzdGFydCwgZW5kKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsZW0gPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCAqPihub2RlKTsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUo
KSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVk
Tm9kZSkgewogICAgICAgICAgICAgLy8gTGFzdCBzdHlsZWQgbm9kZSB3YXMgbm90IHBhcmVudCBu
b2RlIG9mIHRoaXMgdGV4dCBub2RlLCBidXQgd2Ugd2lzaCB0byBzdHlsZSB0aGlzCiAgICAgICAg
ICAgICAvLyB0ZXh0IG5vZGUuIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgYWRkIGEgc3R5bGUgc3Bh
biB0byBzdXJyb3VuZCB0aGlzIHRleHQgbm9kZS4KICAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxl
bWVudD4gc3BhbiA9IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAg
ICAgICBpbnNlcnROb2RlQmVmb3JlKHNwYW4uZ2V0KCksIG5vZGUpOwogICAgICAgICAgICAgc3Vy
cm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBub2RlLCBzcGFuLmdldCgpKTsKLSAgICAg
ICAgICAgIGVsZW0gPSBzcGFuLmdldCgpOworICAgICAgICAgICAgZWxlbWVudCA9IHNwYW4ucmVs
ZWFzZSgpOwogICAgICAgICB9ICBlbHNlIHsKICAgICAgICAgICAgIC8vIE9ubHkgaGFuZGxlIEhU
TUwgZWxlbWVudHMgYW5kIHRleHQgbm9kZXMuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICBsYXN0U3R5bGVkTm9kZSA9IG5vZGU7Ci0gICAgICAgIAotICAgICAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGVEZWNsID0gZWxlbS0+Z2V0SW5s
aW5lU3R5bGVEZWNsKCk7CisKKyAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlu
bGluZVN0eWxlRGVjbCA9IGVsZW1lbnQtPmdldElubGluZVN0eWxlRGVjbCgpOwogICAgICAgICBm
bG9hdCBjdXJyZW50Rm9udFNpemUgPSBjb21wdXRlZEZvbnRTaXplKG5vZGUpOwogICAgICAgICBm
bG9hdCBkZXNpcmVkRm9udFNpemUgPSBtYXgoTWluaW11bUZvbnRTaXplLCBzdGFydGluZ0ZvbnRT
aXplcy5nZXQobm9kZSkgKyBhZGp1c3RtZW50KTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSA9IGlubGluZVN0eWxlRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRTaXplKTsKQEAgLTU0OCwxNyArNTQ4LDE4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5UmVsYXRpdmVGb24KICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudEZvbnRTaXplICE9
IGRlc2lyZWRGb250U2l6ZSkgewogICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9udFNpemUp
ICsgInB4IiwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxl
bSwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZURlY2wtPmNzc1RleHQoKSk7CisgICAgICAgICAgICBz
ZXROb2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNs
LT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZURlY2wtPmxl
bmd0aCgpID09IDApIHsKLSAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgc3R5
bGVBdHRyKTsKLSAgICAgICAgICAgIGlmIChpc1Vuc3R5bGVkU3R5bGVTcGFuKGVsZW0pKQotICAg
ICAgICAgICAgICAgIHVuc3R5bGVkU3BhbnMuYXBwZW5kKGVsZW0pOworICAgICAgICAgICAgcmVt
b3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIpOworICAgICAgICAgICAg
aWYgKGlzVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudC5nZXQoKSkpCisgICAgICAgICAgICAgICAg
dW5zdHlsZWRTcGFucy5hcHBlbmQoZWxlbWVudC5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPE5vZGU+IGl0KHVuc3R5bGVk
U3BhbnMpOyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oaXQuY3VycmVudCgpKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHVuc3R5bGVkU3BhbnMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBy
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHVuc3R5bGVkU3BhbnNbaV0uZ2V0KCkpOwogfQog
CiAjdW5kZWYgTm9Gb250RGVsdGEKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTI5MykK
KysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiAr
Mjg4LDExIEBAIHZvaWQgU1ZHRWxlbWVudDo6c2V0U3luY2hyb25pemVkU1ZHQXR0cmkKICAgICBt
X2FyZVNWR0F0dHJpYnV0ZXNWYWxpZCA9IHZhbHVlOwogfQogCitDb250YWluZXJOb2RlKiBTVkdF
bGVtZW50OjpldmVudFBhcmVudE5vZGUoKQoreworICAgIHJldHVybiBtX3NoYWRvd1BhcmVudCA/
IG1fc2hhZG93UGFyZW50IDogU3R5bGVkRWxlbWVudDo6ZXZlbnRQYXJlbnROb2RlKCk7Cit9CisK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAzOTI5
MykKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCAr
NjYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzU2hh
ZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9CiAgICAgICAgIHZpcnR1
YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9Ci0g
ICAgICAgIHZvaWQgc2V0U2hhZG93UGFyZW50Tm9kZShOb2RlKiBub2RlKSB7IG1fc2hhZG93UGFy
ZW50ID0gbm9kZTsgfQotICAgICAgICB2aXJ0dWFsIE5vZGUqIGV2ZW50UGFyZW50Tm9kZSgpIHsg
cmV0dXJuIGlzU2hhZG93Tm9kZSgpID8gc2hhZG93UGFyZW50Tm9kZSgpIDogcGFyZW50Tm9kZSgp
OyB9CisgICAgICAgIHZvaWQgc2V0U2hhZG93UGFyZW50Tm9kZShDb250YWluZXJOb2RlKiBub2Rl
KSB7IG1fc2hhZG93UGFyZW50ID0gbm9kZTsgfQorICAgICAgICB2aXJ0dWFsIENvbnRhaW5lck5v
ZGUqIGV2ZW50UGFyZW50Tm9kZSgpOwogCiAgICAgICAgIC8vIEZvciBTVkdUZXN0cwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEzMCw3
ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGhh
dmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpOwogCi0gICAgICAgIE5vZGUqIG1fc2hhZG93UGFy
ZW50OworICAgICAgICBDb250YWluZXJOb2RlKiBtX3NoYWRvd1BhcmVudDsKICAgICAgICAgbXV0
YWJsZSBIYXNoTWFwPFN0cmluZywgY29uc3QgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqPiBtX3N2
Z1Byb3BlcnR5TWFwOwogCiAgICAgICAgIFNWR0N1cnNvckVsZW1lbnQqIG1fY3Vyc29yRWxlbWVu
dDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31023</attachid>
            <date>2009-06-05 18:07:16 -0700</date>
            <delta_ts>2011-02-16 08:46:59 -0800</delta_ts>
            <desc>another attempt</desc>
            <filename>DeprecatedPtrListPatch.txt</filename>
            <type>text/plain</type>
            <size>6734</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNDQ0NzQpCisrKyByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIxLDEzICsxNTIxLDEyIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiByOwotICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0
PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotCiAgICAgICAgIC8vIEZJWE1FOiBBdm9pZCBkaXNh
YmxpbmcgTGF5b3V0U3RhdGUuIEF0IHRoZSB2ZXJ5IGxlYXN0LCBkb24ndCBkaXNhYmxlIGl0IGZv
ciBmbG9hdHMgb3JpZ2luYXRpbmcKICAgICAgICAgLy8gaW4gdGhpcyBibG9jay4gQmV0dGVyIHll
dCB3b3VsZCBiZSB0byBwdXNoIGV4dHJhIHN0YXRlIGZvciB0aGUgY29udGFpbmVycyBvZiBvdGhl
ciBmbG9hdHMuCiAgICAgICAgIHZpZXcoKS0+ZGlzYWJsZUxheW91dFN0YXRlKCk7Ci0gICAgICAg
IGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gJigqbV9m
bG9hdGluZ09iamVjdHMpW2ldOwogICAgICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmpl
Y3QgaWYgaXQgaXMgb3ZlcmhhbmdpbmcsIGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAg
ICAgICAgICAgIC8vIGlzIG91ciByZXNwb25zaWJpbGl0eSB0byBwYWludCAobV9zaG91bGRQYWlu
dCBpcyBzZXQpLiBXaGVuIHBhaW50QWxsRGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgog
ICAgICAgICAgICAgLy8gY29uZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5k
YW50IG9mIHVzLgpAQCAtMTgwMyw5ICsxODAyLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRG
bG9hdHMoUGFpbnRJbmZvJgogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRl
cmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICg7
IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAgIHNpemVfdCBzaXplID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICYoKm1fZmxvYXRpbmdPYmplY3RzKVtpXTsK
ICAgICAgICAgLy8gT25seSBwYWludCB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZs
YWcgaXMgc2V0LgogICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJl
ci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgUGFpbnRJbmZvIGN1cnJl
bnRQYWludEluZm8ocGFpbnRJbmZvKTsKQEAgLTIwMDgsOCArMjAwNyw5IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrOjpmaWxsU2VsZWN0aW9uR2FwcygKICAgICAgICAgICAgIGZvciAoUmVuZGVyQmxv
Y2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7IGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCk7IGNi
ID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgIGNsaXBPdXRQb3NpdGlv
bmVkT2JqZWN0cyhwYWludEluZm8sIGNiLT54KCksIGNiLT55KCksIGNiLT5tX3Bvc2l0aW9uZWRP
YmplY3RzKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBm
b3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0
aW5nT2JqZWN0cyk7IGl0LmN1cnJlbnQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiByID0gaXQuY3VycmVudCgpOworICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICYo
Km1fZmxvYXRpbmdPYmplY3RzKVtpXTsKICAgICAgICAgICAgICAgICBwYWludEluZm8tPmNvbnRl
eHQtPmNsaXBPdXQoSW50UmVjdCh0eCArIHItPm1fbGVmdCArIHItPm1fcmVuZGVyZXItPm1hcmdp
bkxlZnQoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgKyByLT5tX3RvcCArIHItPm1fcmVuZGVyZXItPm1hcmdpblRvcCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPm1fcmVuZGVy
ZXItPndpZHRoKCksIHItPm1fcmVuZGVyZXItPmhlaWdodCgpKSk7CkBAIC0yMzIyLDE3ICsyMzIy
LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFIKIHsKICAgICBB
U1NFUlQoby0+aXNGbG9hdGluZygpKTsKIAotICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBvZiBzcGVj
aWFsIG9iamVjdHMgaWYgd2UgZG9uJ3QgYWxlYWR5IGhhdmUgb25lCi0gICAgaWYgKCFtX2Zsb2F0
aW5nT2JqZWN0cykgewotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IG5ldyBEZXByZWNhdGVk
UHRyTGlzdDxGbG9hdGluZ09iamVjdD47Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRB
dXRvRGVsZXRlKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERvbid0IGluc2VydCB0
aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAgICAgICBEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVj
dHMpOwotICAgICAgICBGbG9hdGluZ09iamVjdCogZjsKLSAgICAgICAgd2hpbGUgKCAoZiA9IGl0
LmN1cnJlbnQoKSkgKSB7Ci0gICAgICAgICAgICBpZiAoZi0+bV9yZW5kZXJlciA9PSBvKSByZXR1
cm47Ci0gICAgICAgICAgICArK2l0OworICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCisgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3IFZlY3RvcjxGbG9hdGluZ09iamVjdD47CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3Mg
YWxyZWFkeSBpbiB0aGUgdmVjdG9yLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoKCptX2Zsb2F0aW5nT2JqZWN0cylbaV0ubV9yZW5kZXJlciA9
PSBvKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM1
NSwxNCArMjM1MiwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChS
CiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB7
CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0
SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAg
IHdoaWxlIChpdC5jdXJyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpdC5jdXJyZW50KCktPm1f
cmVuZGVyZXIgPT0gbykgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICYoKm1fZmxvYXRpbmdPYmplY3RzKVtpXTsK
KyAgICAgICAgICAgIGlmIChyLT5tX3JlbmRlcmVyID09IG8pIHsKICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJ
blZlcnRpY2FsUmFuZ2UoMCwgaXQuY3VycmVudCgpLT5tX2JvdHRvbSk7Ci0gICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZVJlZihpdC5jdXJyZW50KCkpOworICAgICAgICAg
ICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluVmVydGljYWxSYW5nZSgwLCByLT5tX2JvdHRvbSk7
CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZShpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2l0OwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMjM3MSw4ICsyMzY5LDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRzKCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+bGFzdCgpOworCisgICAgc2l6ZV90IGkgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6
ZSgpOworICAgIGlmICghaSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRpbmdP
YmplY3QqIGYgPSAmKCptX2Zsb2F0aW5nT2JqZWN0cylbLS1pXTsKIAogICAgIC8vIElmIGFsbCBm
bG9hdHMgaGF2ZSBhbHJlYWR5IGJlZW4gcG9zaXRpb25lZCwgdGhlbiB3ZSBoYXZlIG5vIHdvcmsg
dG8gZG8uCiAgICAgaWYgKCFmIHx8IGYtPm1fdG9wICE9IC0xKQpAQCAtMjM4MSwxMCArMjM4Mywx
NCBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgLy8gTW92ZSBi
YWNrd2FyZHMgdGhyb3VnaCBvdXIgZmxvYXRpbmcgb2JqZWN0IGxpc3QgdW50aWwgd2UgZmluZCBh
IGZsb2F0IHRoYXQgaGFzCiAgICAgLy8gYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQuICBUaGVuIHdl
J2xsIGJlIGFibGUgdG8gbW92ZSBmb3J3YXJkLCBwb3NpdGlvbmluZyBhbGwgb2YKICAgICAvLyB0
aGUgbmV3IGZsb2F0cyB0aGF0IG5lZWQgaXQuCi0gICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9h
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5nZXRQcmV2KCk7Ci0gICAgd2hpbGUgKGxhc3RGbG9hdCAm
JiBsYXN0RmxvYXQtPm1fdG9wID09IC0xKSB7Ci0gICAgICAgIGYgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+cHJldigpOwotICAgICAgICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Z2V0UHJl
digpOworICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAwOworICAgIHdoaWxlIChpKSB7
CisgICAgICAgIGxhc3RGbG9hdCA9ICYoKm1fZmxvYXRpbmdPYmplY3RzKVtpIC0gMV07CisgICAg
ICAgIGlmIChsYXN0RmxvYXQtPm1fdG9wICE9IC0xKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGYgPSBsYXN0RmxvYXQ7CisgICAgICAgIGxhc3RGbG9hdCA9IDA7CisgICAgICAgIC0taTsK
ICAgICB9CiAKICAgICBpbnQgeSA9IGhlaWdodCgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDQ0
NDc0KQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw3
ICs0NjcsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxSZW5kZXJCb3gqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgRGVwcmVjYXRlZFB0
ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKKyAgICBWZWN0b3I8Rmxv
YXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICBMaXN0SGFzaFNldDxSZW5kZXJC
b3gqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKIAogICAgIC8vIEFuIGlubGluZSBjYW4gYmUgc3Bs
aXQgd2l0aCBibG9ja3Mgb2NjdXJyaW5nIGluIGJldHdlZW4gdGhlIGlubGluZSBjb250ZW50LgpJ
bmRleDogcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9iaWRpLmNw
cAkocmV2aXNpb24gNDQ0NzQpCisrKyByZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bihiCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgp
IDogMDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmpl
Y3RzID8gJm1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogCiAgICAgICAgIGlmICghc21p
ZHBvaW50cykKICAgICAgICAgICAgIHNtaWRwb2ludHMgPSBuZXcgVmVjdG9yPElubGluZUl0ZXJh
dG9yPigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82644</attachid>
            <date>2011-02-16 08:47:06 -0800</date>
            <delta_ts>2011-02-21 11:09:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-17425-20110216174703.patch</filename>
            <type>text/plain</type>
            <size>28151</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwODdiMzE3N2Y5OTdlYzE2OTg1MWFmMGZmMjcwZGE0OGIzMzk1MWM5Li4w
YWQwYzlhOGZiMzNiMjAzOGM4NWI0YzczYjlkOTk4ZTZlZTdhZDM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTEtMDItMTYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3Vs
YWluQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFbGltaW5hdGUgRGVwcmVjYXRlZFB0ckxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDI1CisKKyAgICAgICAgR2V0IHJpZCBvZiBE
ZXByZWNhdGVkUHRyTGlzdCBmcm9tIFJlbmRlckJsb2NrLCB1c2UgYQorICAgICAgICB2ZWN0b3Ig
dG8gc3RvcmUgdGhlIGxpc3Qgb2YgZmxvYXRpbmcgb2JqZWN0cy4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6flJl
bmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zy
b21GbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFu
Z2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6aGl0VGVzdEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRq
dXN0Rm9yQm9yZGVyRml0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUpOgorCiAyMDExLTAyLTE0ICBNaWtoYWls
IE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IGIzNzg2YTY3MmZjZmQ4OGMwM2I2YTc5YmM5ZGIyZjBhYjE3NjZmN2EuLmE4MGUwZDhiOGUx
NGIwZTFlYzk1MmI4YzQ2YjM4NDI4MTY1NzAwZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtMTIyLDcgKzEyMiwxMiBAQCBSZW5kZXJCbG9jazo6UmVuZGVy
QmxvY2soTm9kZSogbm9kZSkKIAogUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7Ci0gICAg
ZGVsZXRlIG1fZmxvYXRpbmdPYmplY3RzOworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7CisgICAg
ICAgIGRlbGV0ZSBtX2Zsb2F0aW5nT2JqZWN0czsKKyAgICB9CisKICAgICBkZWxldGUgbV9wb3Np
dGlvbmVkT2JqZWN0czsKICAgICAKICAgICBpZiAoaGFzQ29sdW1ucygpKQpAQCAtMTM3OSw5ICsx
Mzg0LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkKIHsKICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRpbmdP
YmplY3QqIHI7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyAr
K2l0KSB7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5z
aXplKCk7ICsraSkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5hdChpKTsKICAgICAgICAgaWYgKHItPm1faXNEZXNjZW5kYW50KQogICAgICAgICAgICAg
YWRkT3ZlcmZsb3dGcm9tQ2hpbGQoci0+bV9yZW5kZXJlciwgSW50U2l6ZSh4UG9zaXRpb25Gb3JG
bG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
cikpKTsKICAgICB9CkBAIC0yMTcyLDE0ICsyMTc3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJl
cGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgICAg
IEFTU0VSVChtX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVj
dHMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBGbG9hdGluZ09iamVj
dCogcjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKIAogICAgICAgICAvLyBGSVhNRTogQXZvaWQgZGlzYWJs
aW5nIExheW91dFN0YXRlLiBBdCB0aGUgdmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJsZSBpdCBmb3Ig
ZmxvYXRzIG9yaWdpbmF0aW5nCiAgICAgICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQg
d291bGQgYmUgdG8gcHVzaCBleHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIg
ZmxvYXRzLgogICAgICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwotICAgICAgICBm
b3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7CiAgICAgICAgICAg
ICAvLyBPbmx5IHJlcGFpbnQgdGhlIG9iamVjdCBpZiBpdCBpcyBvdmVyaGFuZ2luZywgaXMgbm90
IGluIGl0cyBvd24gbGF5ZXIsIGFuZAogICAgICAgICAgICAgLy8gaXMgb3VyIHJlc3BvbnNpYmls
aXR5IHRvIHBhaW50IChtX3Nob3VsZFBhaW50IGlzIHNldCkuIFdoZW4gcGFpbnRBbGxEZXNjZW5k
YW50cyBpcyB0cnVlLCB0aGUgbGF0dGVyCiAgICAgICAgICAgICAvLyBjb25kaXRpb24gaXMgcmVw
bGFjZWQgd2l0aCBiZWluZyBhIGRlc2NlbmRhbnQgb2YgdXMuCkBAIC0yNTAzLDkgKzI1MDYsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHksIGJvb2wgcHJlc2VydgogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQ
dHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0g
ICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mbG9hdGluZ09iamVjdHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiByID0gbV9mbG9hdGluZ09iamVjdHMtPmF0KGkpOwogICAgICAgICAvLyBPbmx5
IHBhaW50IHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQgZmxhZyBpcyBzZXQuCiAgICAg
ICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRp
bmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3VycmVudFBhaW50SW5mbyhwYWlu
dEluZm8pOwpAQCAtMjc0Miw4ICsyNzQ0LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVj
dGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3QKICAg
ICAgICAgICAgIGZvciAoUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7IGNiICYm
ICFjYi0+aXNSZW5kZXJWaWV3KCk7IGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAg
ICAgICAgICAgIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhwYWludEluZm8sIEludFBvaW50KGNi
LT54KCksIGNiLT55KCkpLCBjYi0+bV9wb3NpdGlvbmVkT2JqZWN0cyk7IC8vIEZJWE1FOiBOb3Qg
cmlnaHQgZm9yIGZsaXBwZWQgd3JpdGluZyBtb2Rlcy4KICAgICAgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzKSB7Ci0gICAgICAgICAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Rmxv
YXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7IGl0LmN1cnJlbnQoKTsgKytpdCkg
ewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQuY3VycmVudCgpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IG1fZmxvYXRpbmdP
YmplY3RzLT5hdChpKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGZsb2F0Qm94ID0gSW50UmVj
dChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGlu
Z01hcmdpbihyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4ociksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+
bV9yZW5kZXJlci0+d2lkdGgoKSwgci0+bV9yZW5kZXJlci0+aGVpZ2h0KCkpOwpAQCAtMzA1MCwx
NyArMzA1MiwxNCBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjpp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgQVNTRVJUKG8tPmlzRmxvYXRp
bmcoKSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmplY3RzIGlmIHdl
IGRvbid0IGFsZWFkeSBoYXZlIG9uZQotICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpIHsKLSAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdP
YmplY3Q+OwotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsK
LSAgICB9IGVsc2UgeworICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzID0gbmV3IFZlY3RvcjxGbG9hdGluZ09iamVjdCo+OworICAgIGVsc2Ugewog
ICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkg
aW4gdGhlIGxpc3QKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09i
amVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGY7
Ci0gICAgICAgIHdoaWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7CiAgICAg
ICAgICAgICBpZiAoZi0+bV9yZW5kZXJlciA9PSBvKQogICAgICAgICAgICAgICAgIHJldHVybiBm
OwotICAgICAgICAgICAgKytpdDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA5NSwxMiArMzA5
NCwxMiBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRG
bG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9h
dGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7
Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpt
X2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgIHdoaWxlIChpdC5jdXJyZW50KCkpIHsKLSAgICAg
ICAgICAgIGlmIChpdC5jdXJyZW50KCktPm1fcmVuZGVyZXIgPT0gbykgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7Cisg
ICAgICAgICAgICBpZiAoZi0+bV9yZW5kZXJlciA9PSBvKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3Ag
PSBsb2dpY2FsVG9wRm9yRmxvYXQoaXQuY3VycmVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQoaXQuY3VycmVudCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQo
Zik7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRv
bUZvckZsb2F0KGYpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gU3BlY2lhbC1jYXNlIHplcm8tIGFuZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRzOiB0
aG9zZSBkb24ndCB0b3VjaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRo
ZXkncmUgb24sIGJ1dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCkBAIC0z
MTA4LDkgKzMxMDcsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94KiBvKQogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gbWF4KGxv
Z2ljYWxCb3R0b20sIGxvZ2ljYWxUb3AgPT0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgPyBs
b2dpY2FsVG9wIDogbG9naWNhbFRvcCArIDEpOwogICAgICAgICAgICAgICAgICAgICBtYXJrTGlu
ZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBsb2dpY2FsQm90dG9tKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZVJlZihpdC5jdXJyZW50
KCkpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBmOworICAgICAgICAgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKytpdDsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMxMjIsNiAr
MzEyMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZs
b2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQsIGludCBsb2dpCiAgICAgCiAgICAgRmxvYXRpbmdPYmpl
Y3QqIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgIHdoaWxlIChjdXJyICE9
IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0KGN1
cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7CisgICAgICAgIGRlbGV0ZSBjdXJyOwogICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlTGFzdCgpOwogICAgICAgICBjdXJyID0gbV9mbG9hdGlu
Z09iamVjdHMtPmxhc3QoKTsKICAgICB9CkBAIC0zMTMxLDM2ICszMTMyLDQxIEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsKKworICAgIGlmIChtX2Zs
b2F0aW5nT2JqZWN0cy0+c2l6ZSgpIDw9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRpbmdPYmplY3QgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
bGFzdCgpOwogCiAgICAgLy8gSWYgYWxsIGZsb2F0cyBoYXZlIGFscmVhZHkgYmVlbiBwb3NpdGlv
bmVkLCB0aGVuIHdlIGhhdmUgbm8gd29yayB0byBkby4KLSAgICBpZiAoIWZsb2F0aW5nT2JqZWN0
IHx8IGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQorICAgIGlmIChsYXN0RmxvYXRpbmdPYmpl
Y3QtPmlzUGxhY2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE1vdmUgYmFj
a3dhcmRzIHRocm91Z2ggb3VyIGZsb2F0aW5nIG9iamVjdCBsaXN0IHVudGlsIHdlIGZpbmQgYSBm
bG9hdCB0aGF0IGhhcwogICAgIC8vIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkLiAgVGhlbiB3ZSds
bCBiZSBhYmxlIHRvIG1vdmUgZm9yd2FyZCwgcG9zaXRpb25pbmcgYWxsIG9mCiAgICAgLy8gdGhl
IG5ldyBmbG9hdHMgdGhhdCBuZWVkIGl0LgotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+Z2V0UHJldigpOwotICAgIHdoaWxlIChsYXN0RmxvYXQgJiYg
IWxhc3RGbG9hdC0+aXNQbGFjZWQoKSkgewotICAgICAgICBmbG9hdGluZ09iamVjdCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5wcmV2KCk7Ci0gICAgICAgIGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5nZXRQcmV2KCk7CisgICAgaW50IGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdEluZGV4ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNpemUoKSAtIDI7CisgICAgd2hpbGUgKGxhc3RQbGFjZWRGbG9h
dGluZ09iamVjdEluZGV4ID49IDApIHsKKyAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5h
dChsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3RJbmRleCktPmlzUGxhY2VkKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgLS1sYXN0UGxhY2VkRmxvYXRpbmdPYmplY3RJbmRleDsKICAgICB9
CiAKICAgICBpbnQgbG9naWNhbFRvcCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICAKICAgICAvLyBU
aGUgZmxvYXQgY2Fubm90IHN0YXJ0IGFib3ZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGxhc3Qg
cG9zaXRpb25lZCBmbG9hdC4KLSAgICBpZiAobGFzdEZsb2F0KQorICAgIGlmIChsYXN0UGxhY2Vk
RmxvYXRpbmdPYmplY3RJbmRleCA+PSAwKSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0
RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQobGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0SW5k
ZXgpOwogICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0Rmxv
YXQpLCBsb2dpY2FsVG9wKTsKKyAgICB9CiAKICAgICAvLyBOb3cgd2FsayB0aHJvdWdoIHRoZSBz
ZXQgb2YgdW5wb3NpdGlvbmVkIGZsb2F0cyBhbmQgcGxhY2UgdGhlbS4KLSAgICB3aGlsZSAoZmxv
YXRpbmdPYmplY3QpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gbGFzdFBsYWNlZEZsb2F0aW5nT2Jq
ZWN0SW5kZXggKyAxOyBpIDwgbV9mbG9hdGluZ09iamVjdHMtPnNpemUoKTsgKytpKSB7CisgICAg
ICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YXQoaSk7CiAgICAgICAgIC8vIFRoZSBjb250YWluaW5nIGJsb2NrIGlzIHJlc3BvbnNpYmxlIGZv
ciBwb3NpdGlvbmluZyBmbG9hdHMsIHNvIGlmIHdlIGhhdmUgZmxvYXRzIGluIG91cgogICAgICAg
ICAvLyBsaXN0IHRoYXQgY29tZSBmcm9tIHNvbWV3aGVyZSBlbHNlLCBkbyBub3QgYXR0ZW1wdCB0
byBwb3NpdGlvbiB0aGVtLgotICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkt
PmNvbnRhaW5pbmdCbG9jaygpICE9IHRoaXMpIHsKLSAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0
ID0gbV9mbG9hdGluZ09iamVjdHMtPm5leHQoKTsKKyAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0
LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSAhPSB0aGlzKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KIAogICAgICAgICBSZW5kZXJCb3gqIGNoaWxkQm94ID0gZmxvYXRp
bmdPYmplY3QtPnJlbmRlcmVyKCk7CiAgICAgICAgIGludCBjaGlsZExvZ2ljYWxMZWZ0TWFyZ2lu
ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWFyZ2luU3RhcnRGb3JDaGls
ZChjaGlsZEJveCkgOiBtYXJnaW5FbmRGb3JDaGlsZChjaGlsZEJveCk7CkBAIC0zMjQyLDggKzMy
NDgsNiBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIC8v
IElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAo
Y2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgY2hp
bGRCb3gtPnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKG9sZFJlY3QpOwotCi0gICAgICAgIGZs
b2F0aW5nT2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMtPm5leHQoKTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0zMjU0LDE2ICszMjU4LDE4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09i
amVjCiAgICAgaWYgKCFkaWRQb3NpdGlvbiB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0
KQogICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247CiAgICAgCisgICAgQVNTRVJUKG1fZmxvYXRp
bmdPYmplY3RzLT5sYXN0KCkgPT0gbmV3RmxvYXQpOworCiAgICAgaW50IGZsb2F0TG9naWNhbFRv
cCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CiAgICAgaW50IHBhZ2luYXRpb25TdHJ1
dCA9IG5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dDsKLSAgICBGbG9hdGluZ09iamVjdCogZiA9
IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CiAgICAgCi0gICAgQVNTRVJUKGYgPT0gbmV3Rmxv
YXQpOwotCiAgICAgaWYgKGZsb2F0TG9naWNhbFRvcCAtIHBhZ2luYXRpb25TdHJ1dCAhPSBsb2dp
Y2FsSGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBkaWRQb3NpdGlvbjsKIAotICAgIGZvciAoZiA9
IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCk7IGYgJiYgZiAhPSBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lOyBmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKSkgeworICAgIGZvciAoaW50IGkg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpIC0gMjsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7CisgICAgICAgIGlm
IChmID09IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgaWYgKGxvZ2ljYWxUb3BGb3JGbG9hdChmKSA9PSBsb2dpY2FsSGVpZ2h0KCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVCghZi0+bV9wYWdpbmF0aW9uU3RydXQpOwogICAgICAgICAgICAgZi0+
bV9wYWdpbmF0aW9uU3RydXQgPSBwYWdpbmF0aW9uU3RydXQ7CkBAIC0zMzY5LDkgKzMzNzUsOSBA
QCBpbnQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShpbnQgbG9naWNhbFRv
cCwgaW50IGZpeGVkT2Zmc2V0LCBib29sCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAg
ICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5n
ID0gMTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJM
aXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAg
ICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gbV9mbG9hdGluZ09iamVjdHMtPmF0KGkpOwogICAg
ICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxv
Z2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAogICAgICAg
ICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0CiAgICAg
ICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBsZWZ0KSB7CkBAIC0zMzk5
LDkgKzM0MDUsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUo
aW50IGxvZ2ljYWxUb3AsIGludCBmaXhlZE9mZnNldCwgYm9vbAogICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cykgewogICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgKmhl
aWdodFJlbWFpbmluZyA9IDE7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAgICBE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOwotICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YXQoaSk7CiAgICAgICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxv
YXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2Fs
VG9wCiAgICAgICAgICAgICAgICAgJiYgci0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9h
dFJpZ2h0CiAgICAgICAgICAgICAgICAgJiYgbG9naWNhbExlZnRGb3JGbG9hdChyKSA8IHJpZ2h0
KSB7CkBAIC0zNDM1LDkgKzM0NDAsOCBAQCBpbnQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2lj
YWxCb3R0b21CZWxvdyhpbnQgbG9naWNhbEhlaWdodCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBpbnQgYm90dG9tID0gSU5UX01BWDsKLSAgICBGbG9hdGluZ09iamVjdCogcjsKLSAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGlu
Z09iamVjdHMpOwotICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7CiAg
ICAgICAgIGludCBmbG9hdEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKTsKICAgICAg
ICAgaWYgKGZsb2F0Qm90dG9tID4gbG9naWNhbEhlaWdodCkKICAgICAgICAgICAgIGJvdHRvbSA9
IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKQEAgLTM0NTEsOSArMzQ1NSw4IEBAIGludCBSZW5k
ZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZs
b2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1
cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2JqZWN0
KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpt
X2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQp
IHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7
ICsraSkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IG1fZmxvYXRpbmdPYmplY3RzLT5h
dChpKTsKICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgci0+dHlwZSgpICYgZmxvYXRUeXBl
KQogICAgICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20s
IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSk7CiAgICAgfQpAQCAtMzQ5MiwxMSArMzQ5NSwxNSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAKICAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpIHsKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5maXJzdCgpOwotICAgICAgICAgICAgd2hpbGUgKEZsb2F0aW5nT2Jq
ZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPnRha2UoKSkKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9mbG9hdGluZ09iamVjdHMtPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSk7CiAg
ICAgICAgICAgICAgICAgZmxvYXRNYXAuYWRkKGYtPm1fcmVuZGVyZXIsIGYpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgZGVsZXRl
IG1fZmxvYXRpbmdPYmplY3RzLT5hdChpKTsKKyAgICAgICAgfQorICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cy0+Y2xlYXIoKTsKICAgICB9CiAKICAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3Mg
ZmxvYXRzIGlmIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNl
LCB3ZSB3aWxsIGFkZCAKQEAgLTM1NDIsNyArMzU0OSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNs
ZWFyRmxvYXRzKCkKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0g
ICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmZp
cnN0KCk7IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmF0
KGkpOwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9
IGZsb2F0TWFwLmdldChmLT5tX3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmKTsKICAgICAgICAgICAgICAgICBpZiAo
b2xkRmxvYXRpbmdPYmplY3QpIHsKQEAgLTM1ODgsOCArMzU5Niw4IEBAIGludCBSZW5kZXJCbG9j
azo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBpbnQgbG9naWNhbExl
ZnRPZmZzZXQsCiAKICAgICAvLyBGbG9hdHMgdGhhdCB3aWxsIHJlbWFpbiB0aGUgY2hpbGQncyBy
ZXNwb25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFjdG9yIGludG8gaXRzCiAgICAgLy8gb3Zl
cmZsb3cuCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQo
KmNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdCogcjsg
KHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5hdChpKTsKICAgICAgICAgaW50
IGxvZ2ljYWxCb3R0b20gPSBjaGlsZC0+bG9naWNhbFRvcCgpICsgbG9naWNhbEJvdHRvbUZvckZs
b2F0KHIpOwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0Rmxv
YXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIApAQCAtMzYxMywxMCArMzYyMSw5IEBA
IGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxk
LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1f
aXNEZXNjZW5kYW50ID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUg
ZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlmICghbV9mbG9h
dGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBu
ZXcgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgVmVjdG9yPEZsb2F0aW5nT2JqZWN0Kj47
CisKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YXBwZW5kKGZsb2F0aW5nT2Jq
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTM2NDcsMTggKzM2NTQsMTkg
QEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2
LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsIGkKIAogICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2lu
VG9wKCkpOwogICAgICAgICAgICAgICAgIAotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8
RmxvYXRpbmdPYmplY3Q+IGl0KCpwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yIChG
bG9hdGluZ09iamVjdCAqcjsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgZm9yIChz
aXplX3QgcHJldkluZGV4ID0gMDsgcHJldkluZGV4IDwgcHJldi0+bV9mbG9hdGluZ09iamVjdHMt
PnNpemUoKTsgKytwcmV2SW5kZXgpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBwcmV2
LT5tX2Zsb2F0aW5nT2JqZWN0cy0+YXQocHJldkluZGV4KTsKICAgICAgICAgaWYgKGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKICAgICAgICAgICAgIC8vIFRo
ZSBvYmplY3QgbWF5IGFscmVhZHkgYmUgaW4gb3VyIGxpc3QuIENoZWNrIGZvciBpdCB1cCBmcm9u
dCB0byBhdm9pZAogICAgICAgICAgICAgLy8gY3JlYXRpbmcgZHVwbGljYXRlIGVudHJpZXMuCiAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IDA7CiAgICAgICAgICAgICBpZiAobV9mbG9h
dGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICAgICAgICAg
IHdoaWxlICgoZiA9IGl0LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGYt
Pm1fcmVuZGVyZXIgPT0gci0+bV9yZW5kZXJlcikKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogY3VycmVudEYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Ri0+bV9yZW5kZXJlciA9PSBy
LT5tX3JlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gY3VycmVudEY7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgKytpdDsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICghZikgewpAQCAtMzY4MywxMCArMzY5MSw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxM
ZWZ0T2Zmc2V0LCBpCiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1fcmVuZGVyZXIgPSBy
LT5tX3JlbmRlcmVyOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNy
ZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMgPSBuZXcgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAg
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAg
ICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgVmVjdG9yPEZsb2F0aW5n
T2JqZWN0Kj47CiAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChmbG9h
dGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3MDIsMTEgKzM3MDgsOSBA
QCBib29sIFJlbmRlckJsb2NrOjphdm9pZHNGbG9hdHMoKSBjb25zdAogYm9vbCBSZW5kZXJCbG9j
azo6Y29udGFpbnNGbG9hdChSZW5kZXJPYmplY3QqIG8pCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmpl
Y3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgIHdoaWxlIChpdC5jdXJyZW50KCkp
IHsKLSAgICAgICAgICAgIGlmIChpdC5jdXJyZW50KCktPm1fcmVuZGVyZXIgPT0gbykKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSktPm1fcmVuZGVyZXIg
PT0gbykKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICsraXQ7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzg2Nyw5ICszODcxLDggQEAg
Ym9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgdHkgKz0gdG9SZW5kZXJWaWV3KHRoaXMp
LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWSgpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdDsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2Jq
ZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoaXQudG9MYXN0KCk7IChmbG9h
dGluZ09iamVjdCA9IGl0LmN1cnJlbnQoKSk7IC0taXQpIHsKKyAgICBmb3IgKGludCBpID0gbV9m
bG9hdGluZ09iamVjdHMtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5hdChpKTsKICAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5tX3Nob3VsZFBhaW50ICYmICFmbG9hdGluZ09iamVj
dC0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgaW50
IHhPZmZzZXQgPSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVj
dCkgLSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+eCgpOwogICAgICAgICAgICAgaW50IHlP
ZmZzZXQgPSB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkg
LSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+eSgpOwpAQCAtNTQ3Niw5ICs1NDc5LDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGlu
dCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2Zsb2F0
aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgICAgICAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGlu
Z09iamVjdHMpOwotICAgICAgICAgICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkg
eworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IG1fZmxv
YXRpbmdPYmplY3RzLT5hdChpKTsKICAgICAgICAgICAgICAgICAvLyBPbmx5IGV4YW1pbmUgdGhl
IG9iamVjdCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFnIGlzIHNldC4KICAgICAgICAgICAgICAg
ICBpZiAoci0+bV9zaG91bGRQYWludCkgewogICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRM
ZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5tX3JlbmRlcmVy
LT54KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDJjNjEzMzE5
NTA1MDQ0YWRmMzNjYWY5ZDhhOGU0NmUzODk1OWMyYmQuLjMwNTY0MTYxMTQwZWM0YTdkM2ExNDQx
ZWU3ZDYwMWE0NDQwZTNkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
CkBAIC02OTYsNyArNjk2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdExpbmVQb3NpdGlv
bkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCosIGludCYgZGVsdGFPZmZzZXQpOyAvLyBDb21w
dXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEgbGluZSBhdCB0aGUgdG9wIG9mIHRo
ZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZS4KIAogICAg
IHR5cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgSXRl
cmF0b3I7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5n
T2JqZWN0czsKKyAgICBWZWN0b3I8RmxvYXRpbmdPYmplY3QqPiogbV9mbG9hdGluZ09iamVjdHM7
CiAgICAgCiAgICAgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldCogbV9wb3NpdGlvbmVkT2Jq
ZWN0czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAppbmRleCA5NDVhMGQxOGM5NWQyY2Q3YmZlZjY1NmZjNDU3N2I0ZGFhYjUxYjBh
Li4yZDZkYWQ3NjYzYTg4YTdiMGRiMjVkMmZjNmEzNmZkYWVhZGVjMDkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNjA4
LDcgKzYwOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09i
amVjdHMgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAgRmxvYXRpbmdP
YmplY3QqIGxhc3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2l6ZSgpID4gMCkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKIAogICAgICAg
ICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2lu
dFN0YXRlKCk7CiAKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJ
bmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQog
ICAgICAgICAgICAgYm9vbCBoeXBoZW5hdGVkOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBJ
bmxpbmVJdGVyYXRvciBvbGRFbmQgPSBlbmQ7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSA9IG1fZmxvYXRpbmdPYmplY3RzID8gbV9mbG9hdGlu
Z09iamVjdHMtPmxhc3QoKSA6IDA7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2l6ZSgpID4gMCkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKICAgICAg
ICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGlu
ZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGh5cGhlbmF0ZWQsICZjbGVhciwgbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZXIucG9zaXRp
b24oKS5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuZGVsZXRlUnVucygpOwpA
QCAtODI4LDEzICs4MjgsMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290Qm94KCkp
IHsKKyAgICAgICAgICAgICAgICBpbnQgbmV4dEZsb2F0T2JqZWN0SW5kZXggPSAwOwogICAgICAg
ICAgICAgICAgIGlmIChsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7IGYgIT0gbGFzdEZsb2F0
OyBmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKSkgeworICAgICAgICAgICAgICAgICAgICBp
bnQgaSA9IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoaSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMtPmF0KGkpID09IGxhc3RGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHRGbG9hdE9iamVjdEluZGV4ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPm5leHQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAgICAg
ICAgZm9yIChGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5jdXJyZW50KCk7
IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBuZXh0RmxvYXRPYmplY3RJbmRleDsgaSA8
IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5hdChpKTsKICAgICAgICAgICAg
ICAgICAgICAgbGFzdFJvb3RCb3goKS0+ZmxvYXRzKCkuYXBwZW5kKGYtPm1fcmVuZGVyZXIpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZi0+bV9yZW5kZXJlciA9PSBmbG9hdHNbZmxvYXRJ
bmRleF0ub2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBmbG9hdCdzIGdlb21l
dHJ5IGhhcyBjaGFuZ2VkLCBnaXZlIHVwIG9uIHN5bmNpbmcgd2l0aCBjbGVhbiBsaW5lcy4KQEAg
LTg0Miw3ICs4NDgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tGb3JFbmRMaW5lTWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgZmxvYXRJbmRleCsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXN0
RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgICAgICAgICAgICAgIGxhc3RG
bG9hdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCkgPiAwID8gbV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKSA6IDA7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0
YXRlLnJlc2V0KCk7CkBAIC05MDUsMTUgKzkxMSwyMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2lj
YQogICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0T3ZlcmZsb3dGcm9t
TG9naWNhbFJlY3RzKGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92ZXJmbG93
KTsKICAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50
IG5leHRGbG9hdE9iamVjdEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChsYXN0RmxvYXQpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVj
dHMtPmxhc3QoKTsgZiAhPSBsYXN0RmxvYXQ7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigp
KSB7CisgICAgICAgICAgICAgICAgaW50IGkgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpIC0g
MTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+YXQoaSkgPT0gbGFzdEZsb2F0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0RmxvYXRPYmplY3RJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgLS1pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cy0+bmV4dCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0
KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmN1cnJlbnQoKTsgZjsgZiA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5uZXh0KCkpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
bmV4dEZsb2F0T2JqZWN0SW5kZXg7IGkgPCBtX2Zsb2F0aW5nT2JqZWN0cy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5hdChpKTsKICAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5mbG9hdHMoKS5hcHBlbmQo
Zi0+bV9yZW5kZXJlcik7Ci0gICAgICAgICAgICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+bGFzdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNpemUoKSA+IDAgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsK
ICAgICAgICAgfQogICAgICAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7CiAg
ICAgICAgIC8vIEZsb2F0cyB0aGF0IGRpZCBub3QgaGF2ZSBsYXlvdXQgZGlkIG5vdCByZXBhaW50
IHdoZW4gd2UgbGFpZCB0aGVtIG91dC4gVGhleSB3b3VsZCBoYXZlCkBAIC0xMTUwLDcgKzExNjMs
OCBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBJbmxpbmVCaWRpUmVz
b2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbgogCiAgICAgICAgIGludCBsb2dpY2FsQm90dG9t
ID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7IGY7
IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mbG9hdGluZ09iamVjdHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5hdChpKTsKICAgICAgICAgICAg
IGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPj0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90
dG9tRm9yRmxvYXQoZikgPCBsb2dpY2FsQm90dG9tKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTE4NCw3ICsxMTk4LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6
bWF0Y2hlZEVuZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3Qg
SW5saW4KIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJs
b2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICAgICAgICAgIGZvciAo
RmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsgZjsgZiA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZmxvYXRpbmdPYmplY3RzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5hdChpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmKSA+PSBsb2dpY2Fs
VG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmKSA8IGxvZ2ljYWxCb3R0b20pCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83194</attachid>
            <date>2011-02-21 11:09:52 -0800</date>
            <delta_ts>2011-02-27 10:29:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-17425-20110221200948.patch</filename>
            <type>text/plain</type>
            <size>60415</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRmNjM3MjkyODIwNWUxNWE4Y2VjYjJiZTIwNTk1
Yjg4YjdkNWYzOGEuLjhlYmI3ZjdkMzhmMTk1OTFhYWQwY2ZjNGRmYjI1YjIzOTI1NzdhNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDExLTAyLTIxICBCZW5q
YW1pbiBQb3VsYWluICA8aWtpcG91QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgRGVwcmVjYXRlZFB0ckxpc3QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDI1CisKKyAg
ICAgICAgQWRkIGEgbmV3IGRhdGEgc3RydWN0dXJlOiBMaXN0SGFzaFRhYmxlLgorICAgICAgICBM
aXN0SGFzaFRhYmxlIGlzIHNpbWlsYXIgdG8gSGFzaFRhYmxlLCBidXQgaGF2ZSBvcmRlciBmb3Ig
ZWxlbWVudHMuCisKKyAgICAgICAgVGhlIGludGVyZmFjZSBpcyBzaW1pbGFyIHRvIExpc3RIYXNo
U2V0LCBwbHVzIHRoZSBleHRyYWN0b3IgYW5kIGEKKyAgICAgICAgbWV0aG9kcyB0byBhY2Nlc3Mg
dGhlIGxhc3Qgb2JqZWN0IGRpcmVjdGx5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0xpc3RIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFi
bGVOb2RlOjpMaXN0SGFzaFRhYmxlTm9kZSk6CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVD
b25zdEl0ZXJhdG9yOjpMaXN0SGFzaFRhYmxlQ29uc3RJdGVyYXRvcik6CisgICAgICAgIChXVEY6
Okxpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpMaXN0SGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVD
b25zdEl0ZXJhdG9yOjpub2RlKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUl0ZXJhdG9y
OjpMaXN0SGFzaFRhYmxlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlSXRl
cmF0b3I6OmdldCk6CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVJdGVyYXRvcjo6b3BlcmF0
b3IqKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvci0+KToK
KyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAg
ICAgKFdURjo6TGlzdEhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvci0tKToKKyAgICAgICAgKFdU
Rjo6TGlzdEhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6TGlz
dEhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hU
YWJsZUl0ZXJhdG9yOjpvcGVyYXRvciBjb25zdF9pdGVyYXRvcik6CisgICAgICAgIChXVEY6Okxp
c3RIYXNoVGFibGVJdGVyYXRvcjo6bm9kZSk6CisgICAgICAgIChXVEY6Ok5vZGVFeHRyYWN0b3I6
OmV4dHJhY3QpOgorICAgICAgICAoV1RGOjo6Okxpc3RIYXNoVGFibGUpOgorICAgICAgICAoV1RG
Ojo6Om9wZXJhdG9yKToKKyAgICAgICAgKFdURjo6Ojp+TGlzdEhhc2hUYWJsZSk6CisgICAgICAg
IChXVEY6Ojo6c3dhcCk6CisgICAgICAgIChXVEY6Ojo6c2l6ZSk6CisgICAgICAgIChXVEY6Ojo6
Y2FwYWNpdHkpOgorICAgICAgICAoV1RGOjo6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjo6OmJl
Z2luKToKKyAgICAgICAgKFdURjo6OjplbmQpOgorICAgICAgICAoV1RGOjo6Omxhc3QpOgorICAg
ICAgICAoV1RGOjo6OnJlbW92ZUxhc3QpOgorICAgICAgICAoV1RGOjo6OmZpbmQpOgorICAgICAg
ICAoV1RGOjo6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RG
Ojo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6Ojo6Y2xlYXIpOgorICAgICAgICAoV1RGOjo6Om1h
a2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6Ojo6bWFrZUNvbnN0SXRlcmF0b3IpOgorICAgICAg
ICAoV1RGOjo6OmFwcGVuZE5vZGUpOgorICAgICAgICAoV1RGOjo6OmRlbGV0ZUFsbE5vZGVzKToK
KyAgICAgICAgKFdURjo6Ojp1bmxpbmtBbmREZWxldGUpOgorCiAyMDExLTAyLTIxICBBZGFtIFJv
YmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBvcnQgSlNPYmplY3Q6OnNfaW5m
byBmcm9tIEphdmFTY3JpcHRDb3JlLmRsbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CmluZGV4IDAyOTkxNjY2ZDIwM2NmNWM0NDgxNzk5ZWJiNGZjYmVhMjZjZjYxZTYuLjA0NDA1NTc1
ZDE1Zjc4MTI1NDcxNDZlYWUzZWNmY2E1MDNlYzI2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTQ2Niw2ICs0NjYsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0hhc2hUcmFpdHMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9MaXN0SGFzaFNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RIYXNoVGFi
bGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9MaXN0UmVmUHRyLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTG9ja2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvTWFpblRocmVhZC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQppbmRleCA2NTZlMTZkM2QzYzI1ODY4NWQ1ZmQwYTQxMjJlYWRkN2Q3YTIxY2FkLi4zNjI0
NzIwZjVmMDllZGNhZTM5ZmE1NTE5MDEyNThlYzg1OGU1NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMzkxLDYgKzM5MSw3IEBACiAgICAgICAgICAg
ICAnd3RmL0hhc2hUYWJsZS5oJywKICAgICAgICAgICAgICd3dGYvSGFzaFRyYWl0cy5oJywKICAg
ICAgICAgICAgICd3dGYvTGlzdEhhc2hTZXQuaCcsCisgICAgICAgICAgICAnd3RmL0xpc3RIYXNo
VGFibGUuaCcsCiAgICAgICAgICAgICAnd3RmL0xpc3RSZWZQdHIuaCcsCiAgICAgICAgICAgICAn
d3RmL0xvY2tlci5oJywKICAgICAgICAgICAgICd3dGYvTUQ1LmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZj
cHJvagppbmRleCA1Zjg1NGY5ZjExMTc0NWY1NjlmOTAzOGM5YTU3YmIyZTZiZTk0ODU5Li40NTdk
YzlkYjgxNjMyNTQxMjY2MGZlNjVhOTdkNzIxYmI1NTNjZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oKQEAgLTcwNSw2ICs3MDUsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlx3dGZcTGlzdEhhc2hUYWJsZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJ
CTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxMaXN0UmVmUHRyLmgiCiAJCQk+CiAJ
CTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjM3ZGRiOTJmMDVkMWE1
NTNlNzkxOTkyODVmNDkxNDg5MjU2ZDViYi4uM2NiMmJhM2I1MTQxNTZhYmRkZTFiNjlhNmVkZTcx
Mzg0NDRkN2Y4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4Niw2ICsxODYs
NyBAQAogCQkxOEJBQjU1NDEwREFFMDY2MDAwRDk0NUIgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MThCQUI1MjgxMERBREZDRDAwMEQ5NDVCIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aCAqLzsgfTsKIAkJMUM2MTUxNkMwRUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM2MTUxNkEw
RUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVyLm1tICovOyBzZXR0aW5ncyA9IHtDT01Q
SUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CiAJCTFDNjE1MTZEMEVC
QUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM2MTUxNkIwRUJBQzdBMDAwMzEzNzZGIC8qIFByb2Zp
bGVyU2VydmVyLmggKi87IH07CisJCTI2RUM0MjRBMTMwRUE0ODYwMDZDOEQ2MiAvKiBMaXN0SGFz
aFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NjM0QTAyQzEzMEU5Q0U4MDAzQzQ3QzMgLyogTGlzdEhhc2hUYWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJDRkM1RDFFMTJGNDVCNDgwMDQ5
MTRFMiAvKiBDaGFyYWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkNGQzVCN0ExMkY0NDcxNDAwNDkxNEUyIC8qIENoYXJhY3Rlck5hbWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEz
NTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYg
LyogRGF0ZUNvbnZlcnNpb24uaCAqLzsgfTsKIAkJNDEzNTlDRjYwRkREODlDQjAwMjA2MTgwIC8q
IERhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMzU5Q0Y0MEZERDg5Q0IwMDIwNjE4MCAvKiBEYXRlTWF0aC5jcHAgKi87IH07CkBAIC03
NTQsNiArNzU1LDcgQEAKIAkJMUM5MDUxNDUwQkE5RThBNzAwODFFOUQwIC8qIEJhc2UueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBQThCNEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFT
Y3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlwdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0QjBEMzJDMzlBMDA0MUJDRkYgLyog
SmF2YVNjcmlwdENvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNj
cmlwdENvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjYzNEEwMkMxMzBFOUNF
ODAwM0M0N0MzIC8qIExpc3RIYXNoVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGlzdEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQ0ZD
NUI3QTEyRjQ0NzE0MDA0OTE0RTIgLyogQ2hhcmFjdGVyTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2hhcmFjdGVyTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEzNTlDRjQwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVNYXRoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDEzNTlDRjUwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVNYXRoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNTM2LDYgKzE1MzgsNyBAQAogCQkJCTY1REZDOTJFMDhFQTE3
M0EwMEY3MzAwQiAvKiBIYXNoVGFibGUuaCAqLywKIAkJCQk2NURGQzkyRjA4RUExNzNBMDBGNzMw
MEIgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCTY1N0VCNzQ1MEI3MDhGNTQwMDYzNDYxQiAvKiBM
aXN0SGFzaFNldC5oICovLAorCQkJCTI2MzRBMDJDMTMwRTlDRTgwMDNDNDdDMyAvKiBMaXN0SGFz
aFRhYmxlLmggKi8sCiAJCQkJMTQ4QTE2MjYwOTVEMTZCQjAwNjY2RDBEIC8qIExpc3RSZWZQdHIu
aCAqLywKIAkJCQlFMUVFNzkyNzBENkM5NjQ1MDBGRUEzQkEgLyogTG9ja2VyLmggKi8sCiAJCQkJ
MDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKQEAgLTIyMzQsNiArMjIzNyw3IEBA
CiAJCQkJQkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZEM0IzQzMxMDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDM0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBMaXN0SGFzaFNldC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjZFQzQyNEExMzBFQTQ4NjAwNkM4RDYyIC8qIExpc3RIYXNoVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDM1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBMaXN0
UmVmUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyog
TGl0ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzYwRTE2RjVDRDAwQjM0
NDYwIC8qIExvY2tlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9D
TWFrZUxpc3RzLnR4dAppbmRleCBmODViZjAyMDc0Y2VmN2Y1MzczNjllNDA4ZmY0MWI2NTE2Mzc1
ZTk0Li5lZTgzZWUwOWM0ODQ2NTcyMzgwMDBhNTlmYzkwOTE1M2FhNGFjNDc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTMwLDYgKzMwLDcgQEAgU0VUKFdU
Rl9IRUFERVJTCiAgICAgSGFzaFRhYmxlLmgKICAgICBIYXNoVHJhaXRzLmgKICAgICBMaXN0SGFz
aFNldC5oCisgICAgTGlzdEhhc2hUYWJsZS5oCiAgICAgTGlzdFJlZlB0ci5oCiAgICAgTG9ja2Vy
LmgKICAgICBNRDUuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9MaXN0
SGFzaFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RIYXNoVGFibGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ZjJmZGEyMzMzYzIxYTg4ZmRjZGRiODg4ODY2MDlhY2E4ZTg1ODFhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9MaXN0SGFzaFRhYmxlLmgK
QEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEJlbmphbWluIFBv
dWxhaW4gPGlraXBvdUBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdURl9MaXN0SGFzaFRhYmxlX2gK
KyNkZWZpbmUgV1RGX0xpc3RIYXNoVGFibGVfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgIkhhc2hUYWJsZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gTGlzdEhhc2hU
YWJsZTogSnVzdCBsaWtlIEhhc2hUYWJsZSwgdGhpcyBjbGFzcyBwcm92aWRlcyBhIEhhc2hUYWJs
ZQorLy8gaW50ZXJmYWNlIC0gYSBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBvYmplY3RzIHdpdGggTygx
KSBpbnNlcnRpb24sCisvLyByZW1vdmFsIGFuZCB0ZXN0IGZvciBjb250YWluZXJzaGlwLiBIb3dl
dmVyLCBpdCBhbHNvIGhhcyBhbgorLy8gb3JkZXIgLSBpdGVyYXRpbmcgaXQgd2lsbCBhbHdheXMg
Z2l2ZSBiYWNrIHZhbHVlcyBpbiB0aGUgb3JkZXIKKy8vIGluIHdoaWNoIHRoZXkgYXJlIGFkZGVk
LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZz4gc3RydWN0IExpc3RIYXNoVGFibGVOb2Rl
OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPiBjbGFzcyBMaXN0SGFzaFRhYmxlQ29uc3RJdGVy
YXRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4gY2xhc3MgTGlzdEhhc2hUYWJsZUl0ZXJh
dG9yOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIE5vZGVQdHJUeXBlLCB0eXBlbmFtZSBOb2RlVHJhaXRzLCB0eXBlbmFtZSBFeHRyYWN0b3I+
IHN0cnVjdCBOb2RlRXh0cmFjdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBl
bmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoPgorY2xhc3MgTGlzdEhhc2hUYWJsZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citwcml2YXRlOgorICAgIHR5cGVkZWYgTGlzdEhh
c2hUYWJsZU5vZGU8VmFsdWVBcmc+IE5vZGU7CisgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEtleUFy
Zz4gS2V5VHJhaXRzOworICAgIHR5cGVkZWYgSGFzaFRyYWl0czxOb2RlKj4gTm9kZVRyYWl0czsK
KyAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsKKworICAgIHR5cGVkZWYgSGFzaFRh
YmxlPEtleUFyZywgTm9kZSosIE5vZGVFeHRyYWN0b3I8S2V5QXJnLCBLZXlUcmFpdHMsIE5vZGUq
LCBOb2RlVHJhaXRzLCBFeHRyYWN0b3I+LCBIYXNoRnVuY3Rpb25zLCBOb2RlVHJhaXRzLCBLZXlU
cmFpdHM+IEltcGxUeXBlOworICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5QXJnLCBO
b2RlKiwgTm9kZUV4dHJhY3RvcjxLZXlBcmcsIEtleVRyYWl0cywgTm9kZSosIE5vZGVUcmFpdHMs
IEV4dHJhY3Rvcj4sIEhhc2hGdW5jdGlvbnMsIE5vZGVUcmFpdHMsIEtleVRyYWl0cz4gSW1wbFR5
cGVJdGVyYXRvcjsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5QXJnLCBO
b2RlKiwgTm9kZUV4dHJhY3RvcjxLZXlBcmcsIEtleVRyYWl0cywgTm9kZSosIE5vZGVUcmFpdHMs
IEV4dHJhY3Rvcj4sIEhhc2hGdW5jdGlvbnMsIE5vZGVUcmFpdHMsIEtleVRyYWl0cz4gSW1wbFR5
cGVDb25zdEl0ZXJhdG9yOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBLZXlBcmcgS2V5VHlwZTsK
KyAgICB0eXBlZGVmIFZhbHVlQXJnIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIExpc3RIYXNoVGFi
bGVJdGVyYXRvcjxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+IGl0ZXJhdG9y
OworICAgIHR5cGVkZWYgTGlzdEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5QXJnLCBWYWx1ZUFy
ZywgRXh0cmFjdG9yLCBIYXNoQXJnPiBjb25zdF9pdGVyYXRvcjsKKworICAgIGZyaWVuZCBjbGFz
cyBMaXN0SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3Is
IEhhc2hBcmc+OworCisgICAgTGlzdEhhc2hUYWJsZSgpOworICAgIExpc3RIYXNoVGFibGUoY29u
c3QgTGlzdEhhc2hUYWJsZSYpOworICAgIExpc3RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBM
aXN0SGFzaFRhYmxlJik7CisgICAgfkxpc3RIYXNoVGFibGUoKTsKKworICAgIHZvaWQgc3dhcChM
aXN0SGFzaFRhYmxlJik7CisKKyAgICBpbnQgc2l6ZSgpIGNvbnN0OworICAgIGludCBjYXBhY2l0
eSgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworCisgICAgaXRlcmF0b3IgYmVn
aW4oKTsKKyAgICBpdGVyYXRvciBlbmQoKTsKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0OworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgICAgVmFsdWVBcmcmIGxh
c3QoKTsKKyAgICBjb25zdCBWYWx1ZUFyZyYgbGFzdCgpIGNvbnN0OworICAgIHZvaWQgcmVtb3Zl
TGFzdCgpOworCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7CisgICAgY29uc3Rf
aXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhj
b25zdCBLZXlUeXBlJikgY29uc3Q7CisKKyAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFp
ciBvZiBhbiBpdGVyYXRvciB0byB0aGUgbmV3IHZhbHVlJ3MgbG9jYXRpb24sCisgICAgLy8gYW5k
IGEgYm9vbCB0aGF0IGlzIHRydWUgaWYgYW4gbmV3IGVudHJ5IHdhcyBhZGRlZAorICAgIHBhaXI8
aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBWYWx1ZVR5cGUmKTsKKworICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IEtleVR5cGUmKTsKKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CisgICAgdm9pZCBj
bGVhcigpOworCitwcml2YXRlOgorICAgIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihOb2RlKik7Cisg
ICAgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoTm9kZSopIGNvbnN0OworICAgIHZv
aWQgYXBwZW5kTm9kZShOb2RlKik7CisgICAgdm9pZCBkZWxldGVBbGxOb2RlcygpOworICAgIHZv
aWQgdW5saW5rQW5kRGVsZXRlKE5vZGUqKTsKKworICAgIEltcGxUeXBlIG1faW1wbDsKKyAgICBO
b2RlKiBtX2hlYWQ7CisgICAgTm9kZSogbV90YWlsOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmc+CitzdHJ1Y3QgTGlzdEhhc2hUYWJsZU5vZGUgeworICAgIExpc3RIYXNoVGFibGVO
b2RlKFZhbHVlQXJnIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwg
bV9wcmV2KDApCisgICAgICAgICwgbV9uZXh0KDApCisgICAgeworICAgIH0KKworICAgIFZhbHVl
QXJnIG1fdmFsdWU7CisgICAgTGlzdEhhc2hUYWJsZU5vZGUqIG1fcHJldjsKKyAgICBMaXN0SGFz
aFRhYmxlTm9kZSogbV9uZXh0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgorY2xh
c3MgTGlzdEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgeworcHJpdmF0ZToKKyAgICB0eXBlZGVmIExp
c3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPiBMaXN0SGFz
aFRhYmxlVHlwZTsKKyAgICB0eXBlZGVmIExpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleUFy
ZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz4gY29uc3RfaXRlcmF0b3I7CisgICAgdHlw
ZWRlZiBMaXN0SGFzaFRhYmxlTm9kZTxWYWx1ZUFyZz4gTm9kZTsKKyAgICB0eXBlZGVmIFZhbHVl
QXJnIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlw
ZTsKKyAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CisKKyAgICBmcmll
bmQgY2xhc3MgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hB
cmc+OworICAgIGZyaWVuZCBjbGFzcyBMaXN0SGFzaFRhYmxlSXRlcmF0b3I8S2V5QXJnLCBWYWx1
ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjsKKworICAgIExpc3RIYXNoVGFibGVDb25zdEl0ZXJh
dG9yKGNvbnN0IExpc3RIYXNoVGFibGVUeXBlKiBsaXN0SGFzaFRhYmxlLCBOb2RlKiBwb3NpdGlv
bikKKyAgICAgICAgOiBtX2xpc3RIYXNoVGFibGUobGlzdEhhc2hUYWJsZSkKKyAgICAgICAgLCBt
X3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBMaXN0SGFz
aFRhYmxlQ29uc3RJdGVyYXRvcigpCisgICAgeworICAgIH0KKworICAgIFBvaW50ZXJUeXBlIGdl
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gJm1fcG9zaXRpb24tPm1fdmFsdWU7Cisg
ICAgfQorCisgICAgUmVmZXJlbmNlVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0
KCk7IH0KKyAgICBQb2ludGVyVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7
IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1fcG9zaXRpb24tPm1fbmV4
dDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8vIHBvc3RmaXggKysgaW50
ZW50aW9uYWxseSBvbWl0dGVkCisKKyAgICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9wb3NpdGlvbiAhPSBtX2xpc3RIYXNoVGFibGUtPm1faGVh
ZCk7CisgICAgICAgIGlmICghbV9wb3NpdGlvbikKKyAgICAgICAgICAgIG1fcG9zaXRpb24gPSBt
X2xpc3RIYXNoVGFibGUtPm1fdGFpbDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wb3Np
dGlvbiA9IG1fcG9zaXRpb24tPm1fcHJldjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIC8vIHBvc3RmaXggLS0gaW50ZW50aW9uYWxseSBvbWl0dGVkCisKKyAgICAvLyBDb21w
YXJpc29uLgorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bvc2l0
aW9uOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gIT0gb3RoZXIubV9w
b3NpdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTm9kZSogbm9kZSgpIHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KKworICAgIGNvbnN0IExpc3RIYXNoVGFibGVUeXBlKiBtX2xpc3RIYXNoVGFi
bGU7CisgICAgTm9kZSogbV9wb3NpdGlvbjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFy
ZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFy
Zz4KK2NsYXNzIExpc3RIYXNoVGFibGVJdGVyYXRvciB7Citwcml2YXRlOgorICAgIHR5cGVkZWYg
TGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+IExpc3RI
YXNoVGFibGVUeXBlOworICAgIHR5cGVkZWYgTGlzdEhhc2hUYWJsZUl0ZXJhdG9yPEtleUFyZywg
VmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiBMaXN0
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hB
cmc+IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTGlzdEhhc2hUYWJsZU5vZGU8VmFsdWVB
cmc+IE5vZGU7CisgICAgdHlwZWRlZiBWYWx1ZUFyZyBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBW
YWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJU
eXBlOworCisgICAgZnJpZW5kIGNsYXNzIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywg
RXh0cmFjdG9yLCBIYXNoQXJnPjsKKworICAgIExpc3RIYXNoVGFibGVJdGVyYXRvcihjb25zdCBM
aXN0SGFzaFRhYmxlVHlwZSogbGlzdEhhc2hUYWJsZSwgTm9kZSogcG9zaXRpb24pIDogbV9pdGVy
YXRvcihsaXN0SGFzaFRhYmxlLCBwb3NpdGlvbikgeyB9CisKK3B1YmxpYzoKKyAgICBMaXN0SGFz
aFRhYmxlSXRlcmF0b3IoKSB7IH0KKworICAgIC8vIGRlZmF1bHQgY29weSwgYXNzaWdubWVudCBh
bmQgZGVzdHJ1Y3RvciBhcmUgT0sKKworICAgIFBvaW50ZXJUeXBlIGdldCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8UG9pbnRlclR5cGU+KG1faXRlcmF0b3IuZ2V0KCkpOyB9CisgICAgUmVm
ZXJlbmNlVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBQb2lu
dGVyVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkgeyArK21faXRlcmF0b3I7IHJldHVybiAqdGhpczsgfQorCisgICAg
Ly8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKworICAgIGl0ZXJhdG9yJiBvcGVy
YXRvci0tKCkgeyAtLW1faXRlcmF0b3I7IHJldHVybiAqdGhpczsgfQorCisgICAgLy8gcG9zdGZp
eCAtLSBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKworICAgIC8vIENvbXBhcmlzb24uCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVy
YXRvciA9PSBvdGhlci5tX2l0ZXJhdG9yOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciAhPSBvdGhlci5tX2l0ZXJh
dG9yOyB9CisKKyAgICBvcGVyYXRvciBjb25zdF9pdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlcmF0b3I7IH0KKworcHJpdmF0ZToKKyAgICBOb2RlKiBub2RlKCkgeyByZXR1cm4gbV9pdGVy
YXRvci5ub2RlKCk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTm9k
ZVB0clR5cGUsIHR5cGVuYW1lIE5vZGVUcmFpdHMsIHR5cGVuYW1lIEV4dHJhY3Rvcj4KK3N0cnVj
dCBOb2RlRXh0cmFjdG9yIHsKKyAgICBzdGF0aWMgaW5saW5lIEtleUFyZyBleHRyYWN0KE5vZGVQ
dHJUeXBlIG5vZGUpCisgICAgeworICAgICAgICBpZiAoTm9kZVRyYWl0czo6aXNEZWxldGVkVmFs
dWUobm9kZSkpIHsKKyAgICAgICAgICAgIEtleUFyZyBkZWxldGVkVmFsdWUgPSBLZXlUcmFpdHM6
OmVtcHR5VmFsdWUoKTsKKyAgICAgICAgICAgIGRlbGV0ZWRWYWx1ZS5+S2V5QXJnKCk7CisgICAg
ICAgICAgICBLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShkZWxldGVkVmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZWRWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChub2RlID09IE5vZGVUcmFpdHM6OmVtcHR5VmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBL
ZXlUcmFpdHM6OmVtcHR5VmFsdWUoKTsKKworICAgICAgICByZXR1cm4gRXh0cmFjdG9yOjpleHRy
YWN0KG5vZGUtPm1fdmFsdWUpOworICAgIH0KK307CisKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
QXJnPgoraW5saW5lIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBI
YXNoQXJnPjo6TGlzdEhhc2hUYWJsZSgpCisgICAgOiBtX2hlYWQoMCkKKyAgICAsIG1fdGFpbCgw
KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgTGlzdEhhc2hUYWJs
ZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpMaXN0SGFzaFRhYmxlKGNv
bnN0IExpc3RIYXNoVGFibGUmIG90aGVyKQorICAgIDogbV9oZWFkKDApCisgICAgLCBtX3RhaWwo
MCkKK3sKKyAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKKyAgICBmb3IgKGNv
bnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBhZGQoKml0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIExpc3RI
YXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPiYgTGlzdEhhc2hU
YWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpvcGVyYXRvcj0oY29u
c3QgTGlzdEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgTGlzdEhhc2hUYWJsZSB0bXAob3RoZXIp
OworICAgIHN3YXAodG1wKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEFyZz4KK2lubGluZSBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJh
Y3RvciwgSGFzaEFyZz46On5MaXN0SGFzaFRhYmxlKCkKK3sKKyAgICBkZWxldGVBbGxOb2Rlcygp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdm9pZCBMaXN0SGFzaFRh
YmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OnN3YXAoTGlzdEhhc2hU
YWJsZSYgb3RoZXIpCit7CisgICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKKyAgICBzdGQ6
OnN3YXAobV9oZWFkLCBvdGhlci5tX2hlYWQpOworICAgIHN0ZDo6c3dhcChtX3RhaWwsIG90aGVy
Lm1fdGFpbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSBpbnQgTGlz
dEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoQXJnPgoraW5saW5lIGludCBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4
dHJhY3RvciwgSGFzaEFyZz46OmNhcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBs
LmNhcGFjaXR5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFs
dWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSBib29s
IExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6aXNF
bXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB0eXBlbmFtZSBMaXN0SGFzaFRhYmxlPEtleUFy
ZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Oml0ZXJhdG9yIExpc3RIYXNoVGFibGU8
S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6YmVnaW4oKQoreworICAgIHJl
dHVybiBtYWtlSXRlcmF0b3IobV9oZWFkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJn
PgoraW5saW5lIHR5cGVuYW1lIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFj
dG9yLCBIYXNoQXJnPjo6aXRlcmF0b3IgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBF
eHRyYWN0b3IsIEhhc2hBcmc+OjplbmQoKQoreworICAgIHJldHVybiBtYWtlSXRlcmF0b3IoMCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSBWYWx1ZUFyZyYgTGlzdEhh
c2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpsYXN0KCkKK3sK
KyAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fdGFpbC0+bV92YWx1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIGNvbnN0IFZhbHVlQXJnJiBMaXN0
SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Omxhc3QoKSBj
b25zdAoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV90YWlsLT5tX3Zh
bHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdm9pZCBMaXN0SGFz
aFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OnJlbW92ZUxhc3Qo
KQoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBtX2ltcGwucmVtb3ZlKE5vZGVFeHRy
YWN0b3I8S2V5QXJnLCBLZXlUcmFpdHMsIE5vZGUqLCBOb2RlVHJhaXRzLCBFeHRyYWN0b3I+Ojpl
eHRyYWN0KG1fdGFpbCkpOworICAgIHVubGlua0FuZERlbGV0ZShtX3RhaWwpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hUYWJsZTxLZXlB
cmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+Ojpjb25zdF9pdGVyYXRvciBMaXN0SGFz
aFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OmJlZ2luKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IobV9oZWFkKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIHR5cGVuYW1lIExpc3RIYXNoVGFibGU8S2V5QXJn
LCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6Y29uc3RfaXRlcmF0b3IgTGlzdEhhc2hU
YWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjplbmQoKSBjb25zdAor
eworICAgIHJldHVybiBtYWtlQ29uc3RJdGVyYXRvcigwKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoQXJnPgoraW5saW5lIHR5cGVuYW1lIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFy
ZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6aXRlcmF0b3IgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZh
bHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpmaW5kKGNvbnN0IEtleUFyZyYga2V5KQorewor
ICAgIEltcGxUeXBlSXRlcmF0b3IgaXQgPSBtX2ltcGwuZmluZChrZXkpOworICAgIGlmIChpdCA9
PSBtX2ltcGwuZW5kKCkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKyAgICByZXR1cm4gbWFrZUl0
ZXJhdG9yKCppdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFs
dWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB0eXBl
bmFtZSBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46
OmNvbnN0X2l0ZXJhdG9yIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9y
LCBIYXNoQXJnPjo6ZmluZChjb25zdCBLZXlBcmcmIGtleSkgY29uc3QKK3sKKyAgICBJbXBsVHlw
ZUl0ZXJhdG9yIGl0ID0gbV9pbXBsLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbV9pbXBsLmVu
ZCgpKQorICAgICAgICByZXR1cm4gZW5kKCk7CisgICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9y
KCppdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSBib29sIExpc3RI
YXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6Y29udGFpbnMo
Y29uc3QgS2V5QXJnJiBrZXkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyhr
ZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgcGFpcjx0eXBlbmFt
ZSBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Oml0
ZXJhdG9yLCBib29sPiBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3Rvciwg
SGFzaEFyZz46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQoreworICAgIExpc3RIYXNoVGFi
bGVOb2RlPFZhbHVlQXJnPiogbm9kZSA9IG5ldyBMaXN0SGFzaFRhYmxlTm9kZTxWYWx1ZUFyZz4o
dmFsdWUpOworICAgIHBhaXI8dHlwZW5hbWUgSW1wbFR5cGU6Oml0ZXJhdG9yLCBib29sPiByZXN1
bHQgPSBtX2ltcGwuYWRkKG5vZGUpOworICAgIGlmIChyZXN1bHQuc2Vjb25kKQorICAgICAgICBh
cHBlbmROb2RlKCpyZXN1bHQuZmlyc3QpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihtYWtl
SXRlcmF0b3IoKnJlc3VsdC5maXJzdCksIHJlc3VsdC5zZWNvbmQpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdm9pZCBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVB
cmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit7Cisg
ICAgcmVtb3ZlKGZpbmQoa2V5KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lu
bGluZSB2b2lkIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNo
QXJnPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1faW1wbC5yZW1vdmUoTm9kZUV4dHJhY3RvcjxLZXlBcmcsIEtleVRy
YWl0cywgTm9kZSosIE5vZGVUcmFpdHMsIEV4dHJhY3Rvcj46OmV4dHJhY3QoaXQubm9kZSgpKSk7
CisgICAgdW5saW5rQW5kRGVsZXRlKGl0Lm5vZGUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEFyZz4KK2lubGluZSB2b2lkIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0
cmFjdG9yLCBIYXNoQXJnPjo6Y2xlYXIoKQoreworICAgIGRlbGV0ZUFsbE5vZGVzKCk7CisgICAg
bV9pbXBsLmNsZWFyKCk7CisgICAgbV9oZWFkID0gMDsKKyAgICBtX3RhaWwgPSAwOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hUYWJsZTxL
ZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjppdGVyYXRvciBMaXN0SGFzaFRh
YmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Om1ha2VJdGVyYXRvcihO
b2RlKiBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gTGlzdEhhc2hUYWJsZUl0ZXJhdG9yPEtleUFy
ZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz4odGhpcywgcG9zaXRpb24pOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hUYWJsZTxL
ZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+Ojpjb25zdF9pdGVyYXRvciBMaXN0
SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Om1ha2VDb25z
dEl0ZXJhdG9yKE5vZGUqIHBvc2l0aW9uKSBjb25zdAoreworICAgIHJldHVybiBMaXN0SGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+KHRo
aXMsIHBvc2l0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIHZv
aWQgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+Ojph
cHBlbmROb2RlKE5vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+bV9wcmV2ID0gbV90YWlsOworICAg
IG5vZGUtPm1fbmV4dCA9IDA7CisKKyAgICBpZiAobV90YWlsKSB7CisgICAgICAgIEFTU0VSVCht
X2hlYWQpOworICAgICAgICBtX3RhaWwtPm1fbmV4dCA9IG5vZGU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2hlYWQpOworICAgICAgICBtX2hlYWQgPSBub2RlOworICAgIH0KKwor
ICAgIG1fdGFpbCA9IG5vZGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGlu
ZSB2b2lkIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJn
Pjo6ZGVsZXRlQWxsTm9kZXMoKQoreworICAgIGlmICghbV9oZWFkKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2hlYWQsICpuZXh0ID0gbV9oZWFkLT5tX25leHQ7
IG5vZGU7IG5vZGUgPSBuZXh0LCBuZXh0ID0gbm9kZSA/IG5vZGUtPm1fbmV4dCA6IDApCisgICAg
ICAgIGRlbGV0ZSBub2RlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUg
dm9pZCBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46
OnVubGlua0FuZERlbGV0ZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZS0+bV9wcmV2KSB7
CisgICAgICAgIEFTU0VSVChub2RlID09IG1faGVhZCk7CisgICAgICAgIG1faGVhZCA9IG5vZGUt
Pm1fbmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobm9kZSAhPSBtX2hlYWQpOwor
ICAgICAgICBub2RlLT5tX3ByZXYtPm1fbmV4dCA9IG5vZGUtPm1fbmV4dDsKKyAgICB9CisKKyAg
ICBpZiAoIW5vZGUtPm1fbmV4dCkgeworICAgICAgICBBU1NFUlQobm9kZSA9PSBtX3RhaWwpOwor
ICAgICAgICBtX3RhaWwgPSBub2RlLT5tX3ByZXY7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKG5vZGUgIT0gbV90YWlsKTsKKyAgICAgICAgbm9kZS0+bV9uZXh0LT5tX3ByZXYgPSBub2Rl
LT5tX3ByZXY7CisgICAgfQorCisgICAgZGVsZXRlIG5vZGU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6Okxpc3RIYXNoVGFibGU7CisKKyNlbmRpZiAvKiBXVEZfTGlzdEhh
c2hUYWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9n
IGIvU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwppbmRleCA0MjE3MjBiN2Q2YmQwZjc1
MzI4YzVjZjExMDQ1YWNhOTc0NTUyZTMyLi5mODYyOTAxYWQyNDE4NGJlZTdiMDZmOGE4NDY2NmVh
YjU2MTdlNWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAx
MS0wMi0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGlraXBvdUBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRWxpbWluYXRlIERlcHJlY2F0
ZWRQdHJMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQyNQorCisgICAgICAgIEFkZCBmb3J3YXJkaW5nIGhlYWRlciBmb3IgTGlzdEhhc2hUYWJs
ZS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9MaXN0SGFzaFRhYmxlLmg6IEFk
ZGVkLgorCiAyMDExLTAyLTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9MaXN0SGFzaFRhYmxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0xpc3RIYXNoVGFi
bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYTJlZTA4Y2JkMTRlOGFkN2U0YmVmYzYzNDAzNGZmODI0YzhiNzIx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9MaXN0SGFzaFRhYmxlLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0xpc3RIYXNoVGFibGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NzkxMDgxZTNiZTYwYmIwZTNi
NmRlMjVjYTdmZWZjMDJmMDVlMTYyLi5kYTZjMzhlYTkwMjhiYTUzNmI5OGVhMTkwODliMDU3OWMz
ZDc3NTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDItMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxpa2lwb3VAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEVsaW1pbmF0ZSBEZXByZWNhdGVkUHRyTGlzdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjUKKworICAgICAg
ICBSZWZhY3RvciBSZW5kZXJCbG9jayB0byB1c2UgYSBMaXN0SGFzaFRhYmxlIGluc3RlYWQgb2Yg
YSBEZXByZWNhdGVkUHRyTGlzdC4KKworCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L0xpc3RIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21GbG9hdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpyZW1vdmVGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b2dpY2FsTGVmdE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjbGVhckZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFk
ZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGFp
bnNGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdFJlbmRlcmVyRXh0cmFjdG9yOjpleHRyYWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUpOgorCiAyMDExLTAyLTIxICBQYXZlbCBGZWxk
bWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkg
U2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvTGlzdEhhc2hUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL0xpc3RIYXNoVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjQxY2EyNjg3MzY4NzlkMjQ4NmNhYzA1
MWE0YzllZDhjMjg2YzRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL0xpc3RIYXNoVGFibGUuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYg
V2ViQ29yZV9GV0RfTGlzdEhhc2hUYWJsZV9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0xpc3RIYXNo
VGFibGVfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0xpc3RIYXNoVGFibGUuaD4KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBm
MzEwMjg4ZThjOTk2MjhiNjE2NTQyYzJiYjBmNTUzYzUzNjI3MGZjLi4zYWFlMzcwNGVjMmNlOWFl
ODdhMWIyMGE2YzJmZWE2OTViMTQwZDM5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjQ1ODksNiArNjQ1ODksMTAgQEAKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEZvcndhcmRpbmdIZWFk
ZXJzXHd0ZlxMaXN0SGFzaFRhYmxlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcTWF0aEV4dHJhcy5o
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKaW5kZXggMjE5NzUzMzliYjU3NmU5MDk5MmE3ZGQ1YjliNGQyNjNkMjc3NmExOS4uNTU4
ZmE1NDE3OTk5ODQ5NGZkMmRhZTdmNDEzZTgxOTc0MDNkNWNjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xMzc5LDkgKzEzNzksMTAgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdP
YmplY3RzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgRGVw
cmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmpl
Y3RzKTsKLSAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisKKyAgICBGbG9h
dGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5lbmQoKTsKKyAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICBpZiAoci0+
bV9pc0Rlc2NlbmRhbnQpCiAgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21DaGlsZChyLT5tX3Jl
bmRlcmVyLCBJbnRTaXplKHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLCB5UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkpOwogICAgIH0KQEAgLTIxNzIsMTQgKzIx
NzMsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wg
cGFpbnRBbGxEZXNjZW5kYW50cykKICAgICAgICAgQVNTRVJUKG1fZmxvYXRpbmdPYmplY3RzKTsK
ICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogCiAg
ICAgICAgIC8vIEZJWE1FOiBBdm9pZCBkaXNhYmxpbmcgTGF5b3V0U3RhdGUuIEF0IHRoZSB2ZXJ5
IGxlYXN0LCBkb24ndCBkaXNhYmxlIGl0IGZvciBmbG9hdHMgb3JpZ2luYXRpbmcKICAgICAgICAg
Ly8gaW4gdGhpcyBibG9jay4gQmV0dGVyIHlldCB3b3VsZCBiZSB0byBwdXNoIGV4dHJhIHN0YXRl
IGZvciB0aGUgY29udGFpbmVycyBvZiBvdGhlciBmbG9hdHMuCiAgICAgICAgIHZpZXcoKS0+ZGlz
YWJsZUxheW91dFN0YXRlKCk7Ci0gICAgICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyAr
K2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9ICppdDsKICAgICAgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2JqZWN0IGlmIGl0
IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5kCiAgICAgICAgICAg
ICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG1fc2hvdWxkUGFpbnQgaXMgc2V0
KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBsYXR0ZXIKICAgICAgICAg
ICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3aXRoIGJlaW5nIGEgZGVzY2VuZGFudCBvZiB1
cy4KQEAgLTI1MDMsOSArMjUwMyw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwcmVzZXJ2CiAgICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmpl
Y3QqIHI7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQo
Km1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RI
YXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAg
ICAgICAgLy8gT25seSBwYWludCB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcg
aXMgc2V0LgogICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgUGFpbnRJbmZvIGN1cnJlbnRQ
YWludEluZm8ocGFpbnRJbmZvKTsKQEAgLTI3NDIsOCArMjc0Miw5IEBAIEdhcFJlY3RzIFJlbmRl
ckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBv
aW50JiByb290CiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdC
bG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9IGNiLT5jb250YWluaW5nQmxv
Y2soKSkKICAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZv
LCBJbnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPm1fcG9zaXRpb25lZE9iamVjdHMpOyAv
LyBGSVhNRTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMuCiAgICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgZm9yIChEZXByZWNhdGVkUHRyTGlz
dEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOyBpdC5jdXJy
ZW50KCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0LmN1
cnJlbnQoKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAgZm9y
IChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9h
dGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgICAgIEludFJlY3QgZmxvYXRC
b3ggPSBJbnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZs
b2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9h
dEluY2x1ZGluZ01hcmdpbihyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByLT5tX3JlbmRlcmVyLT53aWR0aCgpLCByLT5tX3JlbmRlcmVyLT5oZWlnaHQoKSk7
CkBAIC0zMDUwLDE4ICszMDUxLDEzIEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVu
ZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAgICBBU1NFUlQo
by0+aXNGbG9hdGluZygpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBvZiBzcGVjaWFsIG9i
amVjdHMgaWYgd2UgZG9uJ3QgYWxlYWR5IGhhdmUgb25lCi0gICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykgewotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IG5ldyBEZXByZWNhdGVkUHRyTGlz
dDxGbG9hdGluZ09iamVjdD47Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRBdXRvRGVs
ZXRlKHRydWUpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxl
OworICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBp
ZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGY7Ci0gICAgICAgIHdoaWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgewot
ICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykKLSAgICAgICAgICAgICAgICByZXR1
cm4gZjsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgIH0KKyAgICAgICAgRmxvYXRpbmdPYmpl
Y3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5m
aW5kKG8pOworICAgICAgICBpZiAoaXQgIT0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuICppdDsKICAgICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwg
b2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CkBAIC0zMDg3LDcgKzMwODMsNyBA
QCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGlu
Z09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7
CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5h
cHBlbmQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7CiAgICAg
CiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMwOTUsMjIgKzMwOTEsMjEgQEAgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94KiBvKQogdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVy
Qm94KiBvKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMp
OwotICAgICAgICB3aGlsZSAoaXQuY3VycmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQuY3Vy
cmVudCgpLT5tX3JlbmRlcmVyID09IG8pIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5J
bmxpbmUoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IGxvZ2ljYWxU
b3BGb3JGbG9hdChpdC5jdXJyZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChpdC5jdXJyZW50KCkpOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIHplcm8tIGFu
ZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRzOiB0aG9zZSBkb24ndCB0b3VjaAotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1dCBpdCBzdGlsbCBu
ZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFjY29t
cGxpc2hlZCBieSBwcmV0ZW5kaW5nIHRoZXkgaGF2ZSBhIGhlaWdodCBvZiAxLgotICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gbWF4KGxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxUb3Ag
PT0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgPyBsb2dpY2FsVG9wIDogbG9naWNhbFRvcCAr
IDEpOwotICAgICAgICAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBs
b2dpY2FsQm90dG9tKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMtPnJlbW92ZVJlZihpdC5jdXJyZW50KCkpOworICAgICAgICBGbG9hdGluZ09i
amVjdExpc3RIYXNoVGFibGU6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQo
byk7CisgICAgICAgIGlmIChpdCAhPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCkpIHsKKyAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OworICAgICAgICAgICAgaWYgKGNoaWxkcmVu
SW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BG
b3JGbG9hdChyKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChyKTsKKworICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSB6ZXJv
LSBhbmQgbGVzcy10aGFuLXplcm8taGVpZ2h0IGZsb2F0czogdGhvc2UgZG9uJ3QgdG91Y2gKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1dCBpdCBzdGlsbCBu
ZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgLy8gYWNjb21wbGlz
aGVkIGJ5IHByZXRlbmRpbmcgdGhleSBoYXZlIGEgaGVpZ2h0IG9mIDEuCisgICAgICAgICAgICAg
ICAgbG9naWNhbEJvdHRvbSA9IG1heChsb2dpY2FsQm90dG9tLCBsb2dpY2FsVG9wID09IG51bWVy
aWNfbGltaXRzPGludD46Om1heCgpID8gbG9naWNhbFRvcCA6IGxvZ2ljYWxUb3AgKyAxKTsKKyAg
ICAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBsb2dpY2FsQm90dG9t
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBkZWxldGUg
cjsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoaXQpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMzEyMyw2ICszMTE4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3Zl
RmxvYXRpbmdPYmplY3RzQmVsb3coRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCwgaW50IGxvZ2kK
ICAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CiAg
ICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYmICghY3Vyci0+aXNQbGFjZWQoKSB8fCBsb2dp
Y2FsVG9wRm9yRmxvYXQoY3VycikgPj0gbG9naWNhbE9mZnNldCkpIHsKICAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMtPnJlbW92ZUxhc3QoKTsKKyAgICAgICAgZGVsZXRlIGN1cnI7CiAgICAgICAg
IGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgIH0KIH0KQEAgLTMxMzEsMzYg
KzMxMjcsNDQgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogewogICAg
IGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFz
dCgpOworCisgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIElmIGFsbCBmbG9hdHMgaGF2ZSBhbHJlYWR5IGJlZW4gcG9z
aXRpb25lZCwgdGhlbiB3ZSBoYXZlIG5vIHdvcmsgdG8gZG8uCi0gICAgaWYgKCFmbG9hdGluZ09i
amVjdCB8fCBmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMtPmxhc3QoKS0+aXNQbGFjZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gTW92ZSBiYWNrd2FyZHMgdGhyb3VnaCBvdXIgZmxvYXRpbmcgb2JqZWN0IGxpc3QgdW50aWwg
d2UgZmluZCBhIGZsb2F0IHRoYXQgaGFzCiAgICAgLy8gYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQu
ICBUaGVuIHdlJ2xsIGJlIGFibGUgdG8gbW92ZSBmb3J3YXJkLCBwb3NpdGlvbmluZyBhbGwgb2YK
ICAgICAvLyB0aGUgbmV3IGZsb2F0cyB0aGF0IG5lZWQgaXQuCi0gICAgRmxvYXRpbmdPYmplY3Qq
IGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5nZXRQcmV2KCk7Ci0gICAgd2hpbGUgKGxh
c3RGbG9hdCAmJiAhbGFzdEZsb2F0LT5pc1BsYWNlZCgpKSB7Ci0gICAgICAgIGZsb2F0aW5nT2Jq
ZWN0ID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKTsKLSAgICAgICAgbGFzdEZsb2F0ID0gbV9m
bG9hdGluZ09iamVjdHMtPmdldFByZXYoKTsKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFi
bGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIC0t
aXQ7IC8vIEdvIHRvIGxhc3QgaXRlbS4KKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7CisgICAg
RmxvYXRpbmdPYmplY3QqIGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCA9IDA7CisgICAgd2hpbGUg
KGl0ICE9IGJlZ2luKSB7CisgICAgICAgIC0taXQ7CisgICAgICAgIGlmICgoKml0KS0+aXNQbGFj
ZWQoKSkgeworICAgICAgICAgICAgbGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0ID0gKml0OworICAg
ICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgCiAgICAgLy8gVGhlIGZs
b2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0
aW9uZWQgZmxvYXQuCi0gICAgaWYgKGxhc3RGbG9hdCkKLSAgICAgICAgbG9naWNhbFRvcCA9IG1h
eChsb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSwgbG9naWNhbFRvcCk7CisgICAgaWYgKGxh
c3RQbGFjZWRGbG9hdGluZ09iamVjdCkKKyAgICAgICAgbG9naWNhbFRvcCA9IG1heChsb2dpY2Fs
VG9wRm9yRmxvYXQobGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0KSwgbG9naWNhbFRvcCk7CiAKKyAg
ICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5lbmQoKTsKICAgICAvLyBOb3cgd2FsayB0aHJvdWdoIHRoZSBzZXQgb2Yg
dW5wb3NpdGlvbmVkIGZsb2F0cyBhbmQgcGxhY2UgdGhlbS4KLSAgICB3aGlsZSAoZmxvYXRpbmdP
YmplY3QpIHsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CiAgICAgICAgIC8vIFRoZSBjb250YWluaW5n
IGJsb2NrIGlzIHJlc3BvbnNpYmxlIGZvciBwb3NpdGlvbmluZyBmbG9hdHMsIHNvIGlmIHdlIGhh
dmUgZmxvYXRzIGluIG91cgogICAgICAgICAvLyBsaXN0IHRoYXQgY29tZSBmcm9tIHNvbWV3aGVy
ZSBlbHNlLCBkbyBub3QgYXR0ZW1wdCB0byBwb3NpdGlvbiB0aGVtLgotICAgICAgICBpZiAoZmxv
YXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpICE9IHRoaXMpIHsKLSAg
ICAgICAgICAgIGZsb2F0aW5nT2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMtPm5leHQoKTsKKyAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSAh
PSB0aGlzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KIAogICAgICAgICBSZW5k
ZXJCb3gqIGNoaWxkQm94ID0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlu
dCBjaGlsZExvZ2ljYWxMZWZ0TWFyZ2luID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gbWFyZ2luU3RhcnRGb3JDaGlsZChjaGlsZEJveCkgOiBtYXJnaW5FbmRGb3JDaGlsZChj
aGlsZEJveCk7CkBAIC0zMjQyLDggKzMyNDYsNiBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlv
bk5ld0Zsb2F0cygpCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byBy
ZXBhaW50IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xh
eW91dCgpKQogICAgICAgICAgICAgY2hpbGRCb3gtPnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVk
KG9sZFJlY3QpOwotCi0gICAgICAgIGZsb2F0aW5nT2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMt
Pm5leHQoKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMjU0LDE2ICszMjU2LDIy
IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmpl
Y3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgaWYgKCFkaWRQb3NpdGlvbiB8fCAhbmV3
RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQogICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247CiAg
ICAgCisgICAgQVNTRVJUKG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgPT0gbmV3RmxvYXQpOwor
CiAgICAgaW50IGZsb2F0TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7
CiAgICAgaW50IHBhZ2luYXRpb25TdHJ1dCA9IG5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dDsK
LSAgICBGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CiAgICAg
Ci0gICAgQVNTRVJUKGYgPT0gbmV3RmxvYXQpOwotCiAgICAgaWYgKGZsb2F0TG9naWNhbFRvcCAt
IHBhZ2luYXRpb25TdHJ1dCAhPSBsb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBkaWRQ
b3NpdGlvbjsKIAotICAgIGZvciAoZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCk7IGYgJiYg
ZiAhPSBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lOyBmID0gbV9mbG9hdGluZ09iamVjdHMtPnBy
ZXYoKSkgeworICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgLS1pdDsgLy8gTGFzdCBmbG9hdCBp
cyBuZXdGbG9hdCwgc2tpcCB0aGF0IG9uZS4KKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFi
bGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7Cisg
ICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CisgICAgICAgIC0taXQ7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmID0gKml0OworICAgICAgICBpZiAoZiA9PSBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChsb2dpY2FsVG9wRm9yRmxvYXQo
ZikgPT0gbG9naWNhbEhlaWdodCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWYtPm1fcGFnaW5h
dGlvblN0cnV0KTsKICAgICAgICAgICAgIGYtPm1fcGFnaW5hdGlvblN0cnV0ID0gcGFnaW5hdGlv
blN0cnV0OwpAQCAtMzM2OSw5ICszMzc3LDEwIEBAIGludCBSZW5kZXJCbG9jazo6bG9naWNhbExl
ZnRPZmZzZXRGb3JMaW5lKGludCBsb2dpY2FsVG9wLCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wKICAg
ICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykK
ICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAgICAgICBGbG9hdGluZ09iamVj
dCogcjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQo
KSk7ICsraXQpIHsKKworICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgZm9yIChG
bG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiBsb2dp
Y2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90dG9tRm9yRmxvYXQo
cikgPiBsb2dpY2FsVG9wCiAgICAgICAgICAgICAgICAgJiYgci0+dHlwZSgpID09IEZsb2F0aW5n
T2JqZWN0OjpGbG9hdExlZnQKICAgICAgICAgICAgICAgICAmJiBsb2dpY2FsUmlnaHRGb3JGbG9h
dChyKSA+IGxlZnQpIHsKQEAgLTMzOTksOSArMzQwOCw5IEBAIGludCBSZW5kZXJCbG9jazo6bG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShpbnQgbG9naWNhbFRvcCwgaW50IGZpeGVkT2Zmc2V0LCBi
b29sCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgIGlmIChoZWlnaHRSZW1h
aW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKLSAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHI7Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdP
YmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgIGZvciAoIDsgKHIgPSBpdC5j
dXJyZW50KCkpOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChyLT5pc1BsYWNlZCgpICYm
IGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdChyKSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAgICAmJiByLT50eXBlKCkgPT0gRmxv
YXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQKICAgICAgICAgICAgICAgICAmJiBsb2dpY2FsTGVmdEZv
ckZsb2F0KHIpIDwgcmlnaHQpIHsKQEAgLTM0MzUsOSArMzQ0NCw5IEBAIGludCBSZW5kZXJCbG9j
azo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KGludCBsb2dpY2FsSGVpZ2h0KSBjb25zdAog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCBib3R0b20gPSBJTlRfTUFYOwotICAgIEZsb2F0
aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmpl
Y3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQo
KSk7ICsraXQpIHsKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBmb3IgKEZsb2F0aW5nT2Jq
ZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwogICAgICAgICBpbnQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7
CiAgICAgICAgIGlmIChmbG9hdEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICBi
b3R0b20gPSBtaW4oZmxvYXRCb3R0b20sIGJvdHRvbSk7CkBAIC0zNDUxLDkgKzM0NjAsOSBAQCBp
bnQgUmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6
VHlwZSBmbG9hdFR5cGUpIGNvbnN0CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgaW50IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKLSAgICBGbG9hdGlu
Z09iamVjdCogcjsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0
PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkp
OyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVj
dExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpp
dDsKICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgci0+dHlwZSgpICYgZmxvYXRUeXBlKQog
ICAgICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChyKSk7CiAgICAgfQpAQCAtMzQ5MiwxMSArMzUwMSwxOSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAKICAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpIHsKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5maXJzdCgpOwotICAgICAgICAgICAgd2hpbGUgKEZsb2F0aW5nT2JqZWN0
KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPnRha2UoKSkKKyAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0TGlzdEhhc2hUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgp
OworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6Oml0ZXJhdG9y
IGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgIGZs
b2F0TWFwLmFkZChmLT5tX3JlbmRlcmVyLCBmKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6aXRlcmF0b3Ig
ZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGlu
Z09iamVjdExpc3RIYXNoVGFibGU6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OworICAgICAgICAgICAgICAgIGRlbGV0ZSBmOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOwogICAgIH0KIAogICAg
IC8vIFdlIHNob3VsZCBub3QgcHJvY2VzcyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5v
dCBhIFJlbmRlckJsb2NrLiBPdGhlcndpc2UsIHdlIHdpbGwgYWRkIApAQCAtMzU0Miw3ICszNTU5
LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgICAgICBpbnQgY2hhbmdl
TG9naWNhbFRvcCA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgICAgICBpbnQgY2hh
bmdlTG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwogICAgICAgICBp
ZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3Qq
IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsgZjsgZiA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAg
Zm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9m
bG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5tX3JlbmRlcmVyKTsKICAg
ICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChm
KTsKICAgICAgICAgICAgICAgICBpZiAob2xkRmxvYXRpbmdPYmplY3QpIHsKQEAgLTM1ODgsOCAr
MzYwNyw5IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxv
Y2sqIGNoaWxkLCBpbnQgbG9naWNhbExlZnRPZmZzZXQsCiAKICAgICAvLyBGbG9hdHMgdGhhdCB3
aWxsIHJlbWFpbiB0aGUgY2hpbGQncyByZXNwb25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFj
dG9yIGludG8gaXRzCiAgICAgLy8gb3ZlcmZsb3cuCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKmNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAg
Zm9yIChGbG9hdGluZ09iamVjdCogcjsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAg
RmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBjaGlsZEVuZCA9IGNo
aWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdExp
c3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09i
amVjdHMtPmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgeworICAgICAg
ICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwogICAgICAgICBpbnQgbG9naWNhbEJvdHRv
bSA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgKyBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CiAgICAg
ICAgIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b20sIGxvZ2ljYWxCb3R0b20pOwogCkBAIC0zNjEzLDExICszNjMzLDEwIEBAIGludCBSZW5kZXJC
bG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBpbnQgbG9naWNh
bExlZnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1faXNEZXNjZW5kYW50
ID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2Jq
ZWN0IGxpc3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRGVwcmVjYXRl
ZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChmbG9hdGluZ09iaik7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgICAgICAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOworCisgICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRP
dGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzY0NiwyMiArMzY2NSwxMiBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVm
dE9mZnNldCwgaQogICAgICAgICByZXR1cm47CiAKICAgICBsb2dpY2FsTGVmdE9mZnNldCArPSAo
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1hcmdpbkxlZnQoKSA6IG1hcmdp
blRvcCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqcHJldi0+bV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAo
RmxvYXRpbmdPYmplY3QgKnI7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworCisgICAgRmxv
YXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBwcmV2RW5kID0gcHJldi0+
bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RMaXN0SGFz
aFRhYmxlOjpjb25zdF9pdGVyYXRvciBwcmV2SXQgPSBwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cy0+
YmVnaW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7ICsrcHJldkl0KSB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKnByZXZJdDsKICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChy
KSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBvYmplY3QgbWF5IGFs
cmVhZHkgYmUgaW4gb3VyIGxpc3QuIENoZWNrIGZvciBpdCB1cCBmcm9udCB0byBhdm9pZAotICAg
ICAgICAgICAgLy8gY3JlYXRpbmcgZHVwbGljYXRlIGVudHJpZXMuCi0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZiA9IDA7Ci0gICAgICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsK
LSAgICAgICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0
PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICAgICAgICAgIHdoaWxlICgoZiA9IGl0
LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0g
ci0+bV9yZW5kZXJlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghZikgeworICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAh
bV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKHItPm1fcmVuZGVyZXIpKSB7CiAgICAgICAgICAg
ICAgICAgaW50IGxlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0OwogICAgICAgICAgICAgICAg
IGludCB0b3BPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9n
aWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OwogICAgICAgICAgICAgICAgIApAQCAt
MzY4MywxMSArMzY5Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhS
ZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBpCiAgICAgICAgICAgICAg
ICAgZmxvYXRpbmdPYmotPm1fcmVuZGVyZXIgPSByLT5tX3JlbmRlcmVyOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxp
c3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRGVwcmVjYXRlZFB0ckxp
c3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChmbG9hdGluZ09iaik7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGlu
Z09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOworICAgICAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzY5OSwxNyArMzcwNiw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmF2b2lkc0Zsb2F0cygpIGNvbnN0CiAgICAgcmV0dXJuIFJlbmRlckJveDo6YXZvaWRzRmxvYXRz
KCkgfHwgIXN0eWxlKCktPmhhc0F1dG9Db2x1bW5Db3VudCgpIHx8ICFzdHlsZSgpLT5oYXNBdXRv
Q29sdW1uV2lkdGgoKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdChSZW5k
ZXJPYmplY3QqIG8pCitib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRlckJveCog
bykKIHsKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRGVwcmVjYXRlZFB0
ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAg
ICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQo
KS0+bV9yZW5kZXJlciA9PSBvKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgKytpdDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5jb250YWlucyhvKTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wgaW5MYXlvdXQpCkBAIC0zODY3LDkg
KzM4NjYsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgdHkgKz0gdG9SZW5k
ZXJWaWV3KHRoaXMpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsWSgpOwogICAgIH0KIAotICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoaXQudG9M
YXN0KCk7IChmbG9hdGluZ09iamVjdCA9IGl0LmN1cnJlbnQoKSk7IC0taXQpIHsKKyAgICBGbG9h
dGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGlu
Z09iamVjdHMtPmJlZ2luKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOyBpdCAhPSBiZWdp
bjspIHsKKyAgICAgICAgLS1pdDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0ID0gKml0OwogICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPm1fc2hvdWxkUGFpbnQgJiYg
IWZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAg
ICAgICAgICAgICBpbnQgeE9mZnNldCA9IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2lu
KGZsb2F0aW5nT2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT54KCk7CiAgICAg
ICAgICAgICBpbnQgeU9mZnNldCA9IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZs
b2F0aW5nT2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT55KCk7CkBAIC01NDk0
LDkgKzU0OTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQoaW50IHgs
IGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3QKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
cjsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+
IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICBmb3IgKDsgKHIgPSBpdC5jdXJy
ZW50KCkpOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAgICAg
ICAgIGZvciAoRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgICAgICAvLyBPbmx5
IGV4YW1pbmUgdGhlIG9iamVjdCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFnIGlzIHNldC4KICAg
ICAgICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCkgewogICAgICAgICAgICAgICAgICAg
ICBpbnQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSBy
LT5tX3JlbmRlcmVyLT54KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmlu
ZGV4IDJkYjM1NzBiYjBiMWUxNWQ1YjYxMzkwNGVmNjlkNTUzYWM2YWZkMzkuLmNjY2JkYTBmNGU0
MzU4MGRjNDc4MjBlZmVhNTJhMmVmMzgzOTRkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGluZUJveExp
c3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoVGFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC05NSw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFya0Zv
clBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CiAgICAgCiAgICAgYm9vbCBjb250YWluc0Zs
b2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+
aXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCopOworICAg
IGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJCb3gqKTsKIAogICAgIGludCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGhGb3JMaW5lKGludCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0OwogICAg
IGludCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGludCBwb3NpdGlvbiwgYm9vbCBmaXJzdExp
bmUpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxv
Z2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKSwgZmlyc3RMaW5lKTsgfQpAQCAtNjk1LDkgKzY5
NiwxMyBAQCBwcml2YXRlOgogICAgIGludCBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5k
ZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucyA9IGZh
bHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9uIHRo
ZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgog
ICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94Kiwg
aW50JiBkZWx0YU9mZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBw
dXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBv
biB0aGUgY3VycmVudCBwYWdlLgogCi0gICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RI
YXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxG
bG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOworICAgIHN0cnVjdCBGbG9hdGluZ09i
amVjdFJlbmRlcmVyRXh0cmFjdG9yIHsKKyAgICAgICAgc3RhdGljIGlubGluZSBSZW5kZXJCb3gq
IGV4dHJhY3QoY29uc3QgRmxvYXRpbmdPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LT5t
X3JlbmRlcmVyOyB9CisgICAgfTsKKyAgICB0eXBlZGVmIExpc3RIYXNoVGFibGU8UmVuZGVyQm94
KiwgRmxvYXRpbmdPYmplY3QqLCBGbG9hdGluZ09iamVjdFJlbmRlcmVyRXh0cmFjdG9yPiBGbG9h
dGluZ09iamVjdExpc3RIYXNoVGFibGU7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxl
KiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKKyAgICB0eXBlZGVmIFBvc2l0aW9uZWRPYmplY3Rz
TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIFBvc2l0aW9uZWRPYmpl
Y3RzTGlzdEhhc2hTZXQqIG1fcG9zaXRpb25lZE9iamVjdHM7CiAKICAgICAvLyBBbGxvY2F0ZWQg
b25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFsdWVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
CmluZGV4IDQ1Yjg1ZGRjMGJkZDEzMTAzZGEwM2IxZjhlMzVkOGNjMmNjMjY2ODUuLjgzYjAwZDRi
ZDhhNzM0NmQ2YWVmMzczNDQzYmE5YTMwNjllNDQ2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC02MDgsNyArNjA4LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENo
aWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cyA/IG1f
ZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICBGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0ID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0
eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogCiAgICAgICAgIExpbmVNaWRw
b2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3RhdGUoKTsK
IApAQCAtNjc3LDcgKzY3Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxk
cmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAgICAgICAg
ICBib29sIGh5cGhlbmF0ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIElubGluZUl0ZXJh
dG9yIG9sZEVuZCA9IGVuZDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lID0gbV9mbG9hdGluZ09iamVjdHMgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+
bGFzdCgpIDogMDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNF
bXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogICAgICAgICAgICAgZW5k
ID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9t
UHJldmlvdXNMaW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5k
KCkpIHsKICAgICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7CkBAIC04MjgsMTMg
KzgyOCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgbGFzdFJvb3RCb3goKSkgeworICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09i
amVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5lbmQoKTsKICAgICAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgp
OyBmICE9IGxhc3RGbG9hdDsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
bmV4dCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2Jq
ZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmN1cnJlbnQoKTsgZjsgZiA9IG1fZmxvYXRpbmdP
YmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0
SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IG1fZmxvYXRpbmdP
YmplY3RzLT5maW5kKGxhc3RGbG9hdC0+bV9yZW5kZXJlcik7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGFzdEZsb2F0ID09ICpsYXN0RmxvYXRJdGVyYXRvcik7CisgICAgICAgICAgICAgICAg
ICAgICsrbGFzdEZsb2F0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZs
b2F0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYg
PSAqaXQ7CiAgICAgICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPmZsb2F0cygpLmFwcGVu
ZChmLT5tX3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGYtPm1fcmVuZGVy
ZXIgPT0gZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IElmIGEgZmxvYXQncyBnZW9tZXRyeSBoYXMgY2hhbmdlZCwgZ2l2ZSB1cCBvbiBzeW5jaW5nIHdp
dGggY2xlYW4gbGluZXMuCkBAIC04NDIsNyArODQ2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dp
Y2EKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0SW5kZXgrKzsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsKKyAg
ICAgICAgICAgICAgICBsYXN0RmxvYXQgPSAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKSA/
IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwpAQCAtOTA1LDE1ICs5MDksMTkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVu
LCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVC
b3gtPnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5l
Qm94LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+ZW5kKCk7CiAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7IGYg
IT0gbGFzdEZsb2F0OyBmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKSkgewotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0
KCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVj
dHMtPmN1cnJlbnQoKTsgZjsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0KCkpCi0gICAgICAg
ICAgICAgICAgbGFzdFJvb3RCb3goKS0+ZmxvYXRzKCkuYXBwZW5kKGYtPm1fcmVuZGVyZXIpOwot
ICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGxh
c3RGbG9hdEl0ZXJhdG9yID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQobGFzdEZsb2F0LT5tX3Jl
bmRlcmVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5k
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0ID09ICpsYXN0RmxvYXRJdGVyYXRv
cik7CisgICAgICAgICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKKyAgICAgICAgICAgICAg
ICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5mbG9h
dHMoKS5hcHBlbmQoKCppdCktPm1fcmVuZGVyZXIpOworICAgICAgICAgICAgbGFzdEZsb2F0ID0g
IW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgp
IDogMDsKICAgICAgICAgfQogICAgICAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXpl
KCk7CiAgICAgICAgIC8vIEZsb2F0cyB0aGF0IGRpZCBub3QgaGF2ZSBsYXlvdXQgZGlkIG5vdCBy
ZXBhaW50IHdoZW4gd2UgbGFpZCB0aGVtIG91dC4gVGhleSB3b3VsZCBoYXZlCkBAIC0xMTUwLDcg
KzExNTgsOSBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbgogCiAgICAgICAgIGludCBsb2dpY2Fs
Qm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAot
ICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0
KCk7IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVj
dHMtPmVuZCgpOworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAg
IGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPj0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90
dG9tRm9yRmxvYXQoZikgPCBsb2dpY2FsQm90dG9tKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTE4NCw3ICsxMTk0LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6
bWF0Y2hlZEVuZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3Qg
SW5saW4KIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJs
b2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICAgICAgICAgIGZvciAo
RmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsgZjsgZiA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5l
bmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0Owog
ICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGYpID49IGxvZ2lj
YWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KGYpIDwgbG9naWNhbEJvdHRvbSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83978</attachid>
            <date>2011-02-27 10:29:54 -0800</date>
            <delta_ts>2011-02-27 10:34:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-17425-20110227192951.patch</filename>
            <type>text/plain</type>
            <size>38953</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk4MjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDljZDMwMjJjNTA4YjYx
ZTYxMGVlMTM5YzcxOGI5MzVmYWQ2NDg5Y2UuLmE5MWUxYmJkZjViYmIyY2ZlMTEzN2VhOTUxYzg0
MTU2ZmY4ODVhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDU5LDcgKzQ1OSw2IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxh
dGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAg
XAotCXBsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAgXAogCXBsYXRmb3JtL0RyYWdE
YXRhLmNwcCBcCiAJcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCiAJcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzUwMGRkYWYxNzY0MzYwY2JkZjgxOTM3
ZmYwMDcyZWZjMjEzZmNiNy4uNTI2NWY3ZWU4NjE0MDhlYTMxOWMyZTY4M2IzM2NmNTU1MmJiYWI2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExODEsNyArMTE4MSw2IEBAIFNFVChXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uY3BwCiAgICAgcGxhdGZvcm0v
Q29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCi0gICAg
cGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcAogICAgIHBsYXRmb3JtL0RyYWdEYXRh
LmNwcAogICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA4MDRlYzE1Mjk1MGYyOWI2MDA1NmMwNWE1NDc0ZjUyYjk4ODVi
YWQzLi43MzM2YWUyZWEzNTQ5ODk3ZTZlZTEyZWQ5NjMzZTM4YzBkMzNkNjgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDItMjcgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1p
bi5wb3VsYWluQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFbGltaW5hdGUgRGVwcmVjYXRlZFB0ckxpc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDI1CisKKyAgICAgICAgUmVtb3Zl
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEZXByZWNhdGVkUHRyTGlzdCBhbmQgYWxsIGl0cyByZWZl
cmVuY2VzCisgICAgICAgIGZyb20gdGhlIGJ1aWxkIHN5c3RlbXMuCisKKyAgICAgICAgKiBBbmRy
b2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmg6IFJlbW92ZWQuCisKIDIwMTEtMDItMjcg
IEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3M2Jj
NGMwMWUyZjM3MDliOGUyZjYzZjgwOTMyYTQyMmI3MTEyYzRjLi4wZmVjZWM5NDFlNDQyOTZhYmVm
ZmM5MWQ1MGY2ZWU1Y2I1NTBmZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjMxOSw5ICsy
MzE5LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3QuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVw
cmVjYXRlZFB0ckxpc3RJbXBsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRh
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2I4ZWY5
NTRmYmZkNWE0ZmJjNTdjMWU2NzhmNzJhNGNlNjVhOTU4ZC4uZDJmZjZlNjQ2NzExZWU5NmIwY2I4
MzJjZDZhN2NlM2ZlYWM2NmRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzUwMSw5ICszNTAxLDYg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL0N1cnNvci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdC5o
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vRHJhZ0RhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnRGF0
YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9y
ZGVyCmluZGV4IDEzNmEzNGRhZDY1YjE3MGM1YmUwZmIxYWEzZDYyYWMwMTRjNThkYTQuLjgzYTdm
NzcwODY0MWU3MmM2Y2ZlNDg4NjllMjM4Y2VjNzRiZWIzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpA
QCAtNDM5Nyw4ICs0Mzk3LDYgQEAgX19aTjNXVEY5SGFzaFRhYmxlSVBOU18xNUxpc3RIYXNoU2V0
Tm9kZUlQTjdXZWJDb3JlOVJlbmRlckJveEVFRVM2X05TXzE3SWRlbnRpdHkKIF9fWk4zV1RGMTFM
aXN0SGFzaFNldElQTjdXZWJDb3JlOVJlbmRlckJveEVOU183UHRySGFzaElTM19FRUUxMGFwcGVu
ZE5vZGVFUE5TXzE1TGlzdEhhc2hTZXROb2RlSVMzX0VFCiBfX1pON1dlYkNvcmUxMVJlbmRlckJs
b2NrMjFhZGp1c3RQb3NpdGlvbmVkQmxvY2tFUE5TXzlSZW5kZXJCb3hFUktOUzBfMTBNYXJnaW5J
bmZvRQogX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9jazIwaW5zZXJ0RmxvYXRpbmdPYmplY3RFUE5T
XzlSZW5kZXJCb3hFCi1fX1pON1dlYkNvcmUyMURlcHJlY2F0ZWRQdHJMaXN0SW1wbEMxRVBGdlB2
RQotX19aTjdXZWJDb3JlMjFEZXByZWNhdGVkUHRyTGlzdEltcGxDMkVQRnZQdkUKIF9fWk43V2Vi
Q29yZTExUmVuZGVyQmxvY2sxNGNhbGNQcmVmV2lkdGhzRXYKIF9fWk43V2ViQ29yZTExUmVuZGVy
QmxvY2syMGNhbGNJbmxpbmVQcmVmV2lkdGhzRXYKIF9fWk43V2ViQ29yZTIwSW5saW5lTWluTWF4
SXRlcmF0b3I0bmV4dEV2CkBAIC00NDEyLDI0ICs0NDEwLDkgQEAgX19aTjdXZWJDb3JlOUlubGlu
ZUJveDZyZW1vdmVFdgogX19aTjdXZWJDb3JlMTNJbmxpbmVGbG93Qm94MTFyZW1vdmVDaGlsZEVQ
TlNfOUlubGluZUJveEUKIF9fWk43V2ViQ29yZTlJbmxpbmVCb3gxNGRpcnR5TGluZUJveGVzRXYK
IF9fWk43V2ViQ29yZTEzUm9vdElubGluZUJveDEyY2hpbGRSZW1vdmVkRVBOU185SW5saW5lQm94
RQotX19aTjdXZWJDb3JlMjFEZXByZWNhdGVkUHRyTGlzdEltcGw2YXBwZW5kRVBLdgotX19aTjdX
ZWJDb3JlMjFEZXByZWNhdGVkUHRyTGlzdEltcGw2aW5zZXJ0RWpQS3YKIF9fWk43V2ViQ29yZTEx
UmVuZGVyQmxvY2sxOWFkanVzdEZsb2F0aW5nQmxvY2tFUktOUzBfMTBNYXJnaW5JbmZvRQotX19a
TjdXZWJDb3JlMjFEZXByZWNhdGVkUHRyTGlzdEltcGw0bGFzdEV2Ci1fX1pOSzdXZWJDb3JlMjFE
ZXByZWNhdGVkUHRyTGlzdEltcGw3Y3VycmVudEV2Ci1fX1pOSzdXZWJDb3JlMjFEZXByZWNhdGVk
UHRyTGlzdEltcGw3Z2V0UHJldkV2Ci1fX1pON1dlYkNvcmUyOURlcHJlY2F0ZWRQdHJMaXN0SW1w
bEl0ZXJhdG9yQzFFUktOU18yMURlcHJlY2F0ZWRQdHJMaXN0SW1wbEUKLV9fWk43V2ViQ29yZTI5
RGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3JDMkVSS05TXzIxRGVwcmVjYXRlZFB0ckxpc3RJ
bXBsRQotX19aTks3V2ViQ29yZTIxRGVwcmVjYXRlZFB0ckxpc3RJbXBsMTFhZGRJdGVyYXRvckVQ
TlNfMjlEZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvckUKLV9fWk5LN1dlYkNvcmUyOURlcHJl
Y2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yN2N1cnJlbnRFdgotX19aTjdXZWJDb3JlMjlEZXByZWNh
dGVkUHRyTGlzdEltcGxJdGVyYXRvcnBwRXYKLV9fWk43V2ViQ29yZTI5RGVwcmVjYXRlZFB0ckxp
c3RJbXBsSXRlcmF0b3JEMUV2Ci1fX1pON1dlYkNvcmUyOURlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0
ZXJhdG9yRDJFdgotX19aTks3V2ViQ29yZTIxRGVwcmVjYXRlZFB0ckxpc3RJbXBsMTRyZW1vdmVJ
dGVyYXRvckVQTlNfMjlEZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvckUKLV9fWk43V2ViQ29y
ZTIxRGVwcmVjYXRlZFB0ckxpc3RJbXBsNG5leHRFdgogX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9j
azM3bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dEVQTlNfOVJlbmRlckJveEVi
CiBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMThhZGRJbnRydWRpbmdGbG9hdHNFUFMwX2lpCi1f
X1pON1dlYkNvcmUyMURlcHJlY2F0ZWRQdHJMaXN0SW1wbDVmaXJzdEV2CiBfX1pOSzNXVEY3SGFz
aE1hcElQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFUE5TMV8xMVJlbmRlckJsb2NrMTRGbG9hdGlu
Z09iamVjdEVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TOV9JUzZfRUVF
CiBfX1pON1dlYkNvcmUxNFJlbmRlclJlcGxhY2VkNmxheW91dEV2CiBfX1pOSzdXZWJDb3JlMTFS
ZW5kZXJJbWFnZTIxbWluaW11bVJlcGxhY2VkSGVpZ2h0RXYKQEAgLTU1NjMsMTAgKzU1NDYsNiBA
QCBfX1pON1dlYkNvcmU3Y29va2llc0VQS05TXzhEb2N1bWVudEVSS05TXzRLVVJMRQogX19aVGhu
MTIwX043V2ViQ29yZTE3SFRNTFNjcmlwdEVsZW1lbnQxN2Rpc3BhdGNoTG9hZEV2ZW50RXYKIF9f
Wk43V2ViQ29yZTE3SFRNTFNjcmlwdEVsZW1lbnQxN2Rpc3BhdGNoTG9hZEV2ZW50RXYKIF9fWk4z
V1RGNlZlY3RvcklTdDRwYWlySVBON1dlYkNvcmUxN1NjcmlwdEVsZW1lbnREYXRhRU5TMl8yMENh
Y2hlZFJlc291cmNlSGFuZGxlSU5TMl8xMkNhY2hlZFNjcmlwdEVFRUVMbTBFRTZzaHJpbmtFbQot
X19aTjdXZWJDb3JlMjFEZXByZWNhdGVkUHRyTGlzdEltcGw1Y2xlYXJFYgotX19aTjdXZWJDb3Jl
MTdEZXByZWNhdGVkUHRyTGlzdElOU18xMVJlbmRlckJsb2NrMTRGbG9hdGluZ09iamVjdEVFMTBk
ZWxldGVGdW5jRVB2Ci1fX1pON1dlYkNvcmUyMURlcHJlY2F0ZWRQdHJMaXN0SW1wbDR0YWtlRXYK
LV9fWk43V2ViQ29yZTIxRGVwcmVjYXRlZFB0ckxpc3RJbXBsNnJlbW92ZUViCiBfX1pOM1dURjdI
YXNoTWFwSVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVQTlMxXzExUmVuZGVyQmxvY2sxNEZsb2F0
aW5nT2JqZWN0RU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM5X0lTNl9F
RUUzCiBfX1pON1dlYkNvcmUxNVJlbmRlclRhYmxlQ2VsbDI5Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnRFUE5TXzIwUmVuZGVyQm94TW9kZWxPYmplY3RFCiBfX1pON1dlYkNvcmU5UmVuZGVy
Qm94MTJpbWFnZUNoYW5nZWRFUHZQS05TXzdJbnRSZWN0RQpAQCAtNjkwNiw4ICs2ODg1LDYgQEAg
X19aTjdXZWJDb3JlMTJQbHVnaW5IYWx0ZXIxM2RpZFN0b3BQbHVnaW5FUE5TXzE0SGFsdGFibGVQ
bHVnaW5FCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyOWNsZWFudXBTY3JpcHRPYmpl
Y3RzRm9yUGx1Z2luRVB2CiBfX1pON1dlYkNvcmUxMVJlbmRlckZyYW1lRDBFdgogX19aTjdXZWJD
b3JlMTRSZW5kZXJGcmFtZVNldEQwRXYKLV9fWk43V2ViQ29yZTIxRGVwcmVjYXRlZFB0ckxpc3RJ
bXBsRDFFdgotX19aTjdXZWJDb3JlMjFEZXByZWNhdGVkUHRyTGlzdEltcGxEMkV2CiBfX1pON1dl
YkNvcmUyOUNTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uRDBFdgogX19aTjdXZWJDb3JlMTNT
dHlsZWRFbGVtZW50MjVyZW1vdmVNYXBwZWRBdHRyaWJ1dGVEZWNsRU5TXzIwTWFwcGVkQXR0cmli
dXRlRW50cnlFUktOU18xM1F1YWxpZmllZE5hbWVFUktOU18xMkF0b21pY1N0cmluZ0UKIF9fWk43
V2ViQ29yZTE1SFRNTExpbmtFbGVtZW50RDBFdgpAQCAtODQzNCw3ICs4NDExLDYgQEAgX19aVGhu
NDQwX043V2ViQ29yZTExQ2FjaGVkSW1hZ2UyMHNob3VsZFBhdXNlQW5pbWF0aW9uRVBLTlNfNUlt
YWdlRQogX19aTjdXZWJDb3JlMTFDYWNoZWRJbWFnZTIwc2hvdWxkUGF1c2VBbmltYXRpb25FUEtO
U181SW1hZ2VFCiBfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE1d2lsbFJlbmRlckltYWdlRVBO
U18xMUNhY2hlZEltYWdlRQogX19aTjdXZWJDb3JlMjBDYWNoZWRSZXNvdXJjZUNsaWVudDE1d2ls
bFJlbmRlckltYWdlRVBOU18xMUNhY2hlZEltYWdlRQotX19aTjdXZWJDb3JlMjFEZXByZWNhdGVk
UHRyTGlzdEltcGw0cHJldkV2CiBfX1pOSzdXZWJDb3JlMTNSb290SW5saW5lQm94MTlsaW5lQnJl
YWtCaWRpU3RhdHVzRXYKIF9fWk5LN1dlYkNvcmUxM0lubGluZUZsb3dCb3gxM2xhc3RMZWFmQ2hp
bGRFdgogX19aTjdXZWJDb3JlOVJlbmRlckJveDE5Y2xlYXJMYXlvdXRPdmVyZmxvd0V2CkBAIC05
MDkzLDggKzkwNjksNiBAQCBfX1pON1dlYkNvcmUyN0pTSFRNTExhYmVsRWxlbWVudFByb3RvdHlw
ZUQxRXYKIF9fWk43V2ViQ29yZTE4SlNIVE1MTGFiZWxFbGVtZW50RDFFdgogX19aTjdXZWJDb3Jl
MjdKU0hUTUxETGlzdEVsZW1lbnRQcm90b3R5cGVEMUV2CiBfX1pON1dlYkNvcmUxOEpTSFRNTERM
aXN0RWxlbWVudEQxRXYKLV9fWk43V2ViQ29yZTI5RGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0
b3I2dG9MYXN0RXYKLV9fWk43V2ViQ29yZTI5RGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3Jt
bUV2CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjdvcmlnaW5zRVJOM1dURjZWZWN0b3JJ
TlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRUxtMEVFRQogX19aTjdXZWJDb3JlMTdI
VE1MQnV0dG9uRWxlbWVudEQwRXYKIF9fWk43V2ViQ29yZTEyUmVuZGVySW5saW5lMTFub2RlQXRQ
b2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVpaWlpTlNfMTNI
aXRUZXN0QWN0aW9uRQpAQCAtOTg2Miw3ICs5ODM2LDYgQEAgX19aTks3V2ViQ29yZTVYUGF0aDlM
b2dpY2FsT3AxNHNob3J0Q2lyY3VpdE9uRXYKIF9fWk43V2ViQ29yZTVYUGF0aDlMb2dpY2FsT3BE
MEV2CiBfX1pON1dlYkNvcmU1WFBhdGgxMkZ1bkxvY2FsTmFtZUQwRXYKIF9fWk43V2ViQ29yZTE0
UmVuZGVyTGlzdEl0ZW0xMXVwZGF0ZVZhbHVlRXYKLV9fWk43V2ViQ29yZTIxRGVwcmVjYXRlZFB0
ckxpc3RJbXBsOXJlbW92ZVJlZkVQS3ZiCiBfX1pON1dlYkNvcmUyM2pzSFRNTEFuY2hvckVsZW1l
bnRIcmVmRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUK
IF9fWk43V2ViQ29yZTM4anNEb2N1bWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRlRXZlbnRFUE4z
SlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0xpc3RF
CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxMWNyZWF0ZUV2ZW50RVJLTlNfNlN0cmluZ0VSaQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCA4OTFmOTQyZWQ0ZjliNjRiMzI0MDRlMDIxMzViYTE2OGUwNjY4YjU4Li45
Y2ExZThiNjNhNTExMTkzNDM3YTI3NWQ0NDUzNGE3YmViODE3NTM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtOTI1LDcgKzkyNSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3RleHQvTG9jYWxp
emVkTnVtYmVyTm9uZS5jcHAgXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAgICAg
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKLSAgICBwbGF0Zm9ybS9EZXByZWNhdGVk
UHRyTGlzdEltcGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXAogICAgIHBsYXRm
b3JtL0RyYWdJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcCBcCkBAIC0x
ODM4LDcgKzE4MzcsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5o
IFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oIFwKLSAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuaCBcCiAgICAg
cGxhdGZvcm0vRHJhZ0RhdGEuaCBcCiAgICAgcGxhdGZvcm0vRHJhZ0ltYWdlLmggXAogICAgIHBs
YXRmb3JtL0ZpbGVDaG9vc2VyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCBjYTMxOTA0ZGZkODU0ODJjNmM5NWEyZjVhYjI2MzU3NTVlMDdh
NjkzLi5iYTExZDA2YjIwNWYwMDQ1ODUzMWUyMWRhOTNiZmEwNWJiYTFkNTI5IDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjU0NjIsMTggKzI1
NDYyLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cRGVwcmVjYXRlZFB0ckxpc3QuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVwcmVjYXRlZFB0ckxpc3RJbXBs
LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERyYWdEYXRhLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNGM0ZDEwNWIzZGY1ZjdlYmU0MDRhMTdjZGU0YzQzZjFhMzc3YmJj
My4uYzQ0YzE5NWFhOTA3NGU2NTc2OTc1NjNmM2VmNTNmOWMxMmJlNzRlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjkyMyw4
ICsyOTIzLDYgQEAKIAkJOTNGMTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODYzQTAyREUz
QTE0MDFFQTQxMjIgLyogU2V0dGluZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTk1MDA4MjQ1RTU5MDAxRTlBQkMgLyogQ2FjaGVQb2xp
Y3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4
NjQ5MDJERTNBOUEwMUVBNDEyMiAvKiBDYWNoZVBvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTYzMDgyNDVFNTkwMDFFOUFCQyAv
KiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4NjYyMDJERTNCMTEwMUVBNDEyMiAvKiBTU0xLZXlHZW5lcmF0b3IuaCAq
LzsgfTsKLQkJOTNGMTk5NkQwODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1
MTUwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRjE5OTgyMDgyNDVFNTkw
MDFFOUFCQyAvKiBEZXByZWNhdGVkUHRyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2OTkwMkRFM0I4NjAxRUE0MTIyIC8qIERlcHJlY2F0
ZWRQdHJMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTNGMTk5OEMwODI0NUU1OTAwMUU5QUJDIC8qIFJlbmRlclRyZWVBc1RleHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTU1QTQxMDNENzI5
MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVlQXNUZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QTgwODI0NUU1OTAwMUU5QUJDIC8qIFdl
YkNvcmVGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1ODc4NTRDMDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlRnJhbWVWaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5QjMw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NTQwMkRFMzc1OTAxRUE0MTIyIC8q
IFdlYkNvcmVWaWV3RmFjdG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0yOTM5LDcgKzI5MzcsNiBAQAogCQk5M0YxOTlFRDA4MjQ1RTU5MDAx
RTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMwNkYyNEMwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3Iu
aCAqLzsgfTsKIAkJOTNGMTk5RjAwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTg1NUY3RjA3MDFF
ODM1MDAyMzk3NjkgLyogV2ViQ29yZVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOUEyNjA4MjQ1RTU5MDAxRTlBQkMgLyogQ3Vyc29y
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8qIEN1cnNvck1hYy5tbSAqLzsgfTsKLQkJOTNGMTlBM0Mw
ODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUxNjAyREUzNzU5MDFFQTQx
MjIgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBNUYwODI0NUU1
OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NTUwMkRFMzc1OTAxRUE0MTIyIC8qIFdlYkNv
cmVWaWV3RmFjdG9yeS5tICovOyB9OwogCQk5M0YxOUE5MTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRN
TERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjNCMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovOyB9Owog
CQk5M0YxOUE5MjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0UwMkRFNDM5NjAxODYz
NUNBIC8qIEhUTUxFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTEyMDY0LDggKzEyMDYxLDYgQEAKIAkJ
RjU1QjNEQUIxMjUxRjEyRDAwM0VGMjY5IC8qIFdlZWtJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vla0lucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY1NUIzREFDMTI1MUYxMkQwMDNFRjI2OSAvKiBXZWVrSW5wdXRU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlZWtJbnB1dFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU4Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8q
IEN1cnNvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEN1cnNvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NTE1MDJERTM3NTkwMUVBNDEyMiAv
KiBEZXByZWNhdGVkUHRyTGlzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODUxNjAy
REUzNzU5MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcHJlY2F0ZWRQdHJM
aXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQlGNTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmll
dy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlRnJhbWVWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODU1NDAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVZp
ZXdGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvcmVWaWV3RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1NTUwMkRFMzc1OTAxRUE0MTIyIC8q
IFdlYkNvcmVWaWV3RmFjdG9yeS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLm9iamM7IHBhdGggPSBXZWJDb3JlVmlld0ZhY3RvcnkubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xMjA3Myw3ICsxMjA2
OCw2IEBACiAJCUY1ODc4NjQ5MDJERTNBOUEwMUVBNDEyMiAvKiBDYWNoZVBvbGljeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZVBvbGlj
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJRjU4Nzg2NjIwMkRFM0IxMTAxRUE0MTIyIC8qIFNTTEtleUdlbmVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTU0xLZXlHZW5l
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCUY1ODc4Njg0MDJERTNCODYwMUVBNDEyMiAvKiBDdXJzb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Vyc29yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3
ODY5OTAyREUzQjg2MDFFQTQxMjIgLyogRGVwcmVjYXRlZFB0ckxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwcmVjYXRlZFB0ckxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUY1OUM5NUZEMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU5Qzk1RkUxMjU1
QjIzRjAwMDYyM0MwIC8qIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjVBMTU0MjUxMjc5NTM0RDAwRDBCMEMwIC8qIFZhbGlkYXRp
b25NZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlk
YXRpb25NZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Mjc5LDkg
KzE4MjczLDYgQEAKIAkJCQkyRTQzNDY1NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRD
b3BpZXIuaCAqLywKIAkJCQlFMTFBRjE1MDExQjlBMUEzMDA4MDUxMDMgLyogQ3Vyc29yLmNwcCAq
LywKIAkJCQlGNTg3ODY4NDAyREUzQjg2MDFFQTQxMjIgLyogQ3Vyc29yLmggKi8sCi0JCQkJRjU4
Nzg2OTkwMkRFM0I4NjAxRUE0MTIyIC8qIERlcHJlY2F0ZWRQdHJMaXN0LmggKi8sCi0JCQkJRjU4
Nzg1MTYwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAgKi8sCi0J
CQkJRjU4Nzg1MTUwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5oICov
LAogCQkJCUE3OTU0NjQyMEI1QzRDQjQwMDdCNDM4RiAvKiBEcmFnRGF0YS5jcHAgKi8sCiAJCQkJ
QTdCNkU2OUQwQjI5MUE5NjAwRDA1MjlGIC8qIERyYWdEYXRhLmggKi8sCiAJCQkJQTdDRkIzQ0Yw
QjdFRDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5jcHAgKi8sCkBAIC0xOTc3Miw4ICsxOTc2Myw2
IEBACiAJCQkJMUM0QzhGMDIwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RERGMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURFMTA5OUU2
NDkyMDA1NkU1ODEgLyogRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOTNGMTk5ODIwODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRQdHJMaXN0LmggaW4gSGVh
ZGVycyAqLywKLQkJCQk5M0YxOTk2RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVwcmVjYXRlZFB0ckxp
c3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUZCMUE1NzEyMEE1RDA2MDBEQzAyQTAgLyog
RGV2aWNlTW90aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUZCMUE1OTEyMEE1RDA2
MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzFGQjFBNUIxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkRhdGEuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjMwMzEsNyArMjMwMjAsNiBAQAogCQkJCTFDRTgzQUMzMEFEQUZGRDcwMDkzNTRG
NiAvKiBEZWxldGVCdXR0b25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5
RERFMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5REUwMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTNDMDgyNDVFNTkwMDFFOUFC
QyAvKiBEZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFGQjFB
NTgxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzFGQjFBNUExMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFGQjFBNUMxMjBBNUQwNjAwREMwMkEwIC8qIERldmlj
ZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RlcHJlY2F0ZWRQdHJMaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwN2Qx
NzM5NzdhMTU4MmExYzUzMWNmMjczYzJiMWI5N2U5MDE5YzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVwcmVj
YXRlZFB0ckxpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIERlcHJlY2F0ZWRQdHJMaXN0X2gKLSNkZWZpbmUgRGVwcmVjYXRl
ZFB0ckxpc3RfaAotCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmgiCi0jaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gY2xhc3MgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjsKLQotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNsYXNzIERlcHJlY2F0ZWRQdHJMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEZXByZWNhdGVkUHRyTGlzdCgpIDogaW1wbChkZWxldGVG
dW5jKSwgZGVsX2l0ZW0oZmFsc2UpIHsgfQotICAgIH5EZXByZWNhdGVkUHRyTGlzdCgpIHsgaW1w
bC5jbGVhcihkZWxfaXRlbSk7IH0KLSAgICAKLSAgICBEZXByZWNhdGVkUHRyTGlzdChjb25zdCBE
ZXByZWNhdGVkUHRyTGlzdCYgbCkgOiBpbXBsKGwuaW1wbCksIGRlbF9pdGVtKGZhbHNlKSB7IH0K
LSAgICBEZXByZWNhdGVkUHRyTGlzdCYgb3BlcmF0b3I9KGNvbnN0IERlcHJlY2F0ZWRQdHJMaXN0
ICZsKSB7IGltcGwuYXNzaWduKGwuaW1wbCwgZGVsX2l0ZW0pOyByZXR1cm4gKnRoaXM7IH0KLQot
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGltcGwuaXNFbXB0eSgpOyB9Ci0gICAg
dW5zaWduZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBpbXBsLmNvdW50KCk7IH0KLSAgICB2b2lk
IGNsZWFyKCkgeyBpbXBsLmNsZWFyKGRlbF9pdGVtKTsgfQotCi0gICAgVCAqYXQodW5zaWduZWQg
bikgeyByZXR1cm4gKFQgKilpbXBsLmF0KG4pOyB9Ci0KLSAgICBib29sIGluc2VydCh1bnNpZ25l
ZCBuLCBjb25zdCBUICppdGVtKSB7IHJldHVybiBpbXBsLmluc2VydChuLCBpdGVtKTsgfQotICAg
IGJvb2wgcmVtb3ZlKCkgeyByZXR1cm4gaW1wbC5yZW1vdmUoZGVsX2l0ZW0pOyB9Ci0gICAgYm9v
bCByZW1vdmUodW5zaWduZWQgbikgeyByZXR1cm4gaW1wbC5yZW1vdmUobiwgZGVsX2l0ZW0pOyB9
Ci0gICAgYm9vbCByZW1vdmUoY29uc3QgVCAqaXRlbSkgeyByZXR1cm4gaW1wbC5yZW1vdmVSZWYo
aXRlbSwgZGVsX2l0ZW0pOyB9Ci0gICAgYm9vbCByZW1vdmVGaXJzdCgpIHsgcmV0dXJuIGltcGwu
cmVtb3ZlRmlyc3QoZGVsX2l0ZW0pOyB9Ci0gICAgYm9vbCByZW1vdmVMYXN0KCkgeyByZXR1cm4g
aW1wbC5yZW1vdmVMYXN0KGRlbF9pdGVtKTsgfQotICAgIGJvb2wgcmVtb3ZlUmVmKGNvbnN0IFQg
Kml0ZW0pIHsgcmV0dXJuIGltcGwucmVtb3ZlUmVmKGl0ZW0sIGRlbF9pdGVtKTsgfQotCi0gICAg
VCAqZ2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAoVCAqKWltcGwuZ2V0Rmlyc3QoKTsgfQotICAg
IFQgKmdldExhc3QoKSBjb25zdCB7IHJldHVybiAoVCAqKWltcGwuZ2V0TGFzdCgpOyB9Ci0gICAg
VCAqZ2V0TmV4dCgpIGNvbnN0IHsgcmV0dXJuIChUICopaW1wbC5nZXROZXh0KCk7IH0KLSAgICBU
ICpnZXRQcmV2KCkgY29uc3QgeyByZXR1cm4gKFQgKilpbXBsLmdldFByZXYoKTsgfQotICAgIFQg
KmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoVCAqKWltcGwuY3VycmVudCgpOyB9Ci0gICAgVCAq
Zmlyc3QoKSB7IHJldHVybiAoVCAqKWltcGwuZmlyc3QoKTsgfQotICAgIFQgKmxhc3QoKSB7IHJl
dHVybiAoVCAqKWltcGwubGFzdCgpOyB9Ci0gICAgVCAqbmV4dCgpIHsgcmV0dXJuIChUICopaW1w
bC5uZXh0KCk7IH0KLSAgICBUICpwcmV2KCkgeyByZXR1cm4gKFQgKilpbXBsLnByZXYoKTsgfQot
ICAgIFQgKnRha2UodW5zaWduZWQgbikgeyByZXR1cm4gKFQgKilpbXBsLnRha2Uobik7IH0KLSAg
ICBUICp0YWtlKCkgeyByZXR1cm4gKFQgKilpbXBsLnRha2UoKTsgfQotCi0gICAgdm9pZCBhcHBl
bmQoY29uc3QgVCAqaXRlbSkgeyBpbXBsLmFwcGVuZChpdGVtKTsgfQotICAgIHZvaWQgcHJlcGVu
ZChjb25zdCBUICppdGVtKSB7IGltcGwucHJlcGVuZChpdGVtKTsgfQotCi0gICAgdW5zaWduZWQg
Y29udGFpbnNSZWYoY29uc3QgVCAqaXRlbSkgY29uc3QgeyByZXR1cm4gaW1wbC5jb250YWluc1Jl
ZihpdGVtKTsgfQotICAgIGludCBmaW5kUmVmKGNvbnN0IFQgKml0ZW0pIHsgcmV0dXJuIGltcGwu
ZmluZFJlZihpdGVtKTsgfQotCi0gICAgdHlwZWRlZiBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PFQ+IEl0ZXJhdG9yOwotICAgIHR5cGVkZWYgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxUPiBD
b25zdEl0ZXJhdG9yOwotICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBD
b25zdEl0ZXJhdG9yKCp0aGlzKTsgfQotICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyBD
b25zdEl0ZXJhdG9yIGl0cigqdGhpcyk7IGl0ci50b0xhc3QoKTsgKytpdHI7IHJldHVybiBpdHI7
IH0KLQotICAgIGJvb2wgYXV0b0RlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGRlbF9pdGVtOyB9Ci0g
ICAgdm9pZCBzZXRBdXRvRGVsZXRlKGJvb2wgYXV0b0RlbGV0ZSkgeyBkZWxfaXRlbSA9IGF1dG9E
ZWxldGU7IH0KLQotIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlRnVuYyh2b2lkICpp
dGVtKSB7IGRlbGV0ZSAoVCAqKWl0ZW07IH0KLQotICAgIGZyaWVuZCBjbGFzcyBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPFQ+OwotCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJbXBsIGltcGw7Ci0g
ICAgYm9vbCBkZWxfaXRlbTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJh
dG9yKCkgeyB9Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcihjb25zdCBEZXByZWNhdGVk
UHRyTGlzdDxUPiAmbCkgOiBpbXBsKGwuaW1wbCkgeyB9Ci0KLSAgICB1bnNpZ25lZCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIGltcGwuY291bnQoKTsgfQotICAgIFQgKnRvRmlyc3QoKSB7IHJldHVy
biAoVCAqKWltcGwudG9GaXJzdCgpOyB9Ci0gICAgVCAqdG9MYXN0KCkgeyByZXR1cm4gKFQgKilp
bXBsLnRvTGFzdCgpOyB9Ci0gICAgVCAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIChUICopaW1w
bC5jdXJyZW50KCk7IH0KLQotICAgIG9wZXJhdG9yIFQgKigpIGNvbnN0IHsgcmV0dXJuIChUICop
aW1wbC5jdXJyZW50KCk7IH0KLSAgICBUICpvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAoVCAq
KWltcGwuY3VycmVudCgpOyB9Ci0gICAgVCAqb3BlcmF0b3ItLSgpIHsgcmV0dXJuIChUICopLS1p
bXBsOyB9Ci0gICAgVCAqb3BlcmF0b3IrKygpICB7IHJldHVybiAoVCAqKSsraW1wbDsgfQotCi1w
cml2YXRlOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yIGltcGw7Ci19OwotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRl
ZFB0ckxpc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRQdHJM
aXN0SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MzM3NDFlYWY5NmI4
NzFlMDI4NjcwNGEyNDI3ZWIyYzFiZDhlYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxp
c3RJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0
ckxpc3RJbXBsLmgiCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNl
Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRGVwcmVjYXRlZExpc3ROb2RlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
ZXByZWNhdGVkTGlzdE5vZGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBEZXByZWNhdGVkTGlzdE5vZGUodm9pZCAqZCkgOiBkYXRhKGQpLCBuZXh0KDApLCBwcmV2KDAp
IHsgfQotCi0gICAgdm9pZCAqZGF0YTsKLSAgICBEZXByZWNhdGVkTGlzdE5vZGUgKm5leHQ7Ci0g
ICAgRGVwcmVjYXRlZExpc3ROb2RlICpwcmV2OwotfTsKLQotCi1zdGF0aWMgRGVwcmVjYXRlZExp
c3ROb2RlICpjb3B5TGlzdChEZXByZWNhdGVkTGlzdE5vZGUgKmwsIERlcHJlY2F0ZWRMaXN0Tm9k
ZSAqJnRhaWwpCi17Ci0gICAgRGVwcmVjYXRlZExpc3ROb2RlICpub2RlID0gbDsKLSAgICBEZXBy
ZWNhdGVkTGlzdE5vZGUgKmNvcHlIZWFkID0gMDsKLSAgICBEZXByZWNhdGVkTGlzdE5vZGUgKmxh
c3QgPSAwOwotCi0gICAgd2hpbGUgKG5vZGUgIT0gMCkgewotICAgICAgICBEZXByZWNhdGVkTGlz
dE5vZGUgKmNvcHkgPSBuZXcgRGVwcmVjYXRlZExpc3ROb2RlKG5vZGUtPmRhdGEpOwotICAgICAg
ICBpZiAobGFzdCAhPSAwKSB7Ci0gICAgICAgICAgICBsYXN0LT5uZXh0ID0gY29weTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHlIZWFkID0gY29weTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvcHktPnByZXYgPSBsYXN0OwotICAgICAgICAKLSAgICAgICAgbGFzdCA9IGNvcHk7
Ci0gICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwotICAgIH0KLQotICAgIHRhaWwgPSBsYXN0Owot
ICAgIHJldHVybiBjb3B5SGVhZDsKLX0KLQotCi1EZXByZWNhdGVkUHRyTGlzdEltcGw6OkRlcHJl
Y2F0ZWRQdHJMaXN0SW1wbCh2b2lkICgqZGVsZXRlRnVuYykodm9pZCAqKSkgOgotICAgIGhlYWQo
MCksCi0gICAgdGFpbCgwKSwKLSAgICBjdXIoMCksCi0gICAgbm9kZUNvdW50KDApLAotICAgIGRl
bGV0ZUl0ZW0oZGVsZXRlRnVuYyksCi0gICAgaXRlcmF0b3JzKDApCi17Ci19Ci0KLURlcHJlY2F0
ZWRQdHJMaXN0SW1wbDo6RGVwcmVjYXRlZFB0ckxpc3RJbXBsKGNvbnN0IERlcHJlY2F0ZWRQdHJM
aXN0SW1wbCAmaW1wbCkgOgotICAgIGN1cigwKSwKLSAgICBub2RlQ291bnQoaW1wbC5ub2RlQ291
bnQpLAotICAgIGRlbGV0ZUl0ZW0oaW1wbC5kZWxldGVJdGVtKSwKLSAgICBpdGVyYXRvcnMoMCkK
LXsKLSAgICBoZWFkID0gY29weUxpc3QoaW1wbC5oZWFkLCB0YWlsKTsKLX0KLQotRGVwcmVjYXRl
ZFB0ckxpc3RJbXBsOjp+RGVwcmVjYXRlZFB0ckxpc3RJbXBsKCkKLXsKLSAgICBjbGVhcihmYWxz
ZSk7Ci0gICAgCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3IgKm5leHQ7Ci0gICAg
Zm9yIChEZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvciAqaXQgPSBpdGVyYXRvcnM7IGl0OyBp
dCA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IGl0LT5uZXh0OwotICAgICAgICBpdC0+bGlzdCA9
IDA7Ci0gICAgICAgIEFTU0VSVCghaXQtPm5vZGUpOwotICAgICAgICBpdC0+bmV4dCA9IDA7Ci0g
ICAgICAgIGl0LT5wcmV2ID0gMDsKLSAgICB9Ci19Ci0gICAgIAotdm9pZCBEZXByZWNhdGVkUHRy
TGlzdEltcGw6OmNsZWFyKGJvb2wgZGVsZXRlSXRlbXMpCi17Ci0gICAgRGVwcmVjYXRlZExpc3RO
b2RlICpuZXh0OwotICAgIAotICAgIGZvciAoRGVwcmVjYXRlZExpc3ROb2RlICpub2RlID0gaGVh
ZDsgbm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IG5vZGUtPm5leHQ7Ci0gICAg
ICAgIGlmIChkZWxldGVJdGVtcykKLSAgICAgICAgICAgIGRlbGV0ZUl0ZW0obm9kZS0+ZGF0YSk7
Ci0gICAgICAgIGRlbGV0ZSBub2RlOwotICAgIH0KLQotICAgIGhlYWQgPSAwOwotICAgIHRhaWwg
PSAwOwotICAgIGN1ciA9IDA7Ci0gICAgbm9kZUNvdW50ID0gMDsKLQotICAgIGZvciAoRGVwcmVj
YXRlZFB0ckxpc3RJbXBsSXRlcmF0b3IgKml0ID0gaXRlcmF0b3JzOyBpdDsgaXQgPSBpdC0+bmV4
dCkKLSAgICAgICAgaXQtPm5vZGUgPSAwOwotfQotCi12b2lkICpEZXByZWNhdGVkUHRyTGlzdElt
cGw6OmF0KHVuc2lnbmVkIG4pCi17Ci0gICAgRGVwcmVjYXRlZExpc3ROb2RlICpub2RlOwotICAg
IGlmIChuID49IG5vZGVDb3VudCAtIDEpIHsKLSAgICAgICAgbm9kZSA9IHRhaWw7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbm9kZSA9IGhlYWQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBuICYmIG5vZGU7IGkrKykgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjdXIgPSBub2RlOwotICAgIHJldHVybiBub2RlID8gbm9k
ZS0+ZGF0YSA6IDA7Ci19Ci0KLWJvb2wgRGVwcmVjYXRlZFB0ckxpc3RJbXBsOjppbnNlcnQodW5z
aWduZWQgbiwgY29uc3Qgdm9pZCAqaXRlbSkKLXsKLSAgICBpZiAobiA+IG5vZGVDb3VudCkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRGVwcmVjYXRlZExpc3ROb2RlICpu
b2RlID0gbmV3IERlcHJlY2F0ZWRMaXN0Tm9kZShjb25zdF9jYXN0PHZvaWQqPihpdGVtKSk7Ci0K
LSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIC8vIGluc2VydGluZyBhdCBoZWFkCi0gICAgICAg
IG5vZGUtPm5leHQgPSBoZWFkOwotICAgICAgICBpZiAoaGVhZCkgewotICAgICAgICAgICAgaGVh
ZC0+cHJldiA9IG5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZCA9IG5vZGU7Ci0gICAgICAg
IGlmICh0YWlsID09IDApIHsKLSAgICAgICAgICAgIHRhaWwgPSBub2RlOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChuID09IG5vZGVDb3VudCkgewotICAgICAgICAvLyBpbnNlcnRpbmcgYXQg
dGFpbAotICAgICAgICBub2RlLT5wcmV2ID0gdGFpbDsKLSAgICAgICAgaWYgKHRhaWwpIHsKLSAg
ICAgICAgICAgIHRhaWwtPm5leHQgPSBub2RlOwotICAgICAgICB9Ci0gICAgICAgIHRhaWwgPSBu
b2RlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGdlbmVyYWwgaW5zZXJ0aW9uCi0gICAgICAg
IAotICAgICAgICAvLyBpdGVyYXRlIHRvIG9uZSBub2RlIGJlZm9yZSB0aGUgaW5zZXJ0aW9uIHBv
aW50LCBjYW4ndCBiZSBudWxsCi0gICAgICAgIC8vIHNpbmNlIHdlIGtub3cgbiA+IDAgYW5kIG4g
PCBub2RlQ291bnQKLSAgICAgICAgRGVwcmVjYXRlZExpc3ROb2RlICpwcmV2Tm9kZSA9IGhlYWQ7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKLSAgICAg
ICAgICAgIHByZXZOb2RlID0gcHJldk5vZGUtPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgbm9k
ZS0+cHJldiA9IHByZXZOb2RlOwotICAgICAgICBub2RlLT5uZXh0ID0gcHJldk5vZGUtPm5leHQ7
Ci0gICAgICAgIGlmIChub2RlLT5uZXh0KSB7Ci0gICAgICAgICAgICBub2RlLT5uZXh0LT5wcmV2
ID0gbm9kZTsKLSAgICAgICAgfQotICAgICAgICBwcmV2Tm9kZS0+bmV4dCA9IG5vZGU7Ci0gICAg
fQotCi0gICAgbm9kZUNvdW50Kys7Ci0gICAgY3VyID0gbm9kZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBEZXByZWNhdGVkUHRyTGlzdEltcGw6OnJlbW92ZShib29sIHNob3VsZERlbGV0
ZUl0ZW0pCi17Ci0gICAgRGVwcmVjYXRlZExpc3ROb2RlICpub2RlID0gY3VyOwotICAgIGlmIChu
b2RlID09IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChub2Rl
LT5wcmV2ID09IDApIHsKLSAgICAgICAgaGVhZCA9IG5vZGUtPm5leHQ7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbm9kZS0+cHJldi0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0gICAgfQotCi0gICAgaWYg
KG5vZGUtPm5leHQgPT0gMCkgewotICAgICAgICB0YWlsID0gbm9kZS0+cHJldjsKLSAgICB9IGVs
c2UgewotICAgICAgICBub2RlLT5uZXh0LT5wcmV2ID0gbm9kZS0+cHJldjsKLSAgICB9Ci0KLSAg
ICBpZiAobm9kZS0+bmV4dCkgewotICAgICAgICBjdXIgPSBub2RlLT5uZXh0OwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGN1ciA9IG5vZGUtPnByZXY7Ci0gICAgfQotCi0gICAgZm9yIChEZXByZWNh
dGVkUHRyTGlzdEltcGxJdGVyYXRvciAqaXQgPSBpdGVyYXRvcnM7IGl0OyBpdCA9IGl0LT5uZXh0
KSB7Ci0gICAgICAgIGlmIChpdC0+bm9kZSA9PSBub2RlKSB7Ci0gICAgICAgICAgICBpdC0+bm9k
ZSA9IGN1cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzaG91bGREZWxldGVJdGVtKSB7
Ci0gICAgICAgIGRlbGV0ZUl0ZW0obm9kZS0+ZGF0YSk7Ci0gICAgfQotICAgIGRlbGV0ZSBub2Rl
OwotCi0gICAgbm9kZUNvdW50LS07Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZXBy
ZWNhdGVkUHRyTGlzdEltcGw6OnJlbW92ZSh1bnNpZ25lZCBuLCBib29sIGRlbGV0ZUl0ZW0pCi17
Ci0gICAgaWYgKG4gPj0gbm9kZUNvdW50KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBhdChuKTsKLSAgICByZXR1cm4gcmVtb3ZlKGRlbGV0ZUl0ZW0pOwotfQotCi1ib29s
IERlcHJlY2F0ZWRQdHJMaXN0SW1wbDo6cmVtb3ZlRmlyc3QoYm9vbCBkZWxldGVJdGVtKQotewot
ICAgIHJldHVybiByZW1vdmUoMCwgZGVsZXRlSXRlbSk7Ci19Ci0KLWJvb2wgRGVwcmVjYXRlZFB0
ckxpc3RJbXBsOjpyZW1vdmVMYXN0KGJvb2wgZGVsZXRlSXRlbSkKLXsKLSAgICByZXR1cm4gcmVt
b3ZlKG5vZGVDb3VudCAtIDEsIGRlbGV0ZUl0ZW0pOwotfQotCi1ib29sIERlcHJlY2F0ZWRQdHJM
aXN0SW1wbDo6cmVtb3ZlUmVmKGNvbnN0IHZvaWQgKml0ZW0sIGJvb2wgZGVsZXRlSXRlbSkKLXsK
LSAgICBEZXByZWNhdGVkTGlzdE5vZGUgKm5vZGU7Ci0KLSAgICBub2RlID0gaGVhZDsKLQotICAg
IHdoaWxlIChub2RlICYmIGl0ZW0gIT0gbm9kZS0+ZGF0YSkgewotICAgICAgICBub2RlID0gbm9k
ZS0+bmV4dDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUgPT0gMCkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY3VyID0gbm9kZTsKLQotICAgIHJldHVybiByZW1vdmUo
ZGVsZXRlSXRlbSk7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJMaXN0SW1wbDo6Z2V0Rmlyc3Qo
KSBjb25zdAotewotICAgIHJldHVybiBoZWFkID8gaGVhZC0+ZGF0YSA6IDA7Ci19Ci0KLXZvaWQg
KkRlcHJlY2F0ZWRQdHJMaXN0SW1wbDo6Z2V0TGFzdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRh
aWwgPyB0YWlsLT5kYXRhIDogMDsKLX0KLQotdm9pZCAqRGVwcmVjYXRlZFB0ckxpc3RJbXBsOjpn
ZXROZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VyICYmIGN1ci0+bmV4dCA/IGN1ci0+bmV4
dC0+ZGF0YSA6IDA7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJMaXN0SW1wbDo6Z2V0UHJldigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1ciAmJiBjdXItPnByZXYgPyBjdXItPnByZXYtPmRhdGEg
OiAwOwotfQotCi12b2lkICpEZXByZWNhdGVkUHRyTGlzdEltcGw6OmN1cnJlbnQoKSBjb25zdAot
ewotICAgIGlmIChjdXIpIHsKLSAgICAgICAgcmV0dXJuIGN1ci0+ZGF0YTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJMaXN0
SW1wbDo6Zmlyc3QoKQotewotICAgIGN1ciA9IGhlYWQ7Ci0gICAgcmV0dXJuIGN1cnJlbnQoKTsK
LX0KLQotdm9pZCAqRGVwcmVjYXRlZFB0ckxpc3RJbXBsOjpsYXN0KCkKLXsKLSAgICBjdXIgPSB0
YWlsOwotICAgIHJldHVybiBjdXJyZW50KCk7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJMaXN0
SW1wbDo6bmV4dCgpCi17Ci0gICAgaWYgKGN1cikgewotICAgICAgICBjdXIgPSBjdXItPm5leHQ7
Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50KCk7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJM
aXN0SW1wbDo6cHJldigpCi17Ci0gICAgaWYgKGN1cikgewotICAgICAgICBjdXIgPSBjdXItPnBy
ZXY7Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50KCk7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQ
dHJMaXN0SW1wbDo6dGFrZSh1bnNpZ25lZCBuKQotewotICAgIHZvaWQgKnJldHZhbCA9IGF0KG4p
OwotICAgIHJlbW92ZShmYWxzZSk7Ci0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCAqRGVw
cmVjYXRlZFB0ckxpc3RJbXBsOjp0YWtlKCkKLXsKLSAgICB2b2lkICpyZXR2YWwgPSBjdXJyZW50
KCk7Ci0gICAgcmVtb3ZlKGZhbHNlKTsKLSAgICByZXR1cm4gcmV0dmFsOwotfQotCi12b2lkIERl
cHJlY2F0ZWRQdHJMaXN0SW1wbDo6YXBwZW5kKGNvbnN0IHZvaWQgKml0ZW0pCi17Ci0gICAgaW5z
ZXJ0KG5vZGVDb3VudCwgaXRlbSk7Ci19Ci0KLXZvaWQgRGVwcmVjYXRlZFB0ckxpc3RJbXBsOjpw
cmVwZW5kKGNvbnN0IHZvaWQgKml0ZW0pCi17Ci0gICAgaW5zZXJ0KDAsIGl0ZW0pOwotfQotCi11
bnNpZ25lZCBEZXByZWNhdGVkUHRyTGlzdEltcGw6OmNvbnRhaW5zUmVmKGNvbnN0IHZvaWQgKml0
ZW0pIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIGZvciAoRGVw
cmVjYXRlZExpc3ROb2RlICpub2RlID0gaGVhZDsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsK
LSAgICAgICAgaWYgKGl0ZW0gPT0gbm9kZS0+ZGF0YSkgewotICAgICAgICAgICAgKytjb3VudDsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLWludCBEZXBy
ZWNhdGVkUHRyTGlzdEltcGw6OmZpbmRSZWYoY29uc3Qgdm9pZCAqaXRlbSkKLXsKLSAgICBEZXBy
ZWNhdGVkTGlzdE5vZGUgKm5vZGUgPSBoZWFkOwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgCi0g
ICAgd2hpbGUgKG5vZGUgJiYgaXRlbSAhPSBub2RlLT5kYXRhKSB7Ci0gICAgICAgIG5vZGUgPSBu
b2RlLT5uZXh0OwotICAgICAgICBpbmRleCsrOwotICAgIH0KLSAgICAKLSAgICBjdXIgPSBub2Rl
OwotICAgIAotICAgIGlmIChub2RlID09IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLURlcHJlY2F0ZWRQdHJMaXN0SW1wbCAmRGVw
cmVjYXRlZFB0ckxpc3RJbXBsOjphc3NpZ24oY29uc3QgRGVwcmVjYXRlZFB0ckxpc3RJbXBsICZp
bXBsLCBib29sIGRlbGV0ZUl0ZW1zKQotewotICAgIGNsZWFyKGRlbGV0ZUl0ZW1zKTsKLSAgICBE
ZXByZWNhdGVkUHRyTGlzdEltcGwoaW1wbCkuc3dhcCgqdGhpcyk7Ci0gICAgcmV0dXJuICp0aGlz
OwotfQotCi12b2lkIERlcHJlY2F0ZWRQdHJMaXN0SW1wbDo6YWRkSXRlcmF0b3IoRGVwcmVjYXRl
ZFB0ckxpc3RJbXBsSXRlcmF0b3IgKml0ZXIpIGNvbnN0Ci17Ci0gICAgaXRlci0+bmV4dCA9IGl0
ZXJhdG9yczsKLSAgICBpdGVyLT5wcmV2ID0gMDsKLSAgICAKLSAgICBpZiAoaXRlcmF0b3JzKSB7
Ci0gICAgICAgIGl0ZXJhdG9ycy0+cHJldiA9IGl0ZXI7Ci0gICAgfQotICAgIGl0ZXJhdG9ycyA9
IGl0ZXI7Ci19Ci0KLXZvaWQgRGVwcmVjYXRlZFB0ckxpc3RJbXBsOjpyZW1vdmVJdGVyYXRvcihE
ZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvciAqaXRlcikgY29uc3QKLXsKLSAgICBpZiAoaXRl
ci0+cHJldiA9PSAwKSB7Ci0gICAgICAgIGl0ZXJhdG9ycyA9IGl0ZXItPm5leHQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaXRlci0+cHJldi0+bmV4dCA9IGl0ZXItPm5leHQ7Ci0gICAgfQotCi0g
ICAgaWYgKGl0ZXItPm5leHQpIHsKLSAgICAgICAgaXRlci0+bmV4dC0+cHJldiA9IGl0ZXItPnBy
ZXY7Ci0gICAgfQotfQotCi12b2lkIERlcHJlY2F0ZWRQdHJMaXN0SW1wbDo6c3dhcChEZXByZWNh
dGVkUHRyTGlzdEltcGwgJm90aGVyKQotewotICAgIHVzaW5nIHN0ZDo6c3dhcDsKLSAgICAKLSAg
ICBBU1NFUlQoaXRlcmF0b3JzID09IDApOwotICAgIEFTU0VSVChvdGhlci5pdGVyYXRvcnMgPT0g
MCk7Ci0gICAgCi0gICAgc3dhcChoZWFkLCBvdGhlci5oZWFkKTsKLSAgICBzd2FwKHRhaWwsIG90
aGVyLnRhaWwpOwotICAgIHN3YXAoY3VyLCBvdGhlci5jdXIpOwotICAgIHN3YXAobm9kZUNvdW50
LCBvdGhlci5ub2RlQ291bnQpOwotICAgIHN3YXAoZGVsZXRlSXRlbSwgb3RoZXIuZGVsZXRlSXRl
bSk7Ci19Ci0KLQotRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3I6OkRlcHJlY2F0ZWRQdHJM
aXN0SW1wbEl0ZXJhdG9yKCkgOgotICAgIGxpc3QoMCksCi0gICAgbm9kZSgwKQotewotfQotCi1E
ZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvcjo6RGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0
b3IoY29uc3QgRGVwcmVjYXRlZFB0ckxpc3RJbXBsICZpbXBsKSAgOgotICAgIGxpc3QoJmltcGwp
LAotICAgIG5vZGUoaW1wbC5oZWFkKQotewotICAgIGltcGwuYWRkSXRlcmF0b3IodGhpcyk7Ci19
Ci0KLURlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yOjp+RGVwcmVjYXRlZFB0ckxpc3RJbXBs
SXRlcmF0b3IoKQotewotICAgIGlmIChsaXN0KSB7Ci0gICAgICAgIGxpc3QtPnJlbW92ZUl0ZXJh
dG9yKHRoaXMpOwotICAgIH0KLX0KLQotRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3I6OkRl
cHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yKGNvbnN0IERlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0
ZXJhdG9yICZpbXBsKSA6Ci0gICAgbGlzdChpbXBsLmxpc3QpLAotICAgIG5vZGUoaW1wbC5ub2Rl
KQotewotICAgIGlmIChsaXN0KSB7Ci0gICAgICAgIGxpc3QtPmFkZEl0ZXJhdG9yKHRoaXMpOwot
ICAgIH0KLX0KLQotdW5zaWduZWQgRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3I6OmNvdW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGlzdCA9PSAwID8gMCA6IGxpc3QtPmNvdW50KCk7Ci19
Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yOjp0b0ZpcnN0KCkKLXsKLSAg
ICBpZiAobGlzdCkgewotICAgICAgICBub2RlID0gbGlzdC0+aGVhZDsKLSAgICB9Ci0gICAgcmV0
dXJuIGN1cnJlbnQoKTsKLX0KLQotdm9pZCAqRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3I6
OnRvTGFzdCgpCi17Ci0gICAgaWYgKGxpc3QpIHsKLSAgICAgICAgbm9kZSA9IGxpc3QtPnRhaWw7
Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50KCk7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJM
aXN0SW1wbEl0ZXJhdG9yOjpjdXJyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbm9kZSA9PSAw
ID8gMCA6IG5vZGUtPmRhdGE7Ci19Ci0KLXZvaWQgKkRlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJh
dG9yOjpvcGVyYXRvci0tKCkKLXsKLSAgICBpZiAobm9kZSkgewotICAgICAgICBub2RlID0gbm9k
ZS0+cHJldjsKLSAgICB9Ci0gICAgcmV0dXJuIGN1cnJlbnQoKTsKLX0KLQotdm9pZCAqRGVwcmVj
YXRlZFB0ckxpc3RJbXBsSXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAgIGlmIChub2RlKSB7
Ci0gICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwotICAgIH0KLSAgICByZXR1cm4gY3VycmVudCgp
OwotfQotCi1EZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvciAmRGVwcmVjYXRlZFB0ckxpc3RJ
bXBsSXRlcmF0b3I6Om9wZXJhdG9yPShjb25zdCBEZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRv
ciAmaW1wbCkKLXsKLSAgICBpZiAobGlzdCkgewotICAgICAgICBsaXN0LT5yZW1vdmVJdGVyYXRv
cih0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgbGlzdCA9IGltcGwubGlzdDsKLSAgICBub2RlID0g
aW1wbC5ub2RlOwotICAgIAotICAgIGlmIChsaXN0KSB7Ci0gICAgICAgIGxpc3QtPmFkZEl0ZXJh
dG9yKHRoaXMpOwotICAgIH0KLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNWU0MTIxYmUwNjEyMTM5NmVjYmYyZmQxYzFlYTJhNmRiOWQwZDVi
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERlcHJlY2F0ZWRQ
dHJMaXN0SW1wbF9oCi0jZGVmaW5lIERlcHJlY2F0ZWRQdHJMaXN0SW1wbF9oCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRGVwcmVjYXRlZExpc3ROb2RlOwotY2xhc3MgRGVwcmVjYXRl
ZFB0ckxpc3RJbXBsSXRlcmF0b3I7Ci0KLWNsYXNzIERlcHJlY2F0ZWRQdHJMaXN0SW1wbAotewot
cHVibGljOgotICAgIAotICAgIERlcHJlY2F0ZWRQdHJMaXN0SW1wbCh2b2lkICgqZGVsZXRlRnVu
Yykodm9pZCAqKSk7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJbXBsKGNvbnN0IERlcHJlY2F0ZWRQ
dHJMaXN0SW1wbCAmaW1wbCk7Ci0gICAgfkRlcHJlY2F0ZWRQdHJMaXN0SW1wbCgpOwotICAgICAK
LSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBub2RlQ291bnQgPT0gMDsgfQotICAg
IHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbm9kZUNvdW50OyB9Ci0gICAgdm9pZCBj
bGVhcihib29sIGRlbGV0ZUl0ZW1zKTsKLQotICAgIHZvaWQgKmF0KHVuc2lnbmVkIG4pOwotCi0g
ICAgYm9vbCBpbnNlcnQodW5zaWduZWQgbiwgY29uc3Qgdm9pZCAqaXRlbSk7Ci0gICAgYm9vbCBy
ZW1vdmUoYm9vbCBkZWxldGVJdGVtKTsKLSAgICBib29sIHJlbW92ZSh1bnNpZ25lZCBuLCBib29s
IGRlbGV0ZUl0ZW0pOwotICAgIGJvb2wgcmVtb3ZlRmlyc3QoYm9vbCBkZWxldGVJdGVtKTsKLSAg
ICBib29sIHJlbW92ZUxhc3QoYm9vbCBkZWxldGVJdGVtKTsKLSAgICBib29sIHJlbW92ZVJlZihj
b25zdCB2b2lkICppdGVtLCBib29sIGRlbGV0ZUl0ZW0pOwotCi0gICAgdm9pZCAqZ2V0Rmlyc3Qo
KSBjb25zdDsKLSAgICB2b2lkICpnZXRMYXN0KCkgY29uc3Q7Ci0gICAgdm9pZCAqZ2V0TmV4dCgp
IGNvbnN0OwotICAgIHZvaWQgKmdldFByZXYoKSBjb25zdDsKLSAgICB2b2lkICpjdXJyZW50KCkg
Y29uc3Q7Ci0gICAgdm9pZCAqZmlyc3QoKTsKLSAgICB2b2lkICpsYXN0KCk7Ci0gICAgdm9pZCAq
bmV4dCgpOwotICAgIHZvaWQgKnByZXYoKTsKLSAgICB2b2lkICp0YWtlKHVuc2lnbmVkIG4pOwot
ICAgIHZvaWQgKnRha2UoKTsKLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IHZvaWQgKml0ZW0pOwot
ICAgIHZvaWQgcHJlcGVuZChjb25zdCB2b2lkICppdGVtKTsKLQotICAgIHVuc2lnbmVkIGNvbnRh
aW5zUmVmKGNvbnN0IHZvaWQgKml0ZW0pIGNvbnN0OwotICAgIGludCBmaW5kUmVmKGNvbnN0IHZv
aWQgKml0ZW0pOwotCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJbXBsICZhc3NpZ24oY29uc3QgRGVw
cmVjYXRlZFB0ckxpc3RJbXBsICZpbXBsLCBib29sIGRlbGV0ZUl0ZW1zKTsKLQotIHByaXZhdGU6
Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJbXBsICZvcGVyYXRvciA9KGNvbnN0IERlcHJlY2F0ZWRQ
dHJMaXN0SW1wbCAmaW1wbCk7Ci0KLSAgICB2b2lkIHN3YXAoRGVwcmVjYXRlZFB0ckxpc3RJbXBs
ICZpbXBsKTsKLQotICAgIHZvaWQgYWRkSXRlcmF0b3IoRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRl
cmF0b3IgKml0ZXIpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoRGVwcmVjYXRlZFB0
ckxpc3RJbXBsSXRlcmF0b3IgKml0ZXIpIGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZExpc3ROb2Rl
ICpoZWFkOwotICAgIERlcHJlY2F0ZWRMaXN0Tm9kZSAqdGFpbDsKLSAgICBEZXByZWNhdGVkTGlz
dE5vZGUgKmN1cjsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQ7Ci0gICAgdm9pZCAoKmRlbGV0ZUl0
ZW0pKHZvaWQgKik7Ci0gICAgbXV0YWJsZSBEZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvciAq
aXRlcmF0b3JzOwotCi0gICAgZnJpZW5kIGNsYXNzIERlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJh
dG9yOwotfTsKLQotCi1jbGFzcyBEZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvciB7Ci1wdWJs
aWM6Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3IoKTsKLSAgICBEZXByZWNhdGVk
UHRyTGlzdEltcGxJdGVyYXRvcihjb25zdCBEZXByZWNhdGVkUHRyTGlzdEltcGwgJmltcGwpOwot
ICAgIH5EZXByZWNhdGVkUHRyTGlzdEltcGxJdGVyYXRvcigpOwotCi0gICAgRGVwcmVjYXRlZFB0
ckxpc3RJbXBsSXRlcmF0b3IoY29uc3QgRGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3IgJmlt
cGwpOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yICZvcGVyYXRvcj0oY29uc3Qg
RGVwcmVjYXRlZFB0ckxpc3RJbXBsSXRlcmF0b3IgJmltcGwpOwotCi0gICAgdW5zaWduZWQgY291
bnQoKSBjb25zdDsKLSAgICB2b2lkICp0b0ZpcnN0KCk7Ci0gICAgdm9pZCAqdG9MYXN0KCk7Ci0g
ICAgdm9pZCAqY3VycmVudCgpIGNvbnN0OwotCi0gICAgdm9pZCAqb3BlcmF0b3ItLSgpOwotICAg
IHZvaWQgKm9wZXJhdG9yKysoKTsKLQotcHJpdmF0ZToKLSAgICBjb25zdCBEZXByZWNhdGVkUHRy
TGlzdEltcGwgKmxpc3Q7Ci0gICAgRGVwcmVjYXRlZExpc3ROb2RlICpub2RlOwotICAgIERlcHJl
Y2F0ZWRQdHJMaXN0SW1wbEl0ZXJhdG9yICpuZXh0OwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SW1w
bEl0ZXJhdG9yICpwcmV2OwotCi0gICAgZnJpZW5kIGNsYXNzIERlcHJlY2F0ZWRQdHJMaXN0SW1w
bDsKLX07Ci0KLX0KLQotI2VuZGlmCg==
</data>
<flag name="review"
          id="75894"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="75895"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>