<?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>21562</bug_id>
          
          <creation_ts>2008-10-12 14:56:49 -0700</creation_ts>
          <short_desc>Layering violation: MediaPlayer should not reference/use FrameView</short_desc>
          <delta_ts>2014-10-09 14:32:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136884</dependson>
    
    <dependson>137119</dependson>
          <blocked>21354</blocked>
    
    <blocked>137552</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95080</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-12 14:56:49 -0700</bug_when>
    <thetext>It is a layering violation for MediaPlayer to non WebCore/platform related classes such as FrameView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035899</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-18 04:20:47 -0700</bug_when>
    <thetext>Updated bug title, since the MediaPlayer no longer uses FrameView, I think the only layering violation remaining is the CachedResourceLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037206</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-25 03:58:18 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Updated bug title, since the MediaPlayer no longer uses FrameView, I think the only layering violation remaining is the CachedResourceLoader.

Oops, I was wrong, MediaPlayer still uses FrameView. I&apos;ve been checking it and it&apos;s easy to fix for most of the cases. 

 - When checking whether the player has a frame view, we can simply check whether it&apos;s visible, because it&apos;s equivalent.
 - To check if the player is in a media document, we can add another virtual method to MediaPlayerClient, that HTMLMediaElement can implement just with return document().isMediaDocument()
 - MediaPlayerPrivateQTKit also uses it to get the ColorSpace and Font in order to render the frame rate. I wonder if we could pass those somehow from RenderVideo, or add a MediaPlayer::paintFrameRate(ColorSpace, Font) called after paint() by RenderVideo, and implemented only by MediaPlayerPrivateQTKit. Another approach would be to add media player methods to get the colorspace and font, implemented by the HTMLMediaElement.
 - And finally it&apos;s used again by MediaPlayerPrivateQTKit to make the QTMovieView a subview of the document view. I have no idea what this means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037251</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-09-25 10:33:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt;  - MediaPlayerPrivateQTKit also uses it to get the ColorSpace and Font in order to render the frame rate. I wonder if we could pass those somehow from RenderVideo, or add a MediaPlayer::paintFrameRate(ColorSpace, Font) called after paint() by RenderVideo, and implemented only by MediaPlayerPrivateQTKit. Another approach would be to add media player methods to get the colorspace and font, implemented by the HTMLMediaElement.

Don&apos;t worry about that, the frame rate code is not compiled by default and should be deleted in any case. I will remove it when I get some spare time.

&gt;  - And finally it&apos;s used again by MediaPlayerPrivateQTKit to make the QTMovieView a subview of the document view. I have no idea what this means.

This code can be removed as well, although it is compiled by default. Why don&apos;t you file a bug about removing it and block this bug on it. I will find some time to take care of it in the next couple of days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037253</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-25 11:24:39 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt;  - MediaPlayerPrivateQTKit also uses it to get the ColorSpace and Font in order to render the frame rate. I wonder if we could pass those somehow from RenderVideo, or add a MediaPlayer::paintFrameRate(ColorSpace, Font) called after paint() by RenderVideo, and implemented only by MediaPlayerPrivateQTKit. Another approach would be to add media player methods to get the colorspace and font, implemented by the HTMLMediaElement.
&gt; 
&gt; Don&apos;t worry about that, the frame rate code is not compiled by default and should be deleted in any case. I will remove it when I get some spare time.

Oh, much better :-)

&gt; &gt;  - And finally it&apos;s used again by MediaPlayerPrivateQTKit to make the QTMovieView a subview of the document view. I have no idea what this means.
&gt; 
&gt; This code can be removed as well, although it is compiled by default. Why don&apos;t you file a bug about removing it and block this bug on it. I will find some time to take care of it in the next couple of days.

Sure, thanks for your help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037255</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-25 11:29:16 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=137119

Once that one is fixed I&apos;ll fix the other cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038525</commentid>
    <comment_count>6</comment_count>
      <attachid>239020</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-01 05:19:58 -0700</bug_when>
    <thetext>Created attachment 239020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040343</commentid>
    <comment_count>7</comment_count>
      <attachid>239020</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-08 10:44:25 -0700</bug_when>
    <thetext>Comment on attachment 239020
Patch

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

Great to do this. I’m concerned about the change in MediaPlayerPrivateAVFoundation::preferredRenderingMode because it’s just removing code. Seems we could have just removed that in a separate patch if it wasn’t needed. I’d like an expert to explain why it’s not needed.

&gt; Source/WebCore/html/HTMLMediaElement.h:586
&gt; +    virtual bool mediaPlayerInMediaDocument() const override;

If it was me I’d probably say const override final, not that it really matters.

&gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:593
&gt; -    if (!m_frameView)
&gt; +    if (!m_mediaPlayerClient)
&gt;          return false;
&gt; -    Document* document = m_frameView-&gt;frame().document();
&gt; -    return document &amp;&amp; document-&gt;isMediaDocument();
&gt; +    return m_visible &amp;&amp; m_mediaPlayerClient-&gt;mediaPlayerInMediaDocument();

I like writing these as a single line:

    return m_visible &amp;&amp; m_mediaPlayerClient &amp;&amp; m_mediaPlayerClient-&gt;mediaPlayerInMediaDocument();

But also, I wonder if it’s legal for the client to be null. Some other code seems to assume it’s not.

The name m_mediaPlayerClient is so wordy. I really wish it was just m_client given it’s a data member of the MediaPlayer class!

&gt; Source/WebCore/platform/graphics/MediaPlayer.h:267
&gt; +    virtual bool mediaPlayerInMediaDocument() const { return false; }

I’m not so fond of this name, because it sounds like a function that returns “a media player that is in a media document” rather than a function that answers a question about whether the media player is in a media document. I guess maybe the mediaPlayer is a prefix we use on a lot of function names. Maybe mediaPlayerIsInMediaDocument would be better.

But also, maybe there’s a more abstract way to describe this. It seems like a concept layering violation for the media player to even have a concept of “in media document”, so it would be nice to change this concept to instead express what behavior we expect from the media player rather than the situation.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:105
&gt; -    if (!m_player-&gt;visible() || !m_player-&gt;frameView() || assetStatus() == MediaPlayerAVAssetStatusUnknown)
&gt; +    if (!m_player-&gt;visible() || assetStatus() == MediaPlayerAVAssetStatusUnknown)

Why is it OK to take this check out? I don’t see us doing anything new to solve the problem that this check would have been solving. Was it simply an unneeded check?

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:108
&gt;      if (supportsAcceleratedRendering() &amp;&amp; m_player-&gt;mediaPlayerClient()-&gt;mediaPlayerRenderingCanBeAccelerated(m_player))

This seems to assume that the client is never null. Was the m_player-&gt;frameView() check above perhaps relevant to guaranteeing that? Can the client be null?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040352</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-08 11:10:25 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 239020 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=239020&amp;action=review

Thanks for the review.

&gt; Great to do this. I’m concerned about the change in MediaPlayerPrivateAVFoundation::preferredRenderingMode because it’s just removing code. Seems we could have just removed that in a separate patch if it wasn’t needed. I’d like an expert to explain why it’s not needed.

It&apos;s removed here, because this patch removes MediaPlayer::frameView().

&gt; &gt; Source/WebCore/html/HTMLMediaElement.h:586
&gt; &gt; +    virtual bool mediaPlayerInMediaDocument() const override;
&gt; 
&gt; If it was me I’d probably say const override final, not that it really matters.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:593
&gt; &gt; -    if (!m_frameView)
&gt; &gt; +    if (!m_mediaPlayerClient)
&gt; &gt;          return false;
&gt; &gt; -    Document* document = m_frameView-&gt;frame().document();
&gt; &gt; -    return document &amp;&amp; document-&gt;isMediaDocument();
&gt; &gt; +    return m_visible &amp;&amp; m_mediaPlayerClient-&gt;mediaPlayerInMediaDocument();
&gt; 
&gt; I like writing these as a single line:
&gt; 
&gt;     return m_visible &amp;&amp; m_mediaPlayerClient &amp;&amp; m_mediaPlayerClient-&gt;mediaPlayerInMediaDocument();

I followed the pattern of all other MediaPlayer methods for consistency, that return early if the media player client is null.

&gt; But also, I wonder if it’s legal for the client to be null. Some other code seems to assume it’s not.

I&apos;m not familiar with the media player code, but all the places in MediaPlayer where the client is used, there&apos;s a null check first.

&gt; The name m_mediaPlayerClient is so wordy. I really wish it was just m_client given it’s a data member of the MediaPlayer class!

Agree, it also surprised me.

&gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.h:267
&gt; &gt; +    virtual bool mediaPlayerInMediaDocument() const { return false; }
&gt; 
&gt; I’m not so fond of this name, because it sounds like a function that returns “a media player that is in a media document” rather than a function that answers a question about whether the media player is in a media document. I guess maybe the mediaPlayer is a prefix we use on a lot of function names. Maybe mediaPlayerIsInMediaDocument would be better.

Yes, all virtual methods in MediaPlayerClient use the mediaPlayer prefix.

&gt; But also, maybe there’s a more abstract way to describe this. It seems like a concept layering violation for the media player to even have a concept of “in media document”, so it would be nice to change this concept to instead express what behavior we expect from the media player rather than the situation.

I don&apos;t really know why it&apos;s needed to know whether the media player is in a media document. It&apos;s only used by mac.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:105
&gt; &gt; -    if (!m_player-&gt;visible() || !m_player-&gt;frameView() || assetStatus() == MediaPlayerAVAssetStatusUnknown)
&gt; &gt; +    if (!m_player-&gt;visible() || assetStatus() == MediaPlayerAVAssetStatusUnknown)
&gt; 
&gt; Why is it OK to take this check out? I don’t see us doing anything new to solve the problem that this check would have been solving. Was it simply an unneeded check?

Yes, it was unneeded. The only one calling MediaPlayer::setFrameView is RenderVideo, and everytime it was called with a valid frame view, it also called setVisible(true), and when called with null, it also called setVisible(false), so having a valid frame view was equivalent to being visible. Since here we are already checking whether it&apos;s visible or not, the frame view check was redundant.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:108
&gt; &gt;      if (supportsAcceleratedRendering() &amp;&amp; m_player-&gt;mediaPlayerClient()-&gt;mediaPlayerRenderingCanBeAccelerated(m_player))
&gt; 
&gt; This seems to assume that the client is never null. Was the m_player-&gt;frameView() check above perhaps relevant to guaranteeing that? Can the client be null?

Good point, but there are other places in that file where the client is used assuming it&apos;s not null and without checking of the player has a frame view, so I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040355</commentid>
    <comment_count>9</comment_count>
      <attachid>239020</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-08 11:26:41 -0700</bug_when>
    <thetext>Comment on attachment 239020
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.h:267
&gt;&gt;&gt; +    virtual bool mediaPlayerInMediaDocument() const { return false; }
&gt;&gt; 
&gt;&gt; I’m not so fond of this name, because it sounds like a function that returns “a media player that is in a media document” rather than a function that answers a question about whether the media player is in a media document. I guess maybe the mediaPlayer is a prefix we use on a lot of function names. Maybe mediaPlayerIsInMediaDocument would be better.
&gt;&gt; 
&gt;&gt; But also, maybe there’s a more abstract way to describe this. It seems like a concept layering violation for the media player to even have a concept of “in media document”, so it would be nice to change this concept to instead express what behavior we expect from the media player rather than the situation.
&gt; 
&gt; Yes, all virtual methods in MediaPlayerClient use the mediaPlayer prefix.

Please read the rest of my comment, though. That was only the first thing, but the commend said three things. For example, I suggested that mediaPlayerIsInMediaDocument would be a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040485</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-08 22:40:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 239020 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=239020&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.h:267
&gt; &gt;&gt;&gt; +    virtual bool mediaPlayerInMediaDocument() const { return false; }
&gt; &gt;&gt; 
&gt; &gt;&gt; I’m not so fond of this name, because it sounds like a function that returns “a media player that is in a media document” rather than a function that answers a question about whether the media player is in a media document. I guess maybe the mediaPlayer is a prefix we use on a lot of function names. Maybe mediaPlayerIsInMediaDocument would be better.
&gt; &gt;&gt; 
&gt; &gt;&gt; But also, maybe there’s a more abstract way to describe this. It seems like a concept layering violation for the media player to even have a concept of “in media document”, so it would be nice to change this concept to instead express what behavior we expect from the media player rather than the situation.
&gt; &gt; 
&gt; &gt; Yes, all virtual methods in MediaPlayerClient use the mediaPlayer prefix.
&gt; 
&gt; Please read the rest of my comment, though. That was only the first thing, but the commend said three things. For example, I suggested that mediaPlayerIsInMediaDocument would be a better name.

Sure, I read that, but didn&apos;t comment anything about the name because I agreed with your suggestions. I&apos;ll submit an updated patch anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040509</commentid>
    <comment_count>11</comment_count>
      <attachid>239523</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-09 00:42:55 -0700</bug_when>
    <thetext>Created attachment 239523
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040561</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-09 09:11:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; But also, maybe there’s a more abstract way to describe this. It seems like a concept layering violation for the media player to even have a concept of “in media document”, so it would be nice to change this concept to instead express what behavior we expect from the media player rather than the situation.
&gt; 
&gt; I don&apos;t really know why it&apos;s needed to know whether the media player is in a media document. It&apos;s only used by mac.

OK. Maybe some Mac expert can improve this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040564</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-09 09:18:57 -0700</bug_when>
    <thetext>Committed r174505: &lt;http://trac.webkit.org/changeset/174505&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040593</commentid>
    <comment_count>14</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-10-09 10:31:30 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; But also, maybe there’s a more abstract way to describe this. It seems like a concept layering violation for the media player to even have a concept of “in media document”, so it would be nice to change this concept to instead express what behavior we expect from the media player rather than the situation.
&gt; &gt; 
&gt; &gt; I don&apos;t really know why it&apos;s needed to know whether the media player is in a media document. It&apos;s only used by mac.
&gt; 
&gt; OK. Maybe some Mac expert can improve this later.

This is only used from within our MediaPlayerPrivateQTKit code, so that, when we see media with non-video / non-audio tracks (say, &quot;qtvr&quot; or &quot;rtsp&quot;), we can signal to the MediaDocument that it should fall back to a PluginDocument and use the QuickTime plugin to render that media.

That said, there&apos;s no reason why media document knowledge has to be down in QTKit. Instead of only sending a mediaPlayerSawUnsupportedTracks() message from MediaPlayerPrivateQTKit when it&apos;s in a media document, it could always send that message, and the HTMLMediaElement could ignore it unless it&apos;s in a media document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040690</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-09 14:32:18 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; That said, there&apos;s no reason why media document knowledge has to be down in QTKit. Instead of only sending a mediaPlayerSawUnsupportedTracks() message from MediaPlayerPrivateQTKit when it&apos;s in a media document, it could always send that message, and the HTMLMediaElement could ignore it unless it&apos;s in a media document.

Sounds like a good thing to do so we can remove mediaPlayerIsInMediaDocument.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239020</attachid>
            <date>2014-10-01 05:19:58 -0700</date>
            <delta_ts>2014-10-09 00:42:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-media-player-frame-view.diff</filename>
            <type>text/plain</type>
            <size>9844</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYWJlOGJmLi45Y2Y4ZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTQtMTAtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIExheWVyaW5nIHZpb2xhdGlvbjogTWVkaWFQbGF5ZXIgc2hvdWxkIG5vdCBy
ZWZlcmVuY2UvdXNlIEZyYW1lVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE1NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgRnJhbWVWaWV3IGRlcGVuZGVuY3kgZnJvbSBNZWRpYVBsYXll
ci4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckluTWVkaWFEb2N1bWVudCk6IENoZWNr
IGlmCisgICAgICAgIHRoZSBlbGVtZW50IGRvY3VtZW50IGlzIGEgbWVkaWEgZG9jdW1lbnQuCisg
ICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Ok1l
ZGlhUGxheWVyKTogUmVtb3ZlIG1fZnJhbWVWaWV3IGluaXRpYWxpemF0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmluTWVkaWFEb2N1bWVudCk6IFVzZSB0aGUgTWVkaWFQbGF5
ZXJDbGllbnQKKyAgICAgICAgdG8gY2hlY2sgaWYgdGhlIG1lZGlhIHBsYXllciBpcyBpbiBhIG1l
ZGlhIGRvY3VtZW50LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJJbk1lZGlh
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNldEZyYW1lVmlldyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6ZnJhbWVWaWV3KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6cHJlZmVycmVkUmVuZGVyaW5nTW9kZSk6CisgICAgICAgIERv
IG5vdCBjaGVjayBpZiB0aGUgbWVkaWEgcGxheWVyIGhhcyBhIGZyYW1lIHZpZXcsIGNoZWNraW5n
IHdoZXRoZXIgaXQncyB2aXNpYmxlCisgICAgICAgIGlzIGVub3VnaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uQ0YuY3BwOgorICAgICAgICBSZW1vdmUgdW5uZWVkZWQgaGVhZGVyIGluY2x1ZGUuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVmlkZW8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86On5S
ZW5kZXJWaWRlbyk6IERvIG5vdCBjYWxsIE1lZGlhUGxheWVyOjpzZXRGcmFtZVZpZXcoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjp1cGRhdGVQbGF5ZXIpOiBEaXR0by4KKwogMjAx
NC0wOS0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAg
ICBDU1MgSklUOiBFbmFibGUgbXVsdGlwbGUgc3RhY2sgcmVmZXJlbmNlcyBhbGxvY2F0aW9uIGJ5
IGFsbG9jYXRlVW5pbml0aWFsaXplZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKaW5kZXggZTlmMGNkOS4uYTg0MzA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC01NzAyLDcgKzU3MDIsMTIgQEAgYm9vbCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllckdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JgogICAgIHJldHVybiBnZXRSYXdDb29raWVzKCZkb2N1bWVudCgpLCB1cmwsIGNvb2tpZXMp
OwogfQogI2VuZGlmCi0gICAgCisKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJ
bk1lZGlhRG9jdW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLmlzTWVkaWFE
b2N1bWVudCgpOworfQorCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yc1Jl
c3RyaWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSgpCiB7CiAgICAgbV9tZWRpYVNlc3Npb24t
PnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oSFRNTE1lZGlhU2Vzc2lvbjo6UmVxdWlyZVVzZXJH
ZXN0dXJlRm9yTG9hZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4
IGQ5YTY4ZDNjLi45YmFhMGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aApAQCAtNTgzLDYgKzU4Myw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG1lZGlhUGxh
eWVyR2V0UmF3Q29va2llcyhjb25zdCBVUkwmLCBWZWN0b3I8Q29va2llPiYpIGNvbnN0IG92ZXJy
aWRlOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIGJvb2wgbWVkaWFQbGF5ZXJJbk1lZGlhRG9jdW1l
bnQoKSBjb25zdCBvdmVycmlkZTsKKwogICAgIHZvaWQgbG9hZFRpbWVyRmlyZWQoVGltZXI8SFRN
TE1lZGlhRWxlbWVudD4mKTsKICAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1lckZpcmVkKFRpbWVy
PEhUTUxNZWRpYUVsZW1lbnQ+Jik7CiAgICAgdm9pZCBwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJl
ZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDZhNWIwNDUuLjliYzU5OWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAg
LTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgpAQCAtMzEyLDcgKzMxMCw2IEBAIE1lZGlhUGxheWVyOjpNZWRpYVBsYXll
cihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQogICAgICwgbV9yZWxvYWRUaW1lcih0aGlzLCAm
TWVkaWFQbGF5ZXI6OnJlbG9hZFRpbWVyRmlyZWQpCiAgICAgLCBtX3ByaXZhdGUoY3JlYXRlTnVs
bE1lZGlhUGxheWVyKHRoaXMpKQogICAgICwgbV9jdXJyZW50TWVkaWFFbmdpbmUoMCkKLSAgICAs
IG1fZnJhbWVWaWV3KDApCiAgICAgLCBtX3ByZWxvYWQoQXV0bykKICAgICAsIG1fdmlzaWJsZShm
YWxzZSkKICAgICAsIG1fcmF0ZSgxLjBmKQpAQCAtNTg5LDEyICs1ODYsMTEgQEAgYm9vbCBNZWRp
YVBsYXllcjo6aGFzQXVkaW8oKSBjb25zdAogICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc0F1ZGlv
KCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OmluTWVkaWFEb2N1bWVudCgpCitib29sIE1lZGlh
UGxheWVyOjppbk1lZGlhRG9jdW1lbnQoKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZVZpZXcp
CisgICAgaWYgKCFtX21lZGlhUGxheWVyQ2xpZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZVZpZXctPmZyYW1lKCkuZG9jdW1lbnQoKTsK
LSAgICByZXR1cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpOworICAg
IHJldHVybiBtX3Zpc2libGUgJiYgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJJbk1l
ZGlhRG9jdW1lbnQoKTsKIH0KIAogUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllcjo6cGxhdGZvcm1N
ZWRpYSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuaAppbmRleCA0MTE3ZWI1Li4xN2YwZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTEyOSw3ICsxMjksNiBAQCBleHRlcm4g
Y29uc3QgUGxhdGZvcm1NZWRpYSBOb1BsYXRmb3JtTWVkaWE7CiAKIGNsYXNzIENhY2hlZFJlc291
cmNlTG9hZGVyOwogY2xhc3MgQ29udGVudFR5cGU7Ci1jbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIEludFJlY3Q7
CkBAIC0yNjQsNiArMjYzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXll
ckhhbmRsZVBsYXliYWNrQ29tbWFuZChNZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5k
VHlwZSkgeyB9CiAKICAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYVBsYXllclNvdXJjZUFwcGxpY2F0
aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBtZWRpYVBsYXllckluTWVkaWFEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiB9OwogCiBjbGFzcyBNZWRpYVBsYXllclN1cHBvcnRzVHlwZUNsaWVudCB7CkBAIC0z
MTYsOSArMzE3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKICAgICBi
b29sIGhhc0F1ZGlvKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEZyYW1lVmlldyhGcmFtZVZpZXcq
IGZyYW1lVmlldykgeyBtX2ZyYW1lVmlldyA9IGZyYW1lVmlldzsgfQotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3KCkgeyByZXR1cm4gbV9mcmFtZVZpZXc7IH0KLSAgICBib29sIGluTWVkaWFEb2N1
bWVudCgpOworICAgIGJvb2wgaW5NZWRpYURvY3VtZW50KCkgY29uc3Q7CiAKICAgICBJbnRTaXpl
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSk7CkBAIC01OTQsNyArNTkzLDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9jb250ZW50TUlNRVR5cGU7CiAgICAgU3RyaW5nIG1fY29udGVudFR5cGVDb2RlY3M7CiAgICAg
U3RyaW5nIG1fa2V5U3lzdGVtOwotICAgIEZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAgICAgSW50
U2l6ZSBtX3NpemU7CiAgICAgUHJlbG9hZCBtX3ByZWxvYWQ7CiAgICAgYm9vbCBtX3Zpc2libGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b24uY3BwCmluZGV4IDhhNTk1ZDIuLmFlZDg4OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCkBAIC0zMSw4ICszMSw2IEBA
CiAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Ri5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaCIKQEAgLTEwNCw3
ICsxMDIsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUmVuZGVyaW5n
TW9kZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpbwogCiBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246Ok1lZGlhUmVuZGVyaW5nTW9kZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnByZWZlcnJlZFJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmICghbV9wbGF5
ZXItPnZpc2libGUoKSB8fCAhbV9wbGF5ZXItPmZyYW1lVmlldygpIHx8IGFzc2V0U3RhdHVzKCkg
PT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzVW5rbm93bikKKyAgICBpZiAoIW1fcGxheWVyLT52
aXNpYmxlKCkgfHwgYXNzZXRTdGF0dXMoKSA9PSBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNVbmtu
b3duKQogICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOwogCiAgICAgaWYgKHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQo
KS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxheWVyKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uQ0YuY3BwCmluZGV4IDVmZGYxZWIuLjM1ZjM5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAt
MzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkNETVNlc3Npb25BVkZvdW5kYXRpb25DRi5oIgogI2lu
Y2x1ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lmIEhBVkUoQVZG
T1VOREFUSU9OX0xFR0lCTEVfT1VUUFVUX1NVUFBPUlQpCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWQ0YuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IDczZTRhZGIuLmJj
YWUwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9y
dCAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24u
aCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW1wb3J0ICJJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBs
YXllclByaXZhdGVRVEtpdC5tbQppbmRleCA3Mzc0NzJkLi5jMWZmYTZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0Lm1tCkBAIC0zMSw4ICszMSw2IEBACiAKICNpbXBvcnQgIkJsb2NrRXhj
ZXB0aW9ucy5oIgogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbXBvcnQgIkZyYW1lLmgi
Ci0jaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bXBvcnQgIlVSTC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWRlby5jcHAKaW5kZXggNmVhZmYzMy4uNzRmY2M5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCkBAIC01NiwxMCArNTYsOCBAQCBSZW5kZXJWaWRl
bzo6UmVuZGVyVmlkZW8oSFRNTFZpZGVvRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJT
dHlsZT4gc3R5bGUpCiAKIFJlbmRlclZpZGVvOjp+UmVuZGVyVmlkZW8oKQogewotICAgIGlmIChN
ZWRpYVBsYXllciogcGxheWVyID0gdmlkZW9FbGVtZW50KCkucGxheWVyKCkpIHsKKyAgICBpZiAo
TWVkaWFQbGF5ZXIqIHBsYXllciA9IHZpZGVvRWxlbWVudCgpLnBsYXllcigpKQogICAgICAgICBw
bGF5ZXItPnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICBwbGF5ZXItPnNldEZyYW1lVmlldygw
KTsKLSAgICB9CiB9CiAKIEludFNpemUgUmVuZGVyVmlkZW86OmRlZmF1bHRTaXplKCkKQEAgLTIz
Myw3ICsyMzEsNiBAQCB2b2lkIFJlbmRlclZpZGVvOjp1cGRhdGVQbGF5ZXIoKQogICAgIGNvbnRl
bnRDaGFuZ2VkKFZpZGVvQ2hhbmdlZCk7CiAgICAgCiAgICAgSW50UmVjdCB2aWRlb0JvdW5kcyA9
IHZpZGVvQm94KCk7IAotICAgIG1lZGlhUGxheWVyLT5zZXRGcmFtZVZpZXcoJnZpZXcoKS5mcmFt
ZVZpZXcoKSk7CiAgICAgbWVkaWFQbGF5ZXItPnNldFNpemUoSW50U2l6ZSh2aWRlb0JvdW5kcy53
aWR0aCgpLCB2aWRlb0JvdW5kcy5oZWlnaHQoKSkpOwogICAgIG1lZGlhUGxheWVyLT5zZXRWaXNp
YmxlKHRydWUpOwogICAgIG1lZGlhUGxheWVyLT5zZXRTaG91bGRNYWludGFpbkFzcGVjdFJhdGlv
KHN0eWxlKCkub2JqZWN0Rml0KCkgIT0gT2JqZWN0Rml0RmlsbCk7Cg==
</data>
<flag name="review"
          id="263719"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239523</attachid>
            <date>2014-10-09 00:42:55 -0700</date>
            <delta_ts>2014-10-09 00:42:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wcore-media-player-frame-view.diff</filename>
            <type>text/plain</type>
            <size>9851</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MjFlOWVjLi42MGE4ODEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTQtMTAtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIExheWVyaW5nIHZpb2xhdGlvbjogTWVkaWFQbGF5ZXIgc2hvdWxkIG5vdCBy
ZWZlcmVuY2UvdXNlIEZyYW1lVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE1NjIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
KworICAgICAgICBSZW1vdmUgRnJhbWVWaWV3IGRlcGVuZGVuY3kgZnJvbSBNZWRpYVBsYXllci4K
KworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllcklzSW5NZWRpYURvY3VtZW50KTogQ2hlY2sg
aWYKKyAgICAgICAgdGhlIGVsZW1lbnQgZG9jdW1lbnQgaXMgYSBtZWRpYSBkb2N1bWVudC4KKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6TWVk
aWFQbGF5ZXIpOiBSZW1vdmUgbV9mcmFtZVZpZXcgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6aW5NZWRpYURvY3VtZW50KTogVXNlIHRoZSBNZWRpYVBsYXll
ckNsaWVudAorICAgICAgICB0byBjaGVjayBpZiB0aGUgbWVkaWEgcGxheWVyIGlzIGluIGEgbWVk
aWEgZG9jdW1lbnQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRpYVBsYXllcklzSW5NZWRp
YURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzZXRGcmFtZVZpZXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmZyYW1lVmlldyk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OnByZWZlcnJlZFJlbmRlcmluZ01vZGUpOgorICAgICAgICBE
byBub3QgY2hlY2sgaWYgdGhlIG1lZGlhIHBsYXllciBoYXMgYSBmcmFtZSB2aWV3LCBjaGVja2lu
ZyB3aGV0aGVyIGl0J3MgdmlzaWJsZQorICAgICAgICBpcyBlbm91Z2guCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGLmNwcDoKKyAgICAgICAgUmVtb3ZlIHVubmVlZGVkIGhlYWRlciBpbmNsdWRlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW06IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjp+
UmVuZGVyVmlkZW8pOiBEbyBub3QgY2FsbCBNZWRpYVBsYXllcjo6c2V0RnJhbWVWaWV3KCkuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dXBkYXRlUGxheWVyKTogRGl0dG8uCisKIDIw
MTQtMTAtMDggIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAg
W0NTU1JlZ2lvbnNdUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgaW4gYWRqdXN0UmVnaW9uQm91bmRz
RnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKaW5kZXggNzA0NWQ0Yi4uODA4ZGY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCkBAIC01NzA4LDcgKzU3MDgsMTIgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjptZWRpYVBsYXllckdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxD
b29raWU+JgogICAgIHJldHVybiBnZXRSYXdDb29raWVzKCZkb2N1bWVudCgpLCB1cmwsIGNvb2tp
ZXMpOwogfQogI2VuZGlmCi0gICAgCisKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5
ZXJJc0luTWVkaWFEb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuaXNN
ZWRpYURvY3VtZW50KCk7Cit9CisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlQmVoYXZp
b3JzUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKCkKIHsKICAgICBtX21lZGlhU2Vz
c2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihIVE1MTWVkaWFTZXNzaW9uOjpSZXF1aXJl
VXNlckdlc3R1cmVGb3JMb2FkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgK
aW5kZXggZmNmMWZjYS4uZGFmYmU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKQEAgLTU4Myw2ICs1ODMsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBtZWRp
YVBsYXllckdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiwgVmVjdG9yPENvb2tpZT4mKSBjb25zdCBv
dmVycmlkZTsKICNlbmRpZgogCisgICAgdmlydHVhbCBib29sIG1lZGlhUGxheWVySXNJbk1lZGlh
RG9jdW1lbnQoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKwogICAgIHZvaWQgbG9hZFRpbWVyRmly
ZWQoVGltZXI8SFRNTE1lZGlhRWxlbWVudD4mKTsKICAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1l
ckZpcmVkKFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+Jik7CiAgICAgdm9pZCBwbGF5YmFja1Byb2dy
ZXNzVGltZXJGaXJlZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDZhNWIwNDUuLjZh
OTM3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtMzEyLDcgKzMxMCw2IEBAIE1lZGlhUGxheWVy
OjpNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQogICAgICwgbV9yZWxvYWRU
aW1lcih0aGlzLCAmTWVkaWFQbGF5ZXI6OnJlbG9hZFRpbWVyRmlyZWQpCiAgICAgLCBtX3ByaXZh
dGUoY3JlYXRlTnVsbE1lZGlhUGxheWVyKHRoaXMpKQogICAgICwgbV9jdXJyZW50TWVkaWFFbmdp
bmUoMCkKLSAgICAsIG1fZnJhbWVWaWV3KDApCiAgICAgLCBtX3ByZWxvYWQoQXV0bykKICAgICAs
IG1fdmlzaWJsZShmYWxzZSkKICAgICAsIG1fcmF0ZSgxLjBmKQpAQCAtNTg5LDEyICs1ODYsOSBA
QCBib29sIE1lZGlhUGxheWVyOjpoYXNBdWRpbygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+aGFzQXVkaW8oKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjo6aW5NZWRpYURvY3VtZW50KCkK
K2Jvb2wgTWVkaWFQbGF5ZXI6OmluTWVkaWFEb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2ZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1fZnJhbWVWaWV3LT5mcmFtZSgpLmRvY3VtZW50KCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50
ICYmIGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gbV92aXNpYmxlICYm
IG1fbWVkaWFQbGF5ZXJDbGllbnQgJiYgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJJ
c0luTWVkaWFEb2N1bWVudCgpOwogfQogCiBQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyOjpwbGF0
Zm9ybU1lZGlhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCmluZGV4IDQxMTdlYjUuLmRjYzIzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMTI5LDcgKzEyOSw2IEBAIGV4
dGVybiBjb25zdCBQbGF0Zm9ybU1lZGlhIE5vUGxhdGZvcm1NZWRpYTsKIAogY2xhc3MgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDb250ZW50VHlwZTsKLWNsYXNzIEZyYW1lVmlldzsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSW50
UmVjdDsKQEAgLTI2NCw2ICsyNjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1lZGlh
UGxheWVySGFuZGxlUGxheWJhY2tDb21tYW5kKE1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29udHJvbENv
bW1hbmRUeXBlKSB7IH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhUGxheWVyU291cmNlQXBw
bGljYXRpb25JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorCisg
ICAgdmlydHVhbCBib29sIG1lZGlhUGxheWVySXNJbk1lZGlhRG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogfTsKIAogY2xhc3MgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQg
ewpAQCAtMzE2LDkgKzMxNyw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7
CiAgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRGcmFtZVZpZXcoRnJh
bWVWaWV3KiBmcmFtZVZpZXcpIHsgbV9mcmFtZVZpZXcgPSBmcmFtZVZpZXc7IH0KLSAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldygpIHsgcmV0dXJuIG1fZnJhbWVWaWV3OyB9Ci0gICAgYm9vbCBpbk1l
ZGlhRG9jdW1lbnQoKTsKKyAgICBib29sIGluTWVkaWFEb2N1bWVudCgpIGNvbnN0OwogCiAgICAg
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpOwpAQCAtNTk0LDcgKzU5Myw2IEBAIHByaXZhdGU6CiAgICAg
U3RyaW5nIG1fY29udGVudE1JTUVUeXBlOwogICAgIFN0cmluZyBtX2NvbnRlbnRUeXBlQ29kZWNz
OwogICAgIFN0cmluZyBtX2tleVN5c3RlbTsKLSAgICBGcmFtZVZpZXcqIG1fZnJhbWVWaWV3Owog
ICAgIEludFNpemUgbV9zaXplOwogICAgIFByZWxvYWQgbV9wcmVsb2FkOwogICAgIGJvb2wgbV92
aXNpYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmNwcAppbmRleCA4YTU5NWQyLi5hZWQ4ODhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcApAQCAtMzEsOCAr
MzEsNiBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCkBA
IC0xMDQsNyArMTAyLDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVJl
bmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW8KIAogTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpwcmVmZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcGxheWVyLT52aXNpYmxlKCkgfHwgIW1fcGxheWVyLT5mcmFtZVZpZXcoKSB8fCBhc3NldFN0
YXR1cygpID09IE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c1Vua25vd24pCisgICAgaWYgKCFtX3Bs
YXllci0+dmlzaWJsZSgpIHx8IGFzc2V0U3RhdHVzKCkgPT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3Rh
dHVzVW5rbm93bikKICAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTm9uZTsKIAogICAgIGlm
IChzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgJiYgbV9wbGF5ZXItPm1lZGlhUGxheWVy
Q2xpZW50KCktPm1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZChtX3BsYXllcikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGLmNwcAppbmRleCBjZjYwZTdkLi5iMTgyYTBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5j
cHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Yu
aCIKICNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpZiBI
QVZFKEFWRk9VTkRBVElPTl9MRUdJQkxFX09VVFBVVF9TVVBQT1JUKQogI2luY2x1ZGUgIkluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkNGLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCBiMGRk
NDM5Li4xYjhhNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTM4LDcgKzM4LDYgQEAK
ICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgogI2ltcG9ydCAiRmxvYXRDb252
ZXJzaW9uLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkZyYW1lVmll
dy5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHRDRy5oIgogI2ltcG9ydCAiSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlQVZGLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KaW5kZXggNzM3NDcyZC4uYzFmZmE2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQpAQCAtMzEsOCArMzEsNiBAQAogCiAjaW1wb3J0ICJC
bG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW1wb3J0ICJG
cmFtZS5oIgotI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCmluZGV4IDZlYWZmMzMuLjc0ZmNjOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcApAQCAtNTYsMTAgKzU2LDggQEAgUmVu
ZGVyVmlkZW86OlJlbmRlclZpZGVvKEhUTUxWaWRlb0VsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8
UmVuZGVyU3R5bGU+IHN0eWxlKQogCiBSZW5kZXJWaWRlbzo6flJlbmRlclZpZGVvKCkKIHsKLSAg
ICBpZiAoTWVkaWFQbGF5ZXIqIHBsYXllciA9IHZpZGVvRWxlbWVudCgpLnBsYXllcigpKSB7Cisg
ICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSB2aWRlb0VsZW1lbnQoKS5wbGF5ZXIoKSkKICAg
ICAgICAgcGxheWVyLT5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgcGxheWVyLT5zZXRGcmFt
ZVZpZXcoMCk7Ci0gICAgfQogfQogCiBJbnRTaXplIFJlbmRlclZpZGVvOjpkZWZhdWx0U2l6ZSgp
CkBAIC0yMzMsNyArMjMxLDYgQEAgdm9pZCBSZW5kZXJWaWRlbzo6dXBkYXRlUGxheWVyKCkKICAg
ICBjb250ZW50Q2hhbmdlZChWaWRlb0NoYW5nZWQpOwogICAgIAogICAgIEludFJlY3QgdmlkZW9C
b3VuZHMgPSB2aWRlb0JveCgpOyAKLSAgICBtZWRpYVBsYXllci0+c2V0RnJhbWVWaWV3KCZ2aWV3
KCkuZnJhbWVWaWV3KCkpOwogICAgIG1lZGlhUGxheWVyLT5zZXRTaXplKEludFNpemUodmlkZW9C
b3VuZHMud2lkdGgoKSwgdmlkZW9Cb3VuZHMuaGVpZ2h0KCkpKTsKICAgICBtZWRpYVBsYXllci0+
c2V0VmlzaWJsZSh0cnVlKTsKICAgICBtZWRpYVBsYXllci0+c2V0U2hvdWxkTWFpbnRhaW5Bc3Bl
Y3RSYXRpbyhzdHlsZSgpLm9iamVjdEZpdCgpICE9IE9iamVjdEZpdEZpbGwpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>