<?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>68464</bug_id>
          
          <creation_ts>2011-09-20 13:18:39 -0700</creation_ts>
          <short_desc>Update MediaStream to use WebCore platform interfaces</short_desc>
          <delta_ts>2011-10-19 17:52:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68460</dependson>
          <blocked>70233</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Adam Bergkvist">adam.bergkvist</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>fishd</cc>
    
    <cc>grunell</cc>
    
    <cc>harald</cc>
    
    <cc>jonathon</cc>
    
    <cc>per-erik.brodin</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470283</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-09-20 13:18:39 -0700</bug_when>
    <thetext>Modify MediaStream/MediaStreamTrack to use MediaStreamManager and store its data in MediaStreamDescriptor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482029</commentid>
    <comment_count>1</comment_count>
      <attachid>110604</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-11 16:46:12 -0700</bug_when>
    <thetext>Created attachment 110604
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482490</commentid>
    <comment_count>2</comment_count>
      <attachid>110604</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 10:23:24 -0700</bug_when>
    <thetext>Comment on attachment 110604
proposed patch

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

This looks pretty good.  There&apos;s still the question of whether |context| should be first in constructors.  Also, almost all the places in this patch where we&apos;re using unsigned, we probably should be using size_t.

&gt; Source/WebCore/dom/MediaStream.cpp:48
&gt; +    MediaStreamTrackVector trackVector;
&gt; +    unsigned numberOfTracks = m_descriptor-&gt;numberOfComponents();

You can call reserveCapacity on the vector if you know ahead of time how many items you&apos;re going to append.

&gt; Source/WebCore/dom/MediaStreamTrack.cpp:50
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, kind, (m_streamDescriptor-&gt;component(m_trackIndex)-&gt;source()-&gt;type() == MediaStreamSource::TypeAudio ? &quot;audio&quot; : &quot;video&quot;));

It&apos;s strange to use a static local that&apos;s based on member variables...  This doesn&apos;t seem right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482821</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 16:00:51 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482824</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 16:01:43 -0700</bug_when>
    <thetext>@fishd: This just deletes interfaces from the WebKit API.  The plan is to add new interfaces to WebKitPlatformSupport later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483284</commentid>
    <comment_count>5</comment_count>
      <attachid>110871</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-13 10:31:23 -0700</bug_when>
    <thetext>Created attachment 110871
Updated patch

(In reply to comment #2)
&gt; (From update of attachment 110604 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110604&amp;action=review
&gt; 
&gt; This looks pretty good.  There&apos;s still the question of whether |context| should be first in constructors.

I&apos;ve updated the patch to follow the new context first convention.

&gt; Also, almost all the places in this patch where we&apos;re using unsigned, we probably should be using size_t.

Fixed &quot;internal&quot; usage (left unsigned in the DOM API signatures).

&gt; &gt; Source/WebCore/dom/MediaStream.cpp:48
&gt; &gt; +    MediaStreamTrackVector trackVector;
&gt; &gt; +    unsigned numberOfTracks = m_descriptor-&gt;numberOfComponents();
&gt; 
&gt; You can call reserveCapacity on the vector if you know ahead of time how many items you&apos;re going to append.

Good point. Fixed.

&gt; &gt; Source/WebCore/dom/MediaStreamTrack.cpp:50
&gt; &gt; +    DEFINE_STATIC_LOCAL(AtomicString, kind, (m_streamDescriptor-&gt;component(m_trackIndex)-&gt;source()-&gt;type() == MediaStreamSource::TypeAudio ? &quot;audio&quot; : &quot;video&quot;));
&gt; 
&gt; It&apos;s strange to use a static local that&apos;s based on member variables...  This doesn&apos;t seem right.

True. That was a bad last minute optimization. :) Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483362</commentid>
    <comment_count>6</comment_count>
      <attachid>110871</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-13 12:06:43 -0700</bug_when>
    <thetext>Comment on attachment 110871
Updated patch

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

In one of your earlier patches, you moved all the non-platform files into a mediastream directory.  I think that would be a valuable change to do sooner rather than later.

Please fix the out-of-bounds read before landing.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Update MediaStream to use WebCore platform interfaces
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=68464
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Currently not testable.

Generally we like a litt more information in ChangeLogs.  For this change, I&apos;d explain that this is part of a series of patches that convert the DOM interfaces over to using a new Platform API.

Also, I&apos;d include some information about how you plan to test this code and at what stage of this process we&apos;ll be able to add tests.  I understand that there are a lots of wires to connect before everything is fully functional, but we might be able to add some basic API tests soon.

&gt; Source/WebCore/dom/MediaStream.h:84
&gt; +    ScriptExecutionContext* m_scriptExecutionContext;

This doesn&apos;t need to be a RefPtr?

&gt; Source/WebCore/dom/MediaStreamTrack.cpp:51
&gt; -const String&amp; MediaStreamTrack::kind() const
&gt; +String MediaStreamTrack::kind() const
&gt;  {
&gt; -    return m_kind;
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, audioKind, (&quot;audio&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, videoKind, (&quot;video&quot;));

Should this function return an AtomicString?  If not, then should these statics be Strings rather than AtomicStrings?  (Let me know if you&apos;re unsure of the difference between Strings and AtomicStrings.)

&gt; Source/WebCore/dom/MediaStreamTrack.cpp:61
&gt; +    ASSERT_NOT_REACHED();
&gt;  }

I&apos;m surprised you don&apos;t need to return String() here.

&gt; Source/WebCore/dom/MediaStreamTrack.cpp:70
&gt; +    return m_streamDescriptor-&gt;component(m_trackIndex)-&gt;enabled();

It&apos;s kind of strange that all of these methods are basically trampolines into m_streamDescriptor components.  I guess this object is like a DOM wrapper around the Platform concept, which makes sense, but they we&apos;re holding on to the root objects in the Platform object tree and walking the tree each time.  I guess that&apos;s fine.  It&apos;s just slightly different from what I woud have expected.

&gt; Source/WebCore/dom/MediaStreamTrack.h:54
&gt; +    const size_t m_trackIndex;

We don&apos;t usually have const member variables, but it works nicely here.

&gt; Source/WebCore/dom/MediaStreamTrackList.cpp:54
&gt; +    ASSERT(index &lt; length());

This is an API exposed to JavaScript, right?  What ensures that JavaScript won&apos;t call this function with a nutty index?

&gt; Source/WebCore/page/MediaStreamController.h:44
&gt;  class MediaStreamController {

All of MediaStreamController is going away eventually, right?

&gt; Source/WebCore/page/MediaStreamFrameController.h:52
&gt;      MediaStreamFrameController(Frame*);

This one is going away too, I presume.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485135</commentid>
    <comment_count>7</comment_count>
      <attachid>111261</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-17 07:37:01 -0700</bug_when>
    <thetext>Created attachment 111261
Patch 3

(In reply to comment #6)
&gt; (From update of attachment 110871 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110871&amp;action=review
&gt; 
&gt; In one of your earlier patches, you moved all the non-platform files into a mediastream directory.  I think that would be a valuable change to do sooner rather than later.
&gt;

I&apos;ve created a bug to move the files. See http://webkit.org/b/70233

&gt; Please fix the out-of-bounds read before landing.

item() is an index getter and thus the binding will prevent out-of-bounds reads. 

&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Update MediaStream to use WebCore platform interfaces
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=68464
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Currently not testable.
&gt; 
&gt; Generally we like a litt more information in ChangeLogs.  For this change, I&apos;d explain that this is part of a series of patches that convert the DOM interfaces over to using a new Platform API.
&gt;

Fixed.

&gt; Also, I&apos;d include some information about how you plan to test this code and at what stage of this process we&apos;ll be able to add tests.  I understand that there are a lots of wires to connect before everything is fully functional, but we might be able to add some basic API tests soon.
&gt;

Fixed (now referring to an existing bug).

&gt; &gt; Source/WebCore/dom/MediaStream.h:84
&gt; &gt; +    ScriptExecutionContext* m_scriptExecutionContext;
&gt; 
&gt; This doesn&apos;t need to be a RefPtr?

I made it a RefPtr to be safe.

&gt; &gt; Source/WebCore/dom/MediaStreamTrack.cpp:51
&gt; &gt; -const String&amp; MediaStreamTrack::kind() const
&gt; &gt; +String MediaStreamTrack::kind() const
&gt; &gt;  {
&gt; &gt; -    return m_kind;
&gt; &gt; +    DEFINE_STATIC_LOCAL(AtomicString, audioKind, (&quot;audio&quot;));
&gt; &gt; +    DEFINE_STATIC_LOCAL(AtomicString, videoKind, (&quot;video&quot;));
&gt; 
&gt; Should this function return an AtomicString?  If not, then should these statics be Strings rather than AtomicStrings?  (Let me know if you&apos;re unsure of the difference between Strings and AtomicStrings.)
&gt;

Fixed (they don&apos;t have to be AtomicStrings).

&gt; 
&gt; &gt; Source/WebCore/dom/MediaStreamTrack.cpp:70
&gt; &gt; +    return m_streamDescriptor-&gt;component(m_trackIndex)-&gt;enabled();
&gt; 
&gt; It&apos;s kind of strange that all of these methods are basically trampolines into m_streamDescriptor components.  I guess this object is like a DOM wrapper around the Platform concept, which makes sense, but they we&apos;re holding on to the root objects in the Platform object tree and walking the tree each time.  I guess that&apos;s fine.  It&apos;s just slightly different from what I woud have expected.

We need to hold on to the MediaStreamDescriptor object since a MediaStreamTrack can exist without its MediaStream and the descriptor is the key to do platform operations on a stream (including the tracks). Since the descriptor is available we can get the information we want from it, but we could cache the information in member variables.

&gt; &gt; Source/WebCore/dom/MediaStreamTrackList.cpp:54
&gt; &gt; +    ASSERT(index &lt; length());
&gt; 
&gt; This is an API exposed to JavaScript, right?  What ensures that JavaScript won&apos;t call this function with a nutty index?
&gt;

The binding makes sure that this function is called with a valid index (0 &lt;= index &lt; length()).

&gt; &gt; Source/WebCore/page/MediaStreamController.h:44
&gt; &gt;  class MediaStreamController {
&gt; 
&gt; All of MediaStreamController is going away eventually, right?
&gt;
&gt; &gt; Source/WebCore/page/MediaStreamFrameController.h:52
&gt; &gt;      MediaStreamFrameController(Frame*);
&gt; 
&gt; This one is going away too, I presume.

We have a single controller and a page client that only deals with user consent for getUserMedia(). I hope that they could be accepted as replacements for the current controllers and client. I&apos;ll file a bug to discuss this further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485136</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 07:37:45 -0700</bug_when>
    <thetext>Attachment 111261 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485158</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-17 08:18:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; @fishd: This just deletes interfaces from the WebKit API.  The plan is to add new interfaces to WebKitPlatformSupport later.

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486113</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-18 09:49:00 -0700</bug_when>
    <thetext>Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486654</commentid>
    <comment_count>11</comment_count>
      <attachid>111261</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 03:19:39 -0700</bug_when>
    <thetext>Comment on attachment 111261
Patch 3

Rejecting attachment 111261 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
rror: no match for &apos;operator!&apos; in &apos;!sources&apos;
Source/WebCore/page/MediaStreamFrameController.cpp:256: note: candidates are: operator!(bool) &lt;built-in&gt;
Source/JavaScriptCore/wtf/text/WTFString.h:368: note:                 bool WTF::operator!(const WTF::String&amp;)
  CXX(target) out/Debug/obj.target/webcore_remaining/Source/WebCore/page/WindowFeatures.o
make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/page/MediaStreamFrameController.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/10145353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486783</commentid>
    <comment_count>12</comment_count>
      <attachid>111616</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-19 07:40:22 -0700</bug_when>
    <thetext>Created attachment 111616
Patch for landing

Removed bad ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487184</commentid>
    <comment_count>13</comment_count>
      <attachid>111616</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 17:52:28 -0700</bug_when>
    <thetext>Comment on attachment 111616
Patch for landing

Clearing flags on attachment: 111616

Committed r97904: &lt;http://trac.webkit.org/changeset/97904&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487185</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 17:52:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110604</attachid>
            <date>2011-10-11 16:46:12 -0700</date>
            <delta_ts>2011-10-13 10:31:23 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>mediastream_use_platform_1.patch</filename>
            <type>text/plain</type>
            <size>54256</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MGRjZjViLi41NTAwYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTEtMTAtMTEgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBNZWRpYVN0cmVhbSB0byB1c2UgV2ViQ29yZSBwbGF0Zm9y
bSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBkb20vTG9jYWxNZWRpYVN0
cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxNZWRpYVN0cmVhbTo6TG9jYWxNZWRpYVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2FsTWVkaWFTdHJlYW06OnN0b3BUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsTWVkaWFTdHJlYW06On5Mb2NhbE1lZGlhU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsTWVkaWFTdHJlYW06OnRvTG9jYWxNZWRpYVN0cmVhbSk6CisgICAgICAgICogZG9tL0xv
Y2FsTWVkaWFTdHJlYW0uaDoKKyAgICAgICAgKiBkb20vTG9jYWxNZWRpYVN0cmVhbS5pZGw6Cisg
ICAgICAgICogZG9tL01lZGlhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Ok1lZGlhU3RyZWFt
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW06OnN0cmVhbUVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpsYWJlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbTo6dHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpk
ZXNjcmlwdG9yKToKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW1UcmFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVRyYWNrOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2s6OmxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c2V0RW5hYmxlZCk6CisgICAg
ICAgICogZG9tL01lZGlhU3RyZWFtVHJhY2suaDoKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW1U
cmFjay5pZGw6CisgICAgICAgICogZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9NZWRpYVN0
cmVhbVRyYWNrTGlzdC5oOgorICAgICAgICAqIHAycC9QZWVyQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbUFkZGVkKToKKyAgICAgICAgKiBwYWdlL01lZGlhU3Ry
ZWFtQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Db250cm9sbGVyOjp1bnJlZ2lzdGVyRnJhbWVD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3Ry
ZWFtR2VuZXJhdGVkKToKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oOgor
ICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmVudGVyRGV0YWNoZWRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZGlzY29ubmVj
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpz
dHJlYW1HZW5lcmF0ZWQpOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIuaDoKKwogMjAxMS0xMC0xMSAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEluZGV4ZWREQjogaW1wbGVtZW50IElEQkZhY3RvcnkuY21wIG1ldGhvZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uY3BwCmluZGV4IGRmMzcyMjcuLmQ5MjIyMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5jcHAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQ0ICsyOCwzNyBAQAog
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlVVSUQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMb2NhbE1lZGlhU3RyZWFtOjpEaXNwYXRj
aFVwZGF0ZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiB2b2lkIChMb2NhbE1lZGlhU3RyZWFtOjoqQ2FsbGJhY2spKCk7Ci0K
LSAgICBzdGF0aWMgUGFzc093blB0cjxEaXNwYXRjaFVwZGF0ZVRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPExvY2FsTWVkaWFTdHJlYW0+IG9iamVjdCwgQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERpc3BhdGNoVXBkYXRlVGFzayhvYmplY3QsIGNh
bGxiYWNrKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgKG1fb2JqZWN0LmdldCgpLT4qbV9jYWxs
YmFjaykoKTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICBEaXNwYXRjaFVwZGF0ZVRhc2soUGFzc1Jl
ZlB0cjxMb2NhbE1lZGlhU3RyZWFtPiBvYmplY3QsIENhbGxiYWNrIGNhbGxiYWNrKQotICAgICAg
ICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKSB7IH0K
K1Bhc3NSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gTG9jYWxNZWRpYVN0cmVhbTo6Y3JlYXRlKGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxNZWRpYVN0cmVh
bShzb3VyY2VzLCBjb250ZXh0KSk7Cit9CiAKLSAgICBSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4g
bV9vYmplY3Q7Ci0gICAgQ2FsbGJhY2sgbV9jYWxsYmFjazsKLX07CitMb2NhbE1lZGlhU3RyZWFt
OjpMb2NhbE1lZGlhU3RyZWFtKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2Vz
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogTWVkaWFTdHJlYW0oTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBz
b3VyY2VzKSwgY29udGV4dCkKKyAgICAsIG1fc3RvcFRpbWVyKHRoaXMsICZMb2NhbE1lZGlhU3Ry
ZWFtOjpzdG9wVGltZXJGaXJlZCkKK3sKK30KIAotUGFzc1JlZlB0cjxMb2NhbE1lZGlhU3RyZWFt
PiBMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZy
YW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrTGlzdD4gdHJhY2tzKQordm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdG9wKCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsTWVkaWFTdHJlYW0oZnJhbWVDb250cm9sbGVyLCBs
YWJlbCwgdHJhY2tzKSk7CisgICAgaWYgKCFtX3N0b3BUaW1lci5pc0FjdGl2ZSgpKQorICAgICAg
ICBtX3N0b3BUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLUxvY2FsTWVkaWFTdHJlYW06Okxv
Y2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxl
ciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4g
dHJhY2tzKQotICAgIDogTWVkaWFTdHJlYW0oZnJhbWVDb250cm9sbGVyLCBsYWJlbCwgdHJhY2tz
LCB0cnVlKQordm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdG9wVGltZXJGaXJlZChUaW1lcjxMb2Nh
bE1lZGlhU3RyZWFtPiogdGltZXIpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIg
PT0gJm1fc3RvcFRpbWVyKTsKKworICAgIGlmIChyZWFkeVN0YXRlKCkgPT0gRU5ERUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB0ZWxsIHRoZSBwbGF0Zm9ybSB0aGF0IHRoZSBz
dHJlYW0gd2FzIHN0b3BwZWQKKworICAgIHN0cmVhbUVuZGVkKCk7CiB9CiAKIExvY2FsTWVkaWFT
dHJlYW06On5Mb2NhbE1lZGlhU3RyZWFtKCkKQEAgLTc2LDQxICs3MCw2IEBAIExvY2FsTWVkaWFT
dHJlYW0qIExvY2FsTWVkaWFTdHJlYW06OnRvTG9jYWxNZWRpYVN0cmVhbSgpCiAgICAgcmV0dXJu
IHRoaXM7CiB9CiAKLXZvaWQgTG9jYWxNZWRpYVN0cmVhbTo6ZGV0YWNoRW1iZWRkZXIoKQotewot
ICAgIC8vIEFzc3VtaW5nIHdlIHNob3VsZCBzdG9wIGFueSBsaXZlIHN0cmVhbXMgd2hlbiBsb3Np
bmcgYWNjZXNzIHRvIHRoZSBlbWJlZGRlci4KLSAgICBzdG9wKCk7Ci0KLSAgICBNZWRpYVN0cmVh
bTo6ZGV0YWNoRW1iZWRkZXIoKTsKLX0KLQotdm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdHJlYW1F
bmRlZCgpCi17Ci0gICAgTWVkaWFTdHJlYW06OnN0cmVhbUVuZGVkKCk7Ci19Ci0KLXZvaWQgTG9j
YWxNZWRpYVN0cmVhbTo6c3RvcCgpCi17Ci0gICAgaWYgKCFtZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlcigpIHx8IG1fcmVhZHlTdGF0ZSA9PSBFTkRFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+c3RvcEdlbmVyYXRlZFN0cmVhbShsYWJlbCgp
KTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9IEVOREVEOwotCi0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNp
bmNlIGl0IGNhbiBiZSBudWxsIGluIGRlZ2VuZXJhdGUgY2FzZXMgbGlrZSBmcmFtZXMgZGV0YWNo
ZWQgZnJvbSB0aGVpciBwYWdlcy4KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRh
c2soRGlzcGF0Y2hVcGRhdGVUYXNrOjpjcmVhdGUodGhpcywgJkxvY2FsTWVkaWFTdHJlYW06Om9u
U3RvcCkpOwotfQotCi12b2lkIExvY2FsTWVkaWFTdHJlYW06Om9uU3RvcCgpCi17Ci0gICAgZGlz
cGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwg
ZmFsc2UpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlh
U3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5oCmluZGV4IDZj
ODU0MDguLjA1OGI1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlh
U3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzMg
KzI5LDI2IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlICJUaW1lci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExvY2FsTWVkaWFTdHJlYW0gOiBwdWJsaWMgTWVk
aWFTdHJlYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsTWVkaWFTdHJl
YW0+IGNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgbGFi
ZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHZpcnR1YWwgfkxvY2Fs
TWVkaWFTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgLy8gTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXI6OlN0cmVhbUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoRW1iZWRkZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRW5kZWQoKTsK
LQogICAgIC8vIEV2ZW50VGFyZ2V0LgogICAgIHZpcnR1YWwgTG9jYWxNZWRpYVN0cmVhbSogdG9M
b2NhbE1lZGlhU3RyZWFtKCk7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2Nh
bE1lZGlhU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCiBwcml2YXRlOgotICAgIExv
Y2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpOwotICAgIGNs
YXNzIERpc3BhdGNoVXBkYXRlVGFzazsKLSAgICBmcmllbmQgY2xhc3MgRGlzcGF0Y2hVcGRhdGVU
YXNrOworICAgIExvY2FsTWVkaWFTdHJlYW0oY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3Im
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIG9uU3RvcCgpOworICAgIHZv
aWQgc3RvcFRpbWVyRmlyZWQoVGltZXI8TG9jYWxNZWRpYVN0cmVhbT4qKTsKKworICAgIFRpbWVy
PExvY2FsTWVkaWFTdHJlYW0+IG1fc3RvcFRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaWRsCmluZGV4IGU0NzI1YTAu
LjE1YTJjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFt
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5pZGwKQEAgLTI3
LDcgKzI3LDggQEAgbW9kdWxlIGNvcmUgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRp
dGlvbmFsPU1FRElBX1NUUkVBTSwKICAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCi0g
ICAgICAgIEV2ZW50VGFyZ2V0CisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBHZW5lcmF0
ZVRvSlMKICAgICBdIExvY2FsTWVkaWFTdHJlYW0gOiBNZWRpYVN0cmVhbSB7CiAgICAgICAgIHZv
aWQgc3RvcCgpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFT
dHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtLmNwcAppbmRleCBiMDlm
YmEyLi5kOWZlYjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbS5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDIwICszMywzMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlh
U3RyZWFtOjpjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxl
ciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4g
dHJhY2tzLCBib29sIGlzTG9jYWxNZWRpYVN0cmVhbSkKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW0+
IE1lZGlhU3RyZWFtOjpjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0
cmVhbURlc2NyaXB0b3IsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbShmcmFtZUNvbnRyb2xsZXIsIGxhYmVsLCB0
cmFja3MsIGlzTG9jYWxNZWRpYVN0cmVhbSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVk
aWFTdHJlYW0oc3RyZWFtRGVzY3JpcHRvciwgY29udGV4dCkpOwogfQogCi1NZWRpYVN0cmVhbTo6
TWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwg
Y29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJh
Y2tzLCBib29sIGlzTG9jYWxNZWRpYVN0cmVhbSkKLSAgICA6IE1lZGlhU3RyZWFtQ2xpZW50KGZy
YW1lQ29udHJvbGxlciwgbGFiZWwsIGlzTG9jYWxNZWRpYVN0cmVhbSkKLSAgICAsIG1fcmVhZHlT
dGF0ZShMSVZFKQotICAgICwgbV90cmFja3ModHJhY2tzKQorTWVkaWFTdHJlYW06Ok1lZGlhU3Ry
ZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogbV9kZXNjcmlwdG9yKHN0cmVh
bURlc2NyaXB0b3IpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKIHsK
KyAgICBtX2Rlc2NyaXB0b3ItPnNldE93bmVyKHRoaXMpOworCisgICAgTWVkaWFTdHJlYW1UcmFj
a1ZlY3RvciB0cmFja1ZlY3RvcjsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlRyYWNrcyA9IG1fZGVz
Y3JpcHRvci0+bnVtYmVyT2ZDb21wb25lbnRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mVHJhY2tzOyBpKyspCisgICAgICAgIHRyYWNrVmVjdG9yLmFwcGVuZChNZWRp
YVN0cmVhbVRyYWNrOjpjcmVhdGUobV9kZXNjcmlwdG9yLCBpKSk7CisKKyAgICBtX3RyYWNrcyA9
IE1lZGlhU3RyZWFtVHJhY2tMaXN0OjpjcmVhdGUodHJhY2tWZWN0b3IpOwogfQogCiBNZWRpYVN0
cmVhbTo6fk1lZGlhU3RyZWFtKCkKIHsKKyAgICBtX2Rlc2NyaXB0b3ItPnNldE93bmVyKDApOwor
fQorCitNZWRpYVN0cmVhbTo6UmVhZHlTdGF0ZSBNZWRpYVN0cmVhbTo6cmVhZHlTdGF0ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGVzY3JpcHRvci0+ZW5kZWQoKSA/IEVOREVEIDogTElWRTsK
IH0KIAogTWVkaWFTdHJlYW0qIE1lZGlhU3RyZWFtOjp0b01lZGlhU3RyZWFtKCkKQEAgLTU1LDE0
ICs2OSwxNyBAQCBNZWRpYVN0cmVhbSogTWVkaWFTdHJlYW06OnRvTWVkaWFTdHJlYW0oKQogCiB2
b2lkIE1lZGlhU3RyZWFtOjpzdHJlYW1FbmRlZCgpCiB7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0
ZSAhPSBFTkRFRCk7Ci0gICAgbV9yZWFkeVN0YXRlID0gRU5ERUQ7CisgICAgaWYgKHJlYWR5U3Rh
dGUoKSA9PSBFTkRFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZXNjcmlwdG9yLT5zZXRF
bmRlZCgpOworCiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5l
bmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
TWVkaWFTdHJlYW06OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogewotICAgIHJldHVy
biBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpID8gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIDogMDsKKyAgICByZXR1cm4gbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogfQogCiBFdmVudFRhcmdldERhdGEqIE1lZGlhU3RyZWFtOjpldmVu
dFRhcmdldERhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFt
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaAppbmRleCBhNjE5NTYwLi43MWQ1
YWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzkgKzI4LDM3IEBACiAKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRy
YWNrTGlzdC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0
cmVhbT4sCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBFdmVudFRhcmdldCwKLSAgICAgICAg
ICAgICAgICAgICAgcHVibGljIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpNZWRpYVN0cmVh
bUNsaWVudCB7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBNZWRpYVN0
cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtPiwgcHVibGljIEV2ZW50VGFyZ2V0
IHsKIHB1YmxpYzoKICAgICAvLyBNdXN0IG1hdGNoIHRoZSBjb25zdGFudHMgaW4gdGhlIC5pZGwg
ZmlsZS4KLSAgICBlbnVtIHsKKyAgICBlbnVtIFJlYWR5U3RhdGUgewogICAgICAgICBMSVZFID0g
MSwKICAgICAgICAgRU5ERUQgPSAyCiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBjb25zdCBTdHJp
bmcmIGxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MsIGJvb2wg
aXNMb2NhbE1lZGlhU3RyZWFtID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPiBjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+LCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW0oKTsKIAogICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW5kZWQpOwogCi0gICAgdW5zaWduZWQgc2hv
cnQgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIGNvbnN0
IFN0cmluZyYgbGFiZWwoKSBjb25zdCB7IHJldHVybiBjbGllbnRJZCgpOyB9CisgICAgUmVhZHlT
dGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CisgICAgU3RyaW5nIGxhYmVsKCkgY29uc3QgeyByZXR1
cm4gbV9kZXNjcmlwdG9yLT5sYWJlbCgpOyB9CiAKLSAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2tMaXN0PiB0cmFja3MoKSB7IHJldHVybiBtX3RyYWNrczsgfQorICAgIE1lZGlhU3RyZWFt
VHJhY2tMaXN0KiB0cmFja3MoKSB7IHJldHVybiBtX3RyYWNrcy5nZXQoKTsgfQogCi0gICAgLy8g
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Ok1lZGlhU3RyZWFtQ2xpZW50IGltcGxlbWVudGF0
aW9uLgotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1FbmRlZCgpOworICAgIHZvaWQgc3RyZWFtRW5k
ZWQoKTsKKworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogZGVzY3JpcHRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzY3JpcHRvci5nZXQoKTsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVt
ZW50YXRpb24uCiAgICAgdmlydHVhbCBNZWRpYVN0cmVhbSogdG9NZWRpYVN0cmVhbSgpOwpAQCAt
NjksMTcgKzY4LDEzIEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU3RyZWFt
Pjo6ZGVyZWY7CiAKIHByb3RlY3RlZDoKLSAgICBNZWRpYVN0cmVhbShNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja0xpc3Q+IHRyYWNrcywgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0pOworICAgIE1lZGlhU3Ry
ZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVh
bCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotICAgIHVuc2lnbmVkIHNob3J0
IG1fcmVhZHlTdGF0ZTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIG9uRW5kZWQoKTsKLQogICAgIC8v
IEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRh
cmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsg
ZGVyZWYoKTsgfQpAQCAtODcsNiArODIsOSBAQCBwcml2YXRlOgogICAgIEV2ZW50VGFyZ2V0RGF0
YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIAogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4g
bV90cmFja3M7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbV9kZXNjcmlwdG9y
OworCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL01lZGlhU3RyZWFtVHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3Ry
ZWFtVHJhY2suY3BwCmluZGV4IGJlNGNiZjcuLmE0N2JmY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVkaWFTdHJlYW1UcmFjay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJl
bCkKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRl
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yLCB1bnNp
Z25lZCB0cmFja0luZGV4KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1U
cmFjayhpZCwga2luZCwgbGFiZWwpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3Ry
ZWFtVHJhY2soc3RyZWFtRGVzY3JpcHRvciwgdHJhY2tJbmRleCkpOwogfQogCi1NZWRpYVN0cmVh
bVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYg
a2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKLSAgICA6IG1faWQoaWQpCi0gICAgLCBtX2tpbmQo
a2luZCkKLSAgICAsIG1fbGFiZWwobGFiZWwpCi0gICAgLCBtX2VuYWJsZWQodHJ1ZSkKK01lZGlh
U3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IHN0cmVhbURlc2NyaXB0b3IsIHVuc2lnbmVkIHRyYWNrSW5kZXgpCisgICAgOiBtX3N0
cmVhbURlc2NyaXB0b3Ioc3RyZWFtRGVzY3JpcHRvcikKKyAgICAsIG1fdHJhY2tJbmRleCh0cmFj
a0luZGV4KQogewogfQogCkBAIC00NiwyNyArNDUsMzAgQEAgTWVkaWFTdHJlYW1UcmFjazo6fk1l
ZGlhU3RyZWFtVHJhY2soKQogewogfQogCi1jb25zdCBTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6
OmtpbmQoKSBjb25zdAorU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6OmtpbmQoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2tpbmQ7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGtpbmQsIChtX3N0cmVhbURlc2NyaXB0b3ItPmNvbXBvbmVudChtX3RyYWNrSW5kZXgpLT5zb3Vy
Y2UoKS0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVkaW8gPyAiYXVkaW8iIDog
InZpZGVvIikpOworICAgIHJldHVybiBraW5kOwogfQogCi1jb25zdCBTdHJpbmcmIE1lZGlhU3Ry
ZWFtVHJhY2s6OmxhYmVsKCkgY29uc3QKK1N0cmluZyBNZWRpYVN0cmVhbVRyYWNrOjpsYWJlbCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGFiZWw7CisgICAgcmV0dXJuIG1fc3RyZWFtRGVzY3Jp
cHRvci0+Y29tcG9uZW50KG1fdHJhY2tJbmRleCktPnNvdXJjZSgpLT5uYW1lKCk7CiB9CiAKIGJv
b2wgTWVkaWFTdHJlYW1UcmFjazo6ZW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZW5h
YmxlZDsKKyAgICByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdG9yLT5jb21wb25lbnQobV90cmFja0lu
ZGV4KS0+ZW5hYmxlZCgpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNldEVuYWJsZWQo
Ym9vbCBlbmFibGVkKQogewotICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYgKGVuYWJs
ZWQgPT0gbV9zdHJlYW1EZXNjcmlwdG9yLT5jb21wb25lbnQobV90cmFja0luZGV4KS0+ZW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIoKSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+c2V0TWVkaWFTdHJl
YW1UcmFja0VuYWJsZWQobV9pZCwgZW5hYmxlZCk7CisgICAgbV9zdHJlYW1EZXNjcmlwdG9yLT5j
b21wb25lbnQobV90cmFja0luZGV4KS0+c2V0RW5hYmxlZChlbmFibGVkKTsKKworICAgIC8vIEZJ
WE1FOiB0ZWxsIHRoZSBwbGF0Zm9ybSB0aGF0IHRoZSB0cmFjayB3YXMgZW5hYmxlZC9kaXNhYmxl
ZAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVkaWFTdHJlYW1UcmFjay5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFt
VHJhY2suaAppbmRleCAzMjIyZGM3Li4wODI2YThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVkaWFTdHJlYW1UcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0
cmVhbVRyYWNrLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDM2ICsyOCwzMyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAor
I2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBNZWRpYVN0cmVhbVRyYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8TWVk
aWFTdHJlYW1UcmFjaz4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyOjpHZW5lcmljQ2xpZW50IHsKK2NsYXNzIE1lZGlhU3RyZWFtVHJh
Y2sgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
aWQsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1EZXNjcmlwdG9yPiwgdW5zaWduZWQgdHJhY2tJbmRleCk7CiAgICAgdmlydHVhbCB+TWVkaWFT
dHJlYW1UcmFjaygpOwogCi0gICAgY29uc3QgU3RyaW5nJiBraW5kKCkgY29uc3Q7Ci0gICAgY29u
c3QgU3RyaW5nJiBsYWJlbCgpIGNvbnN0OworICAgIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAg
U3RyaW5nIGxhYmVsKCkgY29uc3Q7CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKLSAgICB2
b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7
CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1UcmFjayhjb25zdCBTdHJpbmcmIGlkLCBjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIE1lZGlhU3RyZWFtVHJh
Y2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+LCB1bnNpZ25lZCB0cmFja0luZGV4
KTsKIAotICAgIFN0cmluZyBtX2lkOwotICAgIFN0cmluZyBtX2tpbmQ7Ci0gICAgU3RyaW5nIG1f
bGFiZWw7Ci0gICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4gbV9zdHJlYW1EZXNjcmlwdG9yOworICAgIGNvbnN0IHVuc2lnbmVkIG1fdHJhY2tJbmRl
eDsKIH07CiAKLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiA+IFRyYWNr
VmVjdG9yOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+ID4gTWVkaWFT
dHJlYW1UcmFja1ZlY3RvcjsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVkaWFTdHJlYW1UcmFjay5pZGwKaW5kZXggMjk4NzVhYS4uNzk4NzU5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmlkbApAQCAtMjcsOSArMjcsOSBAQCBtb2R1
bGUgY29yZSB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9TUVESUFfU1RS
RUFNLAogICAgIF0gTWVkaWFTdHJlYW1UcmFjayB7Ci0gICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGtpbmQ7Ci0gICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhYmVs
OwotICAgICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gZW5hYmxlZDsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBraW5kOworICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGxhYmVsOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBl
bmFibGVkOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRp
YVN0cmVhbVRyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFj
a0xpc3QuY3BwCmluZGV4IDZmY2M2N2MuLjkyYmYwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gTWVkaWFTdHJlYW1UcmFj
a0xpc3Q6OmNyZWF0ZShjb25zdCBUcmFja1ZlY3RvciYgdHJhY2tzKQorUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrTGlzdD4gTWVkaWFTdHJlYW1UcmFja0xpc3Q6OmNyZWF0ZShjb25zdCBNZWRp
YVN0cmVhbVRyYWNrVmVjdG9yJiB0cmFja1ZlY3RvcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lZGlhU3RyZWFtVHJhY2tMaXN0KHRyYWNrcykpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVkaWFTdHJlYW1UcmFja0xpc3QodHJhY2tWZWN0b3IpKTsKIH0KIAotTWVkaWFTdHJlYW1U
cmFja0xpc3Q6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0KGNvbnN0IFRyYWNrVmVjdG9yJiB0cmFja3Mp
Ci0gICAgOiBtX3RyYWNrcyh0cmFja3MpCitNZWRpYVN0cmVhbVRyYWNrTGlzdDo6TWVkaWFTdHJl
YW1UcmFja0xpc3QoY29uc3QgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciYgdHJhY2tWZWN0b3IpCisg
ICAgOiBtX3RyYWNrVmVjdG9yKHRyYWNrVmVjdG9yKQogewogfQogCkBAIC00NSwxNSArNDYsMTMg
QEAgTWVkaWFTdHJlYW1UcmFja0xpc3Q6On5NZWRpYVN0cmVhbVRyYWNrTGlzdCgpCiAKIHVuc2ln
bmVkIE1lZGlhU3RyZWFtVHJhY2tMaXN0OjpsZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBt
X3RyYWNrcy5zaXplKCk7CisgICAgcmV0dXJuIG1fdHJhY2tWZWN0b3Iuc2l6ZSgpOwogfQogCi1Q
YXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3RyZWFtVHJhY2tMaXN0OjppdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdAorTWVkaWFTdHJlYW1UcmFjayogTWVkaWFTdHJlYW1UcmFja0xp
c3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKGluZGV4IDwgbV90cmFj
a3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV90cmFja3MuYXQoaW5kZXgpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4oKTsKKyAgICBBU1NF
UlQoaW5kZXggPCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIG1fdHJhY2tWZWN0b3JbaW5kZXhdLmdl
dCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRp
YVN0cmVhbVRyYWNrTGlzdC5oCmluZGV4IDFlZmU2YWUuLjRkNjFmODVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuaApAQCAtMjgsMjggKzI4LDIyIEBACiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1l
ZGlhU3RyZWFtVHJhY2tMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFja0xp
c3Q+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlz
dD4gY3JlYXRlKGNvbnN0IFRyYWNrVmVjdG9yJiBtX3RyYWNrcyk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVRyYWNr
VmVjdG9yJik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1UcmFja0xpc3QoKTsKIAogICAgIC8v
IERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTWVkaWFTdHJlYW1UcmFja0xpc3QKICAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdm9pZCBhc3NvY2lhdGVTdHJlYW0o
Y29uc3QgU3RyaW5nJiBsYWJlbCkgeyBtX2Fzc29jaWF0ZWRTdHJlYW1MYWJlbCA9IGxhYmVsOyB9
CisgICAgTWVkaWFTdHJlYW1UcmFjayogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1UcmFja0xpc3QoY29uc3QgVHJhY2tWZWN0b3ImIG1fdHJh
Y2tzKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25zdCBNZWRpYVN0cmVhbVRyYWNrVmVj
dG9yJik7CiAKLSAgICBUcmFja1ZlY3RvciBtX3RyYWNrczsKLSAgICBTdHJpbmcgbV9hc3NvY2lh
dGVkU3RyZWFtTGFiZWw7CisgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciBtX3RyYWNrVmVjdG9y
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVj
dGlvbi5jcHAKaW5kZXggYjQ1NGY5Zi4uN2EwNDVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNv
bm5lY3Rpb24uY3BwCkBAIC0xMjksOCArMTI5LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6YWRk
U3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSwgRXhjZXB0aW9uQ29kZSYK
IAogICAgIG1fbG9jYWxTdHJlYW1zLT5hcHBlbmQoc3RyZWFtKTsKIAotICAgIC8vIEZJWE1FOiBn
ZXQgZnJvbSBzdHJlYW0tPmRlc2NyaXB0b3IoKSB3aGVuIGl0J3MgYXZhaWxhYmxlLCBzZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi82ODQ2NAotICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFt
RGVzY3JpcHRvciA9IDA7CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlw
dG9yID0gc3RyZWFtLT5kZXNjcmlwdG9yKCk7CiAgICAgc2l6ZV90IGkgPSBtX3BlbmRpbmdSZW1v
dmVTdHJlYW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7CiAgICAgaWYgKGkgIT0gbm90Rm91bmQp
IHsKICAgICAgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5yZW1vdmUoaSk7CkBAIC0xNTYsOCAr
MTU1LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiBz
dHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgbV9sb2NhbFN0cmVhbXMtPnJlbW92ZShz
dHJlYW0pOwogCi0gICAgLy8gRklYTUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVzY3JpcHRvcigpIHdo
ZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0Ci0gICAgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yID0gMDsKKyAgICBNZWRpYVN0cmVh
bURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IgPSBzdHJlYW0tPmRlc2NyaXB0b3IoKTsKICAg
ICBzaXplX3QgaSA9IG1fcGVuZGluZ0FkZFN0cmVhbXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsK
ICAgICBpZiAoaSAhPSBub3RGb3VuZCkgewogICAgICAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnJl
bW92ZShpKTsKQEAgLTIxNSw4ICsyMTMsNyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVT
dHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtRAogICAg
IGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogY3JlYXRlIGEgbmV3IE1lZGlhU3RyZWFtIGZyb20gdGhlIHN0cmVhbURlc2NyaXB0b3Ig
b25jZSBpdCdzIHBvc3NpYmxlLCBzZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2NAotICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gMDsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoc3RyZWFtRGVzY3JpcHRvciwgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKICAgICBtX3JlbW90ZVN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOwogCiAg
ICAgZGlzcGF0Y2hFdmVudChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFk
ZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2UsIHN0cmVhbS5yZWxlYXNlKCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAppbmRleCAwZmM2ZTVmLi5hZjkwOTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCkBAIC00Niw4ICs0Niw2IEBAIHB1
YmxpYzoKICAgICAvLyBNZWRpYVN0cmVhbSBmdW5jdGlvbnMuCiAgICAgdmlydHVhbCB2b2lkIG1l
ZGlhU3RyZWFtRGVzdHJveWVkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN0cmVh
bShpbnQgcmVxdWVzdElkLCBHZW5lcmF0ZVN0cmVhbU9wdGlvbkZsYWdzLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wR2VuZXJhdGVkU3RyZWFt
KGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVk
aWFTdHJlYW1UcmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQp
ID0gMDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtQ2xpZW50KCkgeyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKaW5kZXgg
Yzg4NTUyZi4uZDRlMzA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0
cmVhbUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1D
b250cm9sbGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtVHJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTgxLDE2ICs4MCw2IEBAIHZvaWQgTWVkaWFTdHJlYW1D
b250cm9sbGVyOjp1bnJlZ2lzdGVyRnJhbWVDb250cm9sbGVyKE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyCiAKICAgICBmb3IgKFZlY3RvcjxpbnQ+OjppdGVyYXRvciBpdCA9IGZyYW1lUmVxdWVz
dHMuYmVnaW4oKTsgaXQgIT0gZnJhbWVSZXF1ZXN0cy5lbmQoKTsgKytpdCkKICAgICAgICAgbV9y
ZXF1ZXN0cy5yZW1vdmUoKml0KTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGZyYW1lU3RyZWFtczsK
LSAgICBmb3IgKFN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4oKTsgaXQg
IT0gbV9zdHJlYW1zLmVuZCgpOyArK2l0KQotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSBmcmFt
ZUNvbnRyb2xsZXIpCi0gICAgICAgICAgICBmcmFtZVN0cmVhbXMuYXBwZW5kKGl0LT5maXJzdCk7
Ci0KLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IGZyYW1lU3RyZWFtcy5i
ZWdpbigpOyBpdCAhPSBmcmFtZVN0cmVhbXMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fc3RyZWFt
cy5yZW1vdmUoKml0KTsKLQotICAgIC8vIEZJWE1FOiBBZGQgdW5yZWdpc3RlciBmdW5jdGlvbmFs
aXR5IGZvciBwZWVyIGNvbm5lY3Rpb24gb2JqZWN0cy4KIH0KIAogaW50IE1lZGlhU3RyZWFtQ29u
dHJvbGxlcjo6cmVnaXN0ZXJSZXF1ZXN0KGludCBsb2NhbElkLCBNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlciogZnJhbWVDb250cm9sbGVyKQpAQCAtMTAxLDEzICs5MCw2IEBAIGludCBNZWRpYVN0
cmVhbUNvbnRyb2xsZXI6OnJlZ2lzdGVyUmVxdWVzdChpbnQgbG9jYWxJZCwgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsCiAgICAgcmV0dXJuIG1fbmV4dEdsb2JhbFJlcXVlc3RJZCsrOwogfQogCi12
b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6cmVnaXN0ZXJTdHJlYW0oY29uc3QgU3RyaW5nJiBz
dHJlYW1MYWJlbCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlcikK
LXsKLSAgICBBU1NFUlQoZnJhbWVDb250cm9sbGVyKTsKLSAgICBBU1NFUlQoIW1fc3RyZWFtcy5j
b250YWlucyhzdHJlYW1MYWJlbCkpOwotICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtTGFiZWwsIGZy
YW1lQ29udHJvbGxlcik7Ci19Ci0KIHZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpnZW5lcmF0
ZVN0cmVhbShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQg
bG9jYWxJZCwgR2VuZXJhdGVTdHJlYW1PcHRpb25GbGFncyBmbGFncywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKQEAg
LTExNSwyNSArOTcsMTQgQEAgdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmdlbmVyYXRlU3Ry
ZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnQKICAgICBtX2NsaWVudC0+
Z2VuZXJhdGVTdHJlYW0oY29udHJvbGxlclJlcXVlc3RJZCwgZmxhZ3MsIHNlY3VyaXR5T3JpZ2lu
KTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0b3BHZW5lcmF0ZWRTdHJlYW0o
Y29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAgICBtX2NsaWVudC0+c3RvcEdlbmVyYXRl
ZFN0cmVhbShzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpz
ZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBtX2NsaWVudC0+c2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQodHJhY2tJ
ZCwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1HZW5l
cmF0ZWQoaW50IGNvbnRyb2xsZXJSZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWws
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcykKK3ZvaWQgTWVkaWFTdHJl
YW1Db250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQoaW50IGNvbnRyb2xsZXJSZXF1ZXN0SWQsIGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKQogewogICAgIC8vIERvbid0IGFz
c2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZCB3
aGlsZSB0aGUgcmVxdWVzdCByZXBseSB3YXMgY29taW5nIGJhY2suCiAgICAgaWYgKG1fcmVxdWVz
dHMuY29udGFpbnMoY29udHJvbGxlclJlcXVlc3RJZCkpIHsKICAgICAgICAgY29uc3QgUmVxdWVz
dCYgcmVxdWVzdCA9IG1fcmVxdWVzdHMuZ2V0KGNvbnRyb2xsZXJSZXF1ZXN0SWQpOwotICAgICAg
ICByZWdpc3RlclN0cmVhbShzdHJlYW1MYWJlbCwgcmVxdWVzdC5mcmFtZUNvbnRyb2xsZXIoKSk7
CiAgICAgICAgIG1fcmVxdWVzdHMucmVtb3ZlKGNvbnRyb2xsZXJSZXF1ZXN0SWQpOwogICAgICAg
ICBBU1NFUlQocmVxdWVzdC5mcmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHJlcXVlc3QuZnJh
bWVDb250cm9sbGVyKCktPnN0cmVhbUdlbmVyYXRlZChyZXF1ZXN0LmxvY2FsSWQoKSwgc3RyZWFt
TGFiZWwsIHRyYWNrcyk7CisgICAgICAgIHJlcXVlc3QuZnJhbWVDb250cm9sbGVyKCktPnN0cmVh
bUdlbmVyYXRlZChyZXF1ZXN0LmxvY2FsSWQoKSwgc291cmNlcyk7CiAgICAgfQogfQogCkBAIC0x
NDcsMTMgKzExOCw2IEBAIHZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1HZW5lcmF0
aW9uRmFpbGVkKGludCBjb250cm9sbGVyUmVxdWVzdElkLCBOYXZpCiAgICAgfQogfQogCi12b2lk
IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtRmFpbGVkKGNvbnN0IFN0cmluZyYgc3RyZWFt
TGFiZWwpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVy
IGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkIGJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkLgotICAg
IGlmIChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtTGFiZWwpKQotICAgICAgICBtX3N0cmVhbXMu
Z2V0KHN0cmVhbUxhYmVsKS0+c3RyZWFtRmFpbGVkKHN0cmVhbUxhYmVsKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oCmluZGV4IDEwYWM0Y2UuLjQ4
OTMwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbUNsaWVudC5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCiAjaW5j
bHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0zOCw3ICszOSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFTdHJlYW1DbGllbnQ7CiBjbGFzcyBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlcjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2tMaXN0OwogY2xhc3MgU2VjdXJp
dHlPcmlnaW47CiAKIGNsYXNzIE1lZGlhU3RyZWFtQ29udHJvbGxlciB7CkBAIC01MSwyNSArNTEs
MTcgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlckZyYW1lQ29udHJvbGxlcihNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciopOwogCiAgICAgdm9pZCBnZW5lcmF0ZVN0cmVhbShNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciosIGludCByZXF1ZXN0SWQsIEdlbmVyYXRlU3RyZWFtT3B0aW9u
RmxhZ3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKLSAgICB2b2lkIHN0b3BHZW5lcmF0
ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CiAKLSAgICAvLyBFbmFibGUvZGlz
YWJsZSBhbiB0cmFjay4KLSAgICB2b2lkIHNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKGNvbnN0
IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFibGVkKTsKLQotICAgIHZvaWQgc3RyZWFtR2VuZXJh
dGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7CisgICAgdm9pZCBzdHJlYW1HZW5lcmF0ZWQo
aW50IHJlcXVlc3RJZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZXMpOwog
ICAgIHZvaWQgc3RyZWFtR2VuZXJhdGlvbkZhaWxlZChpbnQgcmVxdWVzdElkLCBOYXZpZ2F0b3JV
c2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlKTsKLSAgICB2b2lkIHN0cmVhbUZhaWxlZChjb25zdCBT
dHJpbmcmIHN0cmVhbUxhYmVsKTsKIAogcHJpdmF0ZToKICAgICBpbnQgcmVnaXN0ZXJSZXF1ZXN0
KGludCBsb2NhbFJlcXVlc3RJZCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqKTsKLSAgICB2
b2lkIHJlZ2lzdGVyU3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKik7CiAKICAgICBjbGFzcyBSZXF1ZXN0OwogICAgIHR5cGVkZWYgSGFz
aE1hcDxpbnQsIFJlcXVlc3Q+IFJlcXVlc3RNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqPiBTdHJlYW1NYXA7CiAKICAgICBSZXF1ZXN0
TWFwIG1fcmVxdWVzdHM7Ci0gICAgU3RyZWFtTWFwIG1fc3RyZWFtczsKIAogICAgIE1lZGlhU3Ry
ZWFtQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9uZXh0R2xvYmFsUmVxdWVzdElkOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcApp
bmRleCA2ZjZlY2U3Li4yNjdkNDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiTG9jYWxNZWRpYVN0cmVhbS5oIgogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIk5h
dmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAg
LTQ4LDggKzQ3LDYgQEAgcHVibGljOgogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVyYXRlU3RyZWFtUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVjb3JkZWREYXRhUmVxdWVz
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2lnbmFsaW5n
UmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJv
cnQoKSA9IDA7CiAKQEAgLTExNSwyNCArMTEyLDYgQEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcjo6UmVxdWVzdE1hcDo6YWJvcnRBbGwoKQogICAgIH0KIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpDbGllbnRNYXBCYXNl
PFQ+Ojp1bnJlZ2lzdGVyQWxsKCkKLXsKLSAgICB3aGlsZSAoIXRoaXMtPmlzRW1wdHkoKSkgewot
ICAgICAgICBUIGtleSA9IHRoaXMtPmJlZ2luKCktPmZpcnN0OwotICAgICAgICAvLyB1bnJlZ2lz
dGVyIHNob3VsZCByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgbWFwLgotICAgICAgICB0aGlz
LT5iZWdpbigpLT5zZWNvbmQtPnVucmVnaXN0ZXIoKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChr
ZXksICF0aGlzLT5jb250YWlucyhrZXkpKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6Q2xpZW50TWFwQmFzZTxUPjo6
ZGV0YWNoRW1iZWRkZXIoKQotewotICAgIGZvciAodHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3Ig
aXQgPSB0aGlzLT5iZWdpbigpOyBpdCAhPSB0aGlzLT5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+ZGV0YWNoRW1iZWRkZXIoKTsKLX0KLQogTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXI6Ok1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJh
bWUoZnJhbWUpCiAgICAgLCBtX2lzSW5EZXRhY2hlZFN0YXRlKGZhbHNlKQpAQCAtMTYwLDMzICsx
MzksNiBAQCBNZWRpYVN0cmVhbUNvbnRyb2xsZXIqIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
OjpwYWdlQ29udHJvbGxlcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgJiYgbV9mcmFtZS0+
cGFnZSgpID8gbV9mcmFtZS0+cGFnZSgpLT5tZWRpYVN0cmVhbUNvbnRyb2xsZXIoKSA6IDA7CiB9
CiAKLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnVucmVnaXN0ZXIoTWVkaWFTdHJl
YW1DbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKGNsaWVu
dC0+Y2xpZW50SWQoKSkpOwotCi0gICAgLy8gQXNzdW1pbmcgd2Ugc2hvdWxkIHN0b3AgYW55IGxp
dmUgc3RyZWFtcyB3aGVuIGxvc2luZyBhY2Nlc3MgdG8gdGhlIGVtYmVkZGVyLgotICAgIGlmIChj
bGllbnQtPmlzTG9jYWxNZWRpYVN0cmVhbSgpKSB7Ci0gICAgICAgIExvY2FsTWVkaWFTdHJlYW0q
IHN0cmVhbSA9IHN0YXRpY19jYXN0PExvY2FsTWVkaWFTdHJlYW0qPihjbGllbnQpOwotICAgICAg
ICBpZiAoc3RyZWFtLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFTdHJlYW06OkxJVkUpCi0gICAgICAg
ICAgICBzdG9wR2VuZXJhdGVkU3RyZWFtKHN0cmVhbS0+bGFiZWwoKSk7Ci0gICAgfQotCi0gICAg
bV9zdHJlYW1zLnJlbW92ZShjbGllbnQtPmNsaWVudElkKCkpOwotfQotCi12b2lkIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyOjp1bnJlZ2lzdGVyKEdlbmVyaWNDbGllbnQqIGNsaWVudCkKLXsK
LSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudC0+Y2xpZW50SWQoKSkpOwotICAg
IG1fY2xpZW50cy5yZW1vdmUoY2xpZW50LT5jbGllbnRJZCgpKTsKLX0KLQotTWVkaWFTdHJlYW0q
IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpnZXRTdHJlYW1Gcm9tTGFiZWwoY29uc3QgU3Ry
aW5nJiBsYWJlbCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKGxhYmVs
KSk7Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5nZXQobGFiZWwpLT5pc01lZGlhU3RyZWFtKCkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVN0cmVhbSo+KG1fc3RyZWFtcy5nZXQobGFiZWwp
KTsKLX0KLQogdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZW50ZXJEZXRhY2hlZFN0
YXRlKCkKIHsKICAgICBpZiAobV9pc0luRGV0YWNoZWRTdGF0ZSkgewpAQCAtMTk1LDggKzE0Nyw2
IEBAIHZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmVudGVyRGV0YWNoZWRTdGF0ZSgp
CiAgICAgfQogCiAgICAgbV9yZXF1ZXN0cy5hYm9ydEFsbCgpOwotICAgIG1fc3RyZWFtcy5kZXRh
Y2hFbWJlZGRlcigpOwotICAgIG1fY2xpZW50cy5kZXRhY2hFbWJlZGRlcigpOwogICAgIG1faXNJ
bkRldGFjaGVkU3RhdGUgPSB0cnVlOwogfQogCkBAIC0yMjQsOCArMTc0LDYgQEAgdm9pZCBNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyYW1lKCkKICAgICBkaXNjb25uZWN0
UGFnZSgpOwogCiAgICAgQVNTRVJUKG1fcmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBtX3N0cmVh
bXMudW5yZWdpc3RlckFsbCgpOwotICAgIG1fY2xpZW50cy51bnJlZ2lzdGVyQWxsKCk7CiAKICAg
ICBtX2ZyYW1lID0gMDsKIH0KQEAgLTI5OCw0MyArMjQ2LDE3IEBAIHZvaWQgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXI6OmdlbmVyYXRlU3RyZWFtKGNvbnN0IFN0cmluZyYgb3B0aW9ucywKICAg
ICBwYWdlQ29udHJvbGxlcigpLT5nZW5lcmF0ZVN0cmVhbSh0aGlzLCByZXF1ZXN0SWQsIGZsYWdz
LCBzZWN1cml0eU9yaWdpbigpKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cjo6c3RvcEdlbmVyYXRlZFN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAg
IEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtTGFiZWwpKTsKLSAgICBBU1NFUlQobV9z
dHJlYW1zLmdldChzdHJlYW1MYWJlbCktPmlzTG9jYWxNZWRpYVN0cmVhbSgpKTsKLQotICAgIGlm
IChpc0NsaWVudEF2YWlsYWJsZSgpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5zdG9wR2Vu
ZXJhdGVkU3RyZWFtKHN0cmVhbUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcjo6c2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0cmFja0lk
LCBib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGlzQ2xpZW50QXZhaWxhYmxlKCkpCi0gICAgICAg
IHBhZ2VDb250cm9sbGVyKCktPnNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKHRyYWNrSWQsIGVu
YWJsZWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdHJlYW1HZW5l
cmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzUGFyYW0pCit2b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgTWVkaWFTdHJlYW1T
b3VyY2VWZWN0b3ImIHNvdXJjZXMpCiB7CiAgICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBy
ZXF1ZXN0IGNhbiBoYXZlIGJlZW4gYWJvcnRlZCBhcyBhIHJlc3VsdCBvZiBlbWJlZGRlciBkZXRh
Y2htZW50LgogICAgIGlmICghbV9yZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0SWQpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQobV9yZXF1ZXN0cy5nZXQocmVxdWVzdElkKS0+aXNHZW5l
cmF0ZVN0cmVhbVJlcXVlc3QoKSk7Ci0gICAgQVNTRVJUKCFsYWJlbC5pc051bGwoKSk7Ci0gICAg
QVNTRVJUKHRyYWNrc1BhcmFtKTsKLQotICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4g
dHJhY2tzID0gdHJhY2tzUGFyYW07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJh
Y2tzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGludCB0cmFja0NsaWVudElkID0gbV9jbGll
bnRzLmdldE5leHRJZCgpOwotICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sg
PSB0cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgIHRyYWNrLT5hc3NvY2lhdGVGcmFtZUNvbnRyb2xs
ZXIodGhpcywgdHJhY2tDbGllbnRJZCk7Ci0gICAgICAgIG1fY2xpZW50cy5hZGQodHJhY2tDbGll
bnRJZCwgdHJhY2suZ2V0KCkpOwotICAgIH0KKyAgICBBU1NFUlQoc291cmNlcyk7CiAKICAgICBS
ZWZQdHI8R2VuZXJhdGVTdHJlYW1SZXF1ZXN0PiBzdHJlYW1SZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8
R2VuZXJhdGVTdHJlYW1SZXF1ZXN0Kj4obV9yZXF1ZXN0cy5nZXQocmVxdWVzdElkKS5nZXQoKSk7
Ci0gICAgUmVmUHRyPExvY2FsTWVkaWFTdHJlYW0+IGdlbmVyYXRlZFN0cmVhbSA9IExvY2FsTWVk
aWFTdHJlYW06OmNyZWF0ZSh0aGlzLCBsYWJlbCwgdHJhY2tzLnJlbGVhc2UoKSk7Ci0gICAgbV9z
dHJlYW1zLmFkZChsYWJlbCwgZ2VuZXJhdGVkU3RyZWFtLmdldCgpKTsKKyAgICBSZWZQdHI8TG9j
YWxNZWRpYVN0cmVhbT4gZ2VuZXJhdGVkU3RyZWFtID0gTG9jYWxNZWRpYVN0cmVhbTo6Y3JlYXRl
KHNvdXJjZXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgbV9yZXF1ZXN0cy5yZW1v
dmUocmVxdWVzdElkKTsKICAgICBzdHJlYW1SZXF1ZXN0LT5zdWNjZXNzQ2FsbGJhY2soKS0+aGFu
ZGxlRXZlbnQoZ2VuZXJhdGVkU3RyZWFtLmdldCgpKTsKIH0KQEAgLTM1NiwxMSArMjc4LDYgQEAg
dm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3RyZWFtR2VuZXJhdGlvbkZhaWxlZChp
bnQgcmVxdWVzdElkLCBOYXZpZ2F0b3IKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXI6OnN0cmVhbUZhaWxlZChjb25zdCBTdHJpbmcmIGxhYmVsKQotewotICAgIGdl
dFN0cmVhbUZyb21MYWJlbChsYWJlbCktPnN0cmVhbUVuZGVkKCk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgKaW5kZXggNmEzOWFm
ZS4uZjkxMjU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2xpZW50LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJl
YW1Tb3VyY2UuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM4LDEwNiAr
MzksMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7Ci1jbGFzcyBMb2Nh
bE1lZGlhU3RyZWFtOwotY2xhc3MgTWVkaWFTdHJlYW07CiBjbGFzcyBNZWRpYVN0cmVhbUNvbnRy
b2xsZXI7Ci1jbGFzcyBNZWRpYVN0cmVhbVRyYWNrTGlzdDsKIGNsYXNzIE5hdmlnYXRvclVzZXJN
ZWRpYUVycm9yQ2FsbGJhY2s7CiBjbGFzcyBOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJh
Y2s7CiBjbGFzcyBQYWdlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNl
Y3VyaXR5T3JpZ2luOwotY2xhc3MgU2lnbmFsaW5nQ2FsbGJhY2s7CiAKIGNsYXNzIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcik7CiBwdWJsaWM6Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIElkVHlw
ZT4KLSAgICBjbGFzcyBDbGllbnRCYXNlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q2xpZW50QmFzZSk7Ci0gICAgcHVibGljOgotICAgICAgICBDbGllbnRCYXNlKCkgOiBtX2ZyYW1l
Q29udHJvbGxlcigwKSwgbV9jbGllbnRJZCgwKSB7IH0KLQotICAgICAgICBDbGllbnRCYXNlKE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGNvbnN0IElkVHlwZSYg
aWQpCi0gICAgICAgICAgICA6IG1fZnJhbWVDb250cm9sbGVyKGZyYW1lQ29udHJvbGxlcikKLSAg
ICAgICAgICAgICwgbV9jbGllbnRJZChpZCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB+Q2xpZW50
QmFzZSgpIHsgfQotCi0gICAgICAgIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBtZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250cm9sbGVyOyB9
Ci0gICAgICAgIGNvbnN0IElkVHlwZSYgY2xpZW50SWQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVu
dElkOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFTdHJlYW0oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFtKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzR2VuZXJpY0Ns
aWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgLy8gQ2FsbGVkIHdoZW4g
dGhlIGZyYW1lIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGlzY29ubmVjdGVkIHRvIHRoZSBNZWRpYVN0
cmVhbUNsaWVudCBlbWJlZGRlci4KLSAgICAgICAgLy8gQ2xpZW50cyBzaG91bGQgb3ZlcnJpZGUg
dGhpcyB0byBzZW5kIGFueSByZXF1aXJlZCBzaHV0ZG93biBtZXNzYWdlcy4KLSAgICAgICAgdmly
dHVhbCB2b2lkIGRldGFjaEVtYmVkZGVyKCkgeyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IC8vIFVzZWQgZm9yIG9iamVjdHMgdGhhdCBhcmUgb3B0aW9uYWxseSBhc3NvY2lhdGVkIHRvIHRo
ZSBmcmFtZSBjb250cm9sbGVyIGFmdGVyIGNvbnN0cnVjdGlvbiwgbGlrZSB0aGUgTWVkaWFTdHJl
YW1UcmFja3MuCi0gICAgICAgIHZvaWQgYXNzb2NpYXRlRnJhbWVDb250cm9sbGVyKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGNvbnN0IElkVHlwZSYgaWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZUNvbnRyb2xsZXIgJiYgIW1fY2xp
ZW50SWQpOwotICAgICAgICAgICAgbV9mcmFtZUNvbnRyb2xsZXIgPSBmcmFtZUNvbnRyb2xsZXI7
Ci0gICAgICAgICAgICBtX2NsaWVudElkID0gaWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBB
dm9pZHMgcmVwZWF0aW5nIHRoZSBzYW1lIGNvZGUgaW4gdGhlIHVucmVnaXN0ZXIgbWV0aG9kIG9m
IGVhY2ggZGVyaXZlZCBjbGFzcy4KLSAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBzaW5jZSB0
aGUgY29udHJvbGxlcidzIHVucmVnaXN0ZXIgbWV0aG9kcyBtYWtlIHVzZSBvZiB0aGUgaXNPYmpl
Y3QgdmlydHVhbHMsCi0gICAgICAgIC8vIGFuZCB0aGUgdW5yZWdpc3RyYXRpb24gY2FuIGJlIHRy
aWdnZXJlZCBlaXRoZXIgYnkgdGhlIGRlc3RydWN0b3Igb2YgdGhlIGNsaWVudCBvciBieSB0aGUg
ZGlzY29ubmVjdGlvbiBvZiB0aGUgZnJhbWUuCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
bGllbnRUeXBlPgotICAgICAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoQ2xpZW50VHlwZSogY2xp
ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250cm9sbGVyKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgbV9mcmFtZUNvbnRyb2xsZXItPnVu
cmVnaXN0ZXIoc3RhdGljX2Nhc3Q8Q2xpZW50VHlwZSo+KGNsaWVudCkpOwotICAgICAgICAgICAg
bV9mcmFtZUNvbnRyb2xsZXIgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHVucmVnaXN0ZXIoKSA9IDA7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlcjsKLQotICAgICAgICBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogbV9mcmFt
ZUNvbnRyb2xsZXI7Ci0gICAgICAgIElkVHlwZSBtX2NsaWVudElkOwotICAgIH07Ci0KLSAgICBj
bGFzcyBNZWRpYVN0cmVhbUNsaWVudCA6IHB1YmxpYyBDbGllbnRCYXNlPFN0cmluZz4gewotICAg
IHB1YmxpYzoKLSAgICAgICAgTWVkaWFTdHJlYW1DbGllbnQoTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCBpc0xvY2Fs
TWVkaWFTdHJlYW0pCi0gICAgICAgICAgICA6IENsaWVudEJhc2U8U3RyaW5nPihmcmFtZUNvbnRy
b2xsZXIsIGxhYmVsKQotICAgICAgICAgICAgLCBtX2lzTG9jYWxNZWRpYVN0cmVhbShpc0xvY2Fs
TWVkaWFTdHJlYW0pIHsgfQotCi0gICAgICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtQ2xpZW50KCkg
eyB1bnJlZ2lzdGVyKCk7IH0KLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYVN0cmVhbSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICAvLyBBY2Nlc3NlZCBieSB0aGUgZGVz
dHJ1Y3Rvci4KLSAgICAgICAgdmlydHVhbCBib29sIGlzTG9jYWxNZWRpYVN0cmVhbSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNMb2NhbE1lZGlhU3RyZWFtOyB9Ci0KLSAgICAgICAgLy8gU3RyZWFtIGhh
cyBlbmRlZCBmb3Igc29tZSBleHRlcm5hbCByZWFzb24uCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1FbmRlZCgpID0gMDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1
bnJlZ2lzdGVyKCkgeyB1bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOyB9Ci0gICAgICAgIGJvb2wgbV9p
c0xvY2FsTWVkaWFTdHJlYW07Ci0gICAgfTsKLQotICAgIC8vIEdlbmVyaWMgY2xpZW50cyBhcmUg
b2JqZWN0cyB0aGF0IHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBmcmFtZSBjb250cm9sbGVyIGJ1dCBk
b24ndCBoYXZlIGEgZ2xvYmFsIGlkIChsaWtlIHN0cmVhbXMgZG8pCi0gICAgLy8gb3IgbmVlZCB0
byByZWNlaXZlIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBlbWJlZGRlciBjbGllbnQuCi0gICAgY2xh
c3MgR2VuZXJpY0NsaWVudCA6IHB1YmxpYyBDbGllbnRCYXNlPGludD4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgR2VuZXJpY0NsaWVudCgpIHsgfQotICAgICAgICBHZW5lcmljQ2xpZW50KE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCkgOiBDbGllbnRC
YXNlPGludD4oZnJhbWVDb250cm9sbGVyLCBpZCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgfkdlbmVy
aWNDbGllbnQoKSB7IHVucmVnaXN0ZXIoKTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHZW5l
cmljQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXIoKSB7IHVucmVnaXN0ZXJDbGllbnQodGhpcyk7IH0K
LSAgICB9OwotCiAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoRnJhbWUqKTsKICAgICB2
aXJ0dWFsIH5NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpOwogCkBAIC0xNTEsMTQgKzYyLDEx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBHZW5lcmF0ZVN0cmVhbU9wdGlvbkZsYWdzIHBhcnNl
R2VuZXJhdGVTdHJlYW1PcHRpb25zKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZ2VuZXJhdGVT
dHJlYW0oY29uc3QgU3RyaW5nJiBvcHRpb25zLCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRp
YVN1Y2Nlc3NDYWxsYmFjaz4sIFBhc3NSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxs
YmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29u
c3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0gICAgdm9pZCBzZXRNZWRpYVN0cmVhbVRyYWNrRW5h
YmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCk7CiAKICAgICAvLyAtLS0g
Q2FsbHMgY29taW5nIGJhY2sgZnJvbSB0aGUgY29udHJvbGxlci4gLS0tIC8vCiAKLSAgICB2b2lk
IHN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVs
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpOworICAgIHZvaWQgc3Ry
ZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9y
JiBzb3VyY2VzKTsKICAgICB2b2lkIHN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJ
ZCwgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OkVycm9yQ29kZSk7Ci0gICAgdm9pZCBzdHJlYW1G
YWlsZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CiAKIHByaXZhdGU6CiAgICAgY2xhc3Mg
UmVxdWVzdDsKQEAgLTE4MCwzNCArODgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBhYm9y
dEFsbCgpOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSWRUeXBlPgotICAgIGNs
YXNzIENsaWVudE1hcEJhc2UgOiBwdWJsaWMgSGFzaE1hcDxJZFR5cGUsIENsaWVudEJhc2U8SWRU
eXBlPiogPiB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENsaWVudE1hcEJhc2UpOwot
ICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPElkVHlwZSwgQ2xpZW50QmFzZTxJ
ZFR5cGU+KiA+IE1hcFR5cGU7Ci0KLSAgICAgICAgQ2xpZW50TWFwQmFzZSgpIHsgfQotICAgICAg
ICB2b2lkIHVucmVnaXN0ZXJBbGwoKTsKLSAgICAgICAgdm9pZCBkZXRhY2hFbWJlZGRlcigpOwot
ICAgIH07Ci0KLSAgICAvLyBTdHJlYW1zIGFyZSBhIHNwZWNpYWwgY2xhc3Mgb2YgY2xpZW50cyBz
aW5jZSB0aGV5IGFyZSBpZGVudGlmaWVkIGJ5IGEgZ2xvYmFsIGxhYmVsIHN0cmluZyBpbnN0ZWFk
IG9mIGFuIGlkLgotICAgIHR5cGVkZWYgQ2xpZW50TWFwQmFzZTxTdHJpbmc+IFN0cmVhbU1hcDsK
LQotICAgIC8vIEFsbCBvdGhlciB0eXBlcyBvZiBjbGllbnRzIHVzZSBhdXRvZ2VuZXJhdGVkIGlu
dGVnZXIgaWRzLgotICAgIGNsYXNzIENsaWVudE1hcCA6IHB1YmxpYyBJZEdlbmVyYXRvciwgcHVi
bGljIENsaWVudE1hcEJhc2U8aW50PiB7IH07Ci0KICAgICAvLyBEZXRhY2hlZCBmcm9tIGEgcGFn
ZSwgYW5kIGhlbmNlIGZyb20gYSBlbWJlZGRlciBjbGllbnQuCiAgICAgdm9pZCBlbnRlckRldGFj
aGVkU3RhdGUoKTsKIAotICAgIHZvaWQgdW5yZWdpc3RlcihNZWRpYVN0cmVhbUNsaWVudCopOwot
ICAgIHZvaWQgdW5yZWdpc3RlcihHZW5lcmljQ2xpZW50Kik7CiAgICAgTWVkaWFTdHJlYW1Db250
cm9sbGVyKiBwYWdlQ29udHJvbGxlcigpIGNvbnN0OwotICAgIE1lZGlhU3RyZWFtKiBnZXRTdHJl
YW1Gcm9tTGFiZWwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBSZXF1ZXN0TWFwIG1fcmVx
dWVzdHM7Ci0gICAgQ2xpZW50TWFwIG1fY2xpZW50czsKLSAgICBTdHJlYW1NYXAgbV9zdHJlYW1z
OwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgYm9vbCBtX2lzSW5EZXRhY2hlZFN0YXRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkYWJjMDBmLi5jNDJhYTU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTEwLTExICBBZGFtIEJlcmdr
dmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBVcGRhdGUgTWVk
aWFTdHJlYW0gdG8gdXNlIFdlYkNvcmUgcGxhdGZvcm0gaW50ZXJmYWNlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NjQKKworICAgICAgICBSZW1v
dmVkIFdlYk1lZGlhU3RyZWFtVHJhY2sqIHNpbmNlIHRoZXkgd2lsbCBubyBsb25nZXIgYmUgbmVl
ZGVkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oOiBSZW1v
dmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHNyYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwOiBSZW1vdmVkLgorCiAyMDExLTEw
LTEwICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlv
bk9ic2VydmVyc10gQWRkIHN0dWIgaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGNlNmUwZTEuLmU4NDg2OTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTIyNyw4ICsyMjcsNiBAQAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJNZWRpYVBsYXllckFjdGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1l
ZGlhUGxheWVyQ2xpZW50LmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFTdHJl
YW1UcmFjay5oJywKLSAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2tM
aXN0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVudUl0ZW1JbmZvLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsQ2xpZW50LmgnLApAQCAtNTQ4LDgg
KzU0Niw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgnLAotICAgICAgICAgICAg
ICAgICdzcmMvV2ViTWVkaWFTdHJlYW1UcmFjay5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMv
V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5h
bWVkTm9kZU1hcC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTmV0d29ya1N0YXRlTm90
aWZpZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5vZGUuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiMWZhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYk1lZGlhU3RyZWFt
VHJhY2tfaAotI2RlZmluZSBXZWJNZWRpYVN0cmVhbVRyYWNrX2gKLQotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLSNpbmNsdWRlICJXZWJQcml2YXRl
UHRyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2s7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci0KLWNsYXNzIFdlYk1l
ZGlhU3RyZWFtVHJhY2sgewotcHVibGljOgotICAgIFdlYk1lZGlhU3RyZWFtVHJhY2soKSB7IH0K
LSAgICB+V2ViTWVkaWFTdHJlYW1UcmFjaygpIHsgcmVzZXQoKTsgfQotCi0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgV2ViU3RyaW5n
JiBraW5kLCBjb25zdCBXZWJTdHJpbmcmIGxhYmVsKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
cmVzZXQoKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051
bGwoKTsgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViTWVkaWFTdHJlYW1U
cmFjayhjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjaz4mKTsK
LSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjaz4o
KSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6
TWVkaWFTdHJlYW1UcmFjaz4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gV2ViTWVkaWFT
dHJlYW1UcmFja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjVlZmM3Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJN
ZWRpYVN0cmVhbVRyYWNrTGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdF9oCi0jZGVmaW5lIFdl
Yk1lZGlhU3RyZWFtVHJhY2tMaXN0X2gKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNp
bmNsdWRlICJXZWJDb21tb24uaCIKLSNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2tMaXN0OwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTWVkaWFTdHJlYW1UcmFjazsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7Ci0KLWNsYXNzIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0
IHsKLXB1YmxpYzoKLSAgICBXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdCgpIHsgfQotICAgIH5XZWJN
ZWRpYVN0cmVhbVRyYWNrTGlzdCgpIHsgcmVzZXQoKTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGluaXRpYWxpemUoY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtVHJhY2s+JiB3ZWJU
cmFja3MpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0KLSNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KLSAgICBXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q+Jik7Ci0gICAgb3BlcmF0b3IgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0PigpIGNvbnN0OwotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0gICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrTGlzdD4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gV2ViTWVkaWFTdHJlYW1UcmFj
a0xpc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFT
dHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVh
bVRyYWNrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc3OTAxYy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJNZWRpYVN0cmVhbVRyYWNrLmgiCi0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFjay5oIgotI2luY2x1
ZGUgIldlYlN0cmluZy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJNZWRpYVN0
cmVhbVRyYWNrOjppbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmlu
ZyYga2luZCwgY29uc3QgV2ViU3RyaW5nJiBsYWJlbCkKLXsKLSAgICBtX3ByaXZhdGUgPSBXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoaWQsIGtpbmQsIGxhYmVsKTsKLX0KLQotdm9p
ZCBXZWJNZWRpYVN0cmVhbVRyYWNrOjpyZXNldCgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KCk7
Ci19Ci0KLVdlYk1lZGlhU3RyZWFtVHJhY2s6OldlYk1lZGlhU3RyZWFtVHJhY2soY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s+JiB0cmFjaykKLSAgICA6IG1f
cHJpdmF0ZSh0cmFjaykKLXsKLX0KLQotV2ViTWVkaWFTdHJlYW1UcmFjazo6b3BlcmF0b3IgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s+KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDVkNTk1YjAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
Yk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0j
aW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFjay5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tM
aXN0LmgiCi0jaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1UcmFjay5oIgotI2luY2x1ZGUgIldlYlZl
Y3Rvci5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLXZvaWQgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3Q6OmluaXRpYWxpemUoY29uc3QgV2ViVmVj
dG9yPFdlYk1lZGlhU3RyZWFtVHJhY2s+JiB3ZWJUcmFja3MpCi17Ci0gICAgVHJhY2tWZWN0b3Ig
dHJhY2tzKHdlYlRyYWNrcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Vi
VHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICB0cmFja3NbaV0gPSB3ZWJUcmFja3NbaV07Ci0K
LSAgICBtX3ByaXZhdGUgPSBNZWRpYVN0cmVhbVRyYWNrTGlzdDo6Y3JlYXRlKHRyYWNrcyk7Ci19
Ci0KLXZvaWQgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3Q6OnJlc2V0KCkKLXsKLSAgICBtX3ByaXZh
dGUucmVzZXQoKTsKLX0KLQotV2ViTWVkaWFTdHJlYW1UcmFja0xpc3Q6OldlYk1lZGlhU3RyZWFt
VHJhY2tMaXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4mIHRy
YWNrTGlzdCkKLSAgICA6IG1fcHJpdmF0ZSh0cmFja0xpc3QpCi17Ci19Ci0KLVdlYk1lZGlhU3Ry
ZWFtVHJhY2tMaXN0OjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xp
c3Q+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110871</attachid>
            <date>2011-10-13 10:31:23 -0700</date>
            <delta_ts>2011-10-17 07:37:01 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>mediastream_use_platform_2.patch</filename>
            <type>text/plain</type>
            <size>54474</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiY2EyNjI2Li40YzY1ODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTEtMTAtMTMgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBNZWRpYVN0cmVhbSB0byB1c2UgV2ViQ29yZSBwbGF0Zm9y
bSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBkb20vTG9jYWxNZWRpYVN0
cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxNZWRpYVN0cmVhbTo6TG9jYWxNZWRpYVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2FsTWVkaWFTdHJlYW06OnN0b3BUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsTWVkaWFTdHJlYW06On5Mb2NhbE1lZGlhU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsTWVkaWFTdHJlYW06OnRvTG9jYWxNZWRpYVN0cmVhbSk6CisgICAgICAgICogZG9tL0xv
Y2FsTWVkaWFTdHJlYW0uaDoKKyAgICAgICAgKiBkb20vTG9jYWxNZWRpYVN0cmVhbS5pZGw6Cisg
ICAgICAgICogZG9tL01lZGlhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06Ok1lZGlhU3RyZWFt
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW06OnN0cmVhbUVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpsYWJlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbTo6dHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpk
ZXNjcmlwdG9yKToKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW1UcmFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVRyYWNrOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2s6OmxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c2V0RW5hYmxlZCk6CisgICAg
ICAgICogZG9tL01lZGlhU3RyZWFtVHJhY2suaDoKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW1U
cmFjay5pZGw6CisgICAgICAgICogZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9NZWRpYVN0
cmVhbVRyYWNrTGlzdC5oOgorICAgICAgICAqIHAycC9QZWVyQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbUFkZGVkKToKKyAgICAgICAgKiBwYWdlL01lZGlhU3Ry
ZWFtQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Db250cm9sbGVyOjp1bnJlZ2lzdGVyRnJhbWVD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3Ry
ZWFtR2VuZXJhdGVkKToKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oOgor
ICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmVudGVyRGV0YWNoZWRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZGlzY29ubmVj
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpz
dHJlYW1HZW5lcmF0ZWQpOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIuaDoKKwogMjAxMS0xMC0xMyAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRkVDb21wb25lbnRUcmFuc2ZlciBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9ydCBkeW5h
bWljIGludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVk
aWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uY3BwCmlu
ZGV4IGRmMzcyMjcuLjkzN2RhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2Nh
bE1lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVh
bS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDQ0ICsyOCwzNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1
ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMb2Nh
bE1lZGlhU3RyZWFtOjpEaXNwYXRjaFVwZGF0ZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIChMb2NhbE1lZGlhU3Ry
ZWFtOjoqQ2FsbGJhY2spKCk7Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxEaXNwYXRjaFVwZGF0
ZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPExvY2FsTWVkaWFTdHJlYW0+IG9iamVjdCwgQ2FsbGJh
Y2sgY2FsbGJhY2spCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERpc3BhdGNo
VXBkYXRlVGFzayhvYmplY3QsIGNhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgKG1f
b2JqZWN0LmdldCgpLT4qbV9jYWxsYmFjaykoKTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICBEaXNw
YXRjaFVwZGF0ZVRhc2soUGFzc1JlZlB0cjxMb2NhbE1lZGlhU3RyZWFtPiBvYmplY3QsIENhbGxi
YWNrIGNhbGxiYWNrKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX2Nh
bGxiYWNrKGNhbGxiYWNrKSB7IH0KK1Bhc3NSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gTG9jYWxN
ZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTG9jYWxNZWRpYVN0cmVhbShjb250ZXh0LCBzb3VyY2VzKSk7Cit9CiAKLSAgICBSZWZQ
dHI8TG9jYWxNZWRpYVN0cmVhbT4gbV9vYmplY3Q7Ci0gICAgQ2FsbGJhY2sgbV9jYWxsYmFjazsK
LX07CitMb2NhbE1lZGlhU3RyZWFtOjpMb2NhbE1lZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKQor
ICAgIDogTWVkaWFTdHJlYW0oY29udGV4dCwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUo
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBzb3VyY2VzKSkKKyAgICAsIG1fc3RvcFRpbWVy
KHRoaXMsICZMb2NhbE1lZGlhU3RyZWFtOjpzdG9wVGltZXJGaXJlZCkKK3sKK30KIAotUGFzc1Jl
ZlB0cjxMb2NhbE1lZGlhU3RyZWFtPiBMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUoTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQordm9pZCBMb2NhbE1lZGlh
U3RyZWFtOjpzdG9wKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsTWVkaWFTdHJl
YW0oZnJhbWVDb250cm9sbGVyLCBsYWJlbCwgdHJhY2tzKSk7CisgICAgaWYgKCFtX3N0b3BUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N0b3BUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAK
LUxvY2FsTWVkaWFTdHJlYW06OkxvY2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotICAgIDogTWVkaWFTdHJlYW0oZnJhbWVDb250
cm9sbGVyLCBsYWJlbCwgdHJhY2tzLCB0cnVlKQordm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdG9w
VGltZXJGaXJlZChUaW1lcjxMb2NhbE1lZGlhU3RyZWFtPiogdGltZXIpCiB7CisgICAgQVNTRVJU
X1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fc3RvcFRpbWVyKTsKKworICAgIGlmIChyZWFkeVN0
YXRlKCkgPT0gRU5ERUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB0ZWxsIHRo
ZSBwbGF0Zm9ybSB0aGF0IHRoZSBzdHJlYW0gd2FzIHN0b3BwZWQKKworICAgIHN0cmVhbUVuZGVk
KCk7CiB9CiAKIExvY2FsTWVkaWFTdHJlYW06On5Mb2NhbE1lZGlhU3RyZWFtKCkKQEAgLTc2LDQx
ICs3MCw2IEBAIExvY2FsTWVkaWFTdHJlYW0qIExvY2FsTWVkaWFTdHJlYW06OnRvTG9jYWxNZWRp
YVN0cmVhbSgpCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgTG9jYWxNZWRpYVN0cmVhbTo6
ZGV0YWNoRW1iZWRkZXIoKQotewotICAgIC8vIEFzc3VtaW5nIHdlIHNob3VsZCBzdG9wIGFueSBs
aXZlIHN0cmVhbXMgd2hlbiBsb3NpbmcgYWNjZXNzIHRvIHRoZSBlbWJlZGRlci4KLSAgICBzdG9w
KCk7Ci0KLSAgICBNZWRpYVN0cmVhbTo6ZGV0YWNoRW1iZWRkZXIoKTsKLX0KLQotdm9pZCBMb2Nh
bE1lZGlhU3RyZWFtOjpzdHJlYW1FbmRlZCgpCi17Ci0gICAgTWVkaWFTdHJlYW06OnN0cmVhbUVu
ZGVkKCk7Ci19Ci0KLXZvaWQgTG9jYWxNZWRpYVN0cmVhbTo6c3RvcCgpCi17Ci0gICAgaWYgKCFt
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpIHx8IG1fcmVhZHlTdGF0ZSA9PSBFTkRFRCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+c3RvcEdl
bmVyYXRlZFN0cmVhbShsYWJlbCgpKTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9IEVOREVEOwotCi0g
ICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIGl0IGNhbiBiZSBudWxsIGluIGRlZ2VuZXJhdGUgY2Fz
ZXMgbGlrZSBmcmFtZXMgZGV0YWNoZWQgZnJvbSB0aGVpciBwYWdlcy4KLSAgICBpZiAoIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRGlzcGF0Y2hVcGRhdGVUYXNrOjpjcmVhdGUodGhpcywg
JkxvY2FsTWVkaWFTdHJlYW06Om9uU3RvcCkpOwotfQotCi12b2lkIExvY2FsTWVkaWFTdHJlYW06
Om9uU3RvcCgpCi17Ci0gICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxN
ZWRpYVN0cmVhbS5oCmluZGV4IDZjODU0MDguLjI3ODUyNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xv
Y2FsTWVkaWFTdHJlYW0uaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsMzMgKzI5LDI2IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
IAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlICJUaW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExvY2FsTWVk
aWFTdHJlYW0gOiBwdWJsaWMgTWVkaWFTdHJlYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExvY2FsTWVkaWFTdHJlYW0+IGNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+
IHRyYWNrcyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYp
OwogICAgIHZpcnR1YWwgfkxvY2FsTWVkaWFTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RvcCgpOwog
Ci0gICAgLy8gTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OlN0cmVhbUNsaWVudCBpbXBsZW1l
bnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRW1iZWRkZXIoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtRW5kZWQoKTsKLQogICAgIC8vIEV2ZW50VGFyZ2V0LgogICAgIHZpcnR1YWwg
TG9jYWxNZWRpYVN0cmVhbSogdG9Mb2NhbE1lZGlhU3RyZWFtKCk7CiAKLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotCiBwcml2YXRlOgotICAgIExvY2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tM
aXN0PiB0cmFja3MpOwotICAgIGNsYXNzIERpc3BhdGNoVXBkYXRlVGFzazsKLSAgICBmcmllbmQg
Y2xhc3MgRGlzcGF0Y2hVcGRhdGVUYXNrOworICAgIExvY2FsTWVkaWFTdHJlYW0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJik7CiAKLSAgICB2
b2lkIG9uU3RvcCgpOworICAgIHZvaWQgc3RvcFRpbWVyRmlyZWQoVGltZXI8TG9jYWxNZWRpYVN0
cmVhbT4qKTsKKworICAgIFRpbWVyPExvY2FsTWVkaWFTdHJlYW0+IG1fc3RvcFRpbWVyOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0xvY2FsTWVkaWFTdHJlYW0uaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJl
YW0uaWRsCmluZGV4IGU0NzI1YTAuLjE1YTJjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxN
ZWRpYVN0cmVhbS5pZGwKQEAgLTI3LDcgKzI3LDggQEAgbW9kdWxlIGNvcmUgewogICAgIGludGVy
ZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPU1FRElBX1NUUkVBTSwKICAgICAgICAgR2VuZXJh
dGVOYXRpdmVDb252ZXJ0ZXIsCi0gICAgICAgIEV2ZW50VGFyZ2V0CisgICAgICAgIEV2ZW50VGFy
Z2V0LAorICAgICAgICBHZW5lcmF0ZVRvSlMKICAgICBdIExvY2FsTWVkaWFTdHJlYW0gOiBNZWRp
YVN0cmVhbSB7CiAgICAgICAgIHZvaWQgc3RvcCgpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlh
U3RyZWFtLmNwcAppbmRleCBiMDlmYmEyLi4yYTNhZGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0
cmVhbS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nz
b24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMyLDIwICszMywzNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzLCBib29sIGlzTG9jYWxNZWRpYVN0cmVhbSkKK1Bh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVh
bURlc2NyaXB0b3IpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbShmcmFt
ZUNvbnRyb2xsZXIsIGxhYmVsLCB0cmFja3MsIGlzTG9jYWxNZWRpYVN0cmVhbSkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW0oY29udGV4dCwgc3RyZWFtRGVzY3JpcHRvcikp
OwogfQogCi1NZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzLCBib29sIGlzTG9jYWxNZWRpYVN0cmVhbSkKLSAgICA6
IE1lZGlhU3RyZWFtQ2xpZW50KGZyYW1lQ29udHJvbGxlciwgbGFiZWwsIGlzTG9jYWxNZWRpYVN0
cmVhbSkKLSAgICAsIG1fcmVhZHlTdGF0ZShMSVZFKQotICAgICwgbV90cmFja3ModHJhY2tzKQor
TWVkaWFTdHJlYW06Ok1lZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yKQorICAg
IDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2Rlc2NyaXB0b3Io
c3RyZWFtRGVzY3JpcHRvcikKIHsKKyAgICBtX2Rlc2NyaXB0b3ItPnNldE93bmVyKHRoaXMpOwor
CisgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciB0cmFja1ZlY3RvcjsKKyAgICBzaXplX3QgbnVt
YmVyT2ZUcmFja3MgPSBtX2Rlc2NyaXB0b3ItPm51bWJlck9mQ29tcG9uZW50cygpOworCisgICAg
dHJhY2tWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mVHJhY2tzKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mVHJhY2tzOyBpKyspCisgICAgICAgIHRyYWNrVmVjdG9y
LmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUobV9kZXNjcmlwdG9yLCBpKSk7CisKKyAg
ICBtX3RyYWNrcyA9IE1lZGlhU3RyZWFtVHJhY2tMaXN0OjpjcmVhdGUodHJhY2tWZWN0b3IpOwog
fQogCiBNZWRpYVN0cmVhbTo6fk1lZGlhU3RyZWFtKCkKIHsKKyAgICBtX2Rlc2NyaXB0b3ItPnNl
dE93bmVyKDApOworfQorCitNZWRpYVN0cmVhbTo6UmVhZHlTdGF0ZSBNZWRpYVN0cmVhbTo6cmVh
ZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVzY3JpcHRvci0+ZW5kZWQoKSA/IEVO
REVEIDogTElWRTsKIH0KIAogTWVkaWFTdHJlYW0qIE1lZGlhU3RyZWFtOjp0b01lZGlhU3RyZWFt
KCkKQEAgLTU1LDE0ICs3MSwxNyBAQCBNZWRpYVN0cmVhbSogTWVkaWFTdHJlYW06OnRvTWVkaWFT
dHJlYW0oKQogCiB2b2lkIE1lZGlhU3RyZWFtOjpzdHJlYW1FbmRlZCgpCiB7Ci0gICAgQVNTRVJU
KG1fcmVhZHlTdGF0ZSAhPSBFTkRFRCk7Ci0gICAgbV9yZWFkeVN0YXRlID0gRU5ERUQ7CisgICAg
aWYgKHJlYWR5U3RhdGUoKSA9PSBFTkRFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZXNj
cmlwdG9yLT5zZXRFbmRlZCgpOworCiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogTWVkaWFTdHJlYW06OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAog
ewotICAgIHJldHVybiBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpID8gbWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIDogMDsKKyAgICByZXR1
cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogfQogCiBFdmVudFRhcmdldERhdGEqIE1lZGlh
U3RyZWFtOjpldmVudFRhcmdldERhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L01lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaAppbmRleCBh
NjE5NTYwLi4zN2Q2MThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJl
YW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzkgKzI4LDM3IEBA
CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbVRyYWNrTGlzdC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxNZWRpYVN0cmVhbT4sCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBFdmVudFRhcmdl
dCwKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
OjpNZWRpYVN0cmVhbUNsaWVudCB7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitj
bGFzcyBNZWRpYVN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtPiwgcHVibGlj
IEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAgICAvLyBNdXN0IG1hdGNoIHRoZSBjb25zdGFudHMg
aW4gdGhlIC5pZGwgZmlsZS4KLSAgICBlbnVtIHsKKyAgICBlbnVtIFJlYWR5U3RhdGUgewogICAg
ICAgICBMSVZFID0gMSwKICAgICAgICAgRU5ERUQgPSAyCiAgICAgfTsKIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIq
LCBjb25zdCBTdHJpbmcmIGxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0
cmFja3MsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFtID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW0o
KTsKIAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW5kZWQpOwogCi0gICAg
dW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsg
fQotICAgIGNvbnN0IFN0cmluZyYgbGFiZWwoKSBjb25zdCB7IHJldHVybiBjbGllbnRJZCgpOyB9
CisgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CisgICAgU3RyaW5nIGxhYmVsKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdG9yLT5sYWJlbCgpOyB9CiAKLSAgICBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MoKSB7IHJldHVybiBtX3RyYWNrczsgfQorICAg
IE1lZGlhU3RyZWFtVHJhY2tMaXN0KiB0cmFja3MoKSB7IHJldHVybiBtX3RyYWNrcy5nZXQoKTsg
fQogCi0gICAgLy8gTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Ok1lZGlhU3RyZWFtQ2xpZW50
IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1FbmRlZCgpOworICAgIHZv
aWQgc3RyZWFtRW5kZWQoKTsKKworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogZGVzY3JpcHRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRvci5nZXQoKTsgfQogCiAgICAgLy8gRXZlbnRU
YXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBNZWRpYVN0cmVhbSogdG9NZWRpYVN0
cmVhbSgpOwpAQCAtNjksMjQgKzY4LDIzIEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVk
PE1lZGlhU3RyZWFtPjo6ZGVyZWY7CiAKIHByb3RlY3RlZDoKLSAgICBNZWRpYVN0cmVhbShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcywgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0pOwor
ICAgIE1lZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4pOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24u
CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotICAgIHVu
c2lnbmVkIHNob3J0IG1fcmVhZHlTdGF0ZTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIG9uRW5kZWQo
KTsKLQogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9p
ZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVu
dFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJn
ZXREYXRhOwogCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OworCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiBtX3RyYWNrczsKKyAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBtX2Rlc2NyaXB0b3I7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFT
dHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5jcHAK
aW5kZXggYmU0Y2JmNy4uZTQ2MjcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01l
ZGlhU3RyZWFtVHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRy
YWNrLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3Nv
biBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjksMTYgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBpZCwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsKQorUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3IsIHNpemVfdCB0cmFja0luZGV4
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1UcmFjayhpZCwga2luZCwg
bGFiZWwpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2soc3RyZWFt
RGVzY3JpcHRvciwgdHJhY2tJbmRleCkpOwogfQogCi1NZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0
cmVhbVRyYWNrKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3Ry
aW5nJiBsYWJlbCkKLSAgICA6IG1faWQoaWQpCi0gICAgLCBtX2tpbmQoa2luZCkKLSAgICAsIG1f
bGFiZWwobGFiZWwpCi0gICAgLCBtX2VuYWJsZWQodHJ1ZSkKK01lZGlhU3RyZWFtVHJhY2s6Ok1l
ZGlhU3RyZWFtVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbURl
c2NyaXB0b3IsIHNpemVfdCB0cmFja0luZGV4KQorICAgIDogbV9zdHJlYW1EZXNjcmlwdG9yKHN0
cmVhbURlc2NyaXB0b3IpCisgICAgLCBtX3RyYWNrSW5kZXgodHJhY2tJbmRleCkKIHsKIH0KIApA
QCAtNDYsMjcgKzQ1LDM5IEBAIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkK
IHsKIH0KIAotY29uc3QgU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKK1N0
cmluZyBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9raW5k
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBhdWRpb0tpbmQsICgiYXVk
aW8iKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHZpZGVvS2luZCwg
KCJ2aWRlbyIpKTsKKworICAgIHN3aXRjaCAobV9zdHJlYW1EZXNjcmlwdG9yLT5jb21wb25lbnQo
bV90cmFja0luZGV4KS0+c291cmNlKCktPnR5cGUoKSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1T
b3VyY2U6OlR5cGVBdWRpbzoKKyAgICAgICAgcmV0dXJuIGF1ZGlvS2luZDsKKyAgICBjYXNlIE1l
ZGlhU3RyZWFtU291cmNlOjpUeXBlVmlkZW86CisgICAgICAgIHJldHVybiB2aWRlb0tpbmQ7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWNvbnN0IFN0cmluZyYgTWVk
aWFTdHJlYW1UcmFjazo6bGFiZWwoKSBjb25zdAorU3RyaW5nIE1lZGlhU3RyZWFtVHJhY2s6Omxh
YmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9sYWJlbDsKKyAgICByZXR1cm4gbV9zdHJlYW1E
ZXNjcmlwdG9yLT5jb21wb25lbnQobV90cmFja0luZGV4KS0+c291cmNlKCktPm5hbWUoKTsKIH0K
IAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjplbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9lbmFibGVkOworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0b3ItPmNvbXBvbmVudChtX3Ry
YWNrSW5kZXgpLT5lbmFibGVkKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0RW5h
YmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAo
ZW5hYmxlZCA9PSBtX3N0cmVhbURlc2NyaXB0b3ItPmNvbXBvbmVudChtX3RyYWNrSW5kZXgpLT5l
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5zZXRNZWRp
YVN0cmVhbVRyYWNrRW5hYmxlZChtX2lkLCBlbmFibGVkKTsKKyAgICBtX3N0cmVhbURlc2NyaXB0
b3ItPmNvbXBvbmVudChtX3RyYWNrSW5kZXgpLT5zZXRFbmFibGVkKGVuYWJsZWQpOworCisgICAg
Ly8gRklYTUU6IHRlbGwgdGhlIHBsYXRmb3JtIHRoYXQgdGhlIHRyYWNrIHdhcyBlbmFibGVkL2Rp
c2FibGVkCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFT
dHJlYW1UcmFjay5oCmluZGV4IDMyMjJkYzcuLjM2MGYzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01l
ZGlhU3RyZWFtVHJhY2suaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsMzYgKzI4LDMzIEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBwdWJsaWMgUmVmQ291bnRl
ZDxNZWRpYVN0cmVhbVRyYWNrPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OkdlbmVyaWNDbGllbnQgeworY2xhc3MgTWVkaWFTdHJl
YW1UcmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2s+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBpZCwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbURlc2NyaXB0b3I+LCBzaXplX3QgdHJhY2tJbmRleCk7CiAgICAgdmlydHVhbCB+TWVk
aWFTdHJlYW1UcmFjaygpOwogCi0gICAgY29uc3QgU3RyaW5nJiBraW5kKCkgY29uc3Q7Ci0gICAg
Y29uc3QgU3RyaW5nJiBsYWJlbCgpIGNvbnN0OworICAgIFN0cmluZyBraW5kKCkgY29uc3Q7Cisg
ICAgU3RyaW5nIGxhYmVsKCkgY29uc3Q7CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9v
bCk7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1UcmFjayhjb25zdCBTdHJpbmcmIGlkLCBj
b25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIE1lZGlhU3RyZWFt
VHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+LCBzaXplX3QgdHJhY2tJbmRl
eCk7CiAKLSAgICBTdHJpbmcgbV9pZDsKLSAgICBTdHJpbmcgbV9raW5kOwotICAgIFN0cmluZyBt
X2xhYmVsOwotICAgIGJvb2wgbV9lbmFibGVkOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IG1fc3RyZWFtRGVzY3JpcHRvcjsKKyAgICBjb25zdCBzaXplX3QgbV90cmFja0luZGV4
OwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+ID4gVHJhY2tW
ZWN0b3I7Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gPiBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZWRpYVN0cmVhbVRyYWNrLmlkbAppbmRleCAyOTg3NWFhLi43OTg3NTk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suaWRsCkBAIC0yNyw5ICsyNyw5IEBAIG1vZHVs
ZSBjb3JlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1NRURJQV9TVFJF
QU0sCiAgICAgXSBNZWRpYVN0cmVhbVRyYWNrIHsKLSAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcga2luZDsKLSAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFiZWw7
Ci0gICAgICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBlbmFibGVkOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtpbmQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbGFiZWw7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGVu
YWJsZWQ7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlh
U3RyZWFtVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNr
TGlzdC5jcHAKaW5kZXggNmZjYzY3Yy4uOTJiZjBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiBNZWRpYVN0cmVhbVRyYWNr
TGlzdDo6Y3JlYXRlKGNvbnN0IFRyYWNrVmVjdG9yJiB0cmFja3MpCitQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tMaXN0PiBNZWRpYVN0cmVhbVRyYWNrTGlzdDo6Y3JlYXRlKGNvbnN0IE1lZGlh
U3RyZWFtVHJhY2tWZWN0b3ImIHRyYWNrVmVjdG9yKQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVkaWFTdHJlYW1UcmFja0xpc3QodHJhY2tzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZWRpYVN0cmVhbVRyYWNrTGlzdCh0cmFja1ZlY3RvcikpOwogfQogCi1NZWRpYVN0cmVhbVRy
YWNrTGlzdDo6TWVkaWFTdHJlYW1UcmFja0xpc3QoY29uc3QgVHJhY2tWZWN0b3ImIHRyYWNrcykK
LSAgICA6IG1fdHJhY2tzKHRyYWNrcykKK01lZGlhU3RyZWFtVHJhY2tMaXN0OjpNZWRpYVN0cmVh
bVRyYWNrTGlzdChjb25zdCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yJiB0cmFja1ZlY3RvcikKKyAg
ICA6IG1fdHJhY2tWZWN0b3IodHJhY2tWZWN0b3IpCiB7CiB9CiAKQEAgLTQ1LDE1ICs0NiwxMyBA
QCBNZWRpYVN0cmVhbVRyYWNrTGlzdDo6fk1lZGlhU3RyZWFtVHJhY2tMaXN0KCkKIAogdW5zaWdu
ZWQgTWVkaWFTdHJlYW1UcmFja0xpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
dHJhY2tzLnNpemUoKTsKKyAgICByZXR1cm4gbV90cmFja1ZlY3Rvci5zaXplKCk7CiB9CiAKLVBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFTdHJlYW1UcmFja0xpc3Q6Oml0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CitNZWRpYVN0cmVhbVRyYWNrKiBNZWRpYVN0cmVhbVRyYWNrTGlz
dDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBpZiAoaW5kZXggPCBtX3RyYWNr
cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX3RyYWNrcy5hdChpbmRleCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPigpOworICAgIEFTU0VS
VChpbmRleCA8IGxlbmd0aCgpKTsKKyAgICByZXR1cm4gbV90cmFja1ZlY3RvcltpbmRleF0uZ2V0
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlh
U3RyZWFtVHJhY2tMaXN0LmgKaW5kZXggMWVmZTZhZS4uNGQ2MWY4NWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5oCkBAIC0yOCwyOCArMjgsMjIgQEAKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFjay5oIgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVk
aWFTdHJlYW1UcmFja0xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrTGlz
dD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0
PiBjcmVhdGUoY29uc3QgVHJhY2tWZWN0b3ImIG1fdHJhY2tzKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tW
ZWN0b3ImKTsKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrTGlzdCgpOwogCiAgICAgLy8g
RE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBNZWRpYVN0cmVhbVRyYWNrTGlzdAogICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4g
aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFzc29jaWF0ZVN0cmVhbShj
b25zdCBTdHJpbmcmIGxhYmVsKSB7IG1fYXNzb2NpYXRlZFN0cmVhbUxhYmVsID0gbGFiZWw7IH0K
KyAgICBNZWRpYVN0cmVhbVRyYWNrKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25zdCBUcmFja1ZlY3RvciYgbV90cmFj
a3MpOworICAgIE1lZGlhU3RyZWFtVHJhY2tMaXN0KGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tWZWN0
b3ImKTsKIAotICAgIFRyYWNrVmVjdG9yIG1fdHJhY2tzOwotICAgIFN0cmluZyBtX2Fzc29jaWF0
ZWRTdHJlYW1MYWJlbDsKKyAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIG1fdHJhY2tWZWN0b3I7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0
aW9uLmNwcAppbmRleCBkN2ZhMjAxLi5hY2ExZDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTEyOSw4ICsxMjksNyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjphZGRT
dHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtLCBFeGNlcHRpb25Db2RlJgog
CiAgICAgbV9sb2NhbFN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOwogCi0gICAgLy8gRklYTUU6IGdl
dCBmcm9tIHN0cmVhbS0+ZGVzY3JpcHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRw
Oi8vd2Via2l0Lm9yZy9iLzY4NDY0Ci0gICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1E
ZXNjcmlwdG9yID0gMDsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0
b3IgPSBzdHJlYW0tPmRlc2NyaXB0b3IoKTsKICAgICBzaXplX3QgaSA9IG1fcGVuZGluZ1JlbW92
ZVN0cmVhbXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsKICAgICBpZiAoaSAhPSBub3RGb3VuZCkg
ewogICAgICAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLnJlbW92ZShpKTsKQEAgLTE1Niw4ICsx
NTUsNyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0qIHN0
cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICBtX2xvY2FsU3RyZWFtcy0+cmVtb3ZlKHN0
cmVhbSk7CiAKLSAgICAvLyBGSVhNRTogZ2V0IGZyb20gc3RyZWFtLT5kZXNjcmlwdG9yKCkgd2hl
biBpdCdzIGF2YWlsYWJsZSwgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjg0NjQKLSAgICBNZWRp
YVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IgPSAwOworICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IHN0cmVhbS0+ZGVzY3JpcHRvcigpOwogICAg
IHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3RyZWFtcy5maW5kKHN0cmVhbURlc2NyaXB0b3IpOwog
ICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMucmVt
b3ZlKGkpOwpAQCAtMjE1LDggKzIxMyw3IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0
cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1ECiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJ
WE1FOiBjcmVhdGUgYSBuZXcgTWVkaWFTdHJlYW0gZnJvbSB0aGUgc3RyZWFtRGVzY3JpcHRvciBv
bmNlIGl0J3MgcG9zc2libGUsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0Ci0gICAgUmVm
UHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSAwOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3Ry
ZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0cmVh
bURlc2NyaXB0b3IpOwogICAgIG1fcmVtb3RlU3RyZWFtcy0+YXBwZW5kKHN0cmVhbSk7CiAKICAg
ICBkaXNwYXRjaEV2ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWRk
c3RyZWFtRXZlbnQsIGZhbHNlLCBmYWxzZSwgc3RyZWFtLnJlbGVhc2UoKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCmluZGV4IDBmYzZlNWYuLmFmOTA5NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKQEAgLTQ2LDggKzQ2LDYgQEAgcHVi
bGljOgogICAgIC8vIE1lZGlhU3RyZWFtIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgbWVk
aWFTdHJlYW1EZXN0cm95ZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3RyZWFt
KGludCByZXF1ZXN0SWQsIEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0o
Y29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRp
YVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkg
PSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1DbGllbnQoKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcAppbmRleCBj
ODg1NTJmLi5kNGUzMDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNv
bnRyb2xsZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
IAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFTdHJlYW1UcmFja0xpc3QuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODEsMTYgKzgwLDYgQEAgdm9pZCBNZWRpYVN0cmVhbUNv
bnRyb2xsZXI6OnVucmVnaXN0ZXJGcmFtZUNvbnRyb2xsZXIoTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIKIAogICAgIGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ID0gZnJhbWVSZXF1ZXN0
cy5iZWdpbigpOyBpdCAhPSBmcmFtZVJlcXVlc3RzLmVuZCgpOyArK2l0KQogICAgICAgICBtX3Jl
cXVlc3RzLnJlbW92ZSgqaXQpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gZnJhbWVTdHJlYW1zOwot
ICAgIGZvciAoU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IG1fc3RyZWFtcy5iZWdpbigpOyBpdCAh
PSBtX3N0cmVhbXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGlmIChpdC0+c2Vjb25kID09IGZyYW1l
Q29udHJvbGxlcikKLSAgICAgICAgICAgIGZyYW1lU3RyZWFtcy5hcHBlbmQoaXQtPmZpcnN0KTsK
LQotICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gZnJhbWVTdHJlYW1zLmJl
Z2luKCk7IGl0ICE9IGZyYW1lU3RyZWFtcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9zdHJlYW1z
LnJlbW92ZSgqaXQpOwotCi0gICAgLy8gRklYTUU6IEFkZCB1bnJlZ2lzdGVyIGZ1bmN0aW9uYWxp
dHkgZm9yIHBlZXIgY29ubmVjdGlvbiBvYmplY3RzLgogfQogCiBpbnQgTWVkaWFTdHJlYW1Db250
cm9sbGVyOjpyZWdpc3RlclJlcXVlc3QoaW50IGxvY2FsSWQsIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIpCkBAIC0xMDEsMTMgKzkwLDYgQEAgaW50IE1lZGlhU3Ry
ZWFtQ29udHJvbGxlcjo6cmVnaXN0ZXJSZXF1ZXN0KGludCBsb2NhbElkLCBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGwKICAgICByZXR1cm4gbV9uZXh0R2xvYmFsUmVxdWVzdElkKys7CiB9CiAKLXZv
aWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpyZWdpc3RlclN0cmVhbShjb25zdCBTdHJpbmcmIHN0
cmVhbUxhYmVsLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyKQot
ewotICAgIEFTU0VSVChmcmFtZUNvbnRyb2xsZXIpOwotICAgIEFTU0VSVCghbV9zdHJlYW1zLmNv
bnRhaW5zKHN0cmVhbUxhYmVsKSk7Ci0gICAgbV9zdHJlYW1zLmFkZChzdHJlYW1MYWJlbCwgZnJh
bWVDb250cm9sbGVyKTsKLX0KLQogdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmdlbmVyYXRl
U3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBs
b2NhbElkLCBHZW5lcmF0ZVN0cmVhbU9wdGlvbkZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwpAQCAt
MTE1LDI1ICs5NywxNCBAQCB2b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6Z2VuZXJhdGVTdHJl
YW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udAogICAgIG1fY2xpZW50LT5n
ZW5lcmF0ZVN0cmVhbShjb250cm9sbGVyUmVxdWVzdElkLCBmbGFncywgc2VjdXJpdHlPcmlnaW4p
OwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RvcEdlbmVyYXRlZFN0cmVhbShj
b25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIG1fY2xpZW50LT5zdG9wR2VuZXJhdGVk
U3RyZWFtKHN0cmVhbUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnNl
dE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFi
bGVkKQotewotICAgIG1fY2xpZW50LT5zZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZCh0cmFja0lk
LCBlbmFibGVkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVy
YXRlZChpbnQgY29udHJvbGxlclJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQordm9pZCBNZWRpYVN0cmVh
bUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRlZChpbnQgY29udHJvbGxlclJlcXVlc3RJZCwgY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZXMpCiB7CiAgICAgLy8gRG9uJ3QgYXNz
ZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkIHdo
aWxlIHRoZSByZXF1ZXN0IHJlcGx5IHdhcyBjb21pbmcgYmFjay4KICAgICBpZiAobV9yZXF1ZXN0
cy5jb250YWlucyhjb250cm9sbGVyUmVxdWVzdElkKSkgewogICAgICAgICBjb25zdCBSZXF1ZXN0
JiByZXF1ZXN0ID0gbV9yZXF1ZXN0cy5nZXQoY29udHJvbGxlclJlcXVlc3RJZCk7Ci0gICAgICAg
IHJlZ2lzdGVyU3RyZWFtKHN0cmVhbUxhYmVsLCByZXF1ZXN0LmZyYW1lQ29udHJvbGxlcigpKTsK
ICAgICAgICAgbV9yZXF1ZXN0cy5yZW1vdmUoY29udHJvbGxlclJlcXVlc3RJZCk7CiAgICAgICAg
IEFTU0VSVChyZXF1ZXN0LmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcmVxdWVzdC5mcmFt
ZUNvbnRyb2xsZXIoKS0+c3RyZWFtR2VuZXJhdGVkKHJlcXVlc3QubG9jYWxJZCgpLCBzdHJlYW1M
YWJlbCwgdHJhY2tzKTsKKyAgICAgICAgcmVxdWVzdC5mcmFtZUNvbnRyb2xsZXIoKS0+c3RyZWFt
R2VuZXJhdGVkKHJlcXVlc3QubG9jYWxJZCgpLCBzb3VyY2VzKTsKICAgICB9CiB9CiAKQEAgLTE0
NywxMyArMTE4LDYgQEAgdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRp
b25GYWlsZWQoaW50IGNvbnRyb2xsZXJSZXF1ZXN0SWQsIE5hdmkKICAgICB9CiB9CiAKLXZvaWQg
TWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIg
Y2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQgYnkgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQuCi0gICAg
aWYgKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW1MYWJlbCkpCi0gICAgICAgIG1fc3RyZWFtcy5n
ZXQoc3RyZWFtTGFiZWwpLT5zdHJlYW1GYWlsZWQoc3RyZWFtTGFiZWwpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmgKaW5kZXggMTBhYzRjZS4uNDg5
MzA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtQ2xpZW50LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM4LDcgKzM5LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBNZWRpYVN0cmVhbUNsaWVudDsKIGNsYXNzIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyOwotY2xhc3MgTWVkaWFTdHJlYW1UcmFja0xpc3Q7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIAogY2xhc3MgTWVkaWFTdHJlYW1Db250cm9sbGVyIHsKQEAgLTUxLDI1ICs1MSwx
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bnJlZ2lzdGVyRnJhbWVDb250cm9sbGVyKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKik7CiAKICAgICB2b2lkIGdlbmVyYXRlU3RyZWFtKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IHJlcXVlc3RJZCwgR2VuZXJhdGVTdHJlYW1PcHRpb25G
bGFncywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOwotICAgIHZvaWQgc3RvcEdlbmVyYXRl
ZFN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKIAotICAgIC8vIEVuYWJsZS9kaXNh
YmxlIGFuIHRyYWNrLgotICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoY29uc3Qg
U3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwotCi0gICAgdm9pZCBzdHJlYW1HZW5lcmF0
ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKKyAgICB2b2lkIHN0cmVhbUdlbmVyYXRlZChp
bnQgcmVxdWVzdElkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlcyk7CiAg
ICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCByZXF1ZXN0SWQsIE5hdmlnYXRvclVz
ZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwotICAgIHZvaWQgc3RyZWFtRmFpbGVkKGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpOwogCiBwcml2YXRlOgogICAgIGludCByZWdpc3RlclJlcXVlc3Qo
aW50IGxvY2FsUmVxdWVzdElkLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciopOwotICAgIHZv
aWQgcmVnaXN0ZXJTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIqKTsKIAogICAgIGNsYXNzIFJlcXVlc3Q7CiAgICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgUmVxdWVzdD4gUmVxdWVzdE1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcio+IFN0cmVhbU1hcDsKIAogICAgIFJlcXVlc3RN
YXAgbV9yZXF1ZXN0czsKLSAgICBTdHJlYW1NYXAgbV9zdHJlYW1zOwogCiAgICAgTWVkaWFTdHJl
YW1DbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX25leHRHbG9iYWxSZXF1ZXN0SWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDZmNmVjZTcuLmU0ZWY4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJMb2NhbE1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0xpc3QuaCIKICNp
bmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTmF2
aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAt
NDgsOCArNDcsNiBAQCBwdWJsaWM6CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlzR2VuZXJhdGVTdHJlYW1SZXF1ZXN0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWNvcmRlZERhdGFSZXF1ZXN0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaWduYWxpbmdS
ZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYm9y
dCgpID0gMDsKIApAQCAtMTE1LDI0ICsxMTIsNiBAQCB2b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyOjpSZXF1ZXN0TWFwOjphYm9ydEFsbCgpCiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OkNsaWVudE1hcEJhc2U8
VD46OnVucmVnaXN0ZXJBbGwoKQotewotICAgIHdoaWxlICghdGhpcy0+aXNFbXB0eSgpKSB7Ci0g
ICAgICAgIFQga2V5ID0gdGhpcy0+YmVnaW4oKS0+Zmlyc3Q7Ci0gICAgICAgIC8vIHVucmVnaXN0
ZXIgc2hvdWxkIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBtYXAuCi0gICAgICAgIHRoaXMt
PmJlZ2luKCktPnNlY29uZC0+dW5yZWdpc3RlcigpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGtl
eSwgIXRoaXMtPmNvbnRhaW5zKGtleSkpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpDbGllbnRNYXBCYXNlPFQ+Ojpk
ZXRhY2hFbWJlZGRlcigpCi17Ci0gICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBp
dCA9IHRoaXMtPmJlZ2luKCk7IGl0ICE9IHRoaXMtPmVuZCgpOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5kZXRhY2hFbWJlZGRlcigpOwotfQotCiBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cjo6TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFt
ZShmcmFtZSkKICAgICAsIG1faXNJbkRldGFjaGVkU3RhdGUoZmFsc2UpCkBAIC0xNjAsMzMgKzEz
OSw2IEBAIE1lZGlhU3RyZWFtQ29udHJvbGxlciogTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
OnBhZ2VDb250cm9sbGVyKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZSAmJiBtX2ZyYW1lLT5w
YWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPm1lZGlhU3RyZWFtQ29udHJvbGxlcigpIDogMDsKIH0K
IAotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6dW5yZWdpc3RlcihNZWRpYVN0cmVh
bUNsaWVudCogY2xpZW50KQotewotICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMoY2xpZW50
LT5jbGllbnRJZCgpKSk7Ci0KLSAgICAvLyBBc3N1bWluZyB3ZSBzaG91bGQgc3RvcCBhbnkgbGl2
ZSBzdHJlYW1zIHdoZW4gbG9zaW5nIGFjY2VzcyB0byB0aGUgZW1iZWRkZXIuCi0gICAgaWYgKGNs
aWVudC0+aXNMb2NhbE1lZGlhU3RyZWFtKCkpIHsKLSAgICAgICAgTG9jYWxNZWRpYVN0cmVhbSog
c3RyZWFtID0gc3RhdGljX2Nhc3Q8TG9jYWxNZWRpYVN0cmVhbSo+KGNsaWVudCk7Ci0gICAgICAg
IGlmIChzdHJlYW0tPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVN0cmVhbTo6TElWRSkKLSAgICAgICAg
ICAgIHN0b3BHZW5lcmF0ZWRTdHJlYW0oc3RyZWFtLT5sYWJlbCgpKTsKLSAgICB9Ci0KLSAgICBt
X3N0cmVhbXMucmVtb3ZlKGNsaWVudC0+Y2xpZW50SWQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXI6OnVucmVnaXN0ZXIoR2VuZXJpY0NsaWVudCogY2xpZW50KQotewot
ICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50LT5jbGllbnRJZCgpKSk7Ci0gICAg
bV9jbGllbnRzLnJlbW92ZShjbGllbnQtPmNsaWVudElkKCkpOwotfQotCi1NZWRpYVN0cmVhbSog
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmdldFN0cmVhbUZyb21MYWJlbChjb25zdCBTdHJp
bmcmIGxhYmVsKSBjb25zdAotewotICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMobGFiZWwp
KTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmdldChsYWJlbCktPmlzTWVkaWFTdHJlYW0oKSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtKj4obV9zdHJlYW1zLmdldChsYWJlbCkp
OwotfQotCiB2b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjplbnRlckRldGFjaGVkU3Rh
dGUoKQogewogICAgIGlmIChtX2lzSW5EZXRhY2hlZFN0YXRlKSB7CkBAIC0xOTUsOCArMTQ3LDYg
QEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZW50ZXJEZXRhY2hlZFN0YXRlKCkK
ICAgICB9CiAKICAgICBtX3JlcXVlc3RzLmFib3J0QWxsKCk7Ci0gICAgbV9zdHJlYW1zLmRldGFj
aEVtYmVkZGVyKCk7Ci0gICAgbV9jbGllbnRzLmRldGFjaEVtYmVkZGVyKCk7CiAgICAgbV9pc0lu
RGV0YWNoZWRTdGF0ZSA9IHRydWU7CiB9CiAKQEAgLTIyNCw4ICsxNzQsNiBAQCB2b2lkIE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyOjpkaXNjb25uZWN0RnJhbWUoKQogICAgIGRpc2Nvbm5lY3RQ
YWdlKCk7CiAKICAgICBBU1NFUlQobV9yZXF1ZXN0cy5pc0VtcHR5KCkpOwotICAgIG1fc3RyZWFt
cy51bnJlZ2lzdGVyQWxsKCk7Ci0gICAgbV9jbGllbnRzLnVucmVnaXN0ZXJBbGwoKTsKIAogICAg
IG1fZnJhbWUgPSAwOwogfQpAQCAtMjk4LDQzICsyNDYsMTcgQEAgdm9pZCBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlcjo6Z2VuZXJhdGVTdHJlYW0oY29uc3QgU3RyaW5nJiBvcHRpb25zLAogICAg
IHBhZ2VDb250cm9sbGVyKCktPmdlbmVyYXRlU3RyZWFtKHRoaXMsIHJlcXVlc3RJZCwgZmxhZ3Ms
IHNlY3VyaXR5T3JpZ2luKCkpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
OjpzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAg
QVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW1MYWJlbCkpOwotICAgIEFTU0VSVChtX3N0
cmVhbXMuZ2V0KHN0cmVhbUxhYmVsKS0+aXNMb2NhbE1lZGlhU3RyZWFtKCkpOwotCi0gICAgaWYg
KGlzQ2xpZW50QXZhaWxhYmxlKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPnN0b3BHZW5l
cmF0ZWRTdHJlYW0oc3RyZWFtTGFiZWwpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyOjpzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQs
IGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoaXNDbGllbnRBdmFpbGFibGUoKSkKLSAgICAgICAg
cGFnZUNvbnRyb2xsZXIoKS0+c2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQodHJhY2tJZCwgZW5h
YmxlZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVy
YXRlZChpbnQgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tMaXN0PiB0cmFja3NQYXJhbSkKK3ZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXI6OnN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVzdElkLCBjb25zdCBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgc291cmNlcykKIHsKICAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIHJl
cXVlc3QgY2FuIGhhdmUgYmVlbiBhYm9ydGVkIGFzIGEgcmVzdWx0IG9mIGVtYmVkZGVyIGRldGFj
aG1lbnQuCiAgICAgaWYgKCFtX3JlcXVlc3RzLmNvbnRhaW5zKHJlcXVlc3RJZCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEFTU0VSVChtX3JlcXVlc3RzLmdldChyZXF1ZXN0SWQpLT5pc0dlbmVy
YXRlU3RyZWFtUmVxdWVzdCgpKTsKLSAgICBBU1NFUlQoIWxhYmVsLmlzTnVsbCgpKTsKLSAgICBB
U1NFUlQodHJhY2tzUGFyYW0pOwotCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0
cmFja3MgPSB0cmFja3NQYXJhbTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0cmFj
a3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaW50IHRyYWNrQ2xpZW50SWQgPSBtX2NsaWVu
dHMuZ2V0TmV4dElkKCk7Ci0gICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjayA9
IHRyYWNrcy0+aXRlbShpKTsKLSAgICAgICAgdHJhY2stPmFzc29jaWF0ZUZyYW1lQ29udHJvbGxl
cih0aGlzLCB0cmFja0NsaWVudElkKTsKLSAgICAgICAgbV9jbGllbnRzLmFkZCh0cmFja0NsaWVu
dElkLCB0cmFjay5nZXQoKSk7Ci0gICAgfQorICAgIEFTU0VSVChzb3VyY2VzKTsKIAogICAgIFJl
ZlB0cjxHZW5lcmF0ZVN0cmVhbVJlcXVlc3Q+IHN0cmVhbVJlcXVlc3QgPSBzdGF0aWNfY2FzdDxH
ZW5lcmF0ZVN0cmVhbVJlcXVlc3QqPihtX3JlcXVlc3RzLmdldChyZXF1ZXN0SWQpLmdldCgpKTsK
LSAgICBSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gZ2VuZXJhdGVkU3RyZWFtID0gTG9jYWxNZWRp
YVN0cmVhbTo6Y3JlYXRlKHRoaXMsIGxhYmVsLCB0cmFja3MucmVsZWFzZSgpKTsKLSAgICBtX3N0
cmVhbXMuYWRkKGxhYmVsLCBnZW5lcmF0ZWRTdHJlYW0uZ2V0KCkpOworICAgIFJlZlB0cjxMb2Nh
bE1lZGlhU3RyZWFtPiBnZW5lcmF0ZWRTdHJlYW0gPSBMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzb3VyY2VzKTsKICAgICBtX3JlcXVlc3RzLnJlbW92
ZShyZXF1ZXN0SWQpOwogICAgIHN0cmVhbVJlcXVlc3QtPnN1Y2Nlc3NDYWxsYmFjaygpLT5oYW5k
bGVFdmVudChnZW5lcmF0ZWRTdHJlYW0uZ2V0KCkpOwogfQpAQCAtMzU2LDExICsyNzgsNiBAQCB2
b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGlu
dCByZXF1ZXN0SWQsIE5hdmlnYXRvcgogICAgIH0KIH0KIAotdm9pZCBNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlcjo6c3RyZWFtRmFpbGVkKGNvbnN0IFN0cmluZyYgbGFiZWwpCi17Ci0gICAgZ2V0
U3RyZWFtRnJvbUxhYmVsKGxhYmVsKS0+c3RyZWFtRW5kZWQoKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaAppbmRleCA2YTM5YWZl
Li5mOTEyNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVh
bVNvdXJjZS5oIgogI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYUVycm9yLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzgsMTA2ICsz
OSwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKLWNsYXNzIExvY2Fs
TWVkaWFTdHJlYW07Ci1jbGFzcyBNZWRpYVN0cmVhbTsKIGNsYXNzIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2tMaXN0OwogY2xhc3MgTmF2aWdhdG9yVXNlck1l
ZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFj
azsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2Vj
dXJpdHlPcmlnaW47Ci1jbGFzcyBTaWduYWxpbmdDYWxsYmFjazsKIAogY2xhc3MgTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKTsKIHB1YmxpYzoKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSWRUeXBl
PgotICAgIGNsYXNzIENsaWVudEJhc2UgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
bGllbnRCYXNlKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENsaWVudEJhc2UoKSA6IG1fZnJhbWVD
b250cm9sbGVyKDApLCBtX2NsaWVudElkKDApIHsgfQotCi0gICAgICAgIENsaWVudEJhc2UoTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgSWRUeXBlJiBp
ZCkKLSAgICAgICAgICAgIDogbV9mcmFtZUNvbnRyb2xsZXIoZnJhbWVDb250cm9sbGVyKQotICAg
ICAgICAgICAgLCBtX2NsaWVudElkKGlkKSB7IH0KLQotICAgICAgICB2aXJ0dWFsIH5DbGllbnRC
YXNlKCkgeyB9Ci0KLSAgICAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIG1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNvbnRyb2xsZXI7IH0K
LSAgICAgICAgY29uc3QgSWRUeXBlJiBjbGllbnRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50
SWQ7IH0KLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYVN0cmVhbSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHZW5lcmljQ2xp
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgICAgICAvLyBDYWxsZWQgd2hlbiB0
aGUgZnJhbWUgY29udHJvbGxlciBpcyBiZWluZyBkaXNjb25uZWN0ZWQgdG8gdGhlIE1lZGlhU3Ry
ZWFtQ2xpZW50IGVtYmVkZGVyLgotICAgICAgICAvLyBDbGllbnRzIHNob3VsZCBvdmVycmlkZSB0
aGlzIHRvIHNlbmQgYW55IHJlcXVpcmVkIHNodXRkb3duIG1lc3NhZ2VzLgotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoRW1iZWRkZXIoKSB7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAg
Ly8gVXNlZCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvcHRpb25hbGx5IGFzc29jaWF0ZWQgdG8gdGhl
IGZyYW1lIGNvbnRyb2xsZXIgYWZ0ZXIgY29uc3RydWN0aW9uLCBsaWtlIHRoZSBNZWRpYVN0cmVh
bVRyYWNrcy4KLSAgICAgICAgdm9pZCBhc3NvY2lhdGVGcmFtZUNvbnRyb2xsZXIoTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgSWRUeXBlJiBpZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lQ29udHJvbGxlciAmJiAhbV9jbGll
bnRJZCk7Ci0gICAgICAgICAgICBtX2ZyYW1lQ29udHJvbGxlciA9IGZyYW1lQ29udHJvbGxlcjsK
LSAgICAgICAgICAgIG1fY2xpZW50SWQgPSBpZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF2
b2lkcyByZXBlYXRpbmcgdGhlIHNhbWUgY29kZSBpbiB0aGUgdW5yZWdpc3RlciBtZXRob2Qgb2Yg
ZWFjaCBkZXJpdmVkIGNsYXNzLgotICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlIHRo
ZSBjb250cm9sbGVyJ3MgdW5yZWdpc3RlciBtZXRob2RzIG1ha2UgdXNlIG9mIHRoZSBpc09iamVj
dCB2aXJ0dWFscywKLSAgICAgICAgLy8gYW5kIHRoZSB1bnJlZ2lzdHJhdGlvbiBjYW4gYmUgdHJp
Z2dlcmVkIGVpdGhlciBieSB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgY2xpZW50IG9yIGJ5IHRoZSBk
aXNjb25uZWN0aW9uIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENs
aWVudFR5cGU+Ci0gICAgICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudChDbGllbnRUeXBlKiBjbGll
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRyb2xsZXIpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX2ZyYW1lQ29udHJvbGxlci0+dW5y
ZWdpc3RlcihzdGF0aWNfY2FzdDxDbGllbnRUeXBlKj4oY2xpZW50KSk7Ci0gICAgICAgICAgICBt
X2ZyYW1lQ29udHJvbGxlciA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
dW5yZWdpc3RlcigpID0gMDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyOwotCi0gICAgICAgIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBtX2ZyYW1l
Q29udHJvbGxlcjsKLSAgICAgICAgSWRUeXBlIG1fY2xpZW50SWQ7Ci0gICAgfTsKLQotICAgIGNs
YXNzIE1lZGlhU3RyZWFtQ2xpZW50IDogcHVibGljIENsaWVudEJhc2U8U3RyaW5nPiB7Ci0gICAg
cHVibGljOgotICAgICAgICBNZWRpYVN0cmVhbUNsaWVudChNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlciogZnJhbWVDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBib29sIGlzTG9jYWxN
ZWRpYVN0cmVhbSkKLSAgICAgICAgICAgIDogQ2xpZW50QmFzZTxTdHJpbmc+KGZyYW1lQ29udHJv
bGxlciwgbGFiZWwpCi0gICAgICAgICAgICAsIG1faXNMb2NhbE1lZGlhU3RyZWFtKGlzTG9jYWxN
ZWRpYVN0cmVhbSkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1DbGllbnQoKSB7
IHVucmVnaXN0ZXIoKTsgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhU3RyZWFtKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIC8vIEFjY2Vzc2VkIGJ5IHRoZSBkZXN0
cnVjdG9yLgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFtKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0xvY2FsTWVkaWFTdHJlYW07IH0KLQotICAgICAgICAvLyBTdHJlYW0gaGFz
IGVuZGVkIGZvciBzb21lIGV4dGVybmFsIHJlYXNvbi4KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbUVuZGVkKCkgPSAwOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIHVu
cmVnaXN0ZXIoKSB7IHVucmVnaXN0ZXJDbGllbnQodGhpcyk7IH0KLSAgICAgICAgYm9vbCBtX2lz
TG9jYWxNZWRpYVN0cmVhbTsKLSAgICB9OwotCi0gICAgLy8gR2VuZXJpYyBjbGllbnRzIGFyZSBv
YmplY3RzIHRoYXQgcmVxdWlyZSBhY2Nlc3MgdG8gdGhlIGZyYW1lIGNvbnRyb2xsZXIgYnV0IGRv
bid0IGhhdmUgYSBnbG9iYWwgaWQgKGxpa2Ugc3RyZWFtcyBkbykKLSAgICAvLyBvciBuZWVkIHRv
IHJlY2VpdmUgYW55IG1lc3NhZ2VzIGZyb20gdGhlIGVtYmVkZGVyIGNsaWVudC4KLSAgICBjbGFz
cyBHZW5lcmljQ2xpZW50IDogcHVibGljIENsaWVudEJhc2U8aW50PiB7Ci0gICAgcHVibGljOgot
ICAgICAgICBHZW5lcmljQ2xpZW50KCkgeyB9Ci0gICAgICAgIEdlbmVyaWNDbGllbnQoTWVkaWFT
dHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGlkKSA6IENsaWVudEJh
c2U8aW50PihmcmFtZUNvbnRyb2xsZXIsIGlkKSB7IH0KLSAgICAgICAgdmlydHVhbCB+R2VuZXJp
Y0NsaWVudCgpIHsgdW5yZWdpc3RlcigpOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVy
aWNDbGllbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlcigpIHsgdW5yZWdpc3RlckNsaWVudCh0aGlzKTsgfQot
ICAgIH07Ci0KICAgICBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcihGcmFtZSopOwogICAgIHZp
cnR1YWwgfk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCk7CiAKQEAgLTE1MSwxNCArNjIsMTEg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ3MgcGFyc2VH
ZW5lcmF0ZVN0cmVhbU9wdGlvbnMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBnZW5lcmF0ZVN0
cmVhbShjb25zdCBTdHJpbmcmIG9wdGlvbnMsIFBhc3NSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlh
U3VjY2Vzc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxi
YWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3RvcEdlbmVyYXRlZFN0cmVhbShjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIHNldE1lZGlhU3RyZWFtVHJhY2tFbmFi
bGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFibGVkKTsKIAogICAgIC8vIC0tLSBD
YWxscyBjb21pbmcgYmFjayBmcm9tIHRoZSBjb250cm9sbGVyLiAtLS0gLy8KIAotICAgIHZvaWQg
c3RyZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWws
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7CisgICAgdm9pZCBzdHJl
YW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3Im
IHNvdXJjZXMpOwogICAgIHZvaWQgc3RyZWFtR2VuZXJhdGlvbkZhaWxlZChpbnQgcmVxdWVzdElk
LCBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlKTsKLSAgICB2b2lkIHN0cmVhbUZh
aWxlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBS
ZXF1ZXN0OwpAQCAtMTgwLDM0ICs4OCwxMiBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGFib3J0
QWxsKCk7CiAgICAgfTsKIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJZFR5cGU+Ci0gICAgY2xh
c3MgQ2xpZW50TWFwQmFzZSA6IHB1YmxpYyBIYXNoTWFwPElkVHlwZSwgQ2xpZW50QmFzZTxJZFR5
cGU+KiA+IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xpZW50TWFwQmFzZSk7Ci0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SWRUeXBlLCBDbGllbnRCYXNlPElk
VHlwZT4qID4gTWFwVHlwZTsKLQotICAgICAgICBDbGllbnRNYXBCYXNlKCkgeyB9Ci0gICAgICAg
IHZvaWQgdW5yZWdpc3RlckFsbCgpOwotICAgICAgICB2b2lkIGRldGFjaEVtYmVkZGVyKCk7Ci0g
ICAgfTsKLQotICAgIC8vIFN0cmVhbXMgYXJlIGEgc3BlY2lhbCBjbGFzcyBvZiBjbGllbnRzIHNp
bmNlIHRoZXkgYXJlIGlkZW50aWZpZWQgYnkgYSBnbG9iYWwgbGFiZWwgc3RyaW5nIGluc3RlYWQg
b2YgYW4gaWQuCi0gICAgdHlwZWRlZiBDbGllbnRNYXBCYXNlPFN0cmluZz4gU3RyZWFtTWFwOwot
Ci0gICAgLy8gQWxsIG90aGVyIHR5cGVzIG9mIGNsaWVudHMgdXNlIGF1dG9nZW5lcmF0ZWQgaW50
ZWdlciBpZHMuCi0gICAgY2xhc3MgQ2xpZW50TWFwIDogcHVibGljIElkR2VuZXJhdG9yLCBwdWJs
aWMgQ2xpZW50TWFwQmFzZTxpbnQ+IHsgfTsKLQogICAgIC8vIERldGFjaGVkIGZyb20gYSBwYWdl
LCBhbmQgaGVuY2UgZnJvbSBhIGVtYmVkZGVyIGNsaWVudC4KICAgICB2b2lkIGVudGVyRGV0YWNo
ZWRTdGF0ZSgpOwogCi0gICAgdm9pZCB1bnJlZ2lzdGVyKE1lZGlhU3RyZWFtQ2xpZW50Kik7Ci0g
ICAgdm9pZCB1bnJlZ2lzdGVyKEdlbmVyaWNDbGllbnQqKTsKICAgICBNZWRpYVN0cmVhbUNvbnRy
b2xsZXIqIHBhZ2VDb250cm9sbGVyKCkgY29uc3Q7Ci0gICAgTWVkaWFTdHJlYW0qIGdldFN0cmVh
bUZyb21MYWJlbChjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAgIFJlcXVlc3RNYXAgbV9yZXF1
ZXN0czsKLSAgICBDbGllbnRNYXAgbV9jbGllbnRzOwotICAgIFN0cmVhbU1hcCBtX3N0cmVhbXM7
CiAKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBib29sIG1faXNJbkRldGFjaGVkU3RhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRhNTRmODguLjM4MmYyODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTAtMTMgIEFkYW0gQmVyZ2t2
aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFVwZGF0ZSBNZWRp
YVN0cmVhbSB0byB1c2UgV2ViQ29yZSBwbGF0Zm9ybSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ2NAorCisgICAgICAgIFJlbW92
ZWQgV2ViTWVkaWFTdHJlYW1UcmFjayogc2luY2UgdGhleSB3aWxsIG5vIGxvbmdlciBiZSBuZWVk
ZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmg6IFJlbW92
ZWQuCisgICAgICAgICogcHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2suY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHA6IFJlbW92ZWQuCisKIDIwMTEtMTAt
MTMgIFBlbmcgSHVhbmcgIDxzaGF3bi5wLmh1YW5nQGdtYWlsLmNvbT4KIAogICAgICAgICBbY2hy
b21pdW1dIEFkZCBhIHNlbGVjdGlvbkJvdW5kcygpIG1ldGhvZCB0byBXZWJXaWRnZXQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMDBiM2Y5ZS4uMjA0MjllMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cApAQCAtMjI3LDggKzIyNyw2IEBACiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJNZWRpYVBsYXllci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlh
UGxheWVyQWN0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJD
bGllbnQuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmgn
LAotICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZW51SXRlbUluZm8uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWxDbGllbnQuaCcsCkBAIC01NDksOCArNTQ3LDYgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVudC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9X
ZWJNZWRpYVN0cmVhbVRyYWNrLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVN0
cmVhbVRyYWNrTGlzdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTmFtZWROb2RlTWFw
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOZXR3b3JrU3RhdGVOb3RpZmllci5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmN2IxZmFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDYz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViTWVkaWFTdHJlYW1UcmFja19oCi0j
ZGVmaW5lIFdlYk1lZGlhU3RyZWFtVHJhY2tfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKLX0KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlN0cmluZzsKLQotY2xhc3MgV2ViTWVkaWFTdHJlYW1U
cmFjayB7Ci1wdWJsaWM6Ci0gICAgV2ViTWVkaWFTdHJlYW1UcmFjaygpIHsgfQotICAgIH5XZWJN
ZWRpYVN0cmVhbVRyYWNrKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
aW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIGlkLCBjb25zdCBXZWJTdHJpbmcmIGtpbmQsIGNv
bnN0IFdlYlN0cmluZyYgbGFiZWwpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwot
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9Ci0K
LSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJNZWRpYVN0cmVhbVRyYWNrKGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrPiYpOwotICAgIG9wZXJh
dG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrPigpIGNvbnN0Owot
I2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpNZWRpYVN0cmVh
bVRyYWNrPiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbVRyYWNr
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3Ry
ZWFtVHJhY2tMaXN0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0
cmVhbVRyYWNrTGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWVmYzdmLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
VHJhY2tMaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0X2gKLSNkZWZpbmUgV2ViTWVkaWFTdHJl
YW1UcmFja0xpc3RfaAotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIldl
YkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgTWVkaWFTdHJlYW1UcmFja0xpc3Q7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbVRyYWNrOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs
YXNzIFdlYlZlY3RvcjsKLQotY2xhc3MgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QgewotcHVibGlj
OgotICAgIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0KCkgeyB9Ci0gICAgfldlYk1lZGlhU3RyZWFt
VHJhY2tMaXN0KCkgeyByZXNldCgpOyB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1UcmFjaz4mIHdlYlRyYWNrcyk7Ci0g
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgotICAgIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrTGlzdD4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q+KCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJp
dmF0ZToKLSAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0PiBt
X3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbVRyYWNr
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2suY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzc5MDFjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2suY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtVHJhY2suaCIKLQotI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYk1lZGlhU3RyZWFtVHJhY2s6
OmluaXRpYWxpemUoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgV2ViU3RyaW5nJiBraW5kLCBj
b25zdCBXZWJTdHJpbmcmIGxhYmVsKQotewotICAgIG1fcHJpdmF0ZSA9IFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2s6OmNyZWF0ZShpZCwga2luZCwgbGFiZWwpOwotfQotCi12b2lkIFdlYk1lZGlh
U3RyZWFtVHJhY2s6OnJlc2V0KCkKLXsKLSAgICBtX3ByaXZhdGUucmVzZXQoKTsKLX0KLQotV2Vi
TWVkaWFTdHJlYW1UcmFjazo6V2ViTWVkaWFTdHJlYW1UcmFjayhjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjaz4mIHRyYWNrKQotICAgIDogbV9wcml2YXRlKHRy
YWNrKQotewotfQotCi1XZWJNZWRpYVN0cmVhbVRyYWNrOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjaz4oKSBjb25zdAotewotICAgIHJldHVybiBtX3By
aXZhdGUuZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWQ1OTViMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJN
ZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViTWVkaWFTdHJl
YW1UcmFja0xpc3QuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJN
ZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0xpc3QuaCIKLSNp
bmNsdWRlICJXZWJNZWRpYVN0cmVhbVRyYWNrLmgiCi0jaW5jbHVkZSAiV2ViVmVjdG9yLmgiCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBX
ZWJNZWRpYVN0cmVhbVRyYWNrTGlzdDo6aW5pdGlhbGl6ZShjb25zdCBXZWJWZWN0b3I8V2ViTWVk
aWFTdHJlYW1UcmFjaz4mIHdlYlRyYWNrcykKLXsKLSAgICBUcmFja1ZlY3RvciB0cmFja3Mod2Vi
VHJhY2tzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJUcmFja3Muc2l6
ZSgpOyArK2kpCi0gICAgICAgIHRyYWNrc1tpXSA9IHdlYlRyYWNrc1tpXTsKLQotICAgIG1fcHJp
dmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tMaXN0OjpjcmVhdGUodHJhY2tzKTsKLX0KLQotdm9pZCBX
ZWJNZWRpYVN0cmVhbVRyYWNrTGlzdDo6cmVzZXQoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgp
OwotfQotCi1XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdDo6V2ViTWVkaWFTdHJlYW1UcmFja0xpc3Qo
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiYgdHJhY2tMaXN0KQot
ICAgIDogbV9wcml2YXRlKHRyYWNrTGlzdCkKLXsKLX0KLQotV2ViTWVkaWFTdHJlYW1UcmFja0xp
c3Q6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4oKSBjb25z
dAotewotICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
</data>
<flag name="review"
          id="108504"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="108519"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111261</attachid>
            <date>2011-10-17 07:37:01 -0700</date>
            <delta_ts>2011-10-19 07:40:22 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>mediastream_use_platform_3.patch</filename>
            <type>text/plain</type>
            <size>54701</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNDE0M2I1Li5kNTVjYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUg
QEAKKzIwMTEtMTAtMTcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBNZWRpYVN0cmVhbSB0byB1c2UgV2ViQ29yZSBwbGF0Zm9y
bSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgb25lIGluIGEgc2VyaWVzIG9mIHBhdGNoZXMgdGhhdCB1cGRhdGUgdGhlIE1l
ZGlhU3RyZWFtIGZlYXR1cmUKKyAgICAgICAgdG8gdXNlIFdlYkNvcmUgcGxhdGZvcm0gaW50ZXJm
YWNlcy4KKworICAgICAgICBUZXN0cyB3aWxsIGJlIHByb3ZpZGVkIGJ5IGh0dHA6Ly93ZWJraXQu
b3JnL2IvNTY1ODcKKworICAgICAgICAqIGRvbS9Mb2NhbE1lZGlhU3RyZWFtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsTWVkaWFTdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbE1lZGlhU3RyZWFtOjpMb2NhbE1lZGlhU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsTWVkaWFTdHJlYW06OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxNZWRpYVN0
cmVhbTo6c3RvcFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxNZWRpYVN0cmVh
bTo6fkxvY2FsTWVkaWFTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxNZWRpYVN0cmVh
bTo6dG9Mb2NhbE1lZGlhU3RyZWFtKToKKyAgICAgICAgKiBkb20vTG9jYWxNZWRpYVN0cmVhbS5o
OgorICAgICAgICAqIGRvbS9Mb2NhbE1lZGlhU3RyZWFtLmlkbDoKKyAgICAgICAgKiBkb20vTWVk
aWFTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06On5NZWRpYVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6c3Ry
ZWFtRW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW06OmxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjp0
cmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmRlc2NyaXB0b3IpOgorICAg
ICAgICAqIGRvbS9NZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNr
OjpNZWRpYVN0cmVhbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6
OmtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6bGFiZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6ZW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVkKToKKyAgICAgICAgKiBkb20vTWVkaWFT
dHJlYW1UcmFjay5oOgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVhbVRyYWNrLmlkbDoKKyAgICAg
ICAgKiBkb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFja0xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bVRyYWNrTGlzdDo6TWVkaWFTdHJlYW1UcmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFja0xpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bVRyYWNrTGlzdDo6aXRlbSk6CisgICAgICAgICogZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0Lmg6
CisgICAgICAgICogcDJwL1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJDb25uZWN0aW9uOjphZGRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnJlbW92ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVt
b3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaDoKKyAg
ICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnVucmVnaXN0ZXJGcmFtZUNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQpOgor
ICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9N
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcjo6ZW50ZXJEZXRhY2hlZFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpkaXNjb25uZWN0RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRlZCk6
CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oOgorCiAyMDExLTEw
LTE3ICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogW0Nocm9taXVtXSBBZGQgYW4gYWJpbGl0eSB0byBsb29rIHVwIGFuZCBl
eHBsb3JlIGFuIG9iamVjdCBmcm9tIGEgaGVhcCBwcm9maWxlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xv
Y2FsTWVkaWFTdHJlYW0uY3BwCmluZGV4IGRmMzcyMjcuLjkzN2RhNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQ0ICsyOCwzNyBAQAogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKIAotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBMb2NhbE1lZGlhU3RyZWFtOjpEaXNwYXRjaFVwZGF0ZVRhc2sgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiB2b2lkIChMb2NhbE1lZGlhU3RyZWFtOjoqQ2FsbGJhY2spKCk7Ci0KLSAgICBzdGF0aWMgUGFz
c093blB0cjxEaXNwYXRjaFVwZGF0ZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPExvY2FsTWVkaWFT
dHJlYW0+IG9iamVjdCwgQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IERpc3BhdGNoVXBkYXRlVGFzayhvYmplY3QsIGNhbGxiYWNrKSk7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KQotICAgIHsKLSAgICAgICAgKG1fb2JqZWN0LmdldCgpLT4qbV9jYWxsYmFjaykoKTsKLSAgICB9
Ci0KLXB1YmxpYzoKLSAgICBEaXNwYXRjaFVwZGF0ZVRhc2soUGFzc1JlZlB0cjxMb2NhbE1lZGlh
U3RyZWFtPiBvYmplY3QsIENhbGxiYWNrIGNhbGxiYWNrKQotICAgICAgICA6IG1fb2JqZWN0KG9i
amVjdCkKLSAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKSB7IH0KK1Bhc3NSZWZQdHI8TG9j
YWxNZWRpYVN0cmVhbT4gTG9jYWxNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxNZWRpYVN0cmVhbShjb250ZXh0LCBzb3Vy
Y2VzKSk7Cit9CiAKLSAgICBSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gbV9vYmplY3Q7Ci0gICAg
Q2FsbGJhY2sgbV9jYWxsYmFjazsKLX07CitMb2NhbE1lZGlhU3RyZWFtOjpMb2NhbE1lZGlhU3Ry
ZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJiBzb3VyY2VzKQorICAgIDogTWVkaWFTdHJlYW0oY29udGV4dCwgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpjcmVhdGUoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBzb3VyY2Vz
KSkKKyAgICAsIG1fc3RvcFRpbWVyKHRoaXMsICZMb2NhbE1lZGlhU3RyZWFtOjpzdG9wVGltZXJG
aXJlZCkKK3sKK30KIAotUGFzc1JlZlB0cjxMb2NhbE1lZGlhU3RyZWFtPiBMb2NhbE1lZGlhU3Ry
ZWFtOjpjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwg
Y29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJh
Y2tzKQordm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdG9wKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IExvY2FsTWVkaWFTdHJlYW0oZnJhbWVDb250cm9sbGVyLCBsYWJlbCwgdHJhY2tzKSk7
CisgICAgaWYgKCFtX3N0b3BUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N0b3BUaW1lci5z
dGFydE9uZVNob3QoMCk7CiB9CiAKLUxvY2FsTWVkaWFTdHJlYW06OkxvY2FsTWVkaWFTdHJlYW0o
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotICAgIDog
TWVkaWFTdHJlYW0oZnJhbWVDb250cm9sbGVyLCBsYWJlbCwgdHJhY2tzLCB0cnVlKQordm9pZCBM
b2NhbE1lZGlhU3RyZWFtOjpzdG9wVGltZXJGaXJlZChUaW1lcjxMb2NhbE1lZGlhU3RyZWFtPiog
dGltZXIpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fc3RvcFRpbWVy
KTsKKworICAgIGlmIChyZWFkeVN0YXRlKCkgPT0gRU5ERUQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEZJWE1FOiB0ZWxsIHRoZSBwbGF0Zm9ybSB0aGF0IHRoZSBzdHJlYW0gd2FzIHN0b3Bw
ZWQKKworICAgIHN0cmVhbUVuZGVkKCk7CiB9CiAKIExvY2FsTWVkaWFTdHJlYW06On5Mb2NhbE1l
ZGlhU3RyZWFtKCkKQEAgLTc2LDQxICs3MCw2IEBAIExvY2FsTWVkaWFTdHJlYW0qIExvY2FsTWVk
aWFTdHJlYW06OnRvTG9jYWxNZWRpYVN0cmVhbSgpCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZv
aWQgTG9jYWxNZWRpYVN0cmVhbTo6ZGV0YWNoRW1iZWRkZXIoKQotewotICAgIC8vIEFzc3VtaW5n
IHdlIHNob3VsZCBzdG9wIGFueSBsaXZlIHN0cmVhbXMgd2hlbiBsb3NpbmcgYWNjZXNzIHRvIHRo
ZSBlbWJlZGRlci4KLSAgICBzdG9wKCk7Ci0KLSAgICBNZWRpYVN0cmVhbTo6ZGV0YWNoRW1iZWRk
ZXIoKTsKLX0KLQotdm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdHJlYW1FbmRlZCgpCi17Ci0gICAg
TWVkaWFTdHJlYW06OnN0cmVhbUVuZGVkKCk7Ci19Ci0KLXZvaWQgTG9jYWxNZWRpYVN0cmVhbTo6
c3RvcCgpCi17Ci0gICAgaWYgKCFtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpIHx8IG1fcmVh
ZHlTdGF0ZSA9PSBFTkRFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIoKS0+c3RvcEdlbmVyYXRlZFN0cmVhbShsYWJlbCgpKTsKLQotICAgIG1fcmVh
ZHlTdGF0ZSA9IEVOREVEOwotCi0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIGl0IGNhbiBiZSBu
dWxsIGluIGRlZ2VuZXJhdGUgY2FzZXMgbGlrZSBmcmFtZXMgZGV0YWNoZWQgZnJvbSB0aGVpciBw
YWdlcy4KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRGlzcGF0Y2hVcGRh
dGVUYXNrOjpjcmVhdGUodGhpcywgJkxvY2FsTWVkaWFTdHJlYW06Om9uU3RvcCkpOwotfQotCi12
b2lkIExvY2FsTWVkaWFTdHJlYW06Om9uU3RvcCgpCi17Ci0gICAgZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5oCmluZGV4IDZjODU0MDguLjI3ODUyNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzMgKzI5LDI2IEBACiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCi0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlICJUaW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIExvY2FsTWVkaWFTdHJlYW0gOiBwdWJsaWMgTWVkaWFTdHJlYW0gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsTWVkaWFTdHJlYW0+IGNyZWF0ZShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9j
YWxNZWRpYVN0cmVhbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBNZWRp
YVN0cmVhbVNvdXJjZVZlY3RvciYpOwogICAgIHZpcnR1YWwgfkxvY2FsTWVkaWFTdHJlYW0oKTsK
IAogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgLy8gTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
OlN0cmVhbUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRW1i
ZWRkZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRW5kZWQoKTsKLQogICAgIC8vIEV2ZW50
VGFyZ2V0LgogICAgIHZpcnR1YWwgTG9jYWxNZWRpYVN0cmVhbSogdG9Mb2NhbE1lZGlhU3RyZWFt
KCk7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFtKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCiBwcml2YXRlOgotICAgIExvY2FsTWVkaWFTdHJlYW0o
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpOwotICAgIGNsYXNzIERpc3BhdGNoVXBk
YXRlVGFzazsKLSAgICBmcmllbmQgY2xhc3MgRGlzcGF0Y2hVcGRhdGVUYXNrOworICAgIExvY2Fs
TWVkaWFTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJik7CiAKLSAgICB2b2lkIG9uU3RvcCgpOworICAgIHZvaWQgc3RvcFRpbWVyRmly
ZWQoVGltZXI8TG9jYWxNZWRpYVN0cmVhbT4qKTsKKworICAgIFRpbWVyPExvY2FsTWVkaWFTdHJl
YW0+IG1fc3RvcFRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaWRsIGIvU291cmNlL1dlYkNv
cmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaWRsCmluZGV4IGU0NzI1YTAuLjE1YTJjNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5pZGwKQEAgLTI3LDcgKzI3LDggQEAgbW9k
dWxlIGNvcmUgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPU1FRElBX1NU
UkVBTSwKICAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCi0gICAgICAgIEV2ZW50VGFy
Z2V0CisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBHZW5lcmF0ZVRvSlMKICAgICBdIExv
Y2FsTWVkaWFTdHJlYW0gOiBNZWRpYVN0cmVhbSB7CiAgICAgICAgIHZvaWQgc3RvcCgpOwogICAg
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtLmNwcAppbmRleCBiMDlmYmEyLi5hNTNjODk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDIwICszMywzNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUo
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzLCBib29sIGlz
TG9jYWxNZWRpYVN0cmVhbSkKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3IpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZWRpYVN0cmVhbShmcmFtZUNvbnRyb2xsZXIsIGxhYmVsLCB0cmFja3MsIGlzTG9jYWxN
ZWRpYVN0cmVhbSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW0oY29udGV4
dCwgc3RyZWFtRGVzY3JpcHRvcikpOwogfQogCi1NZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0oTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBs
YWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzLCBib29sIGlzTG9j
YWxNZWRpYVN0cmVhbSkKLSAgICA6IE1lZGlhU3RyZWFtQ2xpZW50KGZyYW1lQ29udHJvbGxlciwg
bGFiZWwsIGlzTG9jYWxNZWRpYVN0cmVhbSkKLSAgICAsIG1fcmVhZHlTdGF0ZShMSVZFKQotICAg
ICwgbV90cmFja3ModHJhY2tzKQorTWVkaWFTdHJlYW06Ok1lZGlhU3RyZWFtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBz
dHJlYW1EZXNjcmlwdG9yKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQp
CisgICAgLCBtX2Rlc2NyaXB0b3Ioc3RyZWFtRGVzY3JpcHRvcikKIHsKKyAgICBtX2Rlc2NyaXB0
b3ItPnNldE93bmVyKHRoaXMpOworCisgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciB0cmFja1Zl
Y3RvcjsKKyAgICBzaXplX3QgbnVtYmVyT2ZUcmFja3MgPSBtX2Rlc2NyaXB0b3ItPm51bWJlck9m
Q29tcG9uZW50cygpOworCisgICAgdHJhY2tWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9m
VHJhY2tzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVHJhY2tzOyBpKysp
CisgICAgICAgIHRyYWNrVmVjdG9yLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUobV9k
ZXNjcmlwdG9yLCBpKSk7CisKKyAgICBtX3RyYWNrcyA9IE1lZGlhU3RyZWFtVHJhY2tMaXN0Ojpj
cmVhdGUodHJhY2tWZWN0b3IpOwogfQogCiBNZWRpYVN0cmVhbTo6fk1lZGlhU3RyZWFtKCkKIHsK
KyAgICBtX2Rlc2NyaXB0b3ItPnNldE93bmVyKDApOworfQorCitNZWRpYVN0cmVhbTo6UmVhZHlT
dGF0ZSBNZWRpYVN0cmVhbTo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVz
Y3JpcHRvci0+ZW5kZWQoKSA/IEVOREVEIDogTElWRTsKIH0KIAogTWVkaWFTdHJlYW0qIE1lZGlh
U3RyZWFtOjp0b01lZGlhU3RyZWFtKCkKQEAgLTU1LDE0ICs3MSwxNyBAQCBNZWRpYVN0cmVhbSog
TWVkaWFTdHJlYW06OnRvTWVkaWFTdHJlYW0oKQogCiB2b2lkIE1lZGlhU3RyZWFtOjpzdHJlYW1F
bmRlZCgpCiB7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSAhPSBFTkRFRCk7Ci0gICAgbV9yZWFk
eVN0YXRlID0gRU5ERUQ7CisgICAgaWYgKHJlYWR5U3RhdGUoKSA9PSBFTkRFRCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9kZXNjcmlwdG9yLT5zZXRFbmRlZCgpOworCiAgICAgZGlzcGF0Y2hF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVkaWFTdHJlYW06OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBtZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlcigpID8gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIDogMDsKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpOwog
fQogCiBFdmVudFRhcmdldERhdGEqIE1lZGlhU3RyZWFtOjpldmVudFRhcmdldERhdGEoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVkaWFTdHJlYW0uaAppbmRleCBhNjE5NTYwLi5jMzNiNTRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVkaWFTdHJlYW0uaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMzkgKzI4LDM3IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
Ci0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5j
bHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVh
bURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oIgotI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
TWVkaWFTdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbT4sCi0gICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBFdmVudFRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgcHVibGlj
IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpNZWRpYVN0cmVhbUNsaWVudCB7CitjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBNZWRpYVN0cmVhbSA6IHB1YmxpYyBSZWZD
b3VudGVkPE1lZGlhU3RyZWFtPiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAgICAv
LyBNdXN0IG1hdGNoIHRoZSBjb25zdGFudHMgaW4gdGhlIC5pZGwgZmlsZS4KLSAgICBlbnVtIHsK
KyAgICBlbnVtIFJlYWR5U3RhdGUgewogICAgICAgICBMSVZFID0gMSwKICAgICAgICAgRU5ERUQg
PSAyCiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBjcmVhdGUo
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFt
ID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7
CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW0oKTsKIAogICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoZW5kZWQpOwogCi0gICAgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbGFiZWwoKSBj
b25zdCB7IHJldHVybiBjbGllbnRJZCgpOyB9CisgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkg
Y29uc3Q7CisgICAgU3RyaW5nIGxhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdG9yLT5s
YWJlbCgpOyB9CiAKLSAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3Mo
KSB7IHJldHVybiBtX3RyYWNrczsgfQorICAgIE1lZGlhU3RyZWFtVHJhY2tMaXN0KiB0cmFja3Mo
KSB7IHJldHVybiBtX3RyYWNrcy5nZXQoKTsgfQogCi0gICAgLy8gTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXI6Ok1lZGlhU3RyZWFtQ2xpZW50IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1FbmRlZCgpOworICAgIHZvaWQgc3RyZWFtRW5kZWQoKTsKKworICAgIE1lZGlh
U3RyZWFtRGVzY3JpcHRvciogZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRv
ci5nZXQoKTsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAgdmly
dHVhbCBNZWRpYVN0cmVhbSogdG9NZWRpYVN0cmVhbSgpOwpAQCAtNjksMjQgKzY4LDIzIEBAIHB1
YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtPjo6ZGVyZWY7CiAKIHByb3Rl
Y3RlZDoKLSAgICBNZWRpYVN0cmVhbShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGNvbnN0
IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcywg
Ym9vbCBpc0xvY2FsTWVkaWFTdHJlYW0pOworICAgIE1lZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pOwogCiAgICAgLy8g
RXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEq
IGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVF
dmVudFRhcmdldERhdGEoKTsKIAotICAgIHVuc2lnbmVkIHNob3J0IG1fcmVhZHlTdGF0ZTsKLQog
cHJpdmF0ZToKLSAgICB2b2lkIG9uRW5kZWQoKTsKLQogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCiAgICAg
RXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwogCisgICAgUmVmUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwogICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gbV90cmFja3M7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcj4gbV9kZXNjcmlwdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IGJlNGNiZjcuLmJlODU5NDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5jcHAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE2ICszMCwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVk
aWFTdHJlYW1UcmFjazo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYga2lu
ZCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVk
aWFTdHJlYW1UcmFjazo6Y3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBz
dHJlYW1EZXNjcmlwdG9yLCBzaXplX3QgdHJhY2tJbmRleCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhU3RyZWFtVHJhY2soaWQsIGtpbmQsIGxhYmVsKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrKHN0cmVhbURlc2NyaXB0b3IsIHRyYWNrSW5kZXgp
KTsKIH0KIAotTWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayhjb25zdCBTdHJpbmcm
IGlkLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwpCi0gICAgOiBtX2lk
KGlkKQotICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX2xhYmVsKGxhYmVsKQotICAgICwgbV9l
bmFibGVkKHRydWUpCitNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yLCBzaXplX3QgdHJhY2tJ
bmRleCkKKyAgICA6IG1fc3RyZWFtRGVzY3JpcHRvcihzdHJlYW1EZXNjcmlwdG9yKQorICAgICwg
bV90cmFja0luZGV4KHRyYWNrSW5kZXgpCiB7CiB9CiAKQEAgLTQ2LDI3ICs0NSwzOSBAQCBNZWRp
YVN0cmVhbVRyYWNrOjp+TWVkaWFTdHJlYW1UcmFjaygpCiB7CiB9CiAKLWNvbnN0IFN0cmluZyYg
TWVkaWFTdHJlYW1UcmFjazo6a2luZCgpIGNvbnN0CitTdHJpbmcgTWVkaWFTdHJlYW1UcmFjazo6
a2luZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2luZDsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgYXVkaW9LaW5kLCAoImF1ZGlvIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCB2aWRlb0tpbmQsICgidmlkZW8iKSk7CisKKyAgICBzd2l0Y2ggKG1fc3RyZWFt
RGVzY3JpcHRvci0+Y29tcG9uZW50KG1fdHJhY2tJbmRleCktPnNvdXJjZSgpLT50eXBlKCkpIHsK
KyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVkaW86CisgICAgICAgIHJldHVybiBh
dWRpb0tpbmQ7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZVZpZGVvOgorICAgICAg
ICByZXR1cm4gdmlkZW9LaW5kOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1jb25zdCBTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6OmxhYmVsKCkgY29uc3QKK1N0cmlu
ZyBNZWRpYVN0cmVhbVRyYWNrOjpsYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGFiZWw7
CisgICAgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRvci0+Y29tcG9uZW50KG1fdHJhY2tJbmRleCkt
PnNvdXJjZSgpLT5uYW1lKCk7CiB9CiAKIGJvb2wgTWVkaWFTdHJlYW1UcmFjazo6ZW5hYmxlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZW5hYmxlZDsKKyAgICByZXR1cm4gbV9zdHJlYW1EZXNj
cmlwdG9yLT5jb21wb25lbnQobV90cmFja0luZGV4KS0+ZW5hYmxlZCgpOwogfQogCiB2b2lkIE1l
ZGlhU3RyZWFtVHJhY2s6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIG1fZW5hYmxl
ZCA9IGVuYWJsZWQ7CisgICAgaWYgKGVuYWJsZWQgPT0gbV9zdHJlYW1EZXNjcmlwdG9yLT5jb21w
b25lbnQobV90cmFja0luZGV4KS0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIoKS0+c2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQobV9pZCwgZW5hYmxlZCk7
CisgICAgbV9zdHJlYW1EZXNjcmlwdG9yLT5jb21wb25lbnQobV90cmFja0luZGV4KS0+c2V0RW5h
YmxlZChlbmFibGVkKTsKKworICAgIC8vIEZJWE1FOiB0ZWxsIHRoZSBwbGF0Zm9ybSB0aGF0IHRo
ZSB0cmFjayB3YXMgZW5hYmxlZC9kaXNhYmxlZAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suaAppbmRleCAzMjIyZGM3Li4zNjBmM2Zm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmgKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDM2ICsyOCwzMyBAQAogCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRv
ci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVN0cmVhbVRy
YWNrIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFjaz4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpHZW5lcmljQ2xp
ZW50IHsKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0
cmVhbVRyYWNrPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFjaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3Qg
U3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiwgc2l6ZV90IHRyYWNrSW5k
ZXgpOwogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtVHJhY2soKTsKIAotICAgIGNvbnN0IFN0cmlu
ZyYga2luZCgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgbGFiZWwoKSBjb25zdDsKKyAgICBT
dHJpbmcga2luZCgpIGNvbnN0OworICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0OwogCiAgICAgYm9v
bCBlbmFibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCk7Cisg
ICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogCiBwcml2YXRlOgotICAgIE1lZGlhU3RyZWFtVHJh
Y2soY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxh
YmVsKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlw
dG9yPiwgc2l6ZV90IHRyYWNrSW5kZXgpOwogCi0gICAgU3RyaW5nIG1faWQ7Ci0gICAgU3RyaW5n
IG1fa2luZDsKLSAgICBTdHJpbmcgbV9sYWJlbDsKLSAgICBib29sIG1fZW5hYmxlZDsKKyAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBtX3N0cmVhbURlc2NyaXB0b3I7CisgICAgY29u
c3Qgc2l6ZV90IG1fdHJhY2tJbmRleDsKIH07CiAKLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrPiA+IFRyYWNrVmVjdG9yOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2s+ID4gTWVkaWFTdHJlYW1UcmFja1ZlY3RvcjsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFj
ay5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5pZGwKaW5kZXggMjk4
NzVhYS4uNzk4NzU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFt
VHJhY2suaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmlkbApA
QCAtMjcsOSArMjcsOSBAQCBtb2R1bGUgY29yZSB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAg
Q29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLAogICAgIF0gTWVkaWFTdHJlYW1UcmFjayB7Ci0gICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtpbmQ7Ci0gICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGxhYmVsOwotICAgICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4g
ZW5hYmxlZDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBraW5kOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhYmVsOworICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgYm9vbGVhbiBlbmFibGVkOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwCmluZGV4IDZmY2M2N2MuLjkyYmYwZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTMgKzMwLDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
TGlzdD4gTWVkaWFTdHJlYW1UcmFja0xpc3Q6OmNyZWF0ZShjb25zdCBUcmFja1ZlY3RvciYgdHJh
Y2tzKQorUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gTWVkaWFTdHJlYW1UcmFja0xp
c3Q6OmNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yJiB0cmFja1ZlY3RvcikKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2tMaXN0KHRyYWNrcykpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1UcmFja0xpc3QodHJhY2tWZWN0b3Ip
KTsKIH0KIAotTWVkaWFTdHJlYW1UcmFja0xpc3Q6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0KGNvbnN0
IFRyYWNrVmVjdG9yJiB0cmFja3MpCi0gICAgOiBtX3RyYWNrcyh0cmFja3MpCitNZWRpYVN0cmVh
bVRyYWNrTGlzdDo6TWVkaWFTdHJlYW1UcmFja0xpc3QoY29uc3QgTWVkaWFTdHJlYW1UcmFja1Zl
Y3RvciYgdHJhY2tWZWN0b3IpCisgICAgOiBtX3RyYWNrVmVjdG9yKHRyYWNrVmVjdG9yKQogewog
fQogCkBAIC00NSwxNSArNDYsMTMgQEAgTWVkaWFTdHJlYW1UcmFja0xpc3Q6On5NZWRpYVN0cmVh
bVRyYWNrTGlzdCgpCiAKIHVuc2lnbmVkIE1lZGlhU3RyZWFtVHJhY2tMaXN0OjpsZW5ndGgoKSBj
b25zdAogewotICAgIHJldHVybiBtX3RyYWNrcy5zaXplKCk7CisgICAgcmV0dXJuIG1fdHJhY2tW
ZWN0b3Iuc2l6ZSgpOwogfQogCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3Ry
ZWFtVHJhY2tMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorTWVkaWFTdHJlYW1UcmFj
ayogTWVkaWFTdHJlYW1UcmFja0xpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0g
ICAgaWYgKGluZGV4IDwgbV90cmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV90cmFja3Mu
YXQoaW5kZXgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4oKTsKKyAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIG1f
dHJhY2tWZWN0b3JbaW5kZXhdLmdldCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5oCmluZGV4IDFlZmU2YWUuLjRk
NjFmODVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xp
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuaApAQCAt
MjgsMjggKzI4LDIyIEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtVHJhY2suaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tMaXN0IDogcHVibGljIFJlZkNvdW50
ZWQ8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gY3JlYXRlKGNvbnN0IFRyYWNrVmVjdG9yJiBtX3RyYWNr
cyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IGNyZWF0ZShj
b25zdCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yJik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1U
cmFja0xpc3QoKTsKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTWVkaWFT
dHJlYW1UcmFja0xpc3QKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2s+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAg
dm9pZCBhc3NvY2lhdGVTdHJlYW0oY29uc3QgU3RyaW5nJiBsYWJlbCkgeyBtX2Fzc29jaWF0ZWRT
dHJlYW1MYWJlbCA9IGxhYmVsOyB9CisgICAgTWVkaWFTdHJlYW1UcmFjayogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1UcmFja0xpc3QoY29u
c3QgVHJhY2tWZWN0b3ImIG1fdHJhY2tzKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25z
dCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yJik7CiAKLSAgICBUcmFja1ZlY3RvciBtX3RyYWNrczsK
LSAgICBTdHJpbmcgbV9hc3NvY2lhdGVkU3RyZWFtTGFiZWw7CisgICAgTWVkaWFTdHJlYW1UcmFj
a1ZlY3RvciBtX3RyYWNrVmVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggZDdmYTIwMS4uYWNhMWQ3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCkBAIC0xMjksOCArMTI5LDcgQEAgdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0
cmVhbSwgRXhjZXB0aW9uQ29kZSYKIAogICAgIG1fbG9jYWxTdHJlYW1zLT5hcHBlbmQoc3RyZWFt
KTsKIAotICAgIC8vIEZJWE1FOiBnZXQgZnJvbSBzdHJlYW0tPmRlc2NyaXB0b3IoKSB3aGVuIGl0
J3MgYXZhaWxhYmxlLCBzZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2NAotICAgIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IDA7CisgICAgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yID0gc3RyZWFtLT5kZXNjcmlwdG9yKCk7CiAgICAgc2l6
ZV90IGkgPSBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7CiAg
ICAgaWYgKGkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5y
ZW1vdmUoaSk7CkBAIC0xNTYsOCArMTU1LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3Zl
U3RyZWFtKE1lZGlhU3RyZWFtKiBzdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgbV9s
b2NhbFN0cmVhbXMtPnJlbW92ZShzdHJlYW0pOwogCi0gICAgLy8gRklYTUU6IGdldCBmcm9tIHN0
cmVhbS0+ZGVzY3JpcHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRwOi8vd2Via2l0
Lm9yZy9iLzY4NDY0Ci0gICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9y
ID0gMDsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IgPSBzdHJl
YW0tPmRlc2NyaXB0b3IoKTsKICAgICBzaXplX3QgaSA9IG1fcGVuZGluZ0FkZFN0cmVhbXMuZmlu
ZChzdHJlYW1EZXNjcmlwdG9yKTsKICAgICBpZiAoaSAhPSBub3RGb3VuZCkgewogICAgICAgICBt
X3BlbmRpbmdBZGRTdHJlYW1zLnJlbW92ZShpKTsKQEAgLTIxNSw4ICsyMTMsNyBAQCB2b2lkIFBl
ZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcj4gc3RyZWFtRAogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogY3JlYXRlIGEgbmV3IE1lZGlhU3RyZWFtIGZyb20g
dGhlIHN0cmVhbURlc2NyaXB0b3Igb25jZSBpdCdzIHBvc3NpYmxlLCBzZWUgaHR0cDovL3dlYmtp
dC5vcmcvYi82ODQ2NAotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gMDsKKyAgICBS
ZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBzdHJlYW1EZXNjcmlwdG9yKTsKICAgICBtX3JlbW90ZVN0cmVhbXMt
PmFwcGVuZChzdHJlYW0pOwogCiAgICAgZGlzcGF0Y2hFdmVudChNZWRpYVN0cmVhbUV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2UsIHN0cmVhbS5y
ZWxlYXNlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1D
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAppbmRleCAw
ZmM2ZTVmLi5hZjkwOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5o
CkBAIC00Niw4ICs0Niw2IEBAIHB1YmxpYzoKICAgICAvLyBNZWRpYVN0cmVhbSBmdW5jdGlvbnMu
CiAgICAgdmlydHVhbCB2b2lkIG1lZGlhU3RyZWFtRGVzdHJveWVkKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZVN0cmVhbShpbnQgcmVxdWVzdElkLCBHZW5lcmF0ZVN0cmVhbU9wdGlv
bkZsYWdzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0
cmFja0lkLCBib29sIGVuYWJsZWQpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk1l
ZGlhU3RyZWFtQ2xpZW50KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
ZGlhU3RyZWFtQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFt
Q29udHJvbGxlci5jcHAKaW5kZXggYzg4NTUyZi4uZDRlMzA4ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTgxLDE2ICs4MCw2
IEBAIHZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjp1bnJlZ2lzdGVyRnJhbWVDb250cm9sbGVy
KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyCiAKICAgICBmb3IgKFZlY3RvcjxpbnQ+OjppdGVy
YXRvciBpdCA9IGZyYW1lUmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gZnJhbWVSZXF1ZXN0cy5lbmQo
KTsgKytpdCkKICAgICAgICAgbV9yZXF1ZXN0cy5yZW1vdmUoKml0KTsKLQotICAgIFZlY3RvcjxT
dHJpbmc+IGZyYW1lU3RyZWFtczsKLSAgICBmb3IgKFN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0cmVhbXMuYmVnaW4oKTsgaXQgIT0gbV9zdHJlYW1zLmVuZCgpOyArK2l0KQotICAgICAgICBp
ZiAoaXQtPnNlY29uZCA9PSBmcmFtZUNvbnRyb2xsZXIpCi0gICAgICAgICAgICBmcmFtZVN0cmVh
bXMuYXBwZW5kKGl0LT5maXJzdCk7Ci0KLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRv
ciBpdCA9IGZyYW1lU3RyZWFtcy5iZWdpbigpOyBpdCAhPSBmcmFtZVN0cmVhbXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIG1fc3RyZWFtcy5yZW1vdmUoKml0KTsKLQotICAgIC8vIEZJWE1FOiBBZGQg
dW5yZWdpc3RlciBmdW5jdGlvbmFsaXR5IGZvciBwZWVyIGNvbm5lY3Rpb24gb2JqZWN0cy4KIH0K
IAogaW50IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6cmVnaXN0ZXJSZXF1ZXN0KGludCBsb2NhbElk
LCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyKQpAQCAtMTAxLDEz
ICs5MCw2IEBAIGludCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnJlZ2lzdGVyUmVxdWVzdChpbnQg
bG9jYWxJZCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsCiAgICAgcmV0dXJuIG1fbmV4dEdsb2Jh
bFJlcXVlc3RJZCsrOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6cmVnaXN0ZXJT
dHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIqIGZyYW1lQ29udHJvbGxlcikKLXsKLSAgICBBU1NFUlQoZnJhbWVDb250cm9sbGVyKTsKLSAg
ICBBU1NFUlQoIW1fc3RyZWFtcy5jb250YWlucyhzdHJlYW1MYWJlbCkpOwotICAgIG1fc3RyZWFt
cy5hZGQoc3RyZWFtTGFiZWwsIGZyYW1lQ29udHJvbGxlcik7Ci19Ci0KIHZvaWQgTWVkaWFTdHJl
YW1Db250cm9sbGVyOjpnZW5lcmF0ZVN0cmVhbShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciog
ZnJhbWVDb250cm9sbGVyLCBpbnQgbG9jYWxJZCwgR2VuZXJhdGVTdHJlYW1PcHRpb25GbGFncyBm
bGFncywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAg
QVNTRVJUKG1fY2xpZW50KTsKQEAgLTExNSwyNSArOTcsMTQgQEAgdm9pZCBNZWRpYVN0cmVhbUNv
bnRyb2xsZXI6OmdlbmVyYXRlU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFt
ZUNvbnQKICAgICBtX2NsaWVudC0+Z2VuZXJhdGVTdHJlYW0oY29udHJvbGxlclJlcXVlc3RJZCwg
ZmxhZ3MsIHNlY3VyaXR5T3JpZ2luKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6
OnN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAgICBt
X2NsaWVudC0+c3RvcEdlbmVyYXRlZFN0cmVhbShzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVk
aWFTdHJlYW1Db250cm9sbGVyOjpzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJp
bmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2NsaWVudC0+c2V0TWVkaWFTdHJl
YW1UcmFja0VuYWJsZWQodHJhY2tJZCwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1D
b250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQoaW50IGNvbnRyb2xsZXJSZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRy
YWNrcykKK3ZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQoaW50IGNv
bnRyb2xsZXJSZXF1ZXN0SWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2Vz
KQogewogICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4g
aGF2ZSBiZWVuIGRlc3Ryb3llZCB3aGlsZSB0aGUgcmVxdWVzdCByZXBseSB3YXMgY29taW5nIGJh
Y2suCiAgICAgaWYgKG1fcmVxdWVzdHMuY29udGFpbnMoY29udHJvbGxlclJlcXVlc3RJZCkpIHsK
ICAgICAgICAgY29uc3QgUmVxdWVzdCYgcmVxdWVzdCA9IG1fcmVxdWVzdHMuZ2V0KGNvbnRyb2xs
ZXJSZXF1ZXN0SWQpOwotICAgICAgICByZWdpc3RlclN0cmVhbShzdHJlYW1MYWJlbCwgcmVxdWVz
dC5mcmFtZUNvbnRyb2xsZXIoKSk7CiAgICAgICAgIG1fcmVxdWVzdHMucmVtb3ZlKGNvbnRyb2xs
ZXJSZXF1ZXN0SWQpOwogICAgICAgICBBU1NFUlQocmVxdWVzdC5mcmFtZUNvbnRyb2xsZXIoKSk7
Ci0gICAgICAgIHJlcXVlc3QuZnJhbWVDb250cm9sbGVyKCktPnN0cmVhbUdlbmVyYXRlZChyZXF1
ZXN0LmxvY2FsSWQoKSwgc3RyZWFtTGFiZWwsIHRyYWNrcyk7CisgICAgICAgIHJlcXVlc3QuZnJh
bWVDb250cm9sbGVyKCktPnN0cmVhbUdlbmVyYXRlZChyZXF1ZXN0LmxvY2FsSWQoKSwgc291cmNl
cyk7CiAgICAgfQogfQogCkBAIC0xNDcsMTMgKzExOCw2IEBAIHZvaWQgTWVkaWFTdHJlYW1Db250
cm9sbGVyOjpzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCBjb250cm9sbGVyUmVxdWVzdElkLCBO
YXZpCiAgICAgfQogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtRmFpbGVk
KGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNl
IHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkIGJ5IHRoZSB0aW1l
IHRoaXMgaXMgY2FsbGVkLgotICAgIGlmIChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtTGFiZWwp
KQotICAgICAgICBtX3N0cmVhbXMuZ2V0KHN0cmVhbUxhYmVsKS0+c3RyZWFtRmFpbGVkKHN0cmVh
bUxhYmVsKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJl
YW1Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxl
ci5oCmluZGV4IDEwYWM0Y2UuLjQ4OTMwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRp
YVN0cmVhbUNvbnRyb2xsZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNsaWVudC5oIgorI2luY2x1ZGUgIk1lZGlh
U3RyZWFtU291cmNlLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0zOCw3
ICszOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFTdHJlYW1DbGllbnQ7
CiBjbGFzcyBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjsKLWNsYXNzIE1lZGlhU3RyZWFtVHJh
Y2tMaXN0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIE1lZGlhU3RyZWFtQ29udHJv
bGxlciB7CkBAIC01MSwyNSArNTEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlckZy
YW1lQ29udHJvbGxlcihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciopOwogCiAgICAgdm9pZCBn
ZW5lcmF0ZVN0cmVhbShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCByZXF1ZXN0SWQs
IEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsK
LSAgICB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7
CiAKLSAgICAvLyBFbmFibGUvZGlzYWJsZSBhbiB0cmFjay4KLSAgICB2b2lkIHNldE1lZGlhU3Ry
ZWFtVHJhY2tFbmFibGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFibGVkKTsKLQot
ICAgIHZvaWQgc3RyZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgc3Ry
ZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7CisgICAg
dm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3Vy
Y2VWZWN0b3ImIHNvdXJjZXMpOwogICAgIHZvaWQgc3RyZWFtR2VuZXJhdGlvbkZhaWxlZChpbnQg
cmVxdWVzdElkLCBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlKTsKLSAgICB2b2lk
IHN0cmVhbUZhaWxlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKIAogcHJpdmF0ZToKICAg
ICBpbnQgcmVnaXN0ZXJSZXF1ZXN0KGludCBsb2NhbFJlcXVlc3RJZCwgTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIqKTsKLSAgICB2b2lkIHJlZ2lzdGVyU3RyZWFtKGNvbnN0IFN0cmluZyYgc3Ry
ZWFtTGFiZWwsIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKik7CiAKICAgICBjbGFzcyBSZXF1
ZXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlcXVlc3Q+IFJlcXVlc3RNYXA7Ci0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqPiBTdHJl
YW1NYXA7CiAKICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHM7Ci0gICAgU3RyZWFtTWFwIG1fc3Ry
ZWFtczsKIAogICAgIE1lZGlhU3RyZWFtQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9uZXh0
R2xvYmFsUmVxdWVzdElkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyLmNwcAppbmRleCA2ZjZlY2U3Li5lNGVmOGMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcApAQCAtMzIs
NyArMzIsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiTG9jYWxNZWRpYVN0cmVh
bS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtVHJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxs
YmFjay5oIgogI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ4LDggKzQ3LDYgQEAgcHVibGljOgogCiAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVyYXRl
U3RyZWFtUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IGlzUmVjb3JkZWREYXRhUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzU2lnbmFsaW5nUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CiAKQEAgLTExNSwyNCArMTEyLDYgQEAgdm9p
ZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6UmVxdWVzdE1hcDo6YWJvcnRBbGwoKQogICAg
IH0KIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyOjpDbGllbnRNYXBCYXNlPFQ+Ojp1bnJlZ2lzdGVyQWxsKCkKLXsKLSAgICB3aGlsZSAo
IXRoaXMtPmlzRW1wdHkoKSkgewotICAgICAgICBUIGtleSA9IHRoaXMtPmJlZ2luKCktPmZpcnN0
OwotICAgICAgICAvLyB1bnJlZ2lzdGVyIHNob3VsZCByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0
aGUgbWFwLgotICAgICAgICB0aGlzLT5iZWdpbigpLT5zZWNvbmQtPnVucmVnaXN0ZXIoKTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChrZXksICF0aGlzLT5jb250YWlucyhrZXkpKTsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cjo6Q2xpZW50TWFwQmFzZTxUPjo6ZGV0YWNoRW1iZWRkZXIoKQotewotICAgIGZvciAodHlwZW5h
bWUgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSB0aGlzLT5iZWdpbigpOyBpdCAhPSB0aGlzLT5lbmQo
KTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+ZGV0YWNoRW1iZWRkZXIoKTsKLX0KLQogTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Ok1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKEZyYW1l
KiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX2lzSW5EZXRhY2hlZFN0YXRl
KGZhbHNlKQpAQCAtMTYwLDMzICsxMzksNiBAQCBNZWRpYVN0cmVhbUNvbnRyb2xsZXIqIE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyOjpwYWdlQ29udHJvbGxlcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFtZS0+cGFnZSgpLT5tZWRpYVN0cmVh
bUNvbnRyb2xsZXIoKSA6IDA7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
OnVucmVnaXN0ZXIoTWVkaWFTdHJlYW1DbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9z
dHJlYW1zLmNvbnRhaW5zKGNsaWVudC0+Y2xpZW50SWQoKSkpOwotCi0gICAgLy8gQXNzdW1pbmcg
d2Ugc2hvdWxkIHN0b3AgYW55IGxpdmUgc3RyZWFtcyB3aGVuIGxvc2luZyBhY2Nlc3MgdG8gdGhl
IGVtYmVkZGVyLgotICAgIGlmIChjbGllbnQtPmlzTG9jYWxNZWRpYVN0cmVhbSgpKSB7Ci0gICAg
ICAgIExvY2FsTWVkaWFTdHJlYW0qIHN0cmVhbSA9IHN0YXRpY19jYXN0PExvY2FsTWVkaWFTdHJl
YW0qPihjbGllbnQpOwotICAgICAgICBpZiAoc3RyZWFtLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFT
dHJlYW06OkxJVkUpCi0gICAgICAgICAgICBzdG9wR2VuZXJhdGVkU3RyZWFtKHN0cmVhbS0+bGFi
ZWwoKSk7Ci0gICAgfQotCi0gICAgbV9zdHJlYW1zLnJlbW92ZShjbGllbnQtPmNsaWVudElkKCkp
OwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjp1bnJlZ2lzdGVyKEdlbmVy
aWNDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVu
dC0+Y2xpZW50SWQoKSkpOwotICAgIG1fY2xpZW50cy5yZW1vdmUoY2xpZW50LT5jbGllbnRJZCgp
KTsKLX0KLQotTWVkaWFTdHJlYW0qIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpnZXRTdHJl
YW1Gcm9tTGFiZWwoY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9z
dHJlYW1zLmNvbnRhaW5zKGxhYmVsKSk7Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5nZXQobGFiZWwp
LT5pc01lZGlhU3RyZWFtKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVN0cmVhbSo+
KG1fc3RyZWFtcy5nZXQobGFiZWwpKTsKLX0KLQogdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlcjo6ZW50ZXJEZXRhY2hlZFN0YXRlKCkKIHsKICAgICBpZiAobV9pc0luRGV0YWNoZWRTdGF0
ZSkgewpAQCAtMTk1LDggKzE0Nyw2IEBAIHZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
OmVudGVyRGV0YWNoZWRTdGF0ZSgpCiAgICAgfQogCiAgICAgbV9yZXF1ZXN0cy5hYm9ydEFsbCgp
OwotICAgIG1fc3RyZWFtcy5kZXRhY2hFbWJlZGRlcigpOwotICAgIG1fY2xpZW50cy5kZXRhY2hF
bWJlZGRlcigpOwogICAgIG1faXNJbkRldGFjaGVkU3RhdGUgPSB0cnVlOwogfQogCkBAIC0yMjQs
OCArMTc0LDYgQEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZy
YW1lKCkKICAgICBkaXNjb25uZWN0UGFnZSgpOwogCiAgICAgQVNTRVJUKG1fcmVxdWVzdHMuaXNF
bXB0eSgpKTsKLSAgICBtX3N0cmVhbXMudW5yZWdpc3RlckFsbCgpOwotICAgIG1fY2xpZW50cy51
bnJlZ2lzdGVyQWxsKCk7CiAKICAgICBtX2ZyYW1lID0gMDsKIH0KQEAgLTI5OCw0MyArMjQ2LDE3
IEBAIHZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmdlbmVyYXRlU3RyZWFtKGNvbnN0
IFN0cmluZyYgb3B0aW9ucywKICAgICBwYWdlQ29udHJvbGxlcigpLT5nZW5lcmF0ZVN0cmVhbSh0
aGlzLCByZXF1ZXN0SWQsIGZsYWdzLCBzZWN1cml0eU9yaWdpbigpKTsKIH0KIAotdm9pZCBNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3RvcEdlbmVyYXRlZFN0cmVhbShjb25zdCBTdHJpbmcm
IHN0cmVhbUxhYmVsKQotewotICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtTGFi
ZWwpKTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmdldChzdHJlYW1MYWJlbCktPmlzTG9jYWxNZWRp
YVN0cmVhbSgpKTsKLQotICAgIGlmIChpc0NsaWVudEF2YWlsYWJsZSgpKQotICAgICAgICBwYWdl
Q29udHJvbGxlcigpLT5zdG9wR2VuZXJhdGVkU3RyZWFtKHN0cmVhbUxhYmVsKTsKLX0KLQotdm9p
ZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQo
Y29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGlzQ2xpZW50
QXZhaWxhYmxlKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPnNldE1lZGlhU3RyZWFtVHJh
Y2tFbmFibGVkKHRyYWNrSWQsIGVuYWJsZWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBs
YWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzUGFyYW0pCit2b2lk
IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJ
ZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZXMpCiB7CiAgICAgLy8gRG9u
J3QgYXNzZXJ0IHNpbmNlIHRoZSByZXF1ZXN0IGNhbiBoYXZlIGJlZW4gYWJvcnRlZCBhcyBhIHJl
c3VsdCBvZiBlbWJlZGRlciBkZXRhY2htZW50LgogICAgIGlmICghbV9yZXF1ZXN0cy5jb250YWlu
cyhyZXF1ZXN0SWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9yZXF1ZXN0cy5n
ZXQocmVxdWVzdElkKS0+aXNHZW5lcmF0ZVN0cmVhbVJlcXVlc3QoKSk7Ci0gICAgQVNTRVJUKCFs
YWJlbC5pc051bGwoKSk7Ci0gICAgQVNTRVJUKHRyYWNrc1BhcmFtKTsKLQotICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzID0gdHJhY2tzUGFyYW07Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGludCB0
cmFja0NsaWVudElkID0gbV9jbGllbnRzLmdldE5leHRJZCgpOwotICAgICAgICBSZWZQdHI8TWVk
aWFTdHJlYW1UcmFjaz4gdHJhY2sgPSB0cmFja3MtPml0ZW0oaSk7Ci0gICAgICAgIHRyYWNrLT5h
c3NvY2lhdGVGcmFtZUNvbnRyb2xsZXIodGhpcywgdHJhY2tDbGllbnRJZCk7Ci0gICAgICAgIG1f
Y2xpZW50cy5hZGQodHJhY2tDbGllbnRJZCwgdHJhY2suZ2V0KCkpOwotICAgIH0KKyAgICBBU1NF
UlQoc291cmNlcyk7CiAKICAgICBSZWZQdHI8R2VuZXJhdGVTdHJlYW1SZXF1ZXN0PiBzdHJlYW1S
ZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8R2VuZXJhdGVTdHJlYW1SZXF1ZXN0Kj4obV9yZXF1ZXN0cy5n
ZXQocmVxdWVzdElkKS5nZXQoKSk7Ci0gICAgUmVmUHRyPExvY2FsTWVkaWFTdHJlYW0+IGdlbmVy
YXRlZFN0cmVhbSA9IExvY2FsTWVkaWFTdHJlYW06OmNyZWF0ZSh0aGlzLCBsYWJlbCwgdHJhY2tz
LnJlbGVhc2UoKSk7Ci0gICAgbV9zdHJlYW1zLmFkZChsYWJlbCwgZ2VuZXJhdGVkU3RyZWFtLmdl
dCgpKTsKKyAgICBSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gZ2VuZXJhdGVkU3RyZWFtID0gTG9j
YWxNZWRpYVN0cmVhbTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc291cmNlcyk7
CiAgICAgbV9yZXF1ZXN0cy5yZW1vdmUocmVxdWVzdElkKTsKICAgICBzdHJlYW1SZXF1ZXN0LT5z
dWNjZXNzQ2FsbGJhY2soKS0+aGFuZGxlRXZlbnQoZ2VuZXJhdGVkU3RyZWFtLmdldCgpKTsKIH0K
QEAgLTM1NiwxMSArMjc4LDYgQEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3Ry
ZWFtR2VuZXJhdGlvbkZhaWxlZChpbnQgcmVxdWVzdElkLCBOYXZpZ2F0b3IKICAgICB9CiB9CiAK
LXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUZhaWxlZChjb25zdCBTdHJp
bmcmIGxhYmVsKQotewotICAgIGdldFN0cmVhbUZyb21MYWJlbChsYWJlbCktPnN0cmVhbUVuZGVk
KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyLmgKaW5kZXggNmEzOWFmZS4uZjkxMjU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaApAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2xpZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2Vy
TWVkaWFFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KQEAgLTM4LDEwNiArMzksMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRnJhbWU7Ci1jbGFzcyBMb2NhbE1lZGlhU3RyZWFtOwotY2xhc3MgTWVkaWFTdHJlYW07CiBj
bGFzcyBNZWRpYVN0cmVhbUNvbnRyb2xsZXI7Ci1jbGFzcyBNZWRpYVN0cmVhbVRyYWNrTGlzdDsK
IGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s7CiBjbGFzcyBOYXZpZ2F0b3JV
c2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s7CiBjbGFzcyBQYWdlOwogY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2lnbmFsaW5nQ2FsbGJh
Y2s7CiAKIGNsYXNzIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcik7CiBwdWJsaWM6Ci0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIElkVHlwZT4KLSAgICBjbGFzcyBDbGllbnRCYXNlIHsKLSAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xpZW50QmFzZSk7Ci0gICAgcHVibGljOgotICAgICAgICBD
bGllbnRCYXNlKCkgOiBtX2ZyYW1lQ29udHJvbGxlcigwKSwgbV9jbGllbnRJZCgwKSB7IH0KLQot
ICAgICAgICBDbGllbnRCYXNlKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRy
b2xsZXIsIGNvbnN0IElkVHlwZSYgaWQpCi0gICAgICAgICAgICA6IG1fZnJhbWVDb250cm9sbGVy
KGZyYW1lQ29udHJvbGxlcikKLSAgICAgICAgICAgICwgbV9jbGllbnRJZChpZCkgeyB9Ci0KLSAg
ICAgICAgdmlydHVhbCB+Q2xpZW50QmFzZSgpIHsgfQotCi0gICAgICAgIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyKiBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVDb250cm9sbGVyOyB9Ci0gICAgICAgIGNvbnN0IElkVHlwZSYgY2xpZW50SWQoKSBj
b25zdCB7IHJldHVybiBtX2NsaWVudElkOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzTWVk
aWFTdHJlYW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNMb2NhbE1lZGlhU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmly
dHVhbCBib29sIGlzR2VuZXJpY0NsaWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGZyYW1lIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGlzY29u
bmVjdGVkIHRvIHRoZSBNZWRpYVN0cmVhbUNsaWVudCBlbWJlZGRlci4KLSAgICAgICAgLy8gQ2xp
ZW50cyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBzZW5kIGFueSByZXF1aXJlZCBzaHV0ZG93biBt
ZXNzYWdlcy4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaEVtYmVkZGVyKCkgeyB9Ci0KLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIC8vIFVzZWQgZm9yIG9iamVjdHMgdGhhdCBhcmUgb3B0aW9u
YWxseSBhc3NvY2lhdGVkIHRvIHRoZSBmcmFtZSBjb250cm9sbGVyIGFmdGVyIGNvbnN0cnVjdGlv
biwgbGlrZSB0aGUgTWVkaWFTdHJlYW1UcmFja3MuCi0gICAgICAgIHZvaWQgYXNzb2NpYXRlRnJh
bWVDb250cm9sbGVyKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIs
IGNvbnN0IElkVHlwZSYgaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9mcmFt
ZUNvbnRyb2xsZXIgJiYgIW1fY2xpZW50SWQpOwotICAgICAgICAgICAgbV9mcmFtZUNvbnRyb2xs
ZXIgPSBmcmFtZUNvbnRyb2xsZXI7Ci0gICAgICAgICAgICBtX2NsaWVudElkID0gaWQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBBdm9pZHMgcmVwZWF0aW5nIHRoZSBzYW1lIGNvZGUgaW4gdGhl
IHVucmVnaXN0ZXIgbWV0aG9kIG9mIGVhY2ggZGVyaXZlZCBjbGFzcy4KLSAgICAgICAgLy8gVGhp
cyBpcyByZXF1aXJlZCBzaW5jZSB0aGUgY29udHJvbGxlcidzIHVucmVnaXN0ZXIgbWV0aG9kcyBt
YWtlIHVzZSBvZiB0aGUgaXNPYmplY3QgdmlydHVhbHMsCi0gICAgICAgIC8vIGFuZCB0aGUgdW5y
ZWdpc3RyYXRpb24gY2FuIGJlIHRyaWdnZXJlZCBlaXRoZXIgYnkgdGhlIGRlc3RydWN0b3Igb2Yg
dGhlIGNsaWVudCBvciBieSB0aGUgZGlzY29ubmVjdGlvbiBvZiB0aGUgZnJhbWUuCi0gICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDbGllbnRUeXBlPgotICAgICAgICB2b2lkIHVucmVnaXN0ZXJD
bGllbnQoQ2xpZW50VHlwZSogY2xpZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1f
ZnJhbWVDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
bV9mcmFtZUNvbnRyb2xsZXItPnVucmVnaXN0ZXIoc3RhdGljX2Nhc3Q8Q2xpZW50VHlwZSo+KGNs
aWVudCkpOwotICAgICAgICAgICAgbV9mcmFtZUNvbnRyb2xsZXIgPSAwOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXIoKSA9IDA7Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjsKLQotICAgICAgICBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogbV9mcmFtZUNvbnRyb2xsZXI7Ci0gICAgICAgIElkVHlwZSBtX2NsaWVu
dElkOwotICAgIH07Ci0KLSAgICBjbGFzcyBNZWRpYVN0cmVhbUNsaWVudCA6IHB1YmxpYyBDbGll
bnRCYXNlPFN0cmluZz4gewotICAgIHB1YmxpYzoKLSAgICAgICAgTWVkaWFTdHJlYW1DbGllbnQo
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0pCi0gICAgICAgICAgICA6IENsaWVudEJh
c2U8U3RyaW5nPihmcmFtZUNvbnRyb2xsZXIsIGxhYmVsKQotICAgICAgICAgICAgLCBtX2lzTG9j
YWxNZWRpYVN0cmVhbShpc0xvY2FsTWVkaWFTdHJlYW0pIHsgfQotCi0gICAgICAgIHZpcnR1YWwg
fk1lZGlhU3RyZWFtQ2xpZW50KCkgeyB1bnJlZ2lzdGVyKCk7IH0KLQotICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNNZWRpYVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICAv
LyBBY2Nlc3NlZCBieSB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAgICAgdmlydHVhbCBib29sIGlzTG9j
YWxNZWRpYVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2NhbE1lZGlhU3RyZWFtOyB9Ci0K
LSAgICAgICAgLy8gU3RyZWFtIGhhcyBlbmRlZCBmb3Igc29tZSBleHRlcm5hbCByZWFzb24uCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1FbmRlZCgpID0gMDsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyKCkgeyB1bnJlZ2lzdGVyQ2xpZW50KHRoaXMp
OyB9Ci0gICAgICAgIGJvb2wgbV9pc0xvY2FsTWVkaWFTdHJlYW07Ci0gICAgfTsKLQotICAgIC8v
IEdlbmVyaWMgY2xpZW50cyBhcmUgb2JqZWN0cyB0aGF0IHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBm
cmFtZSBjb250cm9sbGVyIGJ1dCBkb24ndCBoYXZlIGEgZ2xvYmFsIGlkIChsaWtlIHN0cmVhbXMg
ZG8pCi0gICAgLy8gb3IgbmVlZCB0byByZWNlaXZlIGFueSBtZXNzYWdlcyBmcm9tIHRoZSBlbWJl
ZGRlciBjbGllbnQuCi0gICAgY2xhc3MgR2VuZXJpY0NsaWVudCA6IHB1YmxpYyBDbGllbnRCYXNl
PGludD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgR2VuZXJpY0NsaWVudCgpIHsgfQotICAgICAg
ICBHZW5lcmljQ2xpZW50KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xs
ZXIsIGludCBpZCkgOiBDbGllbnRCYXNlPGludD4oZnJhbWVDb250cm9sbGVyLCBpZCkgeyB9Ci0g
ICAgICAgIHZpcnR1YWwgfkdlbmVyaWNDbGllbnQoKSB7IHVucmVnaXN0ZXIoKTsgfQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNHZW5lcmljQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXIoKSB7IHVucmVn
aXN0ZXJDbGllbnQodGhpcyk7IH0KLSAgICB9OwotCiAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIoRnJhbWUqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
OwogCkBAIC0xNTEsMTQgKzYyLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBHZW5lcmF0ZVN0
cmVhbU9wdGlvbkZsYWdzIHBhcnNlR2VuZXJhdGVTdHJlYW1PcHRpb25zKGNvbnN0IFN0cmluZyYp
OwogICAgIHZvaWQgZ2VuZXJhdGVTdHJlYW0oY29uc3QgU3RyaW5nJiBvcHRpb25zLCBQYXNzUmVm
UHRyPE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4sIFBhc3NSZWZQdHI8TmF2aWdh
dG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHN0
b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0gICAgdm9pZCBz
ZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5h
YmxlZCk7CiAKICAgICAvLyAtLS0gQ2FsbHMgY29taW5nIGJhY2sgZnJvbSB0aGUgY29udHJvbGxl
ci4gLS0tIC8vCiAKLSAgICB2b2lkIHN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0
cmFja3MpOworICAgIHZvaWQgc3RyZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKTsKICAgICB2b2lkIHN0cmVhbUdlbmVyYXRp
b25GYWlsZWQoaW50IHJlcXVlc3RJZCwgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OkVycm9yQ29k
ZSk7Ci0gICAgdm9pZCBzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CiAK
IHByaXZhdGU6CiAgICAgY2xhc3MgUmVxdWVzdDsKQEAgLTE4MCwzNCArODgsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBhYm9ydEFsbCgpOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSWRUeXBlPgotICAgIGNsYXNzIENsaWVudE1hcEJhc2UgOiBwdWJsaWMgSGFzaE1hcDxJ
ZFR5cGUsIENsaWVudEJhc2U8SWRUeXBlPiogPiB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENsaWVudE1hcEJhc2UpOwotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PElkVHlwZSwgQ2xpZW50QmFzZTxJZFR5cGU+KiA+IE1hcFR5cGU7Ci0KLSAgICAgICAgQ2xpZW50
TWFwQmFzZSgpIHsgfQotICAgICAgICB2b2lkIHVucmVnaXN0ZXJBbGwoKTsKLSAgICAgICAgdm9p
ZCBkZXRhY2hFbWJlZGRlcigpOwotICAgIH07Ci0KLSAgICAvLyBTdHJlYW1zIGFyZSBhIHNwZWNp
YWwgY2xhc3Mgb2YgY2xpZW50cyBzaW5jZSB0aGV5IGFyZSBpZGVudGlmaWVkIGJ5IGEgZ2xvYmFs
IGxhYmVsIHN0cmluZyBpbnN0ZWFkIG9mIGFuIGlkLgotICAgIHR5cGVkZWYgQ2xpZW50TWFwQmFz
ZTxTdHJpbmc+IFN0cmVhbU1hcDsKLQotICAgIC8vIEFsbCBvdGhlciB0eXBlcyBvZiBjbGllbnRz
IHVzZSBhdXRvZ2VuZXJhdGVkIGludGVnZXIgaWRzLgotICAgIGNsYXNzIENsaWVudE1hcCA6IHB1
YmxpYyBJZEdlbmVyYXRvciwgcHVibGljIENsaWVudE1hcEJhc2U8aW50PiB7IH07Ci0KICAgICAv
LyBEZXRhY2hlZCBmcm9tIGEgcGFnZSwgYW5kIGhlbmNlIGZyb20gYSBlbWJlZGRlciBjbGllbnQu
CiAgICAgdm9pZCBlbnRlckRldGFjaGVkU3RhdGUoKTsKIAotICAgIHZvaWQgdW5yZWdpc3RlcihN
ZWRpYVN0cmVhbUNsaWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlcihHZW5lcmljQ2xpZW50Kik7
CiAgICAgTWVkaWFTdHJlYW1Db250cm9sbGVyKiBwYWdlQ29udHJvbGxlcigpIGNvbnN0OwotICAg
IE1lZGlhU3RyZWFtKiBnZXRTdHJlYW1Gcm9tTGFiZWwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAK
ICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHM7Ci0gICAgQ2xpZW50TWFwIG1fY2xpZW50czsKLSAg
ICBTdHJlYW1NYXAgbV9zdHJlYW1zOwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgYm9vbCBt
X2lzSW5EZXRhY2hlZFN0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MGUyNWUz
Li42OWUzNGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDExLTEwLTE3ICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4K
KworICAgICAgICBVcGRhdGUgTWVkaWFTdHJlYW0gdG8gdXNlIFdlYkNvcmUgcGxhdGZvcm0gaW50
ZXJmYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg0NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmVkIFdlYk1lZGlhU3RyZWFtVHJhY2sqIHNpbmNlIHRoZXkgd2lsbCBubyBsb25nZXIgYmUg
bmVlZGVkLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTWVk
aWFTdHJlYW1UcmFjay5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVh
bVRyYWNrTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9XZWJNZWRpYVN0cmVhbVRyYWNr
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3Bw
OiBSZW1vdmVkLgorCiAyMDExLTEwLTE3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gV2ViIEluc3BlY3RvcjogZG9uJ3QgY2hlY2sg
Zm9yIGRlYnVnZ2VyIHBhdXNlIGRldGFpbHMgaW4gaW50ZXJhY3RpdmUgdWkgdGVzdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzZjQ2YTI0Li45MWNkNWVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCkBAIC0yMjgsOCArMjI4LDYgQEAKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk1lZGlhUGxheWVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQ
bGF5ZXJBY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXllckNs
aWVudC5oJywKLSAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaCcs
Ci0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYk1lbnVJdGVtSW5mby5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5lbENsaWVudC5oJywKQEAgLTU1Myw4ICs1NTEsNiBAQAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAgICAnc3JjL1dl
Yk1lZGlhU3RyZWFtVHJhY2suY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhU3Ry
ZWFtVHJhY2tMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOYW1lZE5vZGVNYXAu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY3YjFmYWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJNZWRpYVN0cmVhbVRyYWNrX2gKLSNk
ZWZpbmUgV2ViTWVkaWFTdHJlYW1UcmFja19oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
Ci0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbVRyYWNrOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5nOwotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbVRy
YWNrIHsKLXB1YmxpYzoKLSAgICBXZWJNZWRpYVN0cmVhbVRyYWNrKCkgeyB9Ci0gICAgfldlYk1l
ZGlhU3RyZWFtVHJhY2soKSB7IHJlc2V0KCk7IH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBp
bml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmluZyYga2luZCwgY29u
c3QgV2ViU3RyaW5nJiBsYWJlbCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0g
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KLQot
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYk1lZGlhU3RyZWFtVHJhY2soY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s+Jik7Ci0gICAgb3BlcmF0
b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s+KCkgY29uc3Q7Ci0j
ZW5kaWYKLQotcHJpdmF0ZToKLSAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFt
VHJhY2s+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIFdlYk1lZGlhU3RyZWFtVHJhY2tf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJl
YW1UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3Ry
ZWFtVHJhY2tMaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZWZjN2YuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1U
cmFja0xpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3RfaAotI2RlZmluZSBXZWJNZWRpYVN0cmVh
bVRyYWNrTGlzdF9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbVRyYWNrTGlzdDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYk1lZGlhU3RyZWFtVHJhY2s7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgV2ViVmVjdG9yOwotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdCB7Ci1wdWJsaWM6
Ci0gICAgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QoKSB7IH0KLSAgICB+V2ViTWVkaWFTdHJlYW1U
cmFja0xpc3QoKSB7IHJlc2V0KCk7IH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFs
aXplKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVRyYWNrPiYgd2ViVHJhY2tzKTsKLSAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
Ci0gICAgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0PiYpOwotICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrTGlzdD4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q+IG1f
cHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2su
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1UcmFjay5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NzkwMWMuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1UcmFjay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1UcmFjay5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIKLSNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgV2ViTWVkaWFTdHJlYW1UcmFjazo6
aW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIGlkLCBjb25zdCBXZWJTdHJpbmcmIGtpbmQsIGNv
bnN0IFdlYlN0cmluZyYgbGFiZWwpCi17Ci0gICAgbV9wcml2YXRlID0gV2ViQ29yZTo6TWVkaWFT
dHJlYW1UcmFjazo6Y3JlYXRlKGlkLCBraW5kLCBsYWJlbCk7Ci19Ci0KLXZvaWQgV2ViTWVkaWFT
dHJlYW1UcmFjazo6cmVzZXQoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgpOwotfQotCi1XZWJN
ZWRpYVN0cmVhbVRyYWNrOjpXZWJNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrPiYgdHJhY2spCi0gICAgOiBtX3ByaXZhdGUodHJh
Y2spCi17Ci19Ci0KLVdlYk1lZGlhU3RyZWFtVHJhY2s6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrPigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1ZDU5NWIwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhU3RyZWFtVHJhY2tMaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJNZWRpYVN0cmVh
bVRyYWNrTGlzdC5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtVHJhY2suaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oIgotI2lu
Y2x1ZGUgIldlYk1lZGlhU3RyZWFtVHJhY2suaCIKLSNpbmNsdWRlICJXZWJWZWN0b3IuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdl
Yk1lZGlhU3RyZWFtVHJhY2tMaXN0Ojppbml0aWFsaXplKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRp
YVN0cmVhbVRyYWNrPiYgd2ViVHJhY2tzKQotewotICAgIFRyYWNrVmVjdG9yIHRyYWNrcyh3ZWJU
cmFja3Muc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYlRyYWNrcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgdHJhY2tzW2ldID0gd2ViVHJhY2tzW2ldOwotCi0gICAgbV9wcml2
YXRlID0gTWVkaWFTdHJlYW1UcmFja0xpc3Q6OmNyZWF0ZSh0cmFja3MpOwotfQotCi12b2lkIFdl
Yk1lZGlhU3RyZWFtVHJhY2tMaXN0OjpyZXNldCgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KCk7
Ci19Ci0KLVdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0OjpXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdChj
b25zdCBXVEY6OlBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+JiB0cmFja0xpc3QpCi0g
ICAgOiBtX3ByaXZhdGUodHJhY2tMaXN0KQotewotfQotCi1XZWJNZWRpYVN0cmVhbVRyYWNrTGlz
dDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQo=
</data>
<flag name="review"
          id="109043"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="109451"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111616</attachid>
            <date>2011-10-19 07:40:22 -0700</date>
            <delta_ts>2011-10-19 17:52:28 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>mediastream_use_platform_4.patch</filename>
            <type>text/plain</type>
            <size>54671</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNDE0M2I1Li4yOGU4ZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUg
QEAKKzIwMTEtMTAtMTcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBNZWRpYVN0cmVhbSB0byB1c2UgV2ViQ29yZSBwbGF0Zm9y
bSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAg
VGhpcyBpcyBvbmUgaW4gYSBzZXJpZXMgb2YgcGF0Y2hlcyB0aGF0IHVwZGF0ZSB0aGUgTWVkaWFT
dHJlYW0gZmVhdHVyZQorICAgICAgICB0byB1c2UgV2ViQ29yZSBwbGF0Zm9ybSBpbnRlcmZhY2Vz
LgorCisgICAgICAgIFRlc3RzIHdpbGwgYmUgcHJvdmlkZWQgYnkgaHR0cDovL3dlYmtpdC5vcmcv
Yi81NjU4NworCisgICAgICAgICogZG9tL0xvY2FsTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxNZWRpYVN0cmVhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsTWVkaWFTdHJlYW06OkxvY2FsTWVkaWFTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TG9j
YWxNZWRpYVN0cmVhbTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFt
OjpzdG9wVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFtOjp+
TG9jYWxNZWRpYVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbE1lZGlhU3RyZWFtOjp0
b0xvY2FsTWVkaWFTdHJlYW0pOgorICAgICAgICAqIGRvbS9Mb2NhbE1lZGlhU3RyZWFtLmg6Cisg
ICAgICAgICogZG9tL0xvY2FsTWVkaWFTdHJlYW0uaWRsOgorICAgICAgICAqIGRvbS9NZWRpYVN0
cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpNZWRpYVN0cmVhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbTo6fk1lZGlhU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpzdHJlYW1F
bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk6CisgICAgICAgICogZG9tL01lZGlhU3RyZWFtLmg6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbTo6bGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OnRyYWNr
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6ZGVzY3JpcHRvcik6CisgICAgICAg
ICogZG9tL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1UcmFjazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6Ok1l
ZGlhU3RyZWFtVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6a2lu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpsYWJlbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjplbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2s6OnNldEVuYWJsZWQpOgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVh
bVRyYWNrLmg6CisgICAgICAgICogZG9tL01lZGlhU3RyZWFtVHJhY2suaWRsOgorICAgICAgICAq
IGRvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbVRyYWNrTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2tMaXN0OjpNZWRpYVN0cmVhbVRyYWNrTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbVRyYWNrTGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2tMaXN0OjppdGVtKToKKyAgICAgICAgKiBkb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuaDoKKyAg
ICAgICAgKiBwMnAvUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNv
bm5lY3Rpb246OmFkZFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
cmVtb3ZlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdGVT
dHJlYW1BZGRlZCk6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oOgorICAgICAg
ICAqIHBhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQ29udHJvbGxlcjo6dW5yZWdpc3RlckZyYW1lQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRlZCk6CisgICAg
ICAgICogcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL01lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyOjplbnRlckRldGFjaGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3RyZWFtR2VuZXJhdGVkKToKKyAg
ICAgICAgKiBwYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmg6CisKIDIwMTEtMTAtMTcg
IE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBbQ2hyb21pdW1dIEFkZCBhbiBhYmlsaXR5IHRvIGxvb2sgdXAgYW5kIGV4cGxv
cmUgYW4gb2JqZWN0IGZyb20gYSBoZWFwIHByb2ZpbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9jYWxN
ZWRpYVN0cmVhbS5jcHAKaW5kZXggZGYzNzIyNy4uOTM3ZGE2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Mb2NhbE1lZGlhU3RyZWFtLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDQgKzI4LDM3IEBACiAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0j
aW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIExvY2FsTWVkaWFTdHJlYW06OkRpc3BhdGNoVXBkYXRlVGFzayA6IHB1Ymxp
YyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZv
aWQgKExvY2FsTWVkaWFTdHJlYW06OipDYWxsYmFjaykoKTsKLQotICAgIHN0YXRpYyBQYXNzT3du
UHRyPERpc3BhdGNoVXBkYXRlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8TG9jYWxNZWRpYVN0cmVh
bT4gb2JqZWN0LCBDYWxsYmFjayBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRGlzcGF0Y2hVcGRhdGVUYXNrKG9iamVjdCwgY2FsbGJhY2spKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCi0g
ICAgewotICAgICAgICAobV9vYmplY3QuZ2V0KCktPiptX2NhbGxiYWNrKSgpOwotICAgIH0KLQot
cHVibGljOgotICAgIERpc3BhdGNoVXBkYXRlVGFzayhQYXNzUmVmUHRyPExvY2FsTWVkaWFTdHJl
YW0+IG9iamVjdCwgQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0
KQotICAgICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spIHsgfQorUGFzc1JlZlB0cjxMb2NhbE1l
ZGlhU3RyZWFtPiBMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZXMpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbE1lZGlhU3RyZWFtKGNvbnRleHQsIHNvdXJjZXMp
KTsKK30KIAotICAgIFJlZlB0cjxMb2NhbE1lZGlhU3RyZWFtPiBtX29iamVjdDsKLSAgICBDYWxs
YmFjayBtX2NhbGxiYWNrOwotfTsKK0xvY2FsTWVkaWFTdHJlYW06OkxvY2FsTWVkaWFTdHJlYW0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VW
ZWN0b3ImIHNvdXJjZXMpCisgICAgOiBNZWRpYVN0cmVhbShjb250ZXh0LCBNZWRpYVN0cmVhbURl
c2NyaXB0b3I6OmNyZWF0ZShjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIHNvdXJjZXMpKQor
ICAgICwgbV9zdG9wVGltZXIodGhpcywgJkxvY2FsTWVkaWFTdHJlYW06OnN0b3BUaW1lckZpcmVk
KQoreworfQogCi1QYXNzUmVmUHRyPExvY2FsTWVkaWFTdHJlYW0+IExvY2FsTWVkaWFTdHJlYW06
OmNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBjb25z
dCBTdHJpbmcmIGxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3Mp
Cit2b2lkIExvY2FsTWVkaWFTdHJlYW06OnN0b3AoKQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTG9jYWxNZWRpYVN0cmVhbShmcmFtZUNvbnRyb2xsZXIsIGxhYmVsLCB0cmFja3MpKTsKKyAg
ICBpZiAoIW1fc3RvcFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3RvcFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKIH0KIAotTG9jYWxNZWRpYVN0cmVhbTo6TG9jYWxNZWRpYVN0cmVhbShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIGxh
YmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpCi0gICAgOiBNZWRp
YVN0cmVhbShmcmFtZUNvbnRyb2xsZXIsIGxhYmVsLCB0cmFja3MsIHRydWUpCit2b2lkIExvY2Fs
TWVkaWFTdHJlYW06OnN0b3BUaW1lckZpcmVkKFRpbWVyPExvY2FsTWVkaWFTdHJlYW0+KiB0aW1l
cikKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyLCB0aW1lciA9PSAmbV9zdG9wVGltZXIpOwor
CisgICAgaWYgKHJlYWR5U3RhdGUoKSA9PSBFTkRFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IHRlbGwgdGhlIHBsYXRmb3JtIHRoYXQgdGhlIHN0cmVhbSB3YXMgc3RvcHBlZAor
CisgICAgc3RyZWFtRW5kZWQoKTsKIH0KIAogTG9jYWxNZWRpYVN0cmVhbTo6fkxvY2FsTWVkaWFT
dHJlYW0oKQpAQCAtNzYsNDEgKzcwLDYgQEAgTG9jYWxNZWRpYVN0cmVhbSogTG9jYWxNZWRpYVN0
cmVhbTo6dG9Mb2NhbE1lZGlhU3RyZWFtKCkKICAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBM
b2NhbE1lZGlhU3RyZWFtOjpkZXRhY2hFbWJlZGRlcigpCi17Ci0gICAgLy8gQXNzdW1pbmcgd2Ug
c2hvdWxkIHN0b3AgYW55IGxpdmUgc3RyZWFtcyB3aGVuIGxvc2luZyBhY2Nlc3MgdG8gdGhlIGVt
YmVkZGVyLgotICAgIHN0b3AoKTsKLQotICAgIE1lZGlhU3RyZWFtOjpkZXRhY2hFbWJlZGRlcigp
OwotfQotCi12b2lkIExvY2FsTWVkaWFTdHJlYW06OnN0cmVhbUVuZGVkKCkKLXsKLSAgICBNZWRp
YVN0cmVhbTo6c3RyZWFtRW5kZWQoKTsKLX0KLQotdm9pZCBMb2NhbE1lZGlhU3RyZWFtOjpzdG9w
KCkKLXsKLSAgICBpZiAoIW1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgfHwgbV9yZWFkeVN0
YXRlID09IEVOREVEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcigpLT5zdG9wR2VuZXJhdGVkU3RyZWFtKGxhYmVsKCkpOwotCi0gICAgbV9yZWFkeVN0
YXRlID0gRU5ERUQ7Ci0KLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgaXQgY2FuIGJlIG51bGwg
aW4gZGVnZW5lcmF0ZSBjYXNlcyBsaWtlIGZyYW1lcyBkZXRhY2hlZCBmcm9tIHRoZWlyIHBhZ2Vz
LgotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7
Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhEaXNwYXRjaFVwZGF0ZVRh
c2s6OmNyZWF0ZSh0aGlzLCAmTG9jYWxNZWRpYVN0cmVhbTo6b25TdG9wKSk7Ci19Ci0KLXZvaWQg
TG9jYWxNZWRpYVN0cmVhbTo6b25TdG9wKCkKLXsKLSAgICBkaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmVuZGVkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmgKaW5kZXggNmM4NTQwOC4uMjc4NTI2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzMyArMjksMjYgQEAKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgIlRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgTG9jYWxNZWRpYVN0cmVhbSA6IHB1YmxpYyBNZWRpYVN0cmVhbSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxNZWRpYVN0cmVhbT4gY3JlYXRlKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbE1l
ZGlhU3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IE1lZGlhU3Ry
ZWFtU291cmNlVmVjdG9yJik7CiAgICAgdmlydHVhbCB+TG9jYWxNZWRpYVN0cmVhbSgpOwogCiAg
ICAgdm9pZCBzdG9wKCk7CiAKLSAgICAvLyBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6U3Ry
ZWFtQ2xpZW50IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hFbWJlZGRl
cigpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1FbmRlZCgpOwotCiAgICAgLy8gRXZlbnRUYXJn
ZXQuCiAgICAgdmlydHVhbCBMb2NhbE1lZGlhU3RyZWFtKiB0b0xvY2FsTWVkaWFTdHJlYW0oKTsK
IAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0KIHByaXZhdGU6Ci0gICAgTG9jYWxNZWRpYVN0cmVhbShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7Ci0gICAgY2xhc3MgRGlzcGF0Y2hVcGRhdGVU
YXNrOwotICAgIGZyaWVuZCBjbGFzcyBEaXNwYXRjaFVwZGF0ZVRhc2s7CisgICAgTG9jYWxNZWRp
YVN0cmVhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VW
ZWN0b3ImKTsKIAotICAgIHZvaWQgb25TdG9wKCk7CisgICAgdm9pZCBzdG9wVGltZXJGaXJlZChU
aW1lcjxMb2NhbE1lZGlhU3RyZWFtPiopOworCisgICAgVGltZXI8TG9jYWxNZWRpYVN0cmVhbT4g
bV9zdG9wVGltZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTG9jYWxNZWRpYVN0cmVhbS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTG9jYWxNZWRpYVN0cmVhbS5pZGwKaW5kZXggZTQ3MjVhMC4uMTVhMmM0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvY2FsTWVkaWFTdHJlYW0uaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Mb2NhbE1lZGlhU3RyZWFtLmlkbApAQCAtMjcsNyArMjcsOCBAQCBtb2R1bGUg
Y29yZSB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFN
LAogICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKLSAgICAgICAgRXZlbnRUYXJnZXQK
KyAgICAgICAgRXZlbnRUYXJnZXQsCisgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gTG9jYWxN
ZWRpYVN0cmVhbSA6IE1lZGlhU3RyZWFtIHsKICAgICAgICAgdm9pZCBzdG9wKCk7CiAgICAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uY3BwCmluZGV4IGIwOWZiYTIuLmE1M2M4OTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL01lZGlhU3RyZWFtLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjAgKzMzLDM1IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0ZShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIGxh
YmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MsIGJvb2wgaXNMb2Nh
bE1lZGlhU3RyZWFtKQorUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
RGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRvcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE1lZGlhU3RyZWFtKGZyYW1lQ29udHJvbGxlciwgbGFiZWwsIHRyYWNrcywgaXNMb2NhbE1lZGlh
U3RyZWFtKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbShjb250ZXh0LCBz
dHJlYW1EZXNjcmlwdG9yKSk7CiB9CiAKLU1lZGlhU3RyZWFtOjpNZWRpYVN0cmVhbShNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIGxhYmVs
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MsIGJvb2wgaXNMb2NhbE1l
ZGlhU3RyZWFtKQotICAgIDogTWVkaWFTdHJlYW1DbGllbnQoZnJhbWVDb250cm9sbGVyLCBsYWJl
bCwgaXNMb2NhbE1lZGlhU3RyZWFtKQotICAgICwgbV9yZWFkeVN0YXRlKExJVkUpCi0gICAgLCBt
X3RyYWNrcyh0cmFja3MpCitNZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVh
bURlc2NyaXB0b3IpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAg
ICAsIG1fZGVzY3JpcHRvcihzdHJlYW1EZXNjcmlwdG9yKQogeworICAgIG1fZGVzY3JpcHRvci0+
c2V0T3duZXIodGhpcyk7CisKKyAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIHRyYWNrVmVjdG9y
OworICAgIHNpemVfdCBudW1iZXJPZlRyYWNrcyA9IG1fZGVzY3JpcHRvci0+bnVtYmVyT2ZDb21w
b25lbnRzKCk7CisKKyAgICB0cmFja1ZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZUcmFj
a3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUcmFja3M7IGkrKykKKyAg
ICAgICAgdHJhY2tWZWN0b3IuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShtX2Rlc2Ny
aXB0b3IsIGkpKTsKKworICAgIG1fdHJhY2tzID0gTWVkaWFTdHJlYW1UcmFja0xpc3Q6OmNyZWF0
ZSh0cmFja1ZlY3Rvcik7CiB9CiAKIE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0oKQogeworICAg
IG1fZGVzY3JpcHRvci0+c2V0T3duZXIoMCk7Cit9CisKK01lZGlhU3RyZWFtOjpSZWFkeVN0YXRl
IE1lZGlhU3RyZWFtOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZXNjcmlw
dG9yLT5lbmRlZCgpID8gRU5ERUQgOiBMSVZFOwogfQogCiBNZWRpYVN0cmVhbSogTWVkaWFTdHJl
YW06OnRvTWVkaWFTdHJlYW0oKQpAQCAtNTUsMTQgKzcxLDE3IEBAIE1lZGlhU3RyZWFtKiBNZWRp
YVN0cmVhbTo6dG9NZWRpYVN0cmVhbSgpCiAKIHZvaWQgTWVkaWFTdHJlYW06OnN0cmVhbUVuZGVk
KCkKIHsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlICE9IEVOREVEKTsKLSAgICBtX3JlYWR5U3Rh
dGUgPSBFTkRFRDsKKyAgICBpZiAocmVhZHlTdGF0ZSgpID09IEVOREVEKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Rlc2NyaXB0b3ItPnNldEVuZGVkKCk7CisKICAgICBkaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZGVkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwog
fQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZWRpYVN0cmVhbTo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KCkgPyBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgOiAwOworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7CiB9CiAK
IEV2ZW50VGFyZ2V0RGF0YSogTWVkaWFTdHJlYW06OmV2ZW50VGFyZ2V0RGF0YSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZWRpYVN0cmVhbS5oCmluZGV4IGE2MTk1NjAuLmMzM2I1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRp
YVN0cmVhbS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNz
c29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNywzOSArMjgsMzcgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRl
ICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVz
Y3JpcHRvci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgiCi0jaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRp
YVN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtPiwKLSAgICAgICAgICAgICAg
ICAgICAgcHVibGljIEV2ZW50VGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Ok1lZGlhU3RyZWFtQ2xpZW50IHsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIE1lZGlhU3RyZWFtIDogcHVibGljIFJlZkNvdW50
ZWQ8TWVkaWFTdHJlYW0+LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVibGljOgogICAgIC8vIE11
c3QgbWF0Y2ggdGhlIGNvbnN0YW50cyBpbiB0aGUgLmlkbCBmaWxlLgotICAgIGVudW0geworICAg
IGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIExJVkUgPSAxLAogICAgICAgICBFTkRFRCA9IDIK
ICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IGNyZWF0ZShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcywgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0gPSBm
YWxzZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KTsKICAg
ICB2aXJ0dWFsIH5NZWRpYVN0cmVhbSgpOwogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihlbmRlZCk7CiAKLSAgICB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBsYWJlbCgpIGNvbnN0
IHsgcmV0dXJuIGNsaWVudElkKCk7IH0KKyAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25z
dDsKKyAgICBTdHJpbmcgbGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3ItPmxhYmVs
KCk7IH0KIAotICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcygpIHsg
cmV0dXJuIG1fdHJhY2tzOyB9CisgICAgTWVkaWFTdHJlYW1UcmFja0xpc3QqIHRyYWNrcygpIHsg
cmV0dXJuIG1fdHJhY2tzLmdldCgpOyB9CiAKLSAgICAvLyBNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlcjo6TWVkaWFTdHJlYW1DbGllbnQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lk
IHN0cmVhbUVuZGVkKCk7CisgICAgdm9pZCBzdHJlYW1FbmRlZCgpOworCisgICAgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdG9yLmdl
dCgpOyB9CiAKICAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IE1lZGlhU3RyZWFtKiB0b01lZGlhU3RyZWFtKCk7CkBAIC02OSwyNCArNjgsMjMgQEAgcHVibGlj
OgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW0+OjpkZXJlZjsKIAogcHJvdGVjdGVk
OgotICAgIE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgY29uc3QgU3Ry
aW5nJiBsYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzLCBib29s
IGlzTG9jYWxNZWRpYVN0cmVhbSk7CisgICAgTWVkaWFTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CiAKICAgICAvLyBFdmVu
dFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZl
bnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50
VGFyZ2V0RGF0YSgpOwogCi0gICAgdW5zaWduZWQgc2hvcnQgbV9yZWFkeVN0YXRlOwotCiBwcml2
YXRlOgotICAgIHZvaWQgb25FbmRlZCgpOwotCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50
YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKICAgICBFdmVu
dFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworCiAgICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tMaXN0PiBtX3RyYWNrczsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlw
dG9yPiBtX2Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5jcHAKaW5kZXggYmU0Y2JmNy4uYmU4NTk0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTYgKzMwLDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0
cmVhbVRyYWNrOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBraW5kLCBj
b25zdCBTdHJpbmcmIGxhYmVsKQorUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0
cmVhbVRyYWNrOjpjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVh
bURlc2NyaXB0b3IsIHNpemVfdCB0cmFja0luZGV4KQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVkaWFTdHJlYW1UcmFjayhpZCwga2luZCwgbGFiZWwpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhU3RyZWFtVHJhY2soc3RyZWFtRGVzY3JpcHRvciwgdHJhY2tJbmRleCkpOwog
fQogCi1NZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IFN0cmluZyYgaWQs
IGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKLSAgICA6IG1faWQoaWQp
Ci0gICAgLCBtX2tpbmQoa2luZCkKLSAgICAsIG1fbGFiZWwobGFiZWwpCi0gICAgLCBtX2VuYWJs
ZWQodHJ1ZSkKK01lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3IsIHNpemVfdCB0cmFja0luZGV4
KQorICAgIDogbV9zdHJlYW1EZXNjcmlwdG9yKHN0cmVhbURlc2NyaXB0b3IpCisgICAgLCBtX3Ry
YWNrSW5kZXgodHJhY2tJbmRleCkKIHsKIH0KIApAQCAtNDYsMjcgKzQ1LDM5IEBAIE1lZGlhU3Ry
ZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKIHsKIH0KIAotY29uc3QgU3RyaW5nJiBNZWRp
YVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKK1N0cmluZyBNZWRpYVN0cmVhbVRyYWNrOjpraW5k
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9raW5kOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBhdWRpb0tpbmQsICgiYXVkaW8iKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIHZpZGVvS2luZCwgKCJ2aWRlbyIpKTsKKworICAgIHN3aXRjaCAobV9zdHJlYW1EZXNj
cmlwdG9yLT5jb21wb25lbnQobV90cmFja0luZGV4KS0+c291cmNlKCktPnR5cGUoKSkgeworICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbzoKKyAgICAgICAgcmV0dXJuIGF1ZGlv
S2luZDsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlVmlkZW86CisgICAgICAgIHJl
dHVybiB2aWRlb0tpbmQ7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LWNvbnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6bGFiZWwoKSBjb25zdAorU3RyaW5nIE1l
ZGlhU3RyZWFtVHJhY2s6OmxhYmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9sYWJlbDsKKyAg
ICByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdG9yLT5jb21wb25lbnQobV90cmFja0luZGV4KS0+c291
cmNlKCktPm5hbWUoKTsKIH0KIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjplbmFibGVkKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9lbmFibGVkOworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0
b3ItPmNvbXBvbmVudChtX3RyYWNrSW5kZXgpLT5lbmFibGVkKCk7CiB9CiAKIHZvaWQgTWVkaWFT
dHJlYW1UcmFjazo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9lbmFibGVkID0g
ZW5hYmxlZDsKKyAgICBpZiAoZW5hYmxlZCA9PSBtX3N0cmVhbURlc2NyaXB0b3ItPmNvbXBvbmVu
dChtX3RyYWNrSW5kZXgpLT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcigpLT5zZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChtX2lkLCBlbmFibGVkKTsKKyAg
ICBtX3N0cmVhbURlc2NyaXB0b3ItPmNvbXBvbmVudChtX3RyYWNrSW5kZXgpLT5zZXRFbmFibGVk
KGVuYWJsZWQpOworCisgICAgLy8gRklYTUU6IHRlbGwgdGhlIHBsYXRmb3JtIHRoYXQgdGhlIHRy
YWNrIHdhcyBlbmFibGVkL2Rpc2FibGVkCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFjay5oCmluZGV4IDMyMjJkYzcuLjM2MGYzZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzYgKzI4LDMzIEBACiAKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQogCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2sg
OiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrPiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OkdlbmVyaWNDbGllbnQg
eworY2xhc3MgTWVkaWFTdHJlYW1UcmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFt
VHJhY2s+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJp
bmcmIGxhYmVsKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+LCBzaXplX3QgdHJhY2tJbmRleCk7
CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1UcmFjaygpOwogCi0gICAgY29uc3QgU3RyaW5nJiBr
aW5kKCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiBsYWJlbCgpIGNvbnN0OworICAgIFN0cmlu
ZyBraW5kKCkgY29uc3Q7CisgICAgU3RyaW5nIGxhYmVsKCkgY29uc3Q7CiAKICAgICBib29sIGVu
YWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2
b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1UcmFjayhj
b25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwp
OworICAgIE1lZGlhU3RyZWFtVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+
LCBzaXplX3QgdHJhY2tJbmRleCk7CiAKLSAgICBTdHJpbmcgbV9pZDsKLSAgICBTdHJpbmcgbV9r
aW5kOwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIGJvb2wgbV9lbmFibGVkOworICAgIFJlZlB0
cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1fc3RyZWFtRGVzY3JpcHRvcjsKKyAgICBjb25zdCBz
aXplX3QgbV90cmFja0luZGV4OwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lZGlhU3Ry
ZWFtVHJhY2s+ID4gVHJhY2tWZWN0b3I7Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1UcmFjaz4gPiBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrLmlkbAppbmRleCAyOTg3NWFh
Li43OTg3NTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFj
ay5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2suaWRsCkBAIC0y
Nyw5ICsyNyw5IEBAIG1vZHVsZSBjb3JlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25k
aXRpb25hbD1NRURJQV9TVFJFQU0sCiAgICAgXSBNZWRpYVN0cmVhbVRyYWNrIHsKLSAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcga2luZDsKLSAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbGFiZWw7Ci0gICAgICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBlbmFi
bGVkOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtpbmQ7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFiZWw7CisgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBib29sZWFuIGVuYWJsZWQ7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAKaW5kZXggNmZjYzY3Yy4uOTJiZjBmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMyArMzAsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0
PiBNZWRpYVN0cmVhbVRyYWNrTGlzdDo6Y3JlYXRlKGNvbnN0IFRyYWNrVmVjdG9yJiB0cmFja3Mp
CitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiBNZWRpYVN0cmVhbVRyYWNrTGlzdDo6
Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tWZWN0b3ImIHRyYWNrVmVjdG9yKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1UcmFja0xpc3QodHJhY2tzKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrTGlzdCh0cmFja1ZlY3RvcikpOwog
fQogCi1NZWRpYVN0cmVhbVRyYWNrTGlzdDo6TWVkaWFTdHJlYW1UcmFja0xpc3QoY29uc3QgVHJh
Y2tWZWN0b3ImIHRyYWNrcykKLSAgICA6IG1fdHJhY2tzKHRyYWNrcykKK01lZGlhU3RyZWFtVHJh
Y2tMaXN0OjpNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25zdCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9y
JiB0cmFja1ZlY3RvcikKKyAgICA6IG1fdHJhY2tWZWN0b3IodHJhY2tWZWN0b3IpCiB7CiB9CiAK
QEAgLTQ1LDE1ICs0NiwxMyBAQCBNZWRpYVN0cmVhbVRyYWNrTGlzdDo6fk1lZGlhU3RyZWFtVHJh
Y2tMaXN0KCkKIAogdW5zaWduZWQgTWVkaWFTdHJlYW1UcmFja0xpc3Q6Omxlbmd0aCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fdHJhY2tzLnNpemUoKTsKKyAgICByZXR1cm4gbV90cmFja1ZlY3Rv
ci5zaXplKCk7CiB9CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFTdHJlYW1U
cmFja0xpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CitNZWRpYVN0cmVhbVRyYWNrKiBN
ZWRpYVN0cmVhbVRyYWNrTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBp
ZiAoaW5kZXggPCBtX3RyYWNrcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX3RyYWNrcy5hdChp
bmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrPigpOworICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAgICByZXR1cm4gbV90cmFj
a1ZlY3RvcltpbmRleF0uZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtVHJhY2tMaXN0LmgKaW5kZXggMWVmZTZhZS4uNGQ2MWY4
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbVRyYWNrTGlzdC5oCkBAIC0yOCwy
OCArMjgsMjIgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1UcmFjay5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgTWVkaWFTdHJlYW1UcmFja0xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtVHJhY2tMaXN0PiBjcmVhdGUoY29uc3QgVHJhY2tWZWN0b3ImIG1fdHJhY2tzKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gY3JlYXRlKGNvbnN0
IE1lZGlhU3RyZWFtVHJhY2tWZWN0b3ImKTsKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNr
TGlzdCgpOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBNZWRpYVN0cmVh
bVRyYWNrTGlzdAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFjaz4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2b2lk
IGFzc29jaWF0ZVN0cmVhbShjb25zdCBTdHJpbmcmIGxhYmVsKSB7IG1fYXNzb2NpYXRlZFN0cmVh
bUxhYmVsID0gbGFiZWw7IH0KKyAgICBNZWRpYVN0cmVhbVRyYWNrKiBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25zdCBU
cmFja1ZlY3RvciYgbV90cmFja3MpOworICAgIE1lZGlhU3RyZWFtVHJhY2tMaXN0KGNvbnN0IE1l
ZGlhU3RyZWFtVHJhY2tWZWN0b3ImKTsKIAotICAgIFRyYWNrVmVjdG9yIG1fdHJhY2tzOwotICAg
IFN0cmluZyBtX2Fzc29jaWF0ZWRTdHJlYW1MYWJlbDsKKyAgICBNZWRpYVN0cmVhbVRyYWNrVmVj
dG9yIG1fdHJhY2tWZWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCBkN2ZhMjAxLi5hY2ExZDdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTEyOSw4ICsxMjksNyBAQCB2b2lkIFBl
ZXJDb25uZWN0aW9uOjphZGRTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFt
LCBFeGNlcHRpb25Db2RlJgogCiAgICAgbV9sb2NhbFN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOwog
Ci0gICAgLy8gRklYTUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVzY3JpcHRvcigpIHdoZW4gaXQncyBh
dmFpbGFibGUsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0Ci0gICAgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yID0gMDsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0
b3IqIHN0cmVhbURlc2NyaXB0b3IgPSBzdHJlYW0tPmRlc2NyaXB0b3IoKTsKICAgICBzaXplX3Qg
aSA9IG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsKICAgICBp
ZiAoaSAhPSBub3RGb3VuZCkgewogICAgICAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLnJlbW92
ZShpKTsKQEAgLTE1Niw4ICsxNTUsNyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJl
YW0oTWVkaWFTdHJlYW0qIHN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICBtX2xvY2Fs
U3RyZWFtcy0+cmVtb3ZlKHN0cmVhbSk7CiAKLSAgICAvLyBGSVhNRTogZ2V0IGZyb20gc3RyZWFt
LT5kZXNjcmlwdG9yKCkgd2hlbiBpdCdzIGF2YWlsYWJsZSwgc2VlIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNjg0NjQKLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IgPSAw
OworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IHN0cmVhbS0+
ZGVzY3JpcHRvcigpOwogICAgIHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3RyZWFtcy5maW5kKHN0
cmVhbURlc2NyaXB0b3IpOwogICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIG1fcGVu
ZGluZ0FkZFN0cmVhbXMucmVtb3ZlKGkpOwpAQCAtMjE1LDggKzIxMyw3IEBAIHZvaWQgUGVlckNv
bm5lY3Rpb246OnJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlw
dG9yPiBzdHJlYW1ECiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIEZJWE1FOiBjcmVhdGUgYSBuZXcgTWVkaWFTdHJlYW0gZnJvbSB0aGUg
c3RyZWFtRGVzY3JpcHRvciBvbmNlIGl0J3MgcG9zc2libGUsIHNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzY4NDY0Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSAwOworICAgIFJlZlB0
cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHN0cmVhbURlc2NyaXB0b3IpOwogICAgIG1fcmVtb3RlU3RyZWFtcy0+YXBw
ZW5kKHN0cmVhbSk7CiAKICAgICBkaXNwYXRjaEV2ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuYWRkc3RyZWFtRXZlbnQsIGZhbHNlLCBmYWxzZSwgc3RyZWFtLnJlbGVh
c2UoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCmluZGV4IDBmYzZl
NWYuLmFmOTA5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1D
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKQEAg
LTQ2LDggKzQ2LDYgQEAgcHVibGljOgogICAgIC8vIE1lZGlhU3RyZWFtIGZ1bmN0aW9ucy4KICAg
ICB2aXJ0dWFsIHZvaWQgbWVkaWFTdHJlYW1EZXN0cm95ZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlU3RyZWFtKGludCByZXF1ZXN0SWQsIEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxh
Z3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNr
SWQsIGJvb2wgZW5hYmxlZCkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TWVkaWFT
dHJlYW1DbGllbnQoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFT
dHJlYW1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250
cm9sbGVyLmNwcAppbmRleCBjODg1NTJmLi5kNGUzMDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0xpc3QuaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODEsMTYgKzgwLDYgQEAg
dm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnVucmVnaXN0ZXJGcmFtZUNvbnRyb2xsZXIoTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIKIAogICAgIGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9y
IGl0ID0gZnJhbWVSZXF1ZXN0cy5iZWdpbigpOyBpdCAhPSBmcmFtZVJlcXVlc3RzLmVuZCgpOyAr
K2l0KQogICAgICAgICBtX3JlcXVlc3RzLnJlbW92ZSgqaXQpOwotCi0gICAgVmVjdG9yPFN0cmlu
Zz4gZnJhbWVTdHJlYW1zOwotICAgIGZvciAoU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IG1fc3Ry
ZWFtcy5iZWdpbigpOyBpdCAhPSBtX3N0cmVhbXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGlmIChp
dC0+c2Vjb25kID09IGZyYW1lQ29udHJvbGxlcikKLSAgICAgICAgICAgIGZyYW1lU3RyZWFtcy5h
cHBlbmQoaXQtPmZpcnN0KTsKLQotICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0
ID0gZnJhbWVTdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGZyYW1lU3RyZWFtcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgbV9zdHJlYW1zLnJlbW92ZSgqaXQpOwotCi0gICAgLy8gRklYTUU6IEFkZCB1bnJl
Z2lzdGVyIGZ1bmN0aW9uYWxpdHkgZm9yIHBlZXIgY29ubmVjdGlvbiBvYmplY3RzLgogfQogCiBp
bnQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpyZWdpc3RlclJlcXVlc3QoaW50IGxvY2FsSWQsIE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIpCkBAIC0xMDEsMTMgKzkw
LDYgQEAgaW50IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6cmVnaXN0ZXJSZXF1ZXN0KGludCBsb2Nh
bElkLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGwKICAgICByZXR1cm4gbV9uZXh0R2xvYmFsUmVx
dWVzdElkKys7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpyZWdpc3RlclN0cmVh
bShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciog
ZnJhbWVDb250cm9sbGVyKQotewotICAgIEFTU0VSVChmcmFtZUNvbnRyb2xsZXIpOwotICAgIEFT
U0VSVCghbV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbUxhYmVsKSk7Ci0gICAgbV9zdHJlYW1zLmFk
ZChzdHJlYW1MYWJlbCwgZnJhbWVDb250cm9sbGVyKTsKLX0KLQogdm9pZCBNZWRpYVN0cmVhbUNv
bnRyb2xsZXI6OmdlbmVyYXRlU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFt
ZUNvbnRyb2xsZXIsIGludCBsb2NhbElkLCBHZW5lcmF0ZVN0cmVhbU9wdGlvbkZsYWdzIGZsYWdz
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBBU1NF
UlQobV9jbGllbnQpOwpAQCAtMTE1LDI1ICs5NywxNCBAQCB2b2lkIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6Z2VuZXJhdGVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29u
dAogICAgIG1fY2xpZW50LT5nZW5lcmF0ZVN0cmVhbShjb250cm9sbGVyUmVxdWVzdElkLCBmbGFn
cywgc2VjdXJpdHlPcmlnaW4pOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3Rv
cEdlbmVyYXRlZFN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIG1fY2xp
ZW50LT5zdG9wR2VuZXJhdGVkU3RyZWFtKHN0cmVhbUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0
cmVhbUNvbnRyb2xsZXI6OnNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKGNvbnN0IFN0cmluZyYg
dHJhY2tJZCwgYm9vbCBlbmFibGVkKQotewotICAgIG1fY2xpZW50LT5zZXRNZWRpYVN0cmVhbVRy
YWNrRW5hYmxlZCh0cmFja0lkLCBlbmFibGVkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRy
b2xsZXI6OnN0cmVhbUdlbmVyYXRlZChpbnQgY29udHJvbGxlclJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tz
KQordm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRlZChpbnQgY29udHJv
bGxlclJlcXVlc3RJZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZXMpCiB7
CiAgICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZl
IGJlZW4gZGVzdHJveWVkIHdoaWxlIHRoZSByZXF1ZXN0IHJlcGx5IHdhcyBjb21pbmcgYmFjay4K
ICAgICBpZiAobV9yZXF1ZXN0cy5jb250YWlucyhjb250cm9sbGVyUmVxdWVzdElkKSkgewogICAg
ICAgICBjb25zdCBSZXF1ZXN0JiByZXF1ZXN0ID0gbV9yZXF1ZXN0cy5nZXQoY29udHJvbGxlclJl
cXVlc3RJZCk7Ci0gICAgICAgIHJlZ2lzdGVyU3RyZWFtKHN0cmVhbUxhYmVsLCByZXF1ZXN0LmZy
YW1lQ29udHJvbGxlcigpKTsKICAgICAgICAgbV9yZXF1ZXN0cy5yZW1vdmUoY29udHJvbGxlclJl
cXVlc3RJZCk7CiAgICAgICAgIEFTU0VSVChyZXF1ZXN0LmZyYW1lQ29udHJvbGxlcigpKTsKLSAg
ICAgICAgcmVxdWVzdC5mcmFtZUNvbnRyb2xsZXIoKS0+c3RyZWFtR2VuZXJhdGVkKHJlcXVlc3Qu
bG9jYWxJZCgpLCBzdHJlYW1MYWJlbCwgdHJhY2tzKTsKKyAgICAgICAgcmVxdWVzdC5mcmFtZUNv
bnRyb2xsZXIoKS0+c3RyZWFtR2VuZXJhdGVkKHJlcXVlc3QubG9jYWxJZCgpLCBzb3VyY2VzKTsK
ICAgICB9CiB9CiAKQEAgLTE0NywxMyArMTE4LDYgQEAgdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xs
ZXI6OnN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IGNvbnRyb2xsZXJSZXF1ZXN0SWQsIE5hdmkK
ICAgICB9CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1GYWlsZWQoY29u
c3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhl
IGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQgYnkgdGhlIHRpbWUgdGhp
cyBpcyBjYWxsZWQuCi0gICAgaWYgKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW1MYWJlbCkpCi0g
ICAgICAgIG1fc3RyZWFtcy5nZXQoc3RyZWFtTGFiZWwpLT5zdHJlYW1GYWlsZWQoc3RyZWFtTGFi
ZWwpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmgK
aW5kZXggMTBhYzRjZS4uNDg5MzA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9N
ZWRpYVN0cmVhbUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtQ29udHJvbGxlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2xpZW50LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJl
YW1Tb3VyY2UuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM4LDcgKzM5
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVN0cmVhbUNsaWVudDsKIGNs
YXNzIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOwotY2xhc3MgTWVkaWFTdHJlYW1UcmFja0xp
c3Q7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogY2xhc3MgTWVkaWFTdHJlYW1Db250cm9sbGVy
IHsKQEAgLTUxLDI1ICs1MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bnJlZ2lzdGVyRnJhbWVD
b250cm9sbGVyKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKik7CiAKICAgICB2b2lkIGdlbmVy
YXRlU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IHJlcXVlc3RJZCwgR2Vu
ZXJhdGVTdHJlYW1PcHRpb25GbGFncywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOwotICAg
IHZvaWQgc3RvcEdlbmVyYXRlZFN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKIAot
ICAgIC8vIEVuYWJsZS9kaXNhYmxlIGFuIHRyYWNrLgotICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1U
cmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwotCi0gICAg
dm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKKyAgICB2b2lk
IHN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVzdElkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZl
Y3RvciYgc291cmNlcyk7CiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCByZXF1
ZXN0SWQsIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwotICAgIHZvaWQgc3Ry
ZWFtRmFpbGVkKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogCiBwcml2YXRlOgogICAgIGlu
dCByZWdpc3RlclJlcXVlc3QoaW50IGxvY2FsUmVxdWVzdElkLCBNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlciopOwotICAgIHZvaWQgcmVnaXN0ZXJTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqKTsKIAogICAgIGNsYXNzIFJlcXVlc3Q7
CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVxdWVzdD4gUmVxdWVzdE1hcDsKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcio+IFN0cmVhbU1h
cDsKIAogICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0czsKLSAgICBTdHJlYW1NYXAgbV9zdHJlYW1z
OwogCiAgICAgTWVkaWFTdHJlYW1DbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX25leHRHbG9i
YWxSZXF1ZXN0SWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIuY3BwCmluZGV4IDZmNmVjZTcuLmEzYTE4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJMb2NhbE1lZGlhU3RyZWFtLmgi
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJl
YW1UcmFja0xpc3QuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgpAQCAtNDgsOCArNDcsNiBAQCBwdWJsaWM6CiAKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlzR2VuZXJhdGVTdHJl
YW1SZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWNvcmRlZERhdGFSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNTaWduYWxpbmdSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKIApAQCAtMTE1LDI0ICsxMTIsNiBAQCB2b2lkIE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpSZXF1ZXN0TWFwOjphYm9ydEFsbCgpCiAgICAgfQog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXI6OkNsaWVudE1hcEJhc2U8VD46OnVucmVnaXN0ZXJBbGwoKQotewotICAgIHdoaWxlICghdGhp
cy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIFQga2V5ID0gdGhpcy0+YmVnaW4oKS0+Zmlyc3Q7Ci0g
ICAgICAgIC8vIHVucmVnaXN0ZXIgc2hvdWxkIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBt
YXAuCi0gICAgICAgIHRoaXMtPmJlZ2luKCktPnNlY29uZC0+dW5yZWdpc3RlcigpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKGtleSwgIXRoaXMtPmNvbnRhaW5zKGtleSkpOwotICAgIH0KLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpD
bGllbnRNYXBCYXNlPFQ+OjpkZXRhY2hFbWJlZGRlcigpCi17Ci0gICAgZm9yICh0eXBlbmFtZSBN
YXBUeXBlOjppdGVyYXRvciBpdCA9IHRoaXMtPmJlZ2luKCk7IGl0ICE9IHRoaXMtPmVuZCgpOyAr
K2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5kZXRhY2hFbWJlZGRlcigpOwotfQotCiBNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcjo6TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoRnJhbWUqIGZy
YW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1faXNJbkRldGFjaGVkU3RhdGUoZmFs
c2UpCkBAIC0xNjAsMzMgKzEzOSw2IEBAIE1lZGlhU3RyZWFtQ29udHJvbGxlciogTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXI6OnBhZ2VDb250cm9sbGVyKCkgY29uc3QKICAgICByZXR1cm4gbV9m
cmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPm1lZGlhU3RyZWFtQ29u
dHJvbGxlcigpIDogMDsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6dW5y
ZWdpc3RlcihNZWRpYVN0cmVhbUNsaWVudCogY2xpZW50KQotewotICAgIEFTU0VSVChtX3N0cmVh
bXMuY29udGFpbnMoY2xpZW50LT5jbGllbnRJZCgpKSk7Ci0KLSAgICAvLyBBc3N1bWluZyB3ZSBz
aG91bGQgc3RvcCBhbnkgbGl2ZSBzdHJlYW1zIHdoZW4gbG9zaW5nIGFjY2VzcyB0byB0aGUgZW1i
ZWRkZXIuCi0gICAgaWYgKGNsaWVudC0+aXNMb2NhbE1lZGlhU3RyZWFtKCkpIHsKLSAgICAgICAg
TG9jYWxNZWRpYVN0cmVhbSogc3RyZWFtID0gc3RhdGljX2Nhc3Q8TG9jYWxNZWRpYVN0cmVhbSo+
KGNsaWVudCk7Ci0gICAgICAgIGlmIChzdHJlYW0tPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVN0cmVh
bTo6TElWRSkKLSAgICAgICAgICAgIHN0b3BHZW5lcmF0ZWRTdHJlYW0oc3RyZWFtLT5sYWJlbCgp
KTsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbXMucmVtb3ZlKGNsaWVudC0+Y2xpZW50SWQoKSk7Ci19
Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnVucmVnaXN0ZXIoR2VuZXJpY0Ns
aWVudCogY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50LT5j
bGllbnRJZCgpKSk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZShjbGllbnQtPmNsaWVudElkKCkpOwot
fQotCi1NZWRpYVN0cmVhbSogTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmdldFN0cmVhbUZy
b21MYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdAotewotICAgIEFTU0VSVChtX3N0cmVh
bXMuY29udGFpbnMobGFiZWwpKTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmdldChsYWJlbCktPmlz
TWVkaWFTdHJlYW0oKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtKj4obV9z
dHJlYW1zLmdldChsYWJlbCkpOwotfQotCiB2b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
OjplbnRlckRldGFjaGVkU3RhdGUoKQogewogICAgIGlmIChtX2lzSW5EZXRhY2hlZFN0YXRlKSB7
CkBAIC0xOTUsOCArMTQ3LDYgQEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6ZW50
ZXJEZXRhY2hlZFN0YXRlKCkKICAgICB9CiAKICAgICBtX3JlcXVlc3RzLmFib3J0QWxsKCk7Ci0g
ICAgbV9zdHJlYW1zLmRldGFjaEVtYmVkZGVyKCk7Ci0gICAgbV9jbGllbnRzLmRldGFjaEVtYmVk
ZGVyKCk7CiAgICAgbV9pc0luRGV0YWNoZWRTdGF0ZSA9IHRydWU7CiB9CiAKQEAgLTIyNCw4ICsx
NzQsNiBAQCB2b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpkaXNjb25uZWN0RnJhbWUo
KQogICAgIGRpc2Nvbm5lY3RQYWdlKCk7CiAKICAgICBBU1NFUlQobV9yZXF1ZXN0cy5pc0VtcHR5
KCkpOwotICAgIG1fc3RyZWFtcy51bnJlZ2lzdGVyQWxsKCk7Ci0gICAgbV9jbGllbnRzLnVucmVn
aXN0ZXJBbGwoKTsKIAogICAgIG1fZnJhbWUgPSAwOwogfQpAQCAtMjk4LDQzICsyNDYsMTYgQEAg
dm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6Z2VuZXJhdGVTdHJlYW0oY29uc3QgU3Ry
aW5nJiBvcHRpb25zLAogICAgIHBhZ2VDb250cm9sbGVyKCktPmdlbmVyYXRlU3RyZWFtKHRoaXMs
IHJlcXVlc3RJZCwgZmxhZ3MsIHNlY3VyaXR5T3JpZ2luKCkpOwogfQogCi12b2lkIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyOjpzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0cmluZyYgc3Ry
ZWFtTGFiZWwpCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW1MYWJlbCkp
OwotICAgIEFTU0VSVChtX3N0cmVhbXMuZ2V0KHN0cmVhbUxhYmVsKS0+aXNMb2NhbE1lZGlhU3Ry
ZWFtKCkpOwotCi0gICAgaWYgKGlzQ2xpZW50QXZhaWxhYmxlKCkpCi0gICAgICAgIHBhZ2VDb250
cm9sbGVyKCktPnN0b3BHZW5lcmF0ZWRTdHJlYW0oc3RyZWFtTGFiZWwpOwotfQotCi12b2lkIE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25z
dCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoaXNDbGllbnRBdmFp
bGFibGUoKSkKLSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+c2V0TWVkaWFTdHJlYW1UcmFja0Vu
YWJsZWQodHJhY2tJZCwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXI6OnN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGxhYmVs
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3NQYXJhbSkKK3ZvaWQgTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVzdElkLCBj
b25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlcykKIHsKICAgICAvLyBEb24ndCBh
c3NlcnQgc2luY2UgdGhlIHJlcXVlc3QgY2FuIGhhdmUgYmVlbiBhYm9ydGVkIGFzIGEgcmVzdWx0
IG9mIGVtYmVkZGVyIGRldGFjaG1lbnQuCiAgICAgaWYgKCFtX3JlcXVlc3RzLmNvbnRhaW5zKHJl
cXVlc3RJZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3JlcXVlc3RzLmdldChy
ZXF1ZXN0SWQpLT5pc0dlbmVyYXRlU3RyZWFtUmVxdWVzdCgpKTsKLSAgICBBU1NFUlQoIWxhYmVs
LmlzTnVsbCgpKTsKLSAgICBBU1NFUlQodHJhY2tzUGFyYW0pOwotCi0gICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tMaXN0PiB0cmFja3MgPSB0cmFja3NQYXJhbTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0cmFja3MtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaW50IHRyYWNr
Q2xpZW50SWQgPSBtX2NsaWVudHMuZ2V0TmV4dElkKCk7Ci0gICAgICAgIFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPiB0cmFjayA9IHRyYWNrcy0+aXRlbShpKTsKLSAgICAgICAgdHJhY2stPmFzc29j
aWF0ZUZyYW1lQ29udHJvbGxlcih0aGlzLCB0cmFja0NsaWVudElkKTsKLSAgICAgICAgbV9jbGll
bnRzLmFkZCh0cmFja0NsaWVudElkLCB0cmFjay5nZXQoKSk7Ci0gICAgfQogCiAgICAgUmVmUHRy
PEdlbmVyYXRlU3RyZWFtUmVxdWVzdD4gc3RyZWFtUmVxdWVzdCA9IHN0YXRpY19jYXN0PEdlbmVy
YXRlU3RyZWFtUmVxdWVzdCo+KG1fcmVxdWVzdHMuZ2V0KHJlcXVlc3RJZCkuZ2V0KCkpOwotICAg
IFJlZlB0cjxMb2NhbE1lZGlhU3RyZWFtPiBnZW5lcmF0ZWRTdHJlYW0gPSBMb2NhbE1lZGlhU3Ry
ZWFtOjpjcmVhdGUodGhpcywgbGFiZWwsIHRyYWNrcy5yZWxlYXNlKCkpOwotICAgIG1fc3RyZWFt
cy5hZGQobGFiZWwsIGdlbmVyYXRlZFN0cmVhbS5nZXQoKSk7CisgICAgUmVmUHRyPExvY2FsTWVk
aWFTdHJlYW0+IGdlbmVyYXRlZFN0cmVhbSA9IExvY2FsTWVkaWFTdHJlYW06OmNyZWF0ZShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIHNvdXJjZXMpOwogICAgIG1fcmVxdWVzdHMucmVtb3ZlKHJl
cXVlc3RJZCk7CiAgICAgc3RyZWFtUmVxdWVzdC0+c3VjY2Vzc0NhbGxiYWNrKCktPmhhbmRsZUV2
ZW50KGdlbmVyYXRlZFN0cmVhbS5nZXQoKSk7CiB9CkBAIC0zNTYsMTEgKzI3Nyw2IEBAIHZvaWQg
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IHJl
cXVlc3RJZCwgTmF2aWdhdG9yCiAgICAgfQogfQogCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyOjpzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5nJiBsYWJlbCkKLXsKLSAgICBnZXRTdHJl
YW1Gcm9tTGFiZWwobGFiZWwpLT5zdHJlYW1FbmRlZCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCmluZGV4IDZhMzlhZmUuLmY5
MTI1NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJNZWRpYVN0cmVhbUNsaWVudC5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291
cmNlLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0zOCwxMDYgKzM5LDE2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwotY2xhc3MgTG9jYWxNZWRp
YVN0cmVhbTsKLWNsYXNzIE1lZGlhU3RyZWFtOwogY2xhc3MgTWVkaWFTdHJlYW1Db250cm9sbGVy
OwotY2xhc3MgTWVkaWFTdHJlYW1UcmFja0xpc3Q7CiBjbGFzcyBOYXZpZ2F0b3JVc2VyTWVkaWFF
cnJvckNhbGxiYWNrOwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrOwog
Y2xhc3MgUGFnZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKLWNsYXNzIFNpZ25hbGluZ0NhbGxiYWNrOwogCiBjbGFzcyBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIpOwogcHVibGljOgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJZFR5cGU+Ci0g
ICAgY2xhc3MgQ2xpZW50QmFzZSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENsaWVu
dEJhc2UpOwotICAgIHB1YmxpYzoKLSAgICAgICAgQ2xpZW50QmFzZSgpIDogbV9mcmFtZUNvbnRy
b2xsZXIoMCksIG1fY2xpZW50SWQoMCkgeyB9Ci0KLSAgICAgICAgQ2xpZW50QmFzZShNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBjb25zdCBJZFR5cGUmIGlkKQot
ICAgICAgICAgICAgOiBtX2ZyYW1lQ29udHJvbGxlcihmcmFtZUNvbnRyb2xsZXIpCi0gICAgICAg
ICAgICAsIG1fY2xpZW50SWQoaWQpIHsgfQotCi0gICAgICAgIHZpcnR1YWwgfkNsaWVudEJhc2Uo
KSB7IH0KLQotICAgICAgICBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogbWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ29udHJvbGxlcjsgfQotICAg
ICAgICBjb25zdCBJZFR5cGUmIGNsaWVudElkKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRJZDsg
fQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhU3RyZWFtKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzTG9jYWxNZWRpYVN0cmVhbSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVyaWNDbGllbnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSBm
cmFtZSBjb250cm9sbGVyIGlzIGJlaW5nIGRpc2Nvbm5lY3RlZCB0byB0aGUgTWVkaWFTdHJlYW1D
bGllbnQgZW1iZWRkZXIuCi0gICAgICAgIC8vIENsaWVudHMgc2hvdWxkIG92ZXJyaWRlIHRoaXMg
dG8gc2VuZCBhbnkgcmVxdWlyZWQgc2h1dGRvd24gbWVzc2FnZXMuCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hFbWJlZGRlcigpIHsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICAvLyBV
c2VkIGZvciBvYmplY3RzIHRoYXQgYXJlIG9wdGlvbmFsbHkgYXNzb2NpYXRlZCB0byB0aGUgZnJh
bWUgY29udHJvbGxlciBhZnRlciBjb25zdHJ1Y3Rpb24sIGxpa2UgdGhlIE1lZGlhU3RyZWFtVHJh
Y2tzLgotICAgICAgICB2b2lkIGFzc29jaWF0ZUZyYW1lQ29udHJvbGxlcihNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBjb25zdCBJZFR5cGUmIGlkKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZnJhbWVDb250cm9sbGVyICYmICFtX2NsaWVudElk
KTsKLSAgICAgICAgICAgIG1fZnJhbWVDb250cm9sbGVyID0gZnJhbWVDb250cm9sbGVyOwotICAg
ICAgICAgICAgbV9jbGllbnRJZCA9IGlkOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXZvaWRz
IHJlcGVhdGluZyB0aGUgc2FtZSBjb2RlIGluIHRoZSB1bnJlZ2lzdGVyIG1ldGhvZCBvZiBlYWNo
IGRlcml2ZWQgY2xhc3MuCi0gICAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgdGhlIGNv
bnRyb2xsZXIncyB1bnJlZ2lzdGVyIG1ldGhvZHMgbWFrZSB1c2Ugb2YgdGhlIGlzT2JqZWN0IHZp
cnR1YWxzLAotICAgICAgICAvLyBhbmQgdGhlIHVucmVnaXN0cmF0aW9uIGNhbiBiZSB0cmlnZ2Vy
ZWQgZWl0aGVyIGJ5IHRoZSBkZXN0cnVjdG9yIG9mIHRoZSBjbGllbnQgb3IgYnkgdGhlIGRpc2Nv
bm5lY3Rpb24gb2YgdGhlIGZyYW1lLgotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xpZW50
VHlwZT4KLSAgICAgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KENsaWVudFR5cGUqIGNsaWVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udHJvbGxlcikKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIG1fZnJhbWVDb250cm9sbGVyLT51bnJlZ2lz
dGVyKHN0YXRpY19jYXN0PENsaWVudFR5cGUqPihjbGllbnQpKTsKLSAgICAgICAgICAgIG1fZnJh
bWVDb250cm9sbGVyID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1bnJl
Z2lzdGVyKCkgPSAwOwotICAgICAgICBmcmllbmQgY2xhc3MgTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXI7Ci0KLSAgICAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIG1fZnJhbWVDb250
cm9sbGVyOwotICAgICAgICBJZFR5cGUgbV9jbGllbnRJZDsKLSAgICB9OwotCi0gICAgY2xhc3Mg
TWVkaWFTdHJlYW1DbGllbnQgOiBwdWJsaWMgQ2xpZW50QmFzZTxTdHJpbmc+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIE1lZGlhU3RyZWFtQ2xpZW50KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KiBmcmFtZUNvbnRyb2xsZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgaXNMb2NhbE1lZGlh
U3RyZWFtKQotICAgICAgICAgICAgOiBDbGllbnRCYXNlPFN0cmluZz4oZnJhbWVDb250cm9sbGVy
LCBsYWJlbCkKLSAgICAgICAgICAgICwgbV9pc0xvY2FsTWVkaWFTdHJlYW0oaXNMb2NhbE1lZGlh
U3RyZWFtKSB7IH0KLQotICAgICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUNsaWVudCgpIHsgdW5y
ZWdpc3RlcigpOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFTdHJlYW0oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgLy8gQWNjZXNzZWQgYnkgdGhlIGRlc3RydWN0
b3IuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0oKSBjb25zdCB7IHJl
dHVybiBtX2lzTG9jYWxNZWRpYVN0cmVhbTsgfQotCi0gICAgICAgIC8vIFN0cmVhbSBoYXMgZW5k
ZWQgZm9yIHNvbWUgZXh0ZXJuYWwgcmVhc29uLgotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
RW5kZWQoKSA9IDA7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdp
c3RlcigpIHsgdW5yZWdpc3RlckNsaWVudCh0aGlzKTsgfQotICAgICAgICBib29sIG1faXNMb2Nh
bE1lZGlhU3RyZWFtOwotICAgIH07Ci0KLSAgICAvLyBHZW5lcmljIGNsaWVudHMgYXJlIG9iamVj
dHMgdGhhdCByZXF1aXJlIGFjY2VzcyB0byB0aGUgZnJhbWUgY29udHJvbGxlciBidXQgZG9uJ3Qg
aGF2ZSBhIGdsb2JhbCBpZCAobGlrZSBzdHJlYW1zIGRvKQotICAgIC8vIG9yIG5lZWQgdG8gcmVj
ZWl2ZSBhbnkgbWVzc2FnZXMgZnJvbSB0aGUgZW1iZWRkZXIgY2xpZW50LgotICAgIGNsYXNzIEdl
bmVyaWNDbGllbnQgOiBwdWJsaWMgQ2xpZW50QmFzZTxpbnQ+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEdlbmVyaWNDbGllbnQoKSB7IH0KLSAgICAgICAgR2VuZXJpY0NsaWVudChNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgaWQpIDogQ2xpZW50QmFzZTxp
bnQ+KGZyYW1lQ29udHJvbGxlciwgaWQpIHsgfQotICAgICAgICB2aXJ0dWFsIH5HZW5lcmljQ2xp
ZW50KCkgeyB1bnJlZ2lzdGVyKCk7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzR2VuZXJpY0Ns
aWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCB1bnJlZ2lzdGVyKCkgeyB1bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOyB9Ci0gICAg
fTsKLQogICAgIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKEZyYW1lKik7CiAgICAgdmlydHVh
bCB+TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKTsKIApAQCAtMTUxLDE0ICs2MiwxMSBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgR2VuZXJhdGVTdHJlYW1PcHRpb25GbGFncyBwYXJzZUdlbmVy
YXRlU3RyZWFtT3B0aW9ucyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGdlbmVyYXRlU3RyZWFt
KGNvbnN0IFN0cmluZyYgb3B0aW9ucywgUGFzc1JlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFTdWNj
ZXNzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s+
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQo
Y29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwogCiAgICAgLy8gLS0tIENhbGxz
IGNvbWluZyBiYWNrIGZyb20gdGhlIGNvbnRyb2xsZXIuIC0tLSAvLwogCi0gICAgdm9pZCBzdHJl
YW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKKyAgICB2b2lkIHN0cmVhbUdl
bmVyYXRlZChpbnQgcmVxdWVzdElkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291
cmNlcyk7CiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCByZXF1ZXN0SWQsIE5h
dmlnYXRvclVzZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwotICAgIHZvaWQgc3RyZWFtRmFpbGVk
KGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIFJlcXVl
c3Q7CkBAIC0xODAsMzQgKzg4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgYWJvcnRBbGwo
KTsKICAgICB9OwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIElkVHlwZT4KLSAgICBjbGFzcyBD
bGllbnRNYXBCYXNlIDogcHVibGljIEhhc2hNYXA8SWRUeXBlLCBDbGllbnRCYXNlPElkVHlwZT4q
ID4gewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDbGllbnRNYXBCYXNlKTsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxJZFR5cGUsIENsaWVudEJhc2U8SWRUeXBl
PiogPiBNYXBUeXBlOwotCi0gICAgICAgIENsaWVudE1hcEJhc2UoKSB7IH0KLSAgICAgICAgdm9p
ZCB1bnJlZ2lzdGVyQWxsKCk7Ci0gICAgICAgIHZvaWQgZGV0YWNoRW1iZWRkZXIoKTsKLSAgICB9
OwotCi0gICAgLy8gU3RyZWFtcyBhcmUgYSBzcGVjaWFsIGNsYXNzIG9mIGNsaWVudHMgc2luY2Ug
dGhleSBhcmUgaWRlbnRpZmllZCBieSBhIGdsb2JhbCBsYWJlbCBzdHJpbmcgaW5zdGVhZCBvZiBh
biBpZC4KLSAgICB0eXBlZGVmIENsaWVudE1hcEJhc2U8U3RyaW5nPiBTdHJlYW1NYXA7Ci0KLSAg
ICAvLyBBbGwgb3RoZXIgdHlwZXMgb2YgY2xpZW50cyB1c2UgYXV0b2dlbmVyYXRlZCBpbnRlZ2Vy
IGlkcy4KLSAgICBjbGFzcyBDbGllbnRNYXAgOiBwdWJsaWMgSWRHZW5lcmF0b3IsIHB1YmxpYyBD
bGllbnRNYXBCYXNlPGludD4geyB9OwotCiAgICAgLy8gRGV0YWNoZWQgZnJvbSBhIHBhZ2UsIGFu
ZCBoZW5jZSBmcm9tIGEgZW1iZWRkZXIgY2xpZW50LgogICAgIHZvaWQgZW50ZXJEZXRhY2hlZFN0
YXRlKCk7CiAKLSAgICB2b2lkIHVucmVnaXN0ZXIoTWVkaWFTdHJlYW1DbGllbnQqKTsKLSAgICB2
b2lkIHVucmVnaXN0ZXIoR2VuZXJpY0NsaWVudCopOwogICAgIE1lZGlhU3RyZWFtQ29udHJvbGxl
ciogcGFnZUNvbnRyb2xsZXIoKSBjb25zdDsKLSAgICBNZWRpYVN0cmVhbSogZ2V0U3RyZWFtRnJv
bUxhYmVsKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgUmVxdWVzdE1hcCBtX3JlcXVlc3Rz
OwotICAgIENsaWVudE1hcCBtX2NsaWVudHM7Ci0gICAgU3RyZWFtTWFwIG1fc3RyZWFtczsKIAog
ICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIGJvb2wgbV9pc0luRGV0YWNoZWRTdGF0ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTBlMjVlMy4uZTNlNTA4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0xMC0xNyAgQWRhbSBCZXJna3Zpc3Qg
IDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgVXBkYXRlIE1lZGlhU3Ry
ZWFtIHRvIHVzZSBXZWJDb3JlIHBsYXRmb3JtIGludGVyZmFjZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBSZW1vdmVkIFdlYk1lZGlhU3RyZWFtVHJhY2sqIHNp
bmNlIHRoZXkgd2lsbCBubyBsb25nZXIgYmUgbmVlZGVkLgorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwOiBSZW1vdmVkLgorCiAyMDExLTEwLTE3ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogZG9uJ3QgY2hlY2sgZm9yIGRlYnVnZ2VyIHBhdXNlIGRldGFpbHMgaW4g
aW50ZXJhY3RpdmUgdWkgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzZjQ2
YTI0Li45MWNkNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0yMjgsOCArMjI4
LDYgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJBY3Rpb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXllckNsaWVudC5oJywKLSAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJN
ZWRpYVN0cmVhbVRyYWNrTGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lbnVJ
dGVtSW5mby5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5l
bC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5lbENsaWVu
dC5oJywKQEAgLTU1Myw4ICs1NTEsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFF
bGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudElt
cGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5o
JywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2suY3BwJywKLSAgICAg
ICAgICAgICAgICAnc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJOYW1lZE5vZGVNYXAuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
Yk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2Rl
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRp
YVN0cmVhbVRyYWNrLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0
cmVhbVRyYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjFmYWMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFj
ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBXZWJNZWRpYVN0cmVhbVRyYWNrX2gKLSNkZWZpbmUgV2ViTWVkaWFTdHJlYW1UcmFja19oCi0K
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5j
bHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRp
YVN0cmVhbVRyYWNrOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5n
OwotCi1jbGFzcyBXZWJNZWRpYVN0cmVhbVRyYWNrIHsKLXB1YmxpYzoKLSAgICBXZWJNZWRpYVN0
cmVhbVRyYWNrKCkgeyB9Ci0gICAgfldlYk1lZGlhU3RyZWFtVHJhY2soKSB7IHJlc2V0KCk7IH0K
LQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgaWQs
IGNvbnN0IFdlYlN0cmluZyYga2luZCwgY29uc3QgV2ViU3RyaW5nJiBsYWJlbCk7Ci0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAg
IFdlYk1lZGlhU3RyZWFtVHJhY2soY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2s+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtVHJhY2s+KCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBXZWJQcml2
YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2Vu
ZGlmIC8vIFdlYk1lZGlhU3RyZWFtVHJhY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY1ZWZjN2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViTWVkaWFTdHJlYW1UcmFja0xp
c3RfaAotI2RlZmluZSBXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdF9oCi0KLSNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0
ZVB0ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVN0cmVhbVRyYWNrTGlz
dDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYk1lZGlhU3RyZWFtVHJhY2s7
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwotCi1jbGFzcyBXZWJNZWRp
YVN0cmVhbVRyYWNrTGlzdCB7Ci1wdWJsaWM6Ci0gICAgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3Qo
KSB7IH0KLSAgICB+V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QoKSB7IHJlc2V0KCk7IH0KLQotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0
cmVhbVRyYWNrPiYgd2ViVHJhY2tzKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsK
LSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQot
Ci0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3Qo
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tMaXN0PiYpOwot
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrTGlz
dD4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFdlYlByaXZhdGVQdHI8V2ViQ29y
ZTo6TWVkaWFTdHJlYW1UcmFja0xpc3Q+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIFdl
Yk1lZGlhU3RyZWFtVHJhY2tMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2suY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTWVkaWFTdHJlYW1UcmFjay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDc3NzkwMWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFTdHJlYW1UcmFjay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1UcmFj
ay5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFt
VHJhY2suaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LXZvaWQgV2ViTWVkaWFTdHJlYW1UcmFjazo6aW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIGlk
LCBjb25zdCBXZWJTdHJpbmcmIGtpbmQsIGNvbnN0IFdlYlN0cmluZyYgbGFiZWwpCi17Ci0gICAg
bV9wcml2YXRlID0gV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRlKGlkLCBraW5kLCBs
YWJlbCk7Ci19Ci0KLXZvaWQgV2ViTWVkaWFTdHJlYW1UcmFjazo6cmVzZXQoKQotewotICAgIG1f
cHJpdmF0ZS5yZXNldCgpOwotfQotCi1XZWJNZWRpYVN0cmVhbVRyYWNrOjpXZWJNZWRpYVN0cmVh
bVRyYWNrKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrPiYg
dHJhY2spCi0gICAgOiBtX3ByaXZhdGUodHJhY2spCi17Ci19Ci0KLVdlYk1lZGlhU3RyZWFtVHJh
Y2s6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrPigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDU5NWIwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oIgotCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIKLSNpbmNsdWRlICJN
ZWRpYVN0cmVhbVRyYWNrTGlzdC5oIgotI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtVHJhY2suaCIK
LSNpbmNsdWRlICJXZWJWZWN0b3IuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0Ojppbml0aWFs
aXplKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVRyYWNrPiYgd2ViVHJhY2tzKQotewot
ICAgIFRyYWNrVmVjdG9yIHRyYWNrcyh3ZWJUcmFja3Muc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHdlYlRyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgdHJhY2tzW2ldID0g
d2ViVHJhY2tzW2ldOwotCi0gICAgbV9wcml2YXRlID0gTWVkaWFTdHJlYW1UcmFja0xpc3Q6OmNy
ZWF0ZSh0cmFja3MpOwotfQotCi12b2lkIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0OjpyZXNldCgp
Ci17Ci0gICAgbV9wcml2YXRlLnJlc2V0KCk7Ci19Ci0KLVdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0
OjpXZWJNZWRpYVN0cmVhbVRyYWNrTGlzdChjb25zdCBXVEY6OlBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja0xpc3Q+JiB0cmFja0xpc3QpCi0gICAgOiBtX3ByaXZhdGUodHJhY2tMaXN0KQotewot
fQotCi1XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtVHJhY2tMaXN0PigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>