<?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>123301</bug_id>
          
          <creation_ts>2013-10-24 16:25:47 -0700</creation_ts>
          <short_desc>Adding platform implementation of MediaStreamTrack</short_desc>
          <delta_ts>2013-11-13 12:21:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>124288</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Thiago de Barros Lacerda">thiago.lacerda</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>rakuco</cc>
    
    <cc>tommyw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943347</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-24 16:25:47 -0700</bug_when>
    <thetext>aka MediaStreamTrackPrivate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943353</commentid>
    <comment_count>1</comment_count>
      <attachid>215121</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-24 16:35:53 -0700</bug_when>
    <thetext>Created attachment 215121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943371</commentid>
    <comment_count>2</comment_count>
      <attachid>215121</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-24 17:41:06 -0700</bug_when>
    <thetext>Comment on attachment 215121
Patch

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

&gt; Source/WebCore/ChangeLog:63
&gt; +        * Modules/mediastream/AudioStreamTrack.cpp:
&gt; +        (WebCore::AudioStreamTrack::create):
&gt; +        (WebCore::AudioStreamTrack::AudioStreamTrack):
&gt; +        * Modules/mediastream/AudioStreamTrack.h:
&gt; +        * Modules/mediastream/MediaStream.cpp:
&gt; +        (WebCore::MediaStream::MediaStream):
&gt; +        (WebCore::MediaStream::addRemoteSource):
&gt; +        * Modules/mediastream/MediaStreamTrack.cpp:
&gt; +        (WebCore::MediaStreamTrack::MediaStreamTrack):
&gt; +        (WebCore::MediaStreamTrack::~MediaStreamTrack):
&gt; +        (WebCore::MediaStreamTrack::kind):
&gt; +        (WebCore::MediaStreamTrack::setSource):
&gt; +        (WebCore::MediaStreamTrack::id):
&gt; +        (WebCore::MediaStreamTrack::label):
&gt; +        (WebCore::MediaStreamTrack::enabled):
&gt; +        (WebCore::MediaStreamTrack::setEnabled):
&gt; +        (WebCore::MediaStreamTrack::muted):
&gt; +        (WebCore::MediaStreamTrack::readonly):
&gt; +        (WebCore::MediaStreamTrack::remote):
&gt; +        (WebCore::MediaStreamTrack::readyState):
&gt; +        (WebCore::MediaStreamTrack::states):
&gt; +        (WebCore::MediaStreamTrack::capabilities):
&gt; +        (WebCore::MediaStreamTrack::clone):
&gt; +        (WebCore::MediaStreamTrack::stopProducingData):
&gt; +        (WebCore::MediaStreamTrack::ended):
&gt; +        (WebCore::MediaStreamTrack::sourceStateChanged):
&gt; +        (WebCore::MediaStreamTrack::sourceMutedChanged):
&gt; +        (WebCore::MediaStreamTrack::sourceEnabledChanged):
&gt; +        (WebCore::MediaStreamTrack::configureTrackRendering):
&gt; +        (WebCore::MediaStreamTrack::stopped):
&gt; +        (WebCore::MediaStreamTrack::trackDidEnd):
&gt; +        (WebCore::MediaStreamTrack::trackReadyStateChanged):
&gt; +        (WebCore::MediaStreamTrack::trackMutedChanged):
&gt; +        * Modules/mediastream/MediaStreamTrack.h:
&gt; +        (WebCore::MediaStreamTrack::source):
&gt; +        (WebCore::MediaStreamTrack::descriptor):
&gt; +        * Modules/mediastream/VideoStreamTrack.cpp:
&gt; +        (WebCore::VideoStreamTrack::create):
&gt; +        (WebCore::VideoStreamTrack::VideoStreamTrack):
&gt; +        * Modules/mediastream/VideoStreamTrack.h:
&gt; +        * platform/mediastream/MediaStreamDescriptor.cpp:
&gt; +        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
&gt; +        (WebCore::MediaStreamDescriptor::addTrack):
&gt; +        (WebCore::MediaStreamDescriptor::removeTrack):
&gt; +        * platform/mediastream/MediaStreamDescriptor.h:
&gt; +        (WebCore::MediaStreamDescriptor::numberOfAudioSources):
&gt; +        (WebCore::MediaStreamDescriptor::audioSources):
&gt; +        (WebCore::MediaStreamDescriptor::numberOfVideoSources):
&gt; +        (WebCore::MediaStreamDescriptor::videoSources):
&gt; +        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
&gt; +        (WebCore::MediaStreamDescriptor::audioTracks):
&gt; +        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
&gt; +        (WebCore::MediaStreamDescriptor::videoTracks):

I would prefer to see brief comments about what changed in each method.

&gt; Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp:41
&gt; +    RefPtr&lt;MediaStreamTrackPrivate&gt; descriptor = MediaStreamTrackPrivate::create(0);
&gt; +    return adoptRef(new AudioStreamTrack(context, descriptor.get(), &amp;audioConstraints));

Nit: the local variable is unnecessary.

&gt; Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp:54
&gt; +AudioStreamTrack::AudioStreamTrack(ScriptExecutionContext* context, MediaStreamTrackPrivate* descriptor, const Dictionary* audioConstraints)

The private track is stored in the base class as a RefPtr&lt;MediaStreamTrackPrivate&gt;, why pass it as a MediaStreamTrackPrivate* (other than that is what the code did with the source :-) )?

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:56
&gt; +    , m_descriptor(descriptor)

Nit: &quot;m_descriptor&quot; isn&apos;t a great name now that you have changed the name of the class (thanks for that!). I suggest something like &quot;m_privateTrack&quot;.

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:272
&gt;      for (Vector&lt;Observer*&gt;::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
&gt;          (*i)-&gt;trackDidEnd();
&gt; +
&gt; +    m_descriptor-&gt;setReadyState(MediaStreamSource::Ended);

Should the private track readyState be set before calling the observers?

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.h:98
&gt; +    // MediaStreamTrackDescriptorClient

MediaStreamTrackDescriptorClient -&gt; MediaStreamTrackPrivateClient

&gt; Source/WebCore/Modules/mediastream/VideoStreamTrack.cpp:40
&gt; +    RefPtr&lt;MediaStreamTrackPrivate&gt; descriptor = MediaStreamTrackPrivate::create(0);

Nit: the local variable is unnecessary.

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:109
&gt;          m_audioStreamSources.append(audioSources[i]);
&gt; +        m_audioTrackDescriptors.append(MediaStreamTrackPrivate::create(audioSources[i]));

Is m_audioStreamSources necessary, can&apos;t we use trackPrivate-&gt;source()?

m_audioTrackDescriptors isn&apos;t a great name not that the class name has changed.

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:174
&gt; +    if (source())
&gt; +        source()-&gt;setEnabled(enabled);

This is not correct, we don&apos;t necessarily want to disable a shared source. We don&apos;t have enough infrastructure in place yet to fix this correctly, so why don&apos;t you just remove it an add a FIXME and we can follow up with a fix in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943581</commentid>
    <comment_count>3</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-25 07:31:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 215121 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215121&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:63
&gt; &gt; +        * Modules/mediastream/AudioStreamTrack.cpp:
&gt; &gt; +        (WebCore::AudioStreamTrack::create):
&gt; &gt; +        (WebCore::AudioStreamTrack::AudioStreamTrack):
&gt; &gt; +        * Modules/mediastream/AudioStreamTrack.h:
&gt; &gt; +        * Modules/mediastream/MediaStream.cpp:
&gt; &gt; +        (WebCore::MediaStream::MediaStream):
&gt; &gt; +        (WebCore::MediaStream::addRemoteSource):
&gt; &gt; +        * Modules/mediastream/MediaStreamTrack.cpp:
&gt; &gt; +        (WebCore::MediaStreamTrack::MediaStreamTrack):
&gt; &gt; +        (WebCore::MediaStreamTrack::~MediaStreamTrack):
&gt; &gt; +        (WebCore::MediaStreamTrack::kind):
&gt; &gt; +        (WebCore::MediaStreamTrack::setSource):
&gt; &gt; +        (WebCore::MediaStreamTrack::id):
&gt; &gt; +        (WebCore::MediaStreamTrack::label):
&gt; &gt; +        (WebCore::MediaStreamTrack::enabled):
&gt; &gt; +        (WebCore::MediaStreamTrack::setEnabled):
&gt; &gt; +        (WebCore::MediaStreamTrack::muted):
&gt; &gt; +        (WebCore::MediaStreamTrack::readonly):
&gt; &gt; +        (WebCore::MediaStreamTrack::remote):
&gt; &gt; +        (WebCore::MediaStreamTrack::readyState):
&gt; &gt; +        (WebCore::MediaStreamTrack::states):
&gt; &gt; +        (WebCore::MediaStreamTrack::capabilities):
&gt; &gt; +        (WebCore::MediaStreamTrack::clone):
&gt; &gt; +        (WebCore::MediaStreamTrack::stopProducingData):
&gt; &gt; +        (WebCore::MediaStreamTrack::ended):
&gt; &gt; +        (WebCore::MediaStreamTrack::sourceStateChanged):
&gt; &gt; +        (WebCore::MediaStreamTrack::sourceMutedChanged):
&gt; &gt; +        (WebCore::MediaStreamTrack::sourceEnabledChanged):
&gt; &gt; +        (WebCore::MediaStreamTrack::configureTrackRendering):
&gt; &gt; +        (WebCore::MediaStreamTrack::stopped):
&gt; &gt; +        (WebCore::MediaStreamTrack::trackDidEnd):
&gt; &gt; +        (WebCore::MediaStreamTrack::trackReadyStateChanged):
&gt; &gt; +        (WebCore::MediaStreamTrack::trackMutedChanged):
&gt; &gt; +        * Modules/mediastream/MediaStreamTrack.h:
&gt; &gt; +        (WebCore::MediaStreamTrack::source):
&gt; &gt; +        (WebCore::MediaStreamTrack::descriptor):
&gt; &gt; +        * Modules/mediastream/VideoStreamTrack.cpp:
&gt; &gt; +        (WebCore::VideoStreamTrack::create):
&gt; &gt; +        (WebCore::VideoStreamTrack::VideoStreamTrack):
&gt; &gt; +        * Modules/mediastream/VideoStreamTrack.h:
&gt; &gt; +        * platform/mediastream/MediaStreamDescriptor.cpp:
&gt; &gt; +        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::addTrack):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::removeTrack):
&gt; &gt; +        * platform/mediastream/MediaStreamDescriptor.h:
&gt; &gt; +        (WebCore::MediaStreamDescriptor::numberOfAudioSources):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::audioSources):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::numberOfVideoSources):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::videoSources):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::audioTracks):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::videoTracks):
&gt; 
&gt; I would prefer to see brief comments about what changed in each method.
&gt; 

OK

&gt; &gt; Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp:41
&gt; &gt; +    RefPtr&lt;MediaStreamTrackPrivate&gt; descriptor = MediaStreamTrackPrivate::create(0);
&gt; &gt; +    return adoptRef(new AudioStreamTrack(context, descriptor.get(), &amp;audioConstraints));
&gt; 
&gt; Nit: the local variable is unnecessary.

Indeed

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp:54
&gt; &gt; +AudioStreamTrack::AudioStreamTrack(ScriptExecutionContext* context, MediaStreamTrackPrivate* descriptor, const Dictionary* audioConstraints)
&gt; 
&gt; The private track is stored in the base class as a RefPtr&lt;MediaStreamTrackPrivate&gt;, why pass it as a MediaStreamTrackPrivate* (other than that is what the code did with the source :-) )?

Makes sense

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:56
&gt; &gt; +    , m_descriptor(descriptor)
&gt; 
&gt; Nit: &quot;m_descriptor&quot; isn&apos;t a great name now that you have changed the name of the class (thanks for that!). I suggest something like &quot;m_privateTrack&quot;.

remains of my old patch :(

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:272
&gt; &gt;      for (Vector&lt;Observer*&gt;::iterator i = m_observers.begin(); i != m_observers.end(); ++i)
&gt; &gt;          (*i)-&gt;trackDidEnd();
&gt; &gt; +
&gt; &gt; +    m_descriptor-&gt;setReadyState(MediaStreamSource::Ended);
&gt; 
&gt; Should the private track readyState be set before calling the observers?

you are right

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.h:98
&gt; &gt; +    // MediaStreamTrackDescriptorClient
&gt; 
&gt; MediaStreamTrackDescriptorClient -&gt; MediaStreamTrackPrivateClient

Ooops

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/VideoStreamTrack.cpp:40
&gt; &gt; +    RefPtr&lt;MediaStreamTrackPrivate&gt; descriptor = MediaStreamTrackPrivate::create(0);
&gt; 
&gt; Nit: the local variable is unnecessary.

OK

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:109
&gt; &gt;          m_audioStreamSources.append(audioSources[i]);
&gt; &gt; +        m_audioTrackDescriptors.append(MediaStreamTrackPrivate::create(audioSources[i]));
&gt; 
&gt; Is m_audioStreamSources necessary, can&apos;t we use trackPrivate-&gt;source()?
&gt; 
I think it is better to keep them, since we have methods to remote and add sources. It is better to iterate through them then in each track and use the source() method (remember that can be shared sources between tracks)

&gt; m_audioTrackDescriptors isn&apos;t a great name not that the class name has changed.

oops, again remains of my old patch :(
m_audioPrivateTracks?

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:174
&gt; &gt; +    if (source())
&gt; &gt; +        source()-&gt;setEnabled(enabled);
&gt; 
&gt; This is not correct, we don&apos;t necessarily want to disable a shared source. We don&apos;t have enough infrastructure in place yet to fix this correctly, so why don&apos;t you just remove it an add a FIXME and we can follow up with a fix in another patch.

I shall pay more attention, this is again remains of my old patch, when trunk did not have my patch that lets a source to be shared.
I think this should only set the enabled property of the track. Nothing should be done to the source. Didn&apos;t get what you mean that we can additionally do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943600</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-25 08:50:29 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:109
&gt; &gt; &gt;          m_audioStreamSources.append(audioSources[i]);
&gt; &gt; &gt; +        m_audioTrackDescriptors.append(MediaStreamTrackPrivate::create(audioSources[i]));
&gt; &gt; 
&gt; &gt; Is m_audioStreamSources necessary, can&apos;t we use trackPrivate-&gt;source()?
&gt; &gt; 
&gt; I think it is better to keep them, since we have methods to remote and add sources. It is better to iterate through them then in each track and use the source() method (remember that can be shared sources between tracks)
&gt; 
  Ah, I forgot about MediaStream::removeRemoteSource!

&gt; &gt; m_audioTrackDescriptors isn&apos;t a great name not that the class name has changed.
&gt; 
&gt; oops, again remains of my old patch :(
&gt; m_audioPrivateTracks?
&gt; 
  Sure.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:174
&gt; &gt; &gt; +    if (source())
&gt; &gt; &gt; +        source()-&gt;setEnabled(enabled);
&gt; &gt; 
&gt; &gt; This is not correct, we don&apos;t necessarily want to disable a shared source. We don&apos;t have enough infrastructure in place yet to fix this correctly, so why don&apos;t you just remove it an add a FIXME and we can follow up with a fix in another patch.
&gt; 
&gt; I shall pay more attention, this is again remains of my old patch, when trunk did not have my patch that lets a source to be shared.
&gt; I think this should only set the enabled property of the track. Nothing should be done to the source. Didn&apos;t get what you mean that we can additionally do here.
&gt;
  We need to inform the source that the track isn&apos;t using it so it can stop doing work. For example, we want a local source to stop using the camera or microphone as soon as there are no active tracks. 

  Now that I think about it, I think calling &quot;source()-&gt;setEnabled(enabled)&quot; here is the right thing to do. We just need to make sure MediaStreamSource:: setEnabled does something like MediaStreamSource:: stop does, and call a virtual source method when there are no active tracks. I will take care of this in the patch for bug 123316 I will post later today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943642</commentid>
    <comment_count>5</comment_count>
      <attachid>215187</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-25 10:15:44 -0700</bug_when>
    <thetext>Created attachment 215187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943649</commentid>
    <comment_count>6</comment_count>
      <attachid>215187</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-25 10:33:38 -0700</bug_when>
    <thetext>Comment on attachment 215187
Patch

Clearing flags on attachment: 215187

Committed r158018: &lt;http://trac.webkit.org/changeset/158018&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943650</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-25 10:33:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215121</attachid>
            <date>2013-10-24 16:35:53 -0700</date>
            <delta_ts>2013-10-25 10:15:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123301-20131024203551.patch</filename>
            <type>text/plain</type>
            <size>42076</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA4ZDFjMWQ3Mzk3NWI4
NWRhOWE2MTEzNjkyOTgwODc3NDk3YmI4Yy4uODRiNTAyNjBmNmE4YzYwYWM5MWYwZDA0Y2NlYmM0
NWRhOWQ4MWI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEzLTEwLTI0ICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIEFkZGluZyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBNZWRpYVN0cmVhbVRyYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMzMDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgbmVlZGVkLCBubyBjaGFuZ2VzIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFt
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3RyZWFtVHJhY2s6OkF1ZGlvU3RyZWFtVHJhY2spOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5oOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW06Ok1lZGlhU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtOjphZGRSZW1vdGVTb3VyY2UpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpN
ZWRpYVN0cmVhbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6On5N
ZWRpYVN0cmVhbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6Omtp
bmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2s6OmxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
VHJhY2s6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c2V0
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjptdXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpyZWFkb25seSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpyZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bVRyYWNrOjpzdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6Y2Fw
YWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmNsb25lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0b3BQcm9kdWNpbmdEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmVuZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnNvdXJjZVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VNdXRlZENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c291cmNlRW5hYmxlZENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6Y29uZmlndXJlVHJhY2tSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c3RvcHBlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFja0RpZEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrTXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2s6OnNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bVRyYWNrOjpkZXNjcmlwdG9yKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVv
U3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9TdHJlYW1UcmFjazo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvU3RyZWFtVHJhY2s6OlZpZGVvU3RyZWFtVHJh
Y2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5oOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlVHJh
Y2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpudW1iZXJPZkF1
ZGlvU291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmF1
ZGlvU291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om51
bWJlck9mVmlkZW9Tb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6dmlkZW9Tb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6bnVtYmVyT2ZBdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OmF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6bnVtYmVyT2ZWaWRlb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OnZpZGVvVHJhY2tzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmg6IEFkZGVkLgorCiAy
MDEzLTEwLTI0ICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHRleHR1cmUgbGV2ZWwgZGVwZW5kZW50IHNpemUgY2hlY2tzIHRvIHRleHR1cmVJbWFnZTJE
IGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjZTM1MzM0YjFiNDM2MTFiNjdmZDhlODdj
NjE3YWUzMjQxYWE0NDhlLi4yMjBmNDgxNzYzMDkwMzM5NTdmZjI5MzBjZjZlOWZjZmFiNmU5MWI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk4OCw2ICsxOTg4LDcgQEAgc2V0KFdlYkNvcmVf
U09VUkNFUwogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3Bw
CiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAorICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcAogICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwCiAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5jcHAKaW5kZXgg
M2VjMDU3YWI1YzQ2NWQ0ZmYyMDgyMTQxZWQ4Mjk3ZGM0MmE0MTYyMi4uNzdiNDBlMGY2MDg1MzMx
MGQzZDM1NTI5NjljZmJkMjhmNTM5ZjM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFtVHJhY2suY3BwCkBAIC0zNywxMiArMzcs
MTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gQXVk
aW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IERpY3Rpb25hcnkmIGF1ZGlvQ29uc3RyYWludHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBdWRpb1N0cmVhbVRyYWNrKGNvbnRleHQsIDAsICZhdWRpb0NvbnN0cmFpbnRzKSk7Cisg
ICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBkZXNjcmlwdG9yID0gTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU6OmNyZWF0ZSgwKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlv
U3RyZWFtVHJhY2soY29udGV4dCwgZGVzY3JpcHRvci5nZXQoKSwgJmF1ZGlvQ29uc3RyYWludHMp
KTsKIH0KIAotUmVmUHRyPEF1ZGlvU3RyZWFtVHJhY2s+IEF1ZGlvU3RyZWFtVHJhY2s6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYVN0cmVhbVNvdXJjZSogc291
cmNlKQorUmVmUHRyPEF1ZGlvU3RyZWFtVHJhY2s+IEF1ZGlvU3RyZWFtVHJhY2s6OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPiBkZXNjcmlwdG9yKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9T
dHJlYW1UcmFjayhjb250ZXh0LCBzb3VyY2UsIDApKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEF1ZGlvU3RyZWFtVHJhY2soY29udGV4dCwgZGVzY3JpcHRvci5nZXQoKSwgMCkpOwogfQogCiBS
ZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKE1lZGlhU3Ry
ZWFtVHJhY2sqIHRyYWNrKQpAQCAtNTAsOCArNTEsOCBAQCBSZWZQdHI8QXVkaW9TdHJlYW1UcmFj
az4gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNrKQogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9TdHJlYW1UcmFjayh0cmFjaykpOwogfQogCi1BdWRp
b1N0cmVhbVRyYWNrOjpBdWRpb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UsIGNvbnN0IERpY3Rpb25hcnkqIGF1ZGlv
Q29uc3RyYWludHMpCi0gICAgOiBNZWRpYVN0cmVhbVRyYWNrKGNvbnRleHQsIHNvdXJjZSwgYXVk
aW9Db25zdHJhaW50cykKK0F1ZGlvU3RyZWFtVHJhY2s6OkF1ZGlvU3RyZWFtVHJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGRlc2Ny
aXB0b3IsIGNvbnN0IERpY3Rpb25hcnkqIGF1ZGlvQ29uc3RyYWludHMpCisgICAgOiBNZWRpYVN0
cmVhbVRyYWNrKGNvbnRleHQsIGRlc2NyaXB0b3IsIGF1ZGlvQ29uc3RyYWludHMpCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJl
YW1UcmFjay5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVh
bVRyYWNrLmgKaW5kZXggMThjODlmNWY4MDhiMGMwMjRiYzIwODhhNDMyYThiM2M2MTJiMDZjYi4u
MDhiOTQ4YWEzZTQxNjhmNzZkMGYyNWQxNzZkZGU2N2Y4ZWVhOTQ5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmgKQEAg
LTQwLDcgKzQwLDcgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIEF1ZGlv
U3RyZWFtVHJhY2sgRklOQUwgOiBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IERpY3Rpb25hcnkmKTsKLSAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvU3Ry
ZWFtVHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWVkaWFTdHJlYW1Tb3Vy
Y2UqKTsKKyAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvU3RyZWFtVHJhY2s+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4pOwog
ICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gY3JlYXRlKE1lZGlhU3RyZWFtVHJh
Y2sqKTsKIAogICAgIHZpcnR1YWwgfkF1ZGlvU3RyZWFtVHJhY2soKSB7IH0KQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBraW5kKCkgY29u
c3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6Ci0gICAgQXVkaW9TdHJlYW1UcmFjayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgTWVkaWFTdHJlYW1Tb3VyY2UqLCBjb25zdCBEaWN0aW9uYXJ5Kik7Cisg
ICAgQXVkaW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUqLCBjb25zdCBEaWN0aW9uYXJ5Kik7CiAgICAgZXhwbGljaXQgQXVkaW9TdHJl
YW1UcmFjayhNZWRpYVN0cmVhbVRyYWNrKik7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IGNhM2E0YjgxYTY2ZTcw
ZmZiYjUyMjZhYzUzMTc4Zjk2NzA3MTVlNzIuLjQzOTBlN2IxZjJkYjFkODY3OTI4ODczYTY5ODE4
NWU2MGNjYTYwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW0uY3BwCkBAIC0xMTksMTggKzExOSwxOCBAQCBNZWRpYVN0cmVhbTo6TWVk
aWFTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbQogICAgIG1fZGVzY3JpcHRvci0+c2V0Q2xpZW50KHRoaXMpOwogCiAgICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrOwotICAgIHNpemVfdCBudW1iZXJPZkF1ZGlvVHJhY2tz
ID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZkF1ZGlvU3RyZWFtcygpOworICAgIHNpemVfdCBudW1i
ZXJPZkF1ZGlvVHJhY2tzID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZkF1ZGlvVHJhY2tzKCk7CiAg
ICAgbV9hdWRpb1RyYWNrcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZBdWRpb1RyYWNrcyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkF1ZGlvVHJhY2tzOyBpKyspIHsKLSAg
ICAgICAgdHJhY2sgPSBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlw
dG9yLT5hdWRpb1N0cmVhbXMoaSkpOworICAgICAgICB0cmFjayA9IEF1ZGlvU3RyZWFtVHJhY2s6
OmNyZWF0ZShjb250ZXh0LCBtX2Rlc2NyaXB0b3ItPmF1ZGlvVHJhY2tzKGkpKTsKICAgICAgICAg
dHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwogICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZCh0
cmFjay5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIHNpemVfdCBudW1iZXJPZlZpZGVvVHJhY2tz
ID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZlZpZGVvU3RyZWFtcygpOworICAgIHNpemVfdCBudW1i
ZXJPZlZpZGVvVHJhY2tzID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZlZpZGVvVHJhY2tzKCk7CiAg
ICAgbV92aWRlb1RyYWNrcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZWaWRlb1RyYWNrcyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlZpZGVvVHJhY2tzOyBpKyspIHsKLSAg
ICAgICAgdHJhY2sgPSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlw
dG9yLT52aWRlb1N0cmVhbXMoaSkpOworICAgICAgICB0cmFjayA9IFZpZGVvU3RyZWFtVHJhY2s6
OmNyZWF0ZShjb250ZXh0LCBtX2Rlc2NyaXB0b3ItPnZpZGVvVHJhY2tzKGkpKTsKICAgICAgICAg
dHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwogICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVuZCh0
cmFjay5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTMwOCwxMSArMzA4LDExIEBAIHZvaWQgTWVkaWFT
dHJlYW06OmFkZFJlbW90ZVNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQogICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjazsKICAgICBzd2l0Y2ggKHNvdXJjZS0+dHlwZSgp
KSB7CiAgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86Ci0gICAgICAgIHRyYWNrID0g
QXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc291cmNl
KTsKKyAgICAgICAgdHJhY2sgPSBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwog
ICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgotICAgICAgICB0cmFjayA9IFZpZGVvU3Ry
ZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNvdXJjZSk7CisgICAg
ICAgIHRyYWNrID0gVmlkZW9TdHJlYW1UcmFjazo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsKICAgICAgICAg
bV92aWRlb1RyYWNrcy5hcHBlbmQodHJhY2spOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJh
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRy
YWNrLmNwcAppbmRleCBhYTBkZTVmYTM0NWZhY2YzOGUzMjZmYTI4MmY1MGEwM2RiZTJhNDVjLi4x
NWQ5MWYxNDJiNmM3NThiMjNkZDAwNmMzODQ5YTg0YjVlMzI5NTQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAK
QEAgLTUxLDE4ICs1MSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU1lZGlhU3RyZWFt
VHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
TWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSwgY29uc3QgRGljdGlvbmFyeSopCitNZWRpYVN0cmVh
bVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBkZXNjcmlwdG9yLCBjb25zdCBEaWN0aW9uYXJ5KikK
ICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQotICAgICwgbV9zb3VyY2UoMCkKLSAgICAs
IG1fcmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TmV3KQotICAgICwgbV9zdG9wcGVkKGZh
bHNlKQotICAgICwgbV9lbmFibGVkKHRydWUpCi0gICAgLCBtX211dGVkKGZhbHNlKQorICAgICwg
bV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCiAgICAgLCBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQo
ZmFsc2UpCiB7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgaWYgKHNvdXJjZSkKLSAgICAg
ICAgc2V0U291cmNlKHNvdXJjZSk7CisKKyAgICBpZiAobV9kZXNjcmlwdG9yLT5zb3VyY2UoKSkK
KyAgICAgICAgbV9kZXNjcmlwdG9yLT5zb3VyY2UoKS0+YWRkT2JzZXJ2ZXIodGhpcyk7CiB9CiAK
IE1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1UcmFjayogb3Ro
ZXIpCkBAIC03MCwxMzIgKzY3LDY5IEBAIE1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJh
Y2soTWVkaWFTdHJlYW1UcmFjayogb3RoZXIpCiB7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAK
LSAgICAvLyBXaGVuIHRoZSBjbG9uZSgpIG1ldGhvZCBpcyBpbnZva2VkLCB0aGUgdXNlciBhZ2Vu
dCBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgIC8vIDEuIExldCB0cmFja0Nsb25l
IGJlIGEgbmV3bHkgY29uc3RydWN0ZWQgTWVkaWFTdHJlYW1UcmFjayBvYmplY3QuCi0gICAgLy8g
Mi4gSW5pdGlhbGl6ZSB0cmFja0Nsb25lJ3MgaWQgYXR0cmlidXRlIHRvIGEgbmV3bHkgZ2VuZXJh
dGVkIHZhbHVlLgotICAgIG1faWQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0KLSAg
ICAvLyAzLiBMZXQgdHJhY2tDbG9uZSBpbmhlcml0IHRoaXMgdHJhY2sncyB1bmRlcmx5aW5nIHNv
dXJjZSwga2luZCwgbGFiZWwgYW5kIGVuYWJsZWQgYXR0cmlidXRlcy4KLSAgICBzZXRTb3VyY2Uo
b3RoZXItPnNvdXJjZSgpKTsKLSAgICBtX3JlYWR5U3RhdGUgPSBtX3NvdXJjZSA/IG1fc291cmNl
LT5yZWFkeVN0YXRlKCkgOiBNZWRpYVN0cmVhbVNvdXJjZTo6TmV3OwotICAgIG1fZW5hYmxlZCA9
IG90aGVyLT5lbmFibGVkKCk7CisgICAgbV9kZXNjcmlwdG9yID0gb3RoZXItPmRlc2NyaXB0b3Io
KS0+Y2xvbmUoKTsKIAotICAgIC8vIE5vdGU6IHRoZSAiY2xvbmUiIHN0ZXBzIGRvbid0IHNheSBh
bnl0aGluZyBhYm91dCAnbXV0ZWQnLCBidXQgNC4zLjEgc2F5czoKLSAgICAvLyBGb3IgYSBuZXds
eSBjcmVhdGVkIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0LCB0aGUgZm9sbG93aW5nIGFwcGxpZXMu
IFRoZSB0cmFjayBpcyBhbHdheXMgZW5hYmxlZAotICAgIC8vIHVubGVzcyBzdGF0ZWQgb3RoZXJ3
aXNlIChmb3IgZXhhbWxwZSB3aGVuIGNsb25lZCkgYW5kIHRoZSBtdXRlZCBzdGF0ZSByZWZsZWN0
cyB0aGUgc3RhdGUgb2YgdGhlCi0gICAgLy8gc291cmNlIGF0IHRoZSB0aW1lIHRoZSB0cmFjayBp
cyBjcmVhdGVkLgotICAgIG1fbXV0ZWQgPSBvdGhlci0+bXV0ZWQoKTsKKyAgICBpZiAobV9kZXNj
cmlwdG9yLT5zb3VyY2UoKSkKKyAgICAgICAgbV9kZXNjcmlwdG9yLT5zb3VyY2UoKS0+YWRkT2Jz
ZXJ2ZXIodGhpcyk7CiAKLSAgICBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQgPWZhbHNlOwotICAg
IG1fc3RvcHBlZCA9IG90aGVyLT5zdG9wcGVkKCk7CisgICAgbV9ldmVudERpc3BhdGNoU2NoZWR1
bGVkID0gZmFsc2U7CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkK
IHsKLSAgICBpZiAobV9zb3VyY2UpCi0gICAgICAgIG1fc291cmNlLT5yZW1vdmVPYnNlcnZlcih0
aGlzKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwot
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXVkaW9LaW5kKCJhdWRp
byIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZpZGVvS2luZCgidmlkZW8iLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN3aXRjaCAobV9zb3VyY2UtPnR5cGUoKSkg
ewotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvOgotICAgICAgICByZXR1cm4gYXVk
aW9LaW5kOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgotICAgICAgICByZXR1
cm4gdmlkZW9LaW5kOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBlbXB0eUF0b207CisgICAgcmV0dXJuIG1fZGVzY3JpcHRvci0+a2luZCgpOwogfQogCi12
b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNl
KQordm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqIG5l
d1NvdXJjZSkKIHsKLSAgICBBU1NFUlQoIXNvdXJjZSB8fCAhbV9zb3VyY2UpOworICAgIE1lZGlh
U3RyZWFtU291cmNlKiB0cmFja1NvdXJjZSA9IHNvdXJjZSgpOwogCi0gICAgaWYgKG1fc291cmNl
KQotICAgICAgICBtX3NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisgICAgaWYgKHRyYWNr
U291cmNlKQorICAgICAgICB0cmFja1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiAKLSAg
ICBpZiAoc291cmNlKSB7Ci0gICAgICAgIHNvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7Ci0gICAg
ICAgIG1fbXV0ZWQgPSBzb3VyY2UtPm11dGVkKCk7Ci0gICAgfQorICAgIGlmIChuZXdTb3VyY2Up
CisgICAgICAgIG5ld1NvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7CiAKLSAgICBtX3NvdXJjZSA9
IHNvdXJjZTsKKyAgICBtX2Rlc2NyaXB0b3ItPnNldFNvdXJjZShuZXdTb3VyY2UpOwogfQogCiBj
b25zdCBTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6OmlkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
aWQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9pZDsKLQotICAgIC8vIFRoZSBzcGVjIHNh
eXM6Ci0gICAgLy8gICBVbmxlc3MgYSBNZWRpYVN0cmVhbVRyYWNrIG9iamVjdCBpcyBjcmVhdGVk
IGFzIGEgcGFydCBhIG9mIHNwZWNpYWwgcHVycG9zZSBhbGdvcml0aG0gdGhhdAotICAgIC8vICAg
c3BlY2lmaWVzIGhvdyB0aGUgdHJhY2sgaWQgbXVzdCBiZSBpbml0aWFsaXplZCwgdGhlIHVzZXIg
YWdlbnQgbXVzdCBnZW5lcmF0ZSBhIGdsb2JhbGx5Ci0gICAgLy8gICB1bmlxdWUgaWRlbnRpZmll
ciBzdHJpbmcgYW5kIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIGlkIGF0dHJpYnV0ZSB0byB0aGF0
IHN0cmluZy4KLSAgICBpZiAobV9zb3VyY2UgJiYgbV9zb3VyY2UtPnVzZUlERm9yVHJhY2tJRCgp
KQotICAgICAgICByZXR1cm4gbV9zb3VyY2UtPmlkKCk7Ci0KLSAgICBtX2lkID0gY3JlYXRlQ2Fu
b25pY2FsVVVJRFN0cmluZygpOwotICAgIHJldHVybiBtX2lkOworICAgIHJldHVybiBtX2Rlc2Ny
aXB0b3ItPmlkKCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6bGFiZWwo
KSBjb25zdAogewotICAgIGlmIChtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1fc291cmNlLT5u
YW1lKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZGVzY3JpcHRv
ci0+bGFiZWwoKTsKIH0KIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjplbmFibGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9lbmFibGVkOworICAgIHJldHVybiBtX2Rlc2NyaXB0b3ItPmVuYWJs
ZWQoKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBpZiAobV9zdG9wcGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyA0LjMu
My4xCi0gICAgLy8gLi4uIGFmdGVyIGEgTWVkaWFTdHJlYW1UcmFjayBpcyBkaXNhc3NvY2lhdGVk
IGZyb20gaXRzIHRyYWNrLCBpdHMgZW5hYmxlZCBhdHRyaWJ1dGUgc3RpbGwKLSAgICAvLyBjaGFu
Z2VzIHZhbHVlIHdoZW4gc2V0OyBpdCBqdXN0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0
IG5ldyB2YWx1ZS4KLSAgICBtX2VuYWJsZWQgPSBlbmFibGVkOwotCi0gICAgaWYgKCFtX3NvdXJj
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zb3VyY2UtPnNldEVuYWJsZWQoZW5hYmxlZCk7
CisgICAgbV9kZXNjcmlwdG9yLT5zZXRFbmFibGVkKGVuYWJsZWQpOwogfQogCiBib29sIE1lZGlh
U3RyZWFtVHJhY2s6Om11dGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9zdG9wcGVkIHx8ICFtX3Nv
dXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLT5tdXRl
ZCgpOworICAgIHJldHVybiBtX2Rlc2NyaXB0b3ItPm11dGVkKCk7CiB9CiAKIGJvb2wgTWVkaWFT
dHJlYW1UcmFjazo6cmVhZG9ubHkoKSBjb25zdAogewotICAgIGlmIChtX3N0b3BwZWQgfHwgIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX3NvdXJjZS0+cmVh
ZG9ubHkoKTsKKyAgICByZXR1cm4gbV9kZXNjcmlwdG9yLT5yZWFkb25seSgpOwogfQogCiBib29s
IE1lZGlhU3RyZWFtVHJhY2s6OnJlbW90ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLT5yZW1vdGUoKTsK
KyAgICByZXR1cm4gbV9kZXNjcmlwdG9yLT5yZW1vdGUoKTsKIH0KIAogY29uc3QgQXRvbWljU3Ry
aW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpyZWFkeVN0YXRlKCkgY29uc3QKQEAgLTIwNCwxMCArMTM4
LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpyZWFkeVN0YXRlKCkg
Y29uc3QKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsaXZlKCJsaXZl
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gbmV3U3RhdGUoIm5ldyIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwogCi0gICAgaWYgKG1fc3RvcHBlZCkKLSAgICAgICAgcmV0dXJu
IGVuZGVkOwotCi0gICAgc3dpdGNoIChtX3JlYWR5U3RhdGUpIHsKKyAgICBzd2l0Y2ggKG1fZGVz
Y3JpcHRvci0+cmVhZHlTdGF0ZSgpKSB7CiAgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2
ZToKICAgICAgICAgcmV0dXJuIGxpdmU7CiAgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6TmV3
OgpAQCAtMjIwLDIwICsxNTEsNiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJh
Y2s6OnJlYWR5U3RhdGUoKSBjb25zdAogICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAKLXZvaWQg
TWVkaWFTdHJlYW1UcmFjazo6c2V0U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUg
c3RhdGUpCi17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5k
ZWQgfHwgbV9yZWFkeVN0YXRlID09IHN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRp
YVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBvbGRTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBt
X3JlYWR5U3RhdGUgPSBzdGF0ZTsKLQotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFTdHJl
YW1Tb3VyY2U6OkxpdmUgJiYgb2xkU3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6Ok5ldykKLSAg
ICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0
YXJ0ZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6RW5kZWQgJiYgb2xkU3RhdGUgIT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkVu
ZGVkKQotICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KIHZvaWQgTWVkaWFTdHJlYW1U
cmFjazo6Z2V0U291cmNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzQ2FsbGJhY2s+IGNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0PiBy
ZXF1ZXN0ID0gTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
Y2FsbGJhY2spOwpAQCAtMjUwLDE4ICsxNjcsMTggQEAgUmVmUHRyPE1lZGlhVHJhY2tDb25zdHJh
aW50cz4gTWVkaWFTdHJlYW1UcmFjazo6Y29uc3RyYWludHMoKSBjb25zdAogCiBSZWZQdHI8TWVk
aWFTb3VyY2VTdGF0ZXM+IE1lZGlhU3RyZWFtVHJhY2s6OnN0YXRlcygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX3NvdXJjZSkKKyAgICBpZiAoIXNvdXJjZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICByZXR1cm4gTWVkaWFTb3VyY2VTdGF0ZXM6OmNyZWF0ZShtX3NvdXJjZS0+c3RhdGVz
KCkpOworCisgICAgcmV0dXJuIE1lZGlhU291cmNlU3RhdGVzOjpjcmVhdGUoc291cmNlKCktPnN0
YXRlcygpKTsKIH0KIAogUmVmUHRyPE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzPiBNZWRpYVN0cmVh
bVRyYWNrOjpjYXBhYmlsaXRpZXMoKSBjb25zdAogewotICAgIGlmICghbV9zb3VyY2UpCisgICAg
aWYgKCFzb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gTWVkaWFTdHJl
YW1DYXBhYmlsaXRpZXM6OmNyZWF0ZShtX3NvdXJjZS0+Y2FwYWJpbGl0aWVzKCkpOworICAgIHJl
dHVybiBNZWRpYVN0cmVhbUNhcGFiaWxpdGllczo6Y3JlYXRlKHNvdXJjZSgpLT5jYXBhYmlsaXRp
ZXMoKSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6YXBwbHlDb25zdHJhaW50cyhjb25z
dCBEaWN0aW9uYXJ5JiBjb25zdHJhaW50cykKQEAgLTI3Myw3ICsxOTAsNyBAQCB2b2lkIE1lZGlh
U3RyZWFtVHJhY2s6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgRGljdGlvbmFyeSYgY29uc3RyYWlu
dHMpCiAKIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRyYWNrOjpjbG9uZSgp
CiB7Ci0gICAgaWYgKG1fc291cmNlICYmIG1fc291cmNlLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1T
b3VyY2U6OkF1ZGlvKQorICAgIGlmIChzb3VyY2UoKSAmJiBzb3VyY2UoKS0+dHlwZSgpID09IE1l
ZGlhU3RyZWFtU291cmNlOjpBdWRpbykKICAgICAgICAgcmV0dXJuIEF1ZGlvU3RyZWFtVHJhY2s6
OmNyZWF0ZSh0aGlzKTsKIAogICAgIHJldHVybiBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUodGhp
cyk7CkBAIC0yODEsMTkgKzE5OCwxNiBAQCBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFT
dHJlYW1UcmFjazo6Y2xvbmUoKQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnN0b3BQcm9kdWNp
bmdEYXRhKCkKIHsKLSAgICBpZiAobV9zdG9wcGVkIHx8ICFtX3NvdXJjZSkKKyAgICBpZiAoc3Rv
cHBlZCgpIHx8ICFzb3VyY2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gU2V0IG1fc3Rv
cHBlZCBiZWZvcmUgc3RvcHBpbmcgdGhlIHNvdXJjZSBiZWNhdXNlIHRoYXQgbWF5IHJlc3VsdCBp
biBhIGNhbGwgdG8gc291cmNlQ2hhbmdlZFN0YXRlCi0gICAgLy8gYW5kIHdlIG9ubHkgd2FudCB0
byBkaXNwYXRjaCB0aGUgJ2VuZGVkJyBldmVudCBpZiBuZWNlc3NhcnkuCi0gICAgc2V0U3RhdGUo
TWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKTsKLSAgICBtX3N0b3BwZWQgPSB0cnVlOwotICAgIG1f
c291cmNlLT5zdG9wKCk7CisgICAgbV9kZXNjcmlwdG9yLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3Ry
ZWFtU291cmNlOjpFbmRlZCk7CisgICAgbV9kZXNjcmlwdG9yLT5zdG9wKCk7CiB9CiAKIGJvb2wg
TWVkaWFTdHJlYW1UcmFjazo6ZW5kZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0b3BwZWQg
fHwgbV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZDsKKyAgICByZXR1cm4g
bV9kZXNjcmlwdG9yLT5lbmRlZCgpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmFkZE9i
c2VydmVyKE1lZGlhU3RyZWFtVHJhY2s6Ok9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTMxMCw0MiAr
MjI0LDM1IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6cmVtb3ZlT2JzZXJ2ZXIoTWVkaWFTdHJl
YW1UcmFjazo6T2JzZXJ2ZXIqIG9ic2VydmVyKQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNv
dXJjZVN0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKG1fc3RvcHBlZCkKKyAgICBpZiAoc3RvcHBl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRTdGF0ZShtX3NvdXJjZS0+cmVhZHlTdGF0
ZSgpKTsKKyAgICBtX2Rlc2NyaXB0b3ItPnNldFJlYWR5U3RhdGUoc291cmNlKCktPnJlYWR5U3Rh
dGUoKSk7CiB9CiAgICAgCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNvdXJjZU11dGVkQ2hhbmdl
ZCgpCiB7Ci0gICAgaWYgKG1fc3RvcHBlZCkKKyAgICBpZiAoc3RvcHBlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBib29sIG11dGVkID0gbV9zb3VyY2UtPm11dGVkKCk7Ci0gICAgaWYgKG1f
bXV0ZWQgPT0gbXV0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbXV0ZWQgPSBtdXRlZDsK
LSAgICBpZiAobV9tdXRlZCkKLSAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLm11dGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgZWxzZQot
ICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
dW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIG1fZGVzY3JpcHRvci0+c2V0TXV0ZWQo
c291cmNlKCktPm11dGVkKCkpOwogCiAgICAgY29uZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCiB7Ci0gICAg
aWYgKG1fc3RvcHBlZCkKKyAgICBpZiAoc3RvcHBlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
CisKKyAgICBzZXRFbmFibGVkKHNvdXJjZSgpLT5lbmFibGVkKCkpOwogICAgIC8vIG1lZGlhIGZy
b20gdGhlIHNvdXJjZSBvbmx5IGZsb3dzIHdoZW4gYSBNZWRpYVN0cmVhbVRyYWNrIG9iamVjdCBp
cyBib3RoIHVubXV0ZWQgYW5kIGVuYWJsZWQKICAgICBjb25maWd1cmVUcmFja1JlbmRlcmluZygp
OwogfQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmNvbmZpZ3VyZVRyYWNrUmVuZGVyaW5nKCkK
IHsKLSAgICBpZiAobV9zdG9wcGVkKQorICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIDQuMy4xCkBAIC0zNTQsMTMgKzI2MSwxNSBAQCB2b2lkIE1lZGlhU3RyZWFt
VHJhY2s6OmNvbmZpZ3VyZVRyYWNrUmVuZGVyaW5nKCkKIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNr
OjpzdG9wcGVkKCkKIHsKLSAgICByZXR1cm4gbV9zdG9wcGVkOworICAgIHJldHVybiBtX2Rlc2Ny
aXB0b3ItPnN0b3BwZWQoKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja0RpZEVu
ZCgpCiB7CiAgICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2
ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkKICAgICAgICAgKCppKS0+
dHJhY2tEaWRFbmQoKTsKKworICAgIG1fZGVzY3JpcHRvci0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0
cmVhbVNvdXJjZTo6RW5kZWQpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnN0b3AoKQpA
QCAtMzk4LDYgKzMwNywyMiBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmRpc3BhdGNoUXVldWVk
RXZlbnRzKCkKICAgICBldmVudHMuY2xlYXIoKTsKIH0KIAordm9pZCBNZWRpYVN0cmVhbVRyYWNr
Ojp0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9kZXNjcmlwdG9yLT5yZWFk
eVN0YXRlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpCisgICAgICAgIHNjaGVkdWxlRXZl
bnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGFydGVkRXZlbnQsIGZhbHNl
LCBmYWxzZSkpOworICAgIGVsc2UgaWYgKG1fZGVzY3JpcHRvci0+cmVhZHlTdGF0ZSgpID09IE1l
ZGlhU3RyZWFtU291cmNlOjpFbmRlZCkKKyAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZGVkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworfQor
Cit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrTXV0ZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bXV0ZWQoKSkKKyAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLm11dGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgZWxzZQorICAgICAgICBz
Y2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5tdXRlRXZl
bnQsIGZhbHNlLCBmYWxzZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAppbmRleCBkN2VhMjdiMmRkNjhkNzBj
OGQwOTFiZTAxNmE3NDk4MDgyOTZkZDg5Li4xZmZhMGQ2MzJkYTIyZTFhNjE0ZTgxOTJjNTgxMWMx
NTYzN2I5OTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2suaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBNZWRpYVN0cmVh
bVRyYWNrU291cmNlc0NhbGxiYWNrOwogY2xhc3MgTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM7CiBj
bGFzcyBNZWRpYVRyYWNrQ29uc3RyYWludHM7CiAKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBw
dWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrPiwgcHVibGljIFNjcmlwdFdyYXBwYWJs
ZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURh
dGEsIHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIgeworY2xhc3MgTWVkaWFTdHJl
YW1UcmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2s+LCBwdWJsaWMgU2Ny
aXB0V3JhcHBhYmxlLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YSwgcHVibGljIE1lZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciwgcHVibGlj
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBjbGFzcyBPYnNl
cnZlciB7CiAgICAgcHVibGljOgpAQCAtNjgsNyArNjksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBy
ZW1vdGUoKSBjb25zdDsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmVhZHlTdGF0ZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUpOwog
CiAgICAgc3RhdGljIHZvaWQgZ2V0U291cmNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYp
OwogCkBAIC04NiwxMyArODYsMTggQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoZW5kZWQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
b3ZlcmNvbnN0cmFpbmVkKTsKIAotICAgIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQorICAgIE1lZGlhU3RyZWFtU291cmNlKiBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3ItPnNvdXJjZSgpOyB9CiAgICAgdm9pZCBz
ZXRTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqKTsKIAogICAgIGJvb2wgZW5kZWQoKSBjb25zdDsK
IAogICAgIHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKICAgICB2b2lkIHJlbW92ZU9ic2Vy
dmVyKE9ic2VydmVyKik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGRlc2NyaXB0b3Io
KSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3IuZ2V0KCk7IH0KKworICAgIC8vIE1lZGlhU3Ry
ZWFtVHJhY2tEZXNjcmlwdG9yQ2xpZW50CisgICAgdm9pZCB0cmFja1JlYWR5U3RhdGVDaGFuZ2Vk
KCk7CisgICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZCgpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQK
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gTWVkaWFTdHJlYW1UcmFja0V2ZW50VGFyZ2V0
SW50ZXJmYWNlVHlwZTsgfQpAQCAtMTAzLDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIGV4cGxpY2l0IE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1UcmFjayopOwotICAg
IE1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtU291
cmNlKiwgY29uc3QgRGljdGlvbmFyeSopOworICAgIE1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiwgY29uc3QgRGljdGlvbmFy
eSopOwogCiBwcml2YXRlOgogCkBAIC0xMjcsMTcgKzEzMiwxMiBAQCBwcml2YXRlOgogCiAgICAg
VmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fc2NoZWR1bGVkRXZlbnRzOwogCi0gICAgUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPiBtX3NvdXJjZTsKICAgICBSZWZQdHI8TWVkaWFDb25zdHJhaW50c0lt
cGw+IG1fY29uc3RyYWludHM7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgbV9y
ZWFkeVN0YXRlOwotICAgIG11dGFibGUgU3RyaW5nIG1faWQ7CiAgICAgTXV0ZXggbV9tdXRleDsK
IAogICAgIFZlY3RvcjxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOwogCi0gICAgYm9vbCBtX3N0b3Bw
ZWQ7Ci0gICAgYm9vbCBtX2VuYWJsZWQ7Ci0gICAgYm9vbCBtX211dGVkOworICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV9kZXNjcmlwdG9yOwogICAgIGJvb2wgbV9ldmVudERp
c3BhdGNoU2NoZWR1bGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9WaWRlb1N0cmVhbVRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5jcHAKaW5kZXggYjZhZjhlMWE4YTIxMzRm
ODY0M2Q0NTg2MzBhOGY0NzAwMDlkMWNmNi4uODFmZmMxZDE2NTVmZDcxNGRjMjBjYjdhOTk2ZjUy
YjM5Mjk5Mzc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9WaWRlb1N0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1ZpZGVvU3RyZWFtVHJhY2suY3BwCkBAIC0zNywxMyArMzcsMTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gVmlkZW9TdHJlYW1UcmFjazo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERpY3Rpb25hcnkm
IHZpZGVvQ29uc3RyYWludHMpCiB7Ci0gICAgUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IHRyYWNr
ID0gYWRvcHRSZWYobmV3IFZpZGVvU3RyZWFtVHJhY2soY29udGV4dCwgMCwgJnZpZGVvQ29uc3Ry
YWludHMpKTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IGRlc2NyaXB0b3Ig
PSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxWaWRlb1N0
cmVhbVRyYWNrPiB0cmFjayA9IGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKGNvbnRleHQs
IGRlc2NyaXB0b3IuZ2V0KCksICZ2aWRlb0NvbnN0cmFpbnRzKSk7CiAgICAgcmV0dXJuIHRyYWNr
LnJlbGVhc2UoKTsKIH0KIAotUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFtVHJh
Y2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYVN0cmVhbVNv
dXJjZSogc291cmNlKQorUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFtVHJhY2s6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBkZXNjcmlwdG9yKQogewotICAgIFJlZlB0cjxWaWRlb1N0cmVh
bVRyYWNrPiB0cmFjayA9IGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKGNvbnRleHQsIHNv
dXJjZSwgMCkpOworICAgIFJlZlB0cjxWaWRlb1N0cmVhbVRyYWNrPiB0cmFjayA9IGFkb3B0UmVm
KG5ldyBWaWRlb1N0cmVhbVRyYWNrKGNvbnRleHQsIGRlc2NyaXB0b3IuZ2V0KCksIDApKTsKICAg
ICByZXR1cm4gdHJhY2sucmVsZWFzZSgpOwogfQogCkBAIC01Miw4ICs1Myw4IEBAIFJlZlB0cjxW
aWRlb1N0cmVhbVRyYWNrPiBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoTWVkaWFTdHJlYW1UcmFj
ayogdHJhY2spCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKHRyYWNr
KSk7CiB9CiAKLVZpZGVvU3RyZWFtVHJhY2s6OlZpZGVvU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSwgY29uc3QgRGlj
dGlvbmFyeSogdmlkZW9Db25zdHJhaW50cykKLSAgICA6IE1lZGlhU3RyZWFtVHJhY2soY29udGV4
dCwgc291cmNlLCB2aWRlb0NvbnN0cmFpbnRzKQorVmlkZW9TdHJlYW1UcmFjazo6VmlkZW9TdHJl
YW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSogZGVzY3JpcHRvciwgY29uc3QgRGljdGlvbmFyeSogdmlkZW9Db25zdHJhaW50cykK
KyAgICA6IE1lZGlhU3RyZWFtVHJhY2soY29udGV4dCwgZGVzY3JpcHRvciwgdmlkZW9Db25zdHJh
aW50cykKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9WaWRlb1N0cmVhbVRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1ZpZGVvU3RyZWFtVHJhY2suaAppbmRleCAyMDM0NzYzM2E5ZGExYzY4ZDQ0ODcyNWFlNzRm
ZWU2ZDQxNTdkYjc5Li4xNDFlMWMwZDBmYzNkNWRjYjgxY2MwM2JjYmUxNmMwOTllNzNlMjk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3RyZWFt
VHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3Ry
ZWFtVHJhY2suaApAQCAtMzYsMTEgKzM2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgTWVkaWFTdHJlYW1Tb3VyY2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xh
c3MgTWVkaWFTdHJlbVRyYWNrRGVzY3JpcHRvcjsKIAogY2xhc3MgVmlkZW9TdHJlYW1UcmFjayBG
SU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
UHRyPFZpZGVvU3RyZWFtVHJhY2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgRGljdGlvbmFyeSYpOwotICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbVNvdXJjZSopOworICAgIHN0
YXRpYyBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CiAgICAgc3RhdGljIFJl
ZlB0cjxWaWRlb1N0cmVhbVRyYWNrPiBjcmVhdGUoTWVkaWFTdHJlYW1UcmFjayopOwogCiAgICAg
dmlydHVhbCB+VmlkZW9TdHJlYW1UcmFjaygpIHsgfQpAQCAtNDgsNyArNDksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGtpbmQoKSBjb25zdCBPVkVSUklERTsK
IAogcHJpdmF0ZToKLSAgICBWaWRlb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBNZWRpYVN0cmVhbVNvdXJjZSosIGNvbnN0IERpY3Rpb25hcnkqKTsKKyAgICBWaWRlb1N0cmVh
bVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSos
IGNvbnN0IERpY3Rpb25hcnkqKTsKICAgICBleHBsaWNpdCBWaWRlb1N0cmVhbVRyYWNrKE1lZGlh
U3RyZWFtVHJhY2sqKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCmluZGV4IGRjNGIx
OGIyMjVlMWQ2NTU5MWVkZmVjZWE1YzRlNzljOGIyMjI2YTMuLjgyY2IzZjQxNDBkZTYyNzU1MDc1
MmU3NTNmZGU4MGNlZWFjZWM0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAtMzcs
NiArMzcsNyBAQAogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgi
CiAjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTAzLDExICsxMDQsMTUgQEAgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgTWVkaWFT
dHJlYW0KICAgICAsIG1fZW5kZWQoZW5kZWQpCiB7CiAgICAgQVNTRVJUKG1faWQubGVuZ3RoKCkp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Tb3VyY2VzLnNpemUoKTsgaSsrKQor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Tb3VyY2VzLnNpemUoKTsgaSsrKSB7CiAg
ICAgICAgIG1fYXVkaW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZXNbaV0pOworICAg
ICAgICBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6OmNyZWF0ZShhdWRpb1NvdXJjZXNbaV0pKTsKKyAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZpZGVvU291cmNlcy5zaXplKCk7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZpZGVvU291cmNlcy5zaXplKCk7IGkrKykgewogICAgICAgICBtX3ZpZGVvU3RyZWFt
U291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2VzW2ldKTsKKyAgICAgICAgbV92aWRlb1RyYWNrRGVz
Y3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUodmlkZW9Tb3Vy
Y2VzW2ldKSk7CisgICAgfQogfQogCiB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6c2V0RW5k
ZWQoKQpAQCAtMTE4LDYgKzEyMywyOCBAQCB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6c2V0
RW5kZWQoKQogICAgIG1fZW5kZWQgPSB0cnVlOwogfQogCit2b2lkIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gdHJhY2sp
Cit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+JiB0cmFja3Mg
PSB0cmFjay0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/IG1fYXVkaW9UcmFj
a0Rlc2NyaXB0b3JzIDogbV92aWRlb1RyYWNrRGVzY3JpcHRvcnM7CisKKyAgICBzaXplX3QgcG9z
ID0gdHJhY2tzLmZpbmQodHJhY2spOworICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCisgICAgICAg
IHJldHVybjsKKworICAgIHRyYWNrcy5hcHBlbmQodHJhY2spOworfQorCit2b2lkIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6cmVtb3ZlVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4gdHJhY2spCit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4+JiB0cmFja3MgPSB0cmFjay0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/
IG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzIDogbV92aWRlb1RyYWNrRGVzY3JpcHRvcnM7CisKKyAg
ICBzaXplX3QgcG9zID0gdHJhY2tzLmZpbmQodHJhY2spOworICAgIGlmIChwb3MgPT0gbm90Rm91
bmQpCisgICAgICAgIHJldHVybjsKKworICAgIHRyYWNrcy5yZW1vdmUocG9zKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
RGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1EZXNjcmlwdG9yLmgKaW5kZXggOTM4OTYxYmMzYjFhNzRiZTkxNDJhNWY2ZTczZmU0ZjE0
ZTIyMmIyZS4uNWUxNGZhNzYwZmQ5ZmY2NzcyZWY2MjU3ZDZmZDY1YjM1ZDYxZjE2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNj
cmlwdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1EZXNjcmlwdG9yLmgKQEAgLTQxLDYgKzQxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTsKKwogY2xhc3MgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yQ2xpZW50IDogcHVibGljIE1lZGlhU3RyZWFtVHJhY2s6Ok9ic2VydmVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQoKSB7IH0KQEAg
LTYzLDExICs2NSwxNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvU3RyZWFtcygpIGNvbnN0IHsg
cmV0dXJuIG1fYXVkaW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgfQotICAgIE1lZGlhU3RyZWFtU291
cmNlKiBhdWRpb1N0cmVhbXModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9T
dHJlYW1Tb3VyY2VzW2luZGV4XS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mQXVkaW9T
b3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1N0cmVhbVNvdXJjZXMuc2l6ZSgpOyB9Cisg
ICAgTWVkaWFTdHJlYW1Tb3VyY2UqIGF1ZGlvU291cmNlcyh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9hdWRpb1N0cmVhbVNvdXJjZXNbaW5kZXhdLmdldCgpOyB9CisKKyAgICB1bnNp
Z25lZCBudW1iZXJPZlZpZGVvU291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1T
b3VyY2VzLnNpemUoKTsgfQorICAgIE1lZGlhU3RyZWFtU291cmNlKiB2aWRlb1NvdXJjZXModW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzW2luZGV4XS5n
ZXQoKTsgfQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBdWRpb1RyYWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzLnNpemUoKTsgfQorICAgIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlKiBhdWRpb1RyYWNrcyh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9h
dWRpb1RyYWNrRGVzY3JpcHRvcnNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICB1bnNpZ25lZCBudW1i
ZXJPZlZpZGVvU3RyZWFtcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLnNp
emUoKTsgfQotICAgIE1lZGlhU3RyZWFtU291cmNlKiB2aWRlb1N0cmVhbXModW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzW2luZGV4XS5nZXQoKTsgfQor
ICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVv
VHJhY2tEZXNjcmlwdG9ycy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSog
dmlkZW9UcmFja3ModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9UcmFja0Rl
c2NyaXB0b3JzW2luZGV4XS5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRTb3VyY2UoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwogICAgIHZvaWQgcmVtb3ZlU291cmNlKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+KTsKQEAgLTc4LDYgKzg2LDkgQEAgcHVibGljOgogICAgIGJvb2wg
ZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZGVkOyB9CiAgICAgdm9pZCBzZXRFbmRlZCgpOwog
CisgICAgdm9pZCBhZGRUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7
CisgICAgdm9pZCByZW1vdmVUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Pik7CisKIHByaXZhdGU6CiAgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYg
aWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIGJvb2wgZW5kZWQpOwogCkBAIC04
NSw2ICs5Niw5IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1faWQ7CiAgICAgVmVjdG9yPFJlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4+IG1fYXVkaW9TdHJlYW1Tb3VyY2VzOwogICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBtX3ZpZGVvU3RyZWFtU291cmNlczsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBtX2F1ZGlvVHJhY2tEZXNjcmlw
dG9yczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV92aWRl
b1RyYWNrRGVzY3JpcHRvcnM7CiAgICAgYm9vbCBtX2VuZGVkOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzODZjOGRjYjMzZjUwYzM2Mjc5Yjc1NDY5NzY4
MmU2YzFjZTA4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKQEAgLTAsMCArMSwyMDQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiVVVJRC5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoc291cmNlLmdldCgpKSk7Cit9CisKK01lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSogb3RoZXIpCit7CisgICAgLy8gV2hlbiB0aGUgY2xvbmUoKSBtZXRob2QgaXMgaW52b2tl
ZCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAvLyAx
LiBMZXQgdHJhY2tDbG9uZSBiZSBhIG5ld2x5IGNvbnN0cnVjdGVkIE1lZGlhU3RyZWFtVHJhY2sg
b2JqZWN0LgorICAgIC8vIDIuIEluaXRpYWxpemUgdHJhY2tDbG9uZSdzIGlkIGF0dHJpYnV0ZSB0
byBhIG5ld2x5IGdlbmVyYXRlZCB2YWx1ZS4KKyAgICBtX2lkID0gY3JlYXRlQ2Fub25pY2FsVVVJ
RFN0cmluZygpOworCisgICAgLy8gMy4gTGV0IHRyYWNrQ2xvbmUgaW5oZXJpdCB0aGlzIHRyYWNr
J3MgdW5kZXJseWluZyBzb3VyY2UsIGtpbmQsIGxhYmVsIGFuZCBlbmFibGVkIGF0dHJpYnV0ZXMu
CisgICAgbV9zb3VyY2UgPSBvdGhlci0+c291cmNlKCk7CisgICAgbV9yZWFkeVN0YXRlID0gbV9z
b3VyY2UgPyBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpIDogTWVkaWFTdHJlYW1Tb3VyY2U6Ok5ldzsK
KyAgICBtX2VuYWJsZWQgPSBvdGhlci0+ZW5hYmxlZCgpOworCisgICAgLy8gTm90ZTogdGhlICJj
bG9uZSIgc3RlcHMgZG9uJ3Qgc2F5IGFueXRoaW5nIGFib3V0ICdtdXRlZCcsIGJ1dCA0LjMuMSBz
YXlzOgorICAgIC8vIEZvciBhIG5ld2x5IGNyZWF0ZWQgTWVkaWFTdHJlYW1UcmFjayBvYmplY3Qs
IHRoZSBmb2xsb3dpbmcgYXBwbGllcy4gVGhlIHRyYWNrIGlzIGFsd2F5cyBlbmFibGVkCisgICAg
Ly8gdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UgKGZvciBleGFtbHBlIHdoZW4gY2xvbmVkKSBhbmQg
dGhlIG11dGVkIHN0YXRlIHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAvLyBzb3VyY2Ug
YXQgdGhlIHRpbWUgdGhlIHRyYWNrIGlzIGNyZWF0ZWQuCisgICAgbV9tdXRlZCA9IG90aGVyLT5t
dXRlZCgpOworICAgIG1fc3RvcHBlZCA9IG90aGVyLT5zdG9wcGVkKCk7Cit9CisKK01lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVhbVNvdXJj
ZSogc291cmNlKQorICAgIDogbV9zb3VyY2UoMCkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVN0
cmVhbVNvdXJjZTo6TmV3KQorICAgICwgbV9tdXRlZChmYWxzZSkKKyAgICAsIG1fZW5hYmxlZCh0
cnVlKQorICAgICwgbV9zdG9wcGVkKGZhbHNlKQoreworICAgIHNldFNvdXJjZShzb3VyY2UpOwor
fQorCit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRTb3VyY2UoTWVkaWFTdHJlYW1T
b3VyY2UqIHNvdXJjZSkKK3sKKyAgICBtX3NvdXJjZSA9IHNvdXJjZTsKKworICAgIGlmICghbV9z
b3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE11dGVkKG1fc291cmNlLT5tdXRlZCgp
KTsKKyAgICBzZXRSZWFkeVN0YXRlKG1fc291cmNlLT5yZWFkeVN0YXRlKCkpOworfQorCitib29s
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzaG91bGRGaXJlVHJhY2tSZWFkeVN0YXRlQ2hhbmdl
ZChNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBvbGRTdGF0ZSkKK3sKKyAgICByZXR1cm4g
KG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSAmJiBvbGRTdGF0ZSA9PSBN
ZWRpYVN0cmVhbVNvdXJjZTo6TmV3KSB8fCAobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291
cmNlOjpFbmRlZCAmJiBvbGRTdGF0ZSAhPSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOworfQor
Citjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpraW5kKCkgY29u
c3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhdWRpbygiYXVk
aW8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2aWRlbygidmlkZW8iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKworICAgIGlmIChtX3R5cGUgPT0gTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkF1ZGlvKQorICAgICAgICByZXR1cm4gYXVkaW87CisKKyAgICByZXR1cm4gdmlkZW87Cit9
CisKK2NvbnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmlkKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1faWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9pZDsKKworICAgIC8v
IFRoZSBzcGVjIHNheXM6CisgICAgLy8gICBVbmxlc3MgYSBNZWRpYVN0cmVhbVRyYWNrIG9iamVj
dCBpcyBjcmVhdGVkIGFzIGEgcGFydCBhIG9mIHNwZWNpYWwgcHVycG9zZSBhbGdvcml0aG0gdGhh
dAorICAgIC8vICAgc3BlY2lmaWVzIGhvdyB0aGUgdHJhY2sgaWQgbXVzdCBiZSBpbml0aWFsaXpl
ZCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBnZW5lcmF0ZSBhIGdsb2JhbGx5CisgICAgLy8gICB1bmlx
dWUgaWRlbnRpZmllciBzdHJpbmcgYW5kIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIGlkIGF0dHJp
YnV0ZSB0byB0aGF0IHN0cmluZy4KKyAgICBpZiAobV9zb3VyY2UgJiYgbV9zb3VyY2UtPnVzZUlE
Rm9yVHJhY2tJRCgpKQorICAgICAgICByZXR1cm4gbV9zb3VyY2UtPmlkKCk7CisKKyAgICBtX2lk
ID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIHJldHVybiBtX2lkOworfQorCitj
b25zdCBTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpsYWJlbCgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fc291cmNlKQorICAgICAgICByZXR1cm4gbV9zb3VyY2UtPm5hbWUoKTsKKworICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworfQorCitib29sIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjplbmRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcHBlZCB8fCAobV9zb3VyY2UgJiYg
bV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOworfQor
Citib29sIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjptdXRlZCgpIGNvbnN0Cit7CisgICAgaWYg
KG1fc3RvcHBlZCB8fCAhbV9zb3VyY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBtX3NvdXJjZS0+bXV0ZWQoKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBpZiAobV9tdXRlZCA9PSBtdXRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9tdXRlZCA9IG11dGVkOworCisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+dHJhY2tNdXRlZENoYW5nZWQoKTsKK30KKworYm9vbCBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6cmVhZG9ubHkoKSBjb25zdAoreworICAgIGlmIChtX3N0b3Bw
ZWQgfHwgIW1fc291cmNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtX3Nv
dXJjZS0+cmVhZG9ubHkoKTsKK30KKworYm9vbCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6cmVt
b3RlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPnJlbW90ZSgpOworfQorCit2b2lkIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9zdG9w
cGVkIHx8IG1fZW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyA0
LjMuMy4xCisgICAgLy8gLi4uIGFmdGVyIGEgTWVkaWFTdHJlYW1UcmFjayBpcyBkaXNhc3NvY2lh
dGVkIGZyb20gaXRzIHRyYWNrLCBpdHMgZW5hYmxlZCBhdHRyaWJ1dGUgc3RpbGwKKyAgICAvLyBj
aGFuZ2VzIHZhbHVlIHdoZW4gc2V0OyBpdCBqdXN0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCB0
aGF0IG5ldyB2YWx1ZS4KKyAgICBtX2VuYWJsZWQgPSBlbmFibGVkOworCisgICAgaWYgKHNvdXJj
ZSgpKQorICAgICAgICBzb3VyY2UoKS0+c2V0RW5hYmxlZChlbmFibGVkKTsKK30KKworTWVkaWFT
dHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnJlYWR5U3Rh
dGUoKSBjb25zdAoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAgIHJldHVybiBNZWRpYVN0
cmVhbVNvdXJjZTo6RW5kZWQ7CisKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lk
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNl
OjpSZWFkeVN0YXRlIHN0YXRlKQoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFTdHJl
YW1Tb3VyY2U6OkVuZGVkIHx8IG1fcmVhZHlTdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgb2xkU3RhdGUgPSBtX3JlYWR5
U3RhdGU7CisgICAgbV9yZWFkeVN0YXRlID0gc3RhdGU7CisKKyAgICBpZiAobV9jbGllbnQgJiYg
c2hvdWxkRmlyZVRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQob2xkU3RhdGUpKQorICAgICAgICBtX2Ns
aWVudC0+dHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjbG9uZSgpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSh0aGlzKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDkwOTU4NTZjN2Y1OTczY2QzM2Y1
NjkyOTM2ZGUwYTZmZjIwYzRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaApAQCAtMCwwICsxLDk5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVfaAor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNl
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoKSA9IDA7Cit9OworCitjbGFzcyBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+IGNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CisgICAgdmlydHVhbCB+
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoKSB7IH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
a2luZCgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdDsKKyAgICBjb25zdCBT
dHJpbmcmIGxhYmVsKCkgY29uc3Q7CisKKyAgICBib29sIGVuZGVkKCkgY29uc3Q7CisKKyAgICBi
b29sIG11dGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNdXRlZChib29sKTsKKworICAgIGJvb2wg
cmVhZG9ubHkoKSBjb25zdDsKKyAgICBib29sIHJlbW90ZSgpIGNvbnN0OworCisgICAgYm9vbCBl
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CisgICAgdm9pZCBzZXRFbmFibGVk
KGJvb2wpOworCisgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpSZWFk
eVN0YXRlKTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkg
Y29uc3Q7CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IGNsb25lKCk7CisK
KyAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2Uu
Z2V0KCk7IH0KKyAgICB2b2lkIHNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSopOworCisgICAg
dm9pZCBzdG9wKCkgeyBtX3N0b3BwZWQgPSB0cnVlOyB9CisgICAgYm9vbCBzdG9wcGVkKCkgY29u
c3QgeyByZXR1cm4gbV9zdG9wcGVkOyB9CisKKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2b2lkIHNldENsaWVudChNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9
Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUqKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0
cmVhbVNvdXJjZSopOworCitwcml2YXRlOgorICAgIGJvb2wgc2hvdWxkRmlyZVRyYWNrUmVhZHlT
dGF0ZUNoYW5nZWQoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUpOworICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVNvdXJjZT4gbV9zb3VyY2U7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5
U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIG11dGFibGUgU3RyaW5nIG1faWQ7CisKKyAgICBib29s
IG1fbXV0ZWQ7CisgICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgYm9vbCBtX3N0b3BwZWQ7CisgICAg
TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgbV90eXBlOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215187</attachid>
            <date>2013-10-25 10:15:44 -0700</date>
            <delta_ts>2013-10-25 10:33:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123301-20131025141543.patch</filename>
            <type>text/plain</type>
            <size>43381</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmMzYzIyY2ViYjViOGQx
ODVjOTdiNWU5YjA3MmRiYTIxNjE0OTQ1YS4uODJlN2IyZDY0YTdlYWIwOTVlMWI2MGI3MTU5ODE0
ZDQwZTE3NDZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMy0xMC0yNSAgVGhp
YWdvIGRlIEJhcnJvcyBMYWNlcmRhICA8dGhpYWdvLmxhY2VyZGFAb3BlbmJvc3NhLm9yZz4KKwor
ICAgICAgICBBZGRpbmcgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgTWVkaWFTdHJlYW1UcmFj
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzAx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIG5lZWRlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUpOiBDcmVhdGUgbWV0aG9kIG5vdyByZWNlaXZlcyBh
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIGFzIHBhcmFtZXRlci4KKworICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TdHJlYW1UcmFjazo6QXVkaW9TdHJlYW1UcmFjayk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6
TWVkaWFTdHJlYW0pOiBDb25zdHJ1Y3RvciBub3cgaXRlcmF0ZXMgdGhyb3VnaCBhIHNldCBvZiBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZQorICAgICAgICBpbnN0YW5jZXMgdG8gY3JlYXRlIGVhY2gg
TWVkaWFTdHJlYW1UcmFjayBvZiBNZWRpYVN0cmVhbS4KKworICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW06OmFkZFJlbW90ZVNvdXJjZSk6IENhbGxpbmcgQXVkaW9TdHJlYW1UcmFjayBhbmQg
VmlkZW9TdHJlYW1UcmFjayB3aXRoCisgICAgICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIGFz
IHBhcmFtZXRlci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVh
bVRyYWNrKTogQ29uc3RydWN0b3Igbm93IHJlY2VpdmVzIGEgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUsIGluc3RlYWQgb2YgYQorICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZS4KKworICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6a2luZCk6IENhbGxpbmcgbWV0aG9kIGZyb20gTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2s6OnNldFNvdXJjZSk6IERpdHRvLgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrOjppZCk6IERpdHRvLgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjps
YWJlbCk6IERpdHRvLgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjplbmFi
bGVkKTogRGl0dG8uCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnNldEVu
YWJsZWQpOiBEaXR0by4KKworICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6bXV0
ZWQpOiBEaXR0by4KKworICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6cmVhZG9u
bHkpOiBEaXR0by4KKworICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6cmVtb3Rl
KTogRGl0dG8uCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnJlYWR5U3Rh
dGUpOiBEaXR0by4KKworICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c3RhdGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpjbG9uZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrOjplbmRlZCk6IERpdHRvLgorCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VTdGF0ZUNoYW5nZWQpOiBEaXR0by4KKworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c291cmNlTXV0ZWRDaGFuZ2VkKTogRGl0dG8u
CisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnNvdXJjZUVuYWJsZWRDaGFu
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpjb25maWd1
cmVUcmFja1JlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpz
dG9wcGVkKTogRGl0dG8uCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnRy
YWNrRGlkRW5kKTogU2V0dGluZyBFbmRlZCByZWFkeSBzdGF0ZSBpbiBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS4KKworICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6dHJhY2tSZWFk
eVN0YXRlQ2hhbmdlZCk6IERpc3BhdGNoZXMgTGl2ZSBvciBFbmRlZCBldmVudC4KKworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6dHJhY2tNdXRlZENoYW5nZWQpOiBEaXNwYXRj
aGVzIE11dGVkIGV2ZW50LgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLmg6IE5vdyBpbmhlcml0aW5nIGZyb20gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVD
bGllbnQuCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnNvdXJjZSk6IENh
bGxpbmcgbWV0aG9kIGZyb20gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpwcml2YXRlVHJhY2spOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b1N0cmVhbVRyYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9TdHJlYW1UcmFj
azo6VmlkZW9TdHJlYW1UcmFjayk6IENyZWF0ZSBtZXRob2Qgbm93IHJlY2VpdmVzIGEgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUgYXMgcGFyYW1ldGVyLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vVmlkZW9TdHJlYW1UcmFjay5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcik6IFN0b3JlcyB0aGUgcHJpdmF0ZSB0
cmFja3MgaW4gYSBWZWN0b3IgKHByb3BlcnR5IG9mCisgICAgICAgIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvciBjbGFzcykuCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6
YWRkVHJhY2spOiBBZGRzIGEgcHJpdmF0ZSB0cmFjayB0byB0aGUgdHJhY2tzJyBWZWN0b3IKKwor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVUcmFjayk6IFJl
bW92ZXMgYSBwcml2YXRlIHRyYWNrIGZyb20gdGhlIHRyYWNrcycgVmVjdG9yCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6bnVtYmVyT2ZBdWRpb1NvdXJjZXMpOiBS
ZW5hbWVkIGZyb20gbnVtYmVyT2ZBdWRpb1N0cmVhbXMuCisKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6YXVkaW9Tb3VyY2VzKTogUmVuYW1lZCBmcm9tIGF1ZGlvU3Ry
ZWFtcy4KKworICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpudW1iZXJP
ZlZpZGVvU291cmNlcyk6IFJlbmFtZWQgZnJvbSBudW1iZXJPZlZpZGVvU3RyZWFtcy4KKworICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjp2aWRlb1NvdXJjZXMpOiBSZW5h
bWVkIGZyb20gdmlkZW9TdHJlYW1zLgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3I6Om51bWJlck9mQXVkaW9UcmFja3MpOiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXVk
aW8gdHJhY2tzIHRoaXMgTWVkaWFTdHJlYW1EZXNjcmlwdG9yCisgICAgICAgIGhhcy4KKworICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphdWRpb1RyYWNrcyk6IFJldHVy
bnMgYSBhdWRpbyB0cmFjaywgZ2l2ZW4gYW4gaW5kZXgKKworICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpudW1iZXJPZlZpZGVvVHJhY2tzKTogUmV0dXJucyB0aGUgbnVt
YmVyIG9mIHZpZGVvIHRyYWNrcyB0aGlzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcgorICAgICAgICBo
YXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnZpZGVvVHJhY2tz
KTogUmV0dXJucyBhIHZpZGVvIHRyYWNrLCBnaXZlbiBhbiBpbmRleAorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaDogQWRk
ZWQuCisKIDIwMTMtMTAtMjUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZhc3RlciB3YXkgZm9yIHNpbXBsZSBsaW5lIGxheW91dCB0byBjaGVjayBpZiB0ZXh0
IGhhcyBmYWxsYmFjayBmb250cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjZTM1MzM0YjFiNDM2
MTFiNjdmZDhlODdjNjE3YWUzMjQxYWE0NDhlLi4yMjBmNDgxNzYzMDkwMzM5NTdmZjI5MzBjZjZl
OWZjZmFiNmU5MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk4OCw2ICsxOTg4LDcgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1DZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlw
dG9yLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRl
LmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAogICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwCiAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFj
ay5jcHAKaW5kZXggM2VjMDU3YWI1YzQ2NWQ0ZmYyMDgyMTQxZWQ4Mjk3ZGM0MmE0MTYyMi4uNGIy
MjlkZjY5Y2M2ZGYwYTE3MWE0ZGZjOGIxMDM3OTQ2ZGRlNTk1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFtVHJhY2suY3BwCkBA
IC0zNywxMiArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWZQdHI8QXVkaW9TdHJl
YW1UcmFjaz4gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERpY3Rpb25hcnkmIGF1ZGlvQ29uc3RyYWludHMpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNrKGNvbnRleHQsIDAsICZhdWRpb0NvbnN0
cmFpbnRzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNrKGNvbnRl
eHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoMCksICZhdWRpb0NvbnN0cmFpbnRz
KSk7CiB9CiAKLVJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBBdWRpb1N0cmVhbVRyYWNrOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWVkaWFTdHJlYW1Tb3VyY2UqIHNv
dXJjZSkKK1JlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4gcHJpdmF0ZVRyYWNrKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVk
aW9TdHJlYW1UcmFjayhjb250ZXh0LCBzb3VyY2UsIDApKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEF1ZGlvU3RyZWFtVHJhY2soY29udGV4dCwgcHJpdmF0ZVRyYWNrLCAwKSk7CiB9CiAKIFJl
ZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoTWVkaWFTdHJl
YW1UcmFjayogdHJhY2spCkBAIC01MCw4ICs1MCw4IEBAIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNr
PiBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoTWVkaWFTdHJlYW1UcmFjayogdHJhY2spCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNrKHRyYWNrKSk7CiB9CiAKLUF1ZGlv
U3RyZWFtVHJhY2s6OkF1ZGlvU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSwgY29uc3QgRGljdGlvbmFyeSogYXVkaW9D
b25zdHJhaW50cykKLSAgICA6IE1lZGlhU3RyZWFtVHJhY2soY29udGV4dCwgc291cmNlLCBhdWRp
b0NvbnN0cmFpbnRzKQorQXVkaW9TdHJlYW1UcmFjazo6QXVkaW9TdHJlYW1UcmFjayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiBwcml2YXRlVHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGF1ZGlvQ29uc3RyYWludHMpCisg
ICAgOiBNZWRpYVN0cmVhbVRyYWNrKGNvbnRleHQsIHByaXZhdGVUcmFjaywgYXVkaW9Db25zdHJh
aW50cykKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL0F1ZGlvU3RyZWFtVHJhY2suaAppbmRleCAxOGM4OWY1ZjgwOGIwYzAyNGJjMjA4OGE0MzJh
OGIzYzYxMmIwNmNiLi5iOWIzYjczODQwNmVmMGNjNjY3YTc0NDIzYWI5YjQzODZmMmQ3ODBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFt
VHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3Ry
ZWFtVHJhY2suaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogY2xhc3MgQXVkaW9TdHJlYW1UcmFjayBGSU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNr
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvU3RyZWFtVHJhY2s+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGljdGlvbmFyeSYpOwotICAgIHN0YXRpYyBS
ZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBN
ZWRpYVN0cmVhbVNvdXJjZSopOworICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPik7CiAgICAgc3RhdGljIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBjcmVhdGUo
TWVkaWFTdHJlYW1UcmFjayopOwogCiAgICAgdmlydHVhbCB+QXVkaW9TdHJlYW1UcmFjaygpIHsg
fQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGtpbmQoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKLSAgICBBdWRpb1N0cmVhbVRy
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbVNvdXJjZSosIGNvbnN0IERp
Y3Rpb25hcnkqKTsKKyAgICBBdWRpb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiwgY29uc3QgRGljdGlvbmFyeSop
OwogICAgIGV4cGxpY2l0IEF1ZGlvU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1UcmFjayopOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmNwcAppbmRleCBjYTNhNGI4MWE2NmU3MGZmYmI1MjI2YWM1MzE3OGY5NjcwNzE1ZTcyLi40Mzkw
ZTdiMWYyZGIxZDg2NzkyODg3M2E2OTgxODVlNjBjY2E2MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcApAQCAtMTE5LDE4ICsx
MTksMTggQEAgTWVkaWFTdHJlYW06Ok1lZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0KICAgICBtX2Rlc2NyaXB0b3ItPnNldENs
aWVudCh0aGlzKTsKIAogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjazsKLSAgICBz
aXplX3QgbnVtYmVyT2ZBdWRpb1RyYWNrcyA9IG1fZGVzY3JpcHRvci0+bnVtYmVyT2ZBdWRpb1N0
cmVhbXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZBdWRpb1RyYWNrcyA9IG1fZGVzY3JpcHRvci0+
bnVtYmVyT2ZBdWRpb1RyYWNrcygpOwogICAgIG1fYXVkaW9UcmFja3MucmVzZXJ2ZUNhcGFjaXR5
KG51bWJlck9mQXVkaW9UcmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZBdWRpb1RyYWNrczsgaSsrKSB7Ci0gICAgICAgIHRyYWNrID0gQXVkaW9TdHJlYW1UcmFjazo6
Y3JlYXRlKGNvbnRleHQsIG1fZGVzY3JpcHRvci0+YXVkaW9TdHJlYW1zKGkpKTsKKyAgICAgICAg
dHJhY2sgPSBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT5h
dWRpb1RyYWNrcyhpKSk7CiAgICAgICAgIHRyYWNrLT5hZGRPYnNlcnZlcih0aGlzKTsKICAgICAg
ICAgbV9hdWRpb1RyYWNrcy5hcHBlbmQodHJhY2sucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBz
aXplX3QgbnVtYmVyT2ZWaWRlb1RyYWNrcyA9IG1fZGVzY3JpcHRvci0+bnVtYmVyT2ZWaWRlb1N0
cmVhbXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZWaWRlb1RyYWNrcyA9IG1fZGVzY3JpcHRvci0+
bnVtYmVyT2ZWaWRlb1RyYWNrcygpOwogICAgIG1fdmlkZW9UcmFja3MucmVzZXJ2ZUNhcGFjaXR5
KG51bWJlck9mVmlkZW9UcmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZWaWRlb1RyYWNrczsgaSsrKSB7Ci0gICAgICAgIHRyYWNrID0gVmlkZW9TdHJlYW1UcmFjazo6
Y3JlYXRlKGNvbnRleHQsIG1fZGVzY3JpcHRvci0+dmlkZW9TdHJlYW1zKGkpKTsKKyAgICAgICAg
dHJhY2sgPSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT52
aWRlb1RyYWNrcyhpKSk7CiAgICAgICAgIHRyYWNrLT5hZGRPYnNlcnZlcih0aGlzKTsKICAgICAg
ICAgbV92aWRlb1RyYWNrcy5hcHBlbmQodHJhY2sucmVsZWFzZSgpKTsKICAgICB9CkBAIC0zMDgs
MTEgKzMwOCwxMSBAQCB2b2lkIE1lZGlhU3RyZWFtOjphZGRSZW1vdGVTb3VyY2UoTWVkaWFTdHJl
YW1Tb3VyY2UqIHNvdXJjZSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2s7CiAg
ICAgc3dpdGNoIChzb3VyY2UtPnR5cGUoKSkgewogICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6
OkF1ZGlvOgotICAgICAgICB0cmFjayA9IEF1ZGlvU3RyZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHNvdXJjZSk7CisgICAgICAgIHRyYWNrID0gQXVkaW9TdHJlYW1U
cmFjazo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgTWVkaWFTdHJlYW1UcmFja1By
aXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsKICAgICAgICAgbV9hdWRpb1RyYWNrcy5hcHBlbmQodHJh
Y2spOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoK
LSAgICAgICAgdHJhY2sgPSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBzb3VyY2UpOworICAgICAgICB0cmFjayA9IFZpZGVvU3RyZWFtVHJhY2s6OmNy
ZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpj
cmVhdGUoc291cmNlKSk7CiAgICAgICAgIG1fdmlkZW9UcmFja3MuYXBwZW5kKHRyYWNrKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKaW5kZXggYWEwZGU1ZmEzNDVmYWNmMzhl
MzI2ZmEyODJmNTBhMDNkYmUyYTQ1Yy4uOTMxYTQ2NDIxOTg0OGMxYWE3NmMwMmY3MzU4N2FkYjM5
OTkzYWJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCkBAIC01MSwxOCArNTEsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1NZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UsIGNvbnN0
IERpY3Rpb25hcnkqKQorTWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiBwcml2YXRlVHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqKQogICAgIDogQWN0aXZlRE9NT2Jq
ZWN0KGNvbnRleHQpCi0gICAgLCBtX3NvdXJjZSgwKQotICAgICwgbV9yZWFkeVN0YXRlKE1lZGlh
U3RyZWFtU291cmNlOjpOZXcpCi0gICAgLCBtX3N0b3BwZWQoZmFsc2UpCi0gICAgLCBtX2VuYWJs
ZWQodHJ1ZSkKLSAgICAsIG1fbXV0ZWQoZmFsc2UpCisgICAgLCBtX3ByaXZhdGVUcmFjayhwcml2
YXRlVHJhY2spCiAgICAgLCBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQoZmFsc2UpCiB7CiAgICAg
c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgaWYgKHNvdXJjZSkKLSAgICAgICAgc2V0U291cmNlKHNv
dXJjZSk7CisKKyAgICBpZiAobV9wcml2YXRlVHJhY2stPnNvdXJjZSgpKQorICAgICAgICBtX3By
aXZhdGVUcmFjay0+c291cmNlKCktPmFkZE9ic2VydmVyKHRoaXMpOwogfQogCiBNZWRpYVN0cmVh
bVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtVHJhY2sqIG90aGVyKQpAQCAtNzAs
MTMyICs2Nyw2OSBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3Ry
ZWFtVHJhY2sqIG90aGVyKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogCi0gICAgLy8gV2hl
biB0aGUgY2xvbmUoKSBtZXRob2QgaXMgaW52b2tlZCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBydW4g
dGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAvLyAxLiBMZXQgdHJhY2tDbG9uZSBiZSBhIG5ld2x5
IGNvbnN0cnVjdGVkIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0LgotICAgIC8vIDIuIEluaXRpYWxp
emUgdHJhY2tDbG9uZSdzIGlkIGF0dHJpYnV0ZSB0byBhIG5ld2x5IGdlbmVyYXRlZCB2YWx1ZS4K
LSAgICBtX2lkID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotCi0gICAgLy8gMy4gTGV0
IHRyYWNrQ2xvbmUgaW5oZXJpdCB0aGlzIHRyYWNrJ3MgdW5kZXJseWluZyBzb3VyY2UsIGtpbmQs
IGxhYmVsIGFuZCBlbmFibGVkIGF0dHJpYnV0ZXMuCi0gICAgc2V0U291cmNlKG90aGVyLT5zb3Vy
Y2UoKSk7Ci0gICAgbV9yZWFkeVN0YXRlID0gbV9zb3VyY2UgPyBtX3NvdXJjZS0+cmVhZHlTdGF0
ZSgpIDogTWVkaWFTdHJlYW1Tb3VyY2U6Ok5ldzsKLSAgICBtX2VuYWJsZWQgPSBvdGhlci0+ZW5h
YmxlZCgpOworICAgIG1fcHJpdmF0ZVRyYWNrID0gb3RoZXItPnByaXZhdGVUcmFjaygpLT5jbG9u
ZSgpOwogCi0gICAgLy8gTm90ZTogdGhlICJjbG9uZSIgc3RlcHMgZG9uJ3Qgc2F5IGFueXRoaW5n
IGFib3V0ICdtdXRlZCcsIGJ1dCA0LjMuMSBzYXlzOgotICAgIC8vIEZvciBhIG5ld2x5IGNyZWF0
ZWQgTWVkaWFTdHJlYW1UcmFjayBvYmplY3QsIHRoZSBmb2xsb3dpbmcgYXBwbGllcy4gVGhlIHRy
YWNrIGlzIGFsd2F5cyBlbmFibGVkCi0gICAgLy8gdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UgKGZv
ciBleGFtbHBlIHdoZW4gY2xvbmVkKSBhbmQgdGhlIG11dGVkIHN0YXRlIHJlZmxlY3RzIHRoZSBz
dGF0ZSBvZiB0aGUKLSAgICAvLyBzb3VyY2UgYXQgdGhlIHRpbWUgdGhlIHRyYWNrIGlzIGNyZWF0
ZWQuCi0gICAgbV9tdXRlZCA9IG90aGVyLT5tdXRlZCgpOworICAgIGlmIChtX3ByaXZhdGVUcmFj
ay0+c291cmNlKCkpCisgICAgICAgIG1fcHJpdmF0ZVRyYWNrLT5zb3VyY2UoKS0+YWRkT2JzZXJ2
ZXIodGhpcyk7CiAKLSAgICBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQgPWZhbHNlOwotICAgIG1f
c3RvcHBlZCA9IG90aGVyLT5zdG9wcGVkKCk7CisgICAgbV9ldmVudERpc3BhdGNoU2NoZWR1bGVk
ID0gZmFsc2U7CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKIHsK
LSAgICBpZiAobV9zb3VyY2UpCi0gICAgICAgIG1fc291cmNlLT5yZW1vdmVPYnNlcnZlcih0aGlz
KTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwotCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXVkaW9LaW5kKCJhdWRpbyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IHZpZGVvS2luZCgidmlkZW8iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN3aXRjaCAobV9zb3VyY2UtPnR5cGUoKSkgewot
ICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvOgotICAgICAgICByZXR1cm4gYXVkaW9L
aW5kOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgotICAgICAgICByZXR1cm4g
dmlkZW9LaW5kOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBlbXB0eUF0b207CisgICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5raW5kKCk7CiB9CiAKLXZv
aWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2Up
Cit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogbmV3
U291cmNlKQogewotICAgIEFTU0VSVCghc291cmNlIHx8ICFtX3NvdXJjZSk7CisgICAgTWVkaWFT
dHJlYW1Tb3VyY2UqIHRyYWNrU291cmNlID0gc291cmNlKCk7CiAKLSAgICBpZiAobV9zb3VyY2Up
Ci0gICAgICAgIG1fc291cmNlLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKKyAgICBpZiAodHJhY2tT
b3VyY2UpCisgICAgICAgIHRyYWNrU291cmNlLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKIAotICAg
IGlmIChzb3VyY2UpIHsKLSAgICAgICAgc291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsKLSAgICAg
ICAgbV9tdXRlZCA9IHNvdXJjZS0+bXV0ZWQoKTsKLSAgICB9CisgICAgaWYgKG5ld1NvdXJjZSkK
KyAgICAgICAgbmV3U291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsKIAotICAgIG1fc291cmNlID0g
c291cmNlOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRTb3VyY2UobmV3U291cmNlKTsKIH0KIAog
Y29uc3QgU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjppZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2lkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1faWQ7Ci0KLSAgICAvLyBUaGUgc3BlYyBz
YXlzOgotICAgIC8vICAgVW5sZXNzIGEgTWVkaWFTdHJlYW1UcmFjayBvYmplY3QgaXMgY3JlYXRl
ZCBhcyBhIHBhcnQgYSBvZiBzcGVjaWFsIHB1cnBvc2UgYWxnb3JpdGhtIHRoYXQKLSAgICAvLyAg
IHNwZWNpZmllcyBob3cgdGhlIHRyYWNrIGlkIG11c3QgYmUgaW5pdGlhbGl6ZWQsIHRoZSB1c2Vy
IGFnZW50IG11c3QgZ2VuZXJhdGUgYSBnbG9iYWxseQotICAgIC8vICAgdW5pcXVlIGlkZW50aWZp
ZXIgc3RyaW5nIGFuZCBpbml0aWFsaXplIHRoZSBvYmplY3QncyBpZCBhdHRyaWJ1dGUgdG8gdGhh
dCBzdHJpbmcuCi0gICAgaWYgKG1fc291cmNlICYmIG1fc291cmNlLT51c2VJREZvclRyYWNrSUQo
KSkKLSAgICAgICAgcmV0dXJuIG1fc291cmNlLT5pZCgpOwotCi0gICAgbV9pZCA9IGNyZWF0ZUNh
bm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pZDsKKyAgICByZXR1cm4gbV9wcml2
YXRlVHJhY2stPmlkKCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6bGFi
ZWwoKSBjb25zdAogewotICAgIGlmIChtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1fc291cmNl
LT5uYW1lKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZVRyYWNrLT5sYWJlbCgpOwogfQogCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6OmVuYWJsZWQoKSBj
b25zdAogewotICAgIHJldHVybiBtX2VuYWJsZWQ7CisgICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNr
LT5lbmFibGVkKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0RW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgaWYgKG1fc3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gNC4zLjMuMQotICAgIC8vIC4uLiBhZnRlciBhIE1lZGlhU3RyZWFtVHJhY2sgaXMgZGlzYXNz
b2NpYXRlZCBmcm9tIGl0cyB0cmFjaywgaXRzIGVuYWJsZWQgYXR0cmlidXRlIHN0aWxsCi0gICAg
Ly8gY2hhbmdlcyB2YWx1ZSB3aGVuIHNldDsgaXQganVzdCBkb2Vzbid0IGRvIGFueXRoaW5nIHdp
dGggdGhhdCBuZXcgdmFsdWUuCi0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsKLQotICAgIGlmICgh
bV9zb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc291cmNlLT5zZXRFbmFibGVkKGVu
YWJsZWQpOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRFbmFibGVkKGVuYWJsZWQpOwogfQogCiBi
b29sIE1lZGlhU3RyZWFtVHJhY2s6Om11dGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9zdG9wcGVk
IHx8ICFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fc291
cmNlLT5tdXRlZCgpOworICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+bXV0ZWQoKTsKIH0KIAog
Ym9vbCBNZWRpYVN0cmVhbVRyYWNrOjpyZWFkb25seSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3Rv
cHBlZCB8fCAhbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIG1f
c291cmNlLT5yZWFkb25seSgpOworICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+cmVhZG9ubHko
KTsKIH0KIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjpyZW1vdGUoKSBjb25zdAogewotICAgIGlm
ICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3NvdXJj
ZS0+cmVtb3RlKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5yZW1vdGUoKTsKIH0KIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpyZWFkeVN0YXRlKCkgY29uc3QK
QEAgLTIwNCwxMCArMTM4LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNr
OjpyZWFkeVN0YXRlKCkgY29uc3QKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBsaXZlKCJsaXZlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbmV3U3RhdGUoIm5ldyIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCi0gICAgaWYgKG1fc3RvcHBlZCkK
LSAgICAgICAgcmV0dXJuIGVuZGVkOwotCi0gICAgc3dpdGNoIChtX3JlYWR5U3RhdGUpIHsKKyAg
ICBzd2l0Y2ggKG1fcHJpdmF0ZVRyYWNrLT5yZWFkeVN0YXRlKCkpIHsKICAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlOjpMaXZlOgogICAgICAgICByZXR1cm4gbGl2ZTsKICAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlOjpOZXc6CkBAIC0yMjAsMjAgKzE1MSw2IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgTWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGVtcHR5
QXRvbTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRTdGF0ZShNZWRpYVN0cmVhbVNv
dXJjZTo6UmVhZHlTdGF0ZSBzdGF0ZSkKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlh
U3RyZWFtU291cmNlOjpFbmRlZCB8fCBtX3JlYWR5U3RhdGUgPT0gc3RhdGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIG9sZFN0YXRlID0gbV9y
ZWFkeVN0YXRlOwotICAgIG1fcmVhZHlTdGF0ZSA9IHN0YXRlOwotCi0gICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSAmJiBvbGRTdGF0ZSA9PSBNZWRpYVN0cmVh
bVNvdXJjZTo6TmV3KQotICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuc3RhcnRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICBpZiAobV9y
ZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCAmJiBvbGRTdGF0ZSAhPSBNZWRp
YVN0cmVhbVNvdXJjZTo6RW5kZWQpCi0gICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQog
dm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpnZXRTb3VyY2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFjaz4gY2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
U291cmNlc1JlcXVlc3Q+IHJlcXVlc3QgPSBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBjYWxsYmFjayk7CkBAIC0yNTAsMTggKzE2NywxOCBAQCBSZWZQdHI8
TWVkaWFUcmFja0NvbnN0cmFpbnRzPiBNZWRpYVN0cmVhbVRyYWNrOjpjb25zdHJhaW50cygpIGNv
bnN0CiAKIFJlZlB0cjxNZWRpYVNvdXJjZVN0YXRlcz4gTWVkaWFTdHJlYW1UcmFjazo6c3RhdGVz
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fc291cmNlKQorICAgIGlmICghc291cmNlKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBNZWRpYVNvdXJjZVN0YXRlczo6Y3JlYXRl
KG1fc291cmNlLT5zdGF0ZXMoKSk7CisKKyAgICByZXR1cm4gTWVkaWFTb3VyY2VTdGF0ZXM6OmNy
ZWF0ZShzb3VyY2UoKS0+c3RhdGVzKCkpOwogfQogCiBSZWZQdHI8TWVkaWFTdHJlYW1DYXBhYmls
aXRpZXM+IE1lZGlhU3RyZWFtVHJhY2s6OmNhcGFiaWxpdGllcygpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX3NvdXJjZSkKKyAgICBpZiAoIXNvdXJjZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBNZWRpYVN0cmVhbUNhcGFiaWxpdGllczo6Y3JlYXRlKG1fc291cmNlLT5jYXBhYmls
aXRpZXMoKSk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjpjcmVhdGUoc291
cmNlKCktPmNhcGFiaWxpdGllcygpKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjphcHBs
eUNvbnN0cmFpbnRzKGNvbnN0IERpY3Rpb25hcnkmIGNvbnN0cmFpbnRzKQpAQCAtMjczLDcgKzE5
MCw3IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBEaWN0
aW9uYXJ5JiBjb25zdHJhaW50cykKIAogUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3Ry
ZWFtVHJhY2s6OmNsb25lKCkKIHsKLSAgICBpZiAobV9zb3VyY2UgJiYgbV9zb3VyY2UtPnR5cGUo
KSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgaWYgKHNvdXJjZSgpICYmIHNvdXJj
ZSgpLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQogICAgICAgICByZXR1cm4g
QXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKHRoaXMpOwogCiAgICAgcmV0dXJuIFZpZGVvU3RyZWFt
VHJhY2s6OmNyZWF0ZSh0aGlzKTsKQEAgLTI4MSwxOSArMTk4LDE2IEBAIFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRyYWNrOjpjbG9uZSgpCiAKIHZvaWQgTWVkaWFTdHJlYW1U
cmFjazo6c3RvcFByb2R1Y2luZ0RhdGEoKQogewotICAgIGlmIChtX3N0b3BwZWQgfHwgIW1fc291
cmNlKQorICAgIGlmIChzdG9wcGVkKCkgfHwgIXNvdXJjZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBTZXQgbV9zdG9wcGVkIGJlZm9yZSBzdG9wcGluZyB0aGUgc291cmNlIGJlY2F1c2Ug
dGhhdCBtYXkgcmVzdWx0IGluIGEgY2FsbCB0byBzb3VyY2VDaGFuZ2VkU3RhdGUKLSAgICAvLyBh
bmQgd2Ugb25seSB3YW50IHRvIGRpc3BhdGNoIHRoZSAnZW5kZWQnIGV2ZW50IGlmIG5lY2Vzc2Fy
eS4KLSAgICBzZXRTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOwotICAgIG1fc3RvcHBl
ZCA9IHRydWU7Ci0gICAgbV9zb3VyY2UtPnN0b3AoKTsKKyAgICBtX3ByaXZhdGVUcmFjay0+c2V0
UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOworICAgIG1fcHJpdmF0ZVRyYWNr
LT5zdG9wKCk7CiB9CiAKIGJvb2wgTWVkaWFTdHJlYW1UcmFjazo6ZW5kZWQoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N0b3BwZWQgfHwgbV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNl
OjpFbmRlZDsKKyAgICByZXR1cm4gbV9wcml2YXRlVHJhY2stPmVuZGVkKCk7CiB9CiAKIHZvaWQg
TWVkaWFTdHJlYW1UcmFjazo6YWRkT2JzZXJ2ZXIoTWVkaWFTdHJlYW1UcmFjazo6T2JzZXJ2ZXIq
IG9ic2VydmVyKQpAQCAtMzEwLDQyICsyMjQsMzUgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpy
ZW1vdmVPYnNlcnZlcihNZWRpYVN0cmVhbVRyYWNrOjpPYnNlcnZlciogb2JzZXJ2ZXIpCiAKIHZv
aWQgTWVkaWFTdHJlYW1UcmFjazo6c291cmNlU3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV9z
dG9wcGVkKQorICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldFN0
YXRlKG1fc291cmNlLT5yZWFkeVN0YXRlKCkpOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRSZWFk
eVN0YXRlKHNvdXJjZSgpLT5yZWFkeVN0YXRlKCkpOwogfQogICAgIAogdm9pZCBNZWRpYVN0cmVh
bVRyYWNrOjpzb3VyY2VNdXRlZENoYW5nZWQoKQogewotICAgIGlmIChtX3N0b3BwZWQpCisgICAg
aWYgKHN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBtdXRlZCA9IG1fc291
cmNlLT5tdXRlZCgpOwotICAgIGlmIChtX211dGVkID09IG11dGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX211dGVkID0gbXV0ZWQ7Ci0gICAgaWYgKG1fbXV0ZWQpCi0gICAgICAgIHNjaGVk
dWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tdXRlRXZlbnQsIGZh
bHNlLCBmYWxzZSkpOwotICAgIGVsc2UKLSAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubXV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAg
ICBtX3ByaXZhdGVUcmFjay0+c2V0TXV0ZWQoc291cmNlKCktPm11dGVkKCkpOwogCiAgICAgY29u
ZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3Vy
Y2VFbmFibGVkQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKG1fc3RvcHBlZCkKKyAgICBpZiAoc3RvcHBl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBzZXRFbmFibGVkKHNvdXJjZSgpLT5l
bmFibGVkKCkpOwogICAgIC8vIG1lZGlhIGZyb20gdGhlIHNvdXJjZSBvbmx5IGZsb3dzIHdoZW4g
YSBNZWRpYVN0cmVhbVRyYWNrIG9iamVjdCBpcyBib3RoIHVubXV0ZWQgYW5kIGVuYWJsZWQKICAg
ICBjb25maWd1cmVUcmFja1JlbmRlcmluZygpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6
OmNvbmZpZ3VyZVRyYWNrUmVuZGVyaW5nKCkKIHsKLSAgICBpZiAobV9zdG9wcGVkKQorICAgIGlm
IChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDQuMy4xCkBAIC0zNTQsMTEg
KzI2MSwxMyBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmNvbmZpZ3VyZVRyYWNrUmVuZGVyaW5n
KCkKIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wcGVkKCkKIHsKLSAgICByZXR1cm4gbV9z
dG9wcGVkOworICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+c3RvcHBlZCgpOwogfQogCiB2b2lk
IE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrRGlkRW5kKCkKIHsKKyAgICBtX3ByaXZhdGVUcmFjay0+
c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOworCiAgICAgZm9yIChWZWN0
b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9v
YnNlcnZlcnMuZW5kKCk7ICsraSkKICAgICAgICAgKCppKS0+dHJhY2tEaWRFbmQoKTsKIH0KQEAg
LTM5OCw2ICszMDcsMjIgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpkaXNwYXRjaFF1ZXVlZEV2
ZW50cygpCiAgICAgZXZlbnRzLmNsZWFyKCk7CiB9CiAKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6
dHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcHJpdmF0ZVRyYWNrLT5yZWFk
eVN0YXRlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpCisgICAgICAgIHNjaGVkdWxlRXZl
bnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGFydGVkRXZlbnQsIGZhbHNl
LCBmYWxzZSkpOworICAgIGVsc2UgaWYgKG1fcHJpdmF0ZVRyYWNrLT5yZWFkeVN0YXRlKCkgPT0g
TWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2go
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9
CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tNdXRlZENoYW5nZWQoKQoreworICAgIGlm
IChtdXRlZCgpKQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubXV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBlbHNlCisgICAgICAg
IHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bm11dGVF
dmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCmluZGV4IGQ3ZWEyN2IyZGQ2OGQ3
MGM4ZDA5MWJlMDE2YTc0OTgwODI5NmRkODkuLmIzYWNkYzVkMjMwNGZlMTY5NzgyNTkyNjVkYTIy
Yjc4NjhhNWNiMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1UcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJNZWRp
YVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIE1lZGlhU3Ry
ZWFtVHJhY2tTb3VyY2VzQ2FsbGJhY2s7CiBjbGFzcyBNZWRpYVN0cmVhbUNhcGFiaWxpdGllczsK
IGNsYXNzIE1lZGlhVHJhY2tDb25zdHJhaW50czsKIAotY2xhc3MgTWVkaWFTdHJlYW1UcmFjayA6
IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2s+LCBwdWJsaWMgU2NyaXB0V3JhcHBh
YmxlLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5l
RGF0YSwgcHVibGljIE1lZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciB7CitjbGFzcyBNZWRpYVN0
cmVhbVRyYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFjaz4sIHB1YmxpYyBT
Y3JpcHRXcmFwcGFibGUsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdl
dFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgTWVkaWFTdHJlYW1Tb3VyY2U6Ok9ic2VydmVyLCBwdWJs
aWMgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIGNsYXNzIE9i
c2VydmVyIHsKICAgICBwdWJsaWM6CkBAIC02OCw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICBib29s
IHJlbW90ZSgpIGNvbnN0OwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiByZWFkeVN0YXRlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSk7
CiAKICAgICBzdGF0aWMgdm9pZCBnZXRTb3VyY2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2Rl
Jik7CiAKQEAgLTg2LDEzICs4NiwxOCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihlbmRlZCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihvdmVyY29uc3RyYWluZWQpOwogCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CisgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5zb3VyY2UoKTsgfQogICAgIHZv
aWQgc2V0U291cmNlKE1lZGlhU3RyZWFtU291cmNlKik7CiAKICAgICBib29sIGVuZGVkKCkgY29u
c3Q7CiAKICAgICB2b2lkIGFkZE9ic2VydmVyKE9ic2VydmVyKik7CiAgICAgdm9pZCByZW1vdmVP
YnNlcnZlcihPYnNlcnZlciopOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBwcml2YXRl
VHJhY2soKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGVUcmFjay5nZXQoKTsgfQorCisgICAgLy8g
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQKKyAgICB2b2lkIHRyYWNrUmVhZHlTdGF0ZUNo
YW5nZWQoKTsKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKCk7CiAKICAgICAvLyBFdmVudFRh
cmdldAogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiBNZWRpYVN0cmVhbVRyYWNrRXZlbnRU
YXJnZXRJbnRlcmZhY2VUeXBlOyB9CkBAIC0xMDMsNyArMTA4LDcgQEAgcHVibGljOgogCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVRyYWNrKik7
Ci0gICAgTWVkaWFTdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWVkaWFTdHJl
YW1Tb3VyY2UqLCBjb25zdCBEaWN0aW9uYXJ5Kik7CisgICAgTWVkaWFTdHJlYW1UcmFjayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4s
IGNvbnN0IERpY3Rpb25hcnkqKTsKIAogcHJpdmF0ZToKIApAQCAtMTI3LDE3ICsxMzIsMTIgQEAg
cHJpdmF0ZToKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsK
IAotICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gbV9zb3VyY2U7CiAgICAgUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHNJbXBsPiBtX2NvbnN0cmFpbnRzOwotICAgIE1lZGlhU3RyZWFtU291cmNl
OjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBtdXRhYmxlIFN0cmluZyBtX2lkOwogICAg
IE11dGV4IG1fbXV0ZXg7CiAKICAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKIAot
ICAgIGJvb2wgbV9zdG9wcGVkOwotICAgIGJvb2wgbV9lbmFibGVkOwotICAgIGJvb2wgbV9tdXRl
ZDsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IG1fcHJpdmF0ZVRyYWNrOwog
ICAgIGJvb2wgbV9ldmVudERpc3BhdGNoU2NoZWR1bGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRlb1N0cmVhbVRyYWNrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5jcHAKaW5k
ZXggYjZhZjhlMWE4YTIxMzRmODY0M2Q0NTg2MzBhOGY0NzAwMDlkMWNmNi4uNGUwMWNmYTI4ZTM0
NDY0ZjVkMDViMTZmOTE4Zjg5MTRlYWRjY2ViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRlb1N0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3RyZWFtVHJhY2suY3BwCkBAIC0zNywxNCAr
MzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4g
VmlkZW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IERpY3Rpb25hcnkmIHZpZGVvQ29uc3RyYWludHMpCiB7Ci0gICAgUmVmUHRyPFZpZGVv
U3RyZWFtVHJhY2s+IHRyYWNrID0gYWRvcHRSZWYobmV3IFZpZGVvU3RyZWFtVHJhY2soY29udGV4
dCwgMCwgJnZpZGVvQ29uc3RyYWludHMpKTsKLSAgICByZXR1cm4gdHJhY2sucmVsZWFzZSgpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9TdHJlYW1UcmFjayhjb250ZXh0LCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKDApLCAmdmlkZW9Db25zdHJhaW50cykpOwogfQogCi1S
ZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gVmlkZW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCitSZWZQ
dHI8VmlkZW9TdHJlYW1UcmFjaz4gVmlkZW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
IHByaXZhdGVUcmFjaykKIHsKLSAgICBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gdHJhY2sgPSBh
ZG9wdFJlZihuZXcgVmlkZW9TdHJlYW1UcmFjayhjb250ZXh0LCBzb3VyY2UsIDApKTsKLSAgICBy
ZXR1cm4gdHJhY2sucmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9TdHJl
YW1UcmFjayhjb250ZXh0LCBwcml2YXRlVHJhY2ssIDApKTsKIH0KIAogUmVmUHRyPFZpZGVvU3Ry
ZWFtVHJhY2s+IFZpZGVvU3RyZWFtVHJhY2s6OmNyZWF0ZShNZWRpYVN0cmVhbVRyYWNrKiB0cmFj
aykKQEAgLTUyLDggKzUwLDggQEAgUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFt
VHJhY2s6OmNyZWF0ZShNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaykKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFZpZGVvU3RyZWFtVHJhY2sodHJhY2spKTsKIH0KIAotVmlkZW9TdHJlYW1UcmFjazo6
VmlkZW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYVN0
cmVhbVNvdXJjZSogc291cmNlLCBjb25zdCBEaWN0aW9uYXJ5KiB2aWRlb0NvbnN0cmFpbnRzKQot
ICAgIDogTWVkaWFTdHJlYW1UcmFjayhjb250ZXh0LCBzb3VyY2UsIHZpZGVvQ29uc3RyYWludHMp
CitWaWRlb1N0cmVhbVRyYWNrOjpWaWRlb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHByaXZhdGVU
cmFjaywgY29uc3QgRGljdGlvbmFyeSogdmlkZW9Db25zdHJhaW50cykKKyAgICA6IE1lZGlhU3Ry
ZWFtVHJhY2soY29udGV4dCwgcHJpdmF0ZVRyYWNrLCB2aWRlb0NvbnN0cmFpbnRzKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3Ry
ZWFtVHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJl
YW1UcmFjay5oCmluZGV4IDIwMzQ3NjMzYTlkYTFjNjhkNDQ4NzI1YWU3NGZlZTZkNDE1N2RiNzku
LmE5ZDRlODA2MDg2Zjg5YTBlNDY3YjIyZjc2ZDliMTY3NTBjZGFlZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5oCkBA
IC0zNiwxMSArMzYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVN0cmVh
bVNvdXJjZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBNZWRpYVN0cmVt
VHJhY2tEZXNjcmlwdG9yOwogCiBjbGFzcyBWaWRlb1N0cmVhbVRyYWNrIEZJTkFMIDogcHVibGlj
IE1lZGlhU3RyZWFtVHJhY2sgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9TdHJl
YW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEaWN0aW9uYXJ5
Jik7Ci0gICAgc3RhdGljIFJlZlB0cjxWaWRlb1N0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtU291cmNlKik7CisgICAgc3RhdGljIFJlZlB0cjxW
aWRlb1N0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+KTsKICAgICBzdGF0aWMgUmVmUHRyPFZpZGVvU3Ry
ZWFtVHJhY2s+IGNyZWF0ZShNZWRpYVN0cmVhbVRyYWNrKik7CiAKICAgICB2aXJ0dWFsIH5WaWRl
b1N0cmVhbVRyYWNrKCkgeyB9CkBAIC00OCw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYga2luZCgpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgot
ICAgIFZpZGVvU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFt
U291cmNlKiwgY29uc3QgRGljdGlvbmFyeSopOworICAgIFZpZGVvU3RyZWFtVHJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+LCBj
b25zdCBEaWN0aW9uYXJ5Kik7CiAgICAgZXhwbGljaXQgVmlkZW9TdHJlYW1UcmFjayhNZWRpYVN0
cmVhbVRyYWNrKik7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAppbmRleCBkYzRiMThi
MjI1ZTFkNjU1OTFlZGZlY2VhNWM0ZTc5YzhiMjIyNmEzLi44MmNiM2Y0MTQwZGU2Mjc1NTA3NTJl
NzUzZmRlODBjZWVhY2VjNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKQEAgLTM3LDYg
KzM3LDcgQEAKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTEwMywxMSArMTA0LDE1IEBAIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3Ry
ZWFtCiAgICAgLCBtX2VuZGVkKGVuZGVkKQogewogICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykgewogICAg
ICAgICBtX2F1ZGlvU3RyZWFtU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2VzW2ldKTsKKyAgICAg
ICAgbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpjcmVhdGUoYXVkaW9Tb3VyY2VzW2ldKSk7CisgICAgfQogCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgbV92aWRlb1N0cmVhbVNv
dXJjZXMuYXBwZW5kKHZpZGVvU291cmNlc1tpXSk7CisgICAgICAgIG1fdmlkZW9UcmFja0Rlc2Ny
aXB0b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHZpZGVvU291cmNl
c1tpXSkpOworICAgIH0KIH0KIAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnNldEVuZGVk
KCkKQEAgLTExOCw2ICsxMjMsMjggQEAgdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnNldEVu
ZGVkKCkKICAgICBtX2VuZGVkID0gdHJ1ZTsKIH0KIAordm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OmFkZFRyYWNrKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNrKQor
eworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdHJhY2tzID0g
dHJhY2stPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvVHJhY2tE
ZXNjcmlwdG9ycyA6IG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzOworCisgICAgc2l6ZV90IHBvcyA9
IHRyYWNrcy5maW5kKHRyYWNrKTsKKyAgICBpZiAocG9zICE9IG5vdEZvdW5kKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0cmFja3MuYXBwZW5kKHRyYWNrKTsKK30KKwordm9pZCBNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+IHRyYWNrKQoreworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
PiYgdHJhY2tzID0gdHJhY2stPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBt
X2F1ZGlvVHJhY2tEZXNjcmlwdG9ycyA6IG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzOworCisgICAg
c2l6ZV90IHBvcyA9IHRyYWNrcy5maW5kKHRyYWNrKTsKKyAgICBpZiAocG9zID09IG5vdEZvdW5k
KQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFja3MucmVtb3ZlKHBvcyk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURl
c2NyaXB0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oCmluZGV4IDkzODk2MWJjM2IxYTc0YmU5MTQyYTVmNmU3M2ZlNGYxNGUy
MjJiMmUuLjVlMTRmYTc2MGZkOWZmNjc3MmVmNjI1N2Q2ZmQ2NWIzNWQ2MWYxNjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3Jp
cHRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oCkBAIC00MSw2ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU7CisKIGNsYXNzIE1lZGlhU3RyZWFtRGVz
Y3JpcHRvckNsaWVudCA6IHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrOjpPYnNlcnZlciB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50KCkgeyB9CkBAIC02
MywxMSArNjUsMTcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGlkKCkgY29uc3QgeyByZXR1cm4g
bV9pZDsgfQogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBdWRpb1N0cmVhbXMoKSBjb25zdCB7IHJl
dHVybiBtX2F1ZGlvU3RyZWFtU291cmNlcy5zaXplKCk7IH0KLSAgICBNZWRpYVN0cmVhbVNvdXJj
ZSogYXVkaW9TdHJlYW1zKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F1ZGlvU3Ry
ZWFtU291cmNlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvU291
cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgfQorICAg
IE1lZGlhU3RyZWFtU291cmNlKiBhdWRpb1NvdXJjZXModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fYXVkaW9TdHJlYW1Tb3VyY2VzW2luZGV4XS5nZXQoKTsgfQorCisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZWaWRlb1NvdXJjZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU3RyZWFtU291
cmNlcy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVNvdXJjZSogdmlkZW9Tb3VyY2VzKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU3RyZWFtU291cmNlc1tpbmRleF0uZ2V0
KCk7IH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mQXVkaW9UcmFja3MoKSBjb25zdCB7IHJldHVy
biBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9ycy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSogYXVkaW9UcmFja3ModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXVk
aW9UcmFja0Rlc2NyaXB0b3JzW2luZGV4XS5nZXQoKTsgfQogCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZWaWRlb1N0cmVhbXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU3RyZWFtU291cmNlcy5zaXpl
KCk7IH0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZSogdmlkZW9TdHJlYW1zKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU3RyZWFtU291cmNlc1tpbmRleF0uZ2V0KCk7IH0KKyAg
ICB1bnNpZ25lZCBudW1iZXJPZlZpZGVvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1Ry
YWNrRGVzY3JpcHRvcnMuc2l6ZSgpOyB9CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHZp
ZGVvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvVHJhY2tEZXNj
cmlwdG9yc1tpbmRleF0uZ2V0KCk7IH0KIAogICAgIHZvaWQgYWRkU291cmNlKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+KTsKICAgICB2b2lkIHJlbW92ZVNvdXJjZShQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPik7CkBAIC03OCw2ICs4Niw5IEBAIHB1YmxpYzoKICAgICBib29sIGVu
ZGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRlZDsgfQogICAgIHZvaWQgc2V0RW5kZWQoKTsKIAor
ICAgIHZvaWQgYWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4pOwor
ICAgIHZvaWQgcmVtb3ZlVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4p
OworCiBwcml2YXRlOgogICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlk
LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRp
YVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBib29sIGVuZGVkKTsKIApAQCAtODUs
NiArOTYsOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2lkOwogICAgIFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+PiBtX2F1ZGlvU3RyZWFtU291cmNlczsKICAgICBWZWN0b3I8UmVm
UHRyPE1lZGlhU3RyZWFtU291cmNlPj4gbV92aWRlb1N0cmVhbVNvdXJjZXM7CisKKyAgICBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV9hdWRpb1RyYWNrRGVzY3JpcHRv
cnM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fdmlkZW9U
cmFja0Rlc2NyaXB0b3JzOwogICAgIGJvb2wgbV9lbmRlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDMxYWEyMDUzMDcyZDMzZTRiZjQ0YjhhMThiNWRh
ZGZmZWM4MmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCkBAIC0wLDAgKzEsMjAxIEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUuaCIKKworI2luY2x1ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlKHNvdXJjZS5nZXQoKSkpOworfQorCitNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUqIG90aGVyKQoreworICAgIC8vIFdoZW4gdGhlIGNsb25lKCkgbWV0aG9kIGlzIGludm9rZWQs
IHRoZSB1c2VyIGFnZW50IG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gMS4g
TGV0IHRyYWNrQ2xvbmUgYmUgYSBuZXdseSBjb25zdHJ1Y3RlZCBNZWRpYVN0cmVhbVRyYWNrIG9i
amVjdC4KKyAgICAvLyAyLiBJbml0aWFsaXplIHRyYWNrQ2xvbmUncyBpZCBhdHRyaWJ1dGUgdG8g
YSBuZXdseSBnZW5lcmF0ZWQgdmFsdWUuCisgICAgbV9pZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKTsKKworICAgIC8vIDMuIExldCB0cmFja0Nsb25lIGluaGVyaXQgdGhpcyB0cmFjaydz
IHVuZGVybHlpbmcgc291cmNlLCBraW5kLCBsYWJlbCBhbmQgZW5hYmxlZCBhdHRyaWJ1dGVzLgor
ICAgIG1fc291cmNlID0gb3RoZXItPnNvdXJjZSgpOworICAgIG1fcmVhZHlTdGF0ZSA9IG1fc291
cmNlID8gbV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA6IE1lZGlhU3RyZWFtU291cmNlOjpOZXc7Cisg
ICAgbV9lbmFibGVkID0gb3RoZXItPmVuYWJsZWQoKTsKKworICAgIC8vIE5vdGU6IHRoZSAiY2xv
bmUiIHN0ZXBzIGRvbid0IHNheSBhbnl0aGluZyBhYm91dCAnbXV0ZWQnLCBidXQgNC4zLjEgc2F5
czoKKyAgICAvLyBGb3IgYSBuZXdseSBjcmVhdGVkIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0LCB0
aGUgZm9sbG93aW5nIGFwcGxpZXMuIFRoZSB0cmFjayBpcyBhbHdheXMgZW5hYmxlZAorICAgIC8v
IHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlIChmb3IgZXhhbWxwZSB3aGVuIGNsb25lZCkgYW5kIHRo
ZSBtdXRlZCBzdGF0ZSByZWZsZWN0cyB0aGUgc3RhdGUgb2YgdGhlCisgICAgLy8gc291cmNlIGF0
IHRoZSB0aW1lIHRoZSB0cmFjayBpcyBjcmVhdGVkLgorICAgIG1fbXV0ZWQgPSBvdGhlci0+bXV0
ZWQoKTsKKyAgICBtX3N0b3BwZWQgPSBvdGhlci0+c3RvcHBlZCgpOworfQorCitNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoTWVkaWFTdHJlYW1Tb3VyY2Uq
IHNvdXJjZSkKKyAgICA6IG1fc291cmNlKDApCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFTdHJl
YW1Tb3VyY2U6Ok5ldykKKyAgICAsIG1fbXV0ZWQoZmFsc2UpCisgICAgLCBtX2VuYWJsZWQodHJ1
ZSkKKyAgICAsIG1fc3RvcHBlZChmYWxzZSkKK3sKKyAgICBzZXRTb3VyY2Uoc291cmNlKTsKK30K
Kwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291cmNlKE1lZGlhU3RyZWFtU291
cmNlKiBzb3VyY2UpCit7CisgICAgbV9zb3VyY2UgPSBzb3VyY2U7CisKKyAgICBpZiAoIW1fc291
cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRNdXRlZChtX3NvdXJjZS0+bXV0ZWQoKSk7
CisgICAgc2V0UmVhZHlTdGF0ZShtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpKTsKK30KKworYm9vbCBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2hvdWxkRmlyZVRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQo
TWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgb2xkU3RhdGUpCit7CisgICAgcmV0dXJuICht
X3JlYWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUgJiYgb2xkU3RhdGUgPT0gTWVk
aWFTdHJlYW1Tb3VyY2U6Ok5ldykgfHwgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJj
ZTo6RW5kZWQgJiYgb2xkU3RhdGUgIT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKTsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6a2luZCgpIGNvbnN0
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXVkaW8oImF1ZGlv
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gdmlkZW8oInZpZGVvIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisKKyAgICBpZiAobV90eXBlID09IE1lZGlhU3RyZWFtU291cmNl
OjpBdWRpbykKKyAgICAgICAgcmV0dXJuIGF1ZGlvOworCisgICAgcmV0dXJuIHZpZGVvOworfQor
Citjb25zdCBTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjppZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2lkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1faWQ7CisKKyAgICAvLyBU
aGUgc3BlYyBzYXlzOgorICAgIC8vICAgVW5sZXNzIGEgTWVkaWFTdHJlYW1UcmFjayBvYmplY3Qg
aXMgY3JlYXRlZCBhcyBhIHBhcnQgYSBvZiBzcGVjaWFsIHB1cnBvc2UgYWxnb3JpdGhtIHRoYXQK
KyAgICAvLyAgIHNwZWNpZmllcyBob3cgdGhlIHRyYWNrIGlkIG11c3QgYmUgaW5pdGlhbGl6ZWQs
IHRoZSB1c2VyIGFnZW50IG11c3QgZ2VuZXJhdGUgYSBnbG9iYWxseQorICAgIC8vICAgdW5pcXVl
IGlkZW50aWZpZXIgc3RyaW5nIGFuZCBpbml0aWFsaXplIHRoZSBvYmplY3QncyBpZCBhdHRyaWJ1
dGUgdG8gdGhhdCBzdHJpbmcuCisgICAgaWYgKG1fc291cmNlICYmIG1fc291cmNlLT51c2VJREZv
clRyYWNrSUQoKSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5pZCgpOworCisgICAgbV9pZCA9
IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pZDsKK30KKworY29u
c3QgU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6bGFiZWwoKSBjb25zdAoreworICAg
IGlmIChtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5uYW1lKCk7CisKKyAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKworYm9vbCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
ZW5kZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0b3BwZWQgfHwgKG1fc291cmNlICYmIG1f
c291cmNlLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKTsKK30KKwor
Ym9vbCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6bXV0ZWQoKSBjb25zdAoreworICAgIGlmICht
X3N0b3BwZWQgfHwgIW1fc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gbV9zb3VyY2UtPm11dGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgaWYgKG1fbXV0ZWQgPT0gbXV0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbXV0ZWQgPSBtdXRlZDsKKworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPnRyYWNrTXV0ZWRDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU6OnJlYWRvbmx5KCkgY29uc3QKK3sKKyAgICBpZiAobV9zdG9wcGVk
IHx8ICFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9zb3Vy
Y2UtPnJlYWRvbmx5KCk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnJlbW90
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG1fc291cmNlLT5yZW1vdGUoKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1fc3RvcHBl
ZCB8fCBtX2VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gNC4z
LjMuMQorICAgIC8vIC4uLiBhZnRlciBhIE1lZGlhU3RyZWFtVHJhY2sgaXMgZGlzYXNzb2NpYXRl
ZCBmcm9tIGl0cyB0cmFjaywgaXRzIGVuYWJsZWQgYXR0cmlidXRlIHN0aWxsCisgICAgLy8gY2hh
bmdlcyB2YWx1ZSB3aGVuIHNldDsgaXQganVzdCBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggdGhh
dCBuZXcgdmFsdWUuCisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKK30KKworTWVkaWFTdHJlYW1T
b3VyY2U6OlJlYWR5U3RhdGUgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnJlYWR5U3RhdGUoKSBj
b25zdAoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAgIHJldHVybiBNZWRpYVN0cmVhbVNv
dXJjZTo6RW5kZWQ7CisKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpzZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpSZWFk
eVN0YXRlIHN0YXRlKQoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkVuZGVkIHx8IG1fcmVhZHlTdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgb2xkU3RhdGUgPSBtX3JlYWR5U3RhdGU7
CisgICAgbV9yZWFkeVN0YXRlID0gc3RhdGU7CisKKyAgICBpZiAobV9jbGllbnQgJiYgc2hvdWxk
RmlyZVRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQob2xkU3RhdGUpKQorICAgICAgICBtX2NsaWVudC0+
dHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjbG9uZSgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSh0aGlzKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDkwOTU4NTZjN2Y1OTczY2QzM2Y1NjkyOTM2
ZGUwYTZmZjIwYzRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaApAQCAtMCwwICsxLDk5IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVfaAorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgdHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdHJhY2tNdXRlZENoYW5nZWQoKSA9IDA7Cit9OworCitjbGFzcyBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IGNy
ZWF0ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CisgICAgdmlydHVhbCB+TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUoKSB7IH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYga2luZCgp
IGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcm
IGxhYmVsKCkgY29uc3Q7CisKKyAgICBib29sIGVuZGVkKCkgY29uc3Q7CisKKyAgICBib29sIG11
dGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNdXRlZChib29sKTsKKworICAgIGJvb2wgcmVhZG9u
bHkoKSBjb25zdDsKKyAgICBib29sIHJlbW90ZSgpIGNvbnN0OworCisgICAgYm9vbCBlbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wp
OworCisgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRl
KTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7
CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IGNsb25lKCk7CisKKyAgICBN
ZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7
IH0KKyAgICB2b2lkIHNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSopOworCisgICAgdm9pZCBz
dG9wKCkgeyBtX3N0b3BwZWQgPSB0cnVlOyB9CisgICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9wcGVkOyB9CisKKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2b2lkIHNldENsaWVudChNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9Citwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUqKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVhbVNv
dXJjZSopOworCitwcml2YXRlOgorICAgIGJvb2wgc2hvdWxkRmlyZVRyYWNrUmVhZHlTdGF0ZUNo
YW5nZWQoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUpOworICAgIFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4gbV9zb3VyY2U7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUg
bV9yZWFkeVN0YXRlOworICAgIG11dGFibGUgU3RyaW5nIG1faWQ7CisKKyAgICBib29sIG1fbXV0
ZWQ7CisgICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgYm9vbCBtX3N0b3BwZWQ7CisgICAgTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGUgbV90eXBlOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xp
ZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>