<?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>124986</bug_id>
          
          <creation_ts>2013-11-28 10:58:27 -0800</creation_ts>
          <short_desc>Nix Upstream: Adding Nix MediaPlayer related files</short_desc>
          <delta_ts>2014-01-16 13:41:58 -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>INVALID</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>124950</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thiago de Barros Lacerda">thiago.lacerda</reporter>
          <assigned_to name="Hugo Parente Lima">hugo.lima</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hugo.lima</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>954793</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-11-28 10:58:27 -0800</bug_when>
    <thetext>Nix Upstream: Adding Nix MediaPlayer related files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954794</commentid>
    <comment_count>1</comment_count>
      <attachid>218018</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-11-28 11:00:31 -0800</bug_when>
    <thetext>Created attachment 218018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955377</commentid>
    <comment_count>2</comment_count>
      <attachid>218018</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-12-02 07:49:49 -0800</bug_when>
    <thetext>Comment on attachment 218018
Patch

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

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:50
&gt; +void MediaPlayerPrivateNix::getSupportedTypes(HashSet&lt;String&gt;&amp;)
&gt; +{
&gt; +}

You don&apos;t support any MIME types?

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:54
&gt; +    // MediaPlayer calls load even if the engine says it doesn&apos;t support the format :-/

&quot;:-/&quot; ??

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:130
&gt; +    // TODO: Add cancelLoad to Nix::MediaPlayer

&quot;TODO&quot; -&gt; &quot;FIXME&quot; + a bug number.

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:135
&gt; +void MediaPlayerPrivateNix::prepareToPlay()
&gt; +{
&gt; +}

Is there nothing to do here, or does this need to be implemented later? If the later, a bug number would be good.

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:140
&gt; +    m_nixPlayer-&gt;play();
&gt; +    m_paused = false;

Just an observation, but it might be good to have a callback from the platform player when the rate changes and set &quot;m_paused&quot; there. Without this, how will you handle playback stopping when currentTime == duration?

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:231
&gt; +    // Add this to Nix::MediaPlayer

Bug number please.

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:237
&gt; +    return true;

Really, loading always progresses?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955591</commentid>
    <comment_count>3</comment_count>
      <attachid>218018</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-02 14:39:35 -0800</bug_when>
    <thetext>Comment on attachment 218018
Patch

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

Let&apos;s see a second round after Eric&apos;s comments.

&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:38
&gt; +    auto nixPlayer = adoptPtr(Nix::Platform::current()-&gt;createMediaPlayer(nullptr));

Please don&apos;t use auto here. The type is not obvious at all when reading the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955882</commentid>
    <comment_count>4</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-12-03 06:29:13 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 218018 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218018&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:50
&gt; &gt; +void MediaPlayerPrivateNix::getSupportedTypes(HashSet&lt;String&gt;&amp;)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; You don&apos;t support any MIME types?

No matter what this function returns WebCore always ask MediaPlayer to play the stream (Nix has only one MediaPlayer). So our approach was to let the backend try to load the stream and rise a &quot;FormatError&quot; if the stream isn&apos;t supported by the backend.
 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:54
&gt; &gt; +    // MediaPlayer calls load even if the engine says it doesn&apos;t support the format :-/
&gt; 
&gt; &quot;:-/&quot; ??

To be removed :-).
 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:130
&gt; &gt; +    // TODO: Add cancelLoad to Nix::MediaPlayer
&gt; 
&gt; &quot;TODO&quot; -&gt; &quot;FIXME&quot; + a bug number.

Right.
 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:135
&gt; &gt; +void MediaPlayerPrivateNix::prepareToPlay()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; Is there nothing to do here, or does this need to be implemented later? If the later, a bug number would be good.

Nothing to do here until some backend used by Nix prove to need this.
 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:140
&gt; &gt; +    m_nixPlayer-&gt;play();
&gt; &gt; +    m_paused = false;
&gt; 
&gt; Just an observation, but it might be good to have a callback from the platform player when the rate changes and set &quot;m_paused&quot; there. Without this, how will you handle playback stopping when currentTime == duration?

You are right, this need a function on Nix::MediaPlayerClient or the UI will never get updated after the playback stop due to end of stream.
 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:231
&gt; &gt; +    // Add this to Nix::MediaPlayer
&gt; 
&gt; Bug number please.

For sure.
 
&gt; &gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:237
&gt; &gt; +    return true;
&gt; 
&gt; Really, loading always progresses?

This also need to be forwarded to the backend, this one is easy to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955909</commentid>
    <comment_count>5</comment_count>
      <attachid>218018</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-12-03 08:55:50 -0800</bug_when>
    <thetext>Comment on attachment 218018
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:50
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; You don&apos;t support any MIME types?
&gt; 
&gt; No matter what this function returns WebCore always ask MediaPlayer to play the stream (Nix has only one MediaPlayer). So our approach was to let the backend try to load the stream and rise a &quot;FormatError&quot; if the stream isn&apos;t supported by the backend.

WebCore asks the MediaPlayer because MIME type is frequently inaccurate. In any case, this method is not used by MediaPlayer directly, it is used by MIMETypeRegistry to populate the list of media MIME types.

&gt;&gt;&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:54
&gt;&gt;&gt; +    // MediaPlayer calls load even if the engine says it doesn&apos;t support the format :-/
&gt;&gt; 
&gt;&gt; &quot;:-/&quot; ??
&gt; 
&gt; To be removed :-).

Always returning false is not a great idea because this is exposed to the web as video.canPlayType(type).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955931</commentid>
    <comment_count>6</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-12-03 09:25:47 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 218018 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218018&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:50
&gt; &gt;&gt;&gt; +}
&gt; &gt;&gt; 
&gt; &gt;&gt; You don&apos;t support any MIME types?
&gt; &gt; 
&gt; &gt; No matter what this function returns WebCore always ask MediaPlayer to play the stream (Nix has only one MediaPlayer). So our approach was to let the backend try to load the stream and rise a &quot;FormatError&quot; if the stream isn&apos;t supported by the backend.
&gt; 
&gt; WebCore asks the MediaPlayer because MIME type is frequently inaccurate. In any case, this method is not used by MediaPlayer directly, it is used by MIMETypeRegistry to populate the list of media MIME types.

So would be useful to ask the backend.
 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:54
&gt; &gt;&gt;&gt; +    // MediaPlayer calls load even if the engine says it doesn&apos;t support the format :-/
&gt; &gt;&gt; 
&gt; &gt;&gt; &quot;:-/&quot; ??
&gt; &gt; 
&gt; &gt; To be removed :-).
&gt; 
&gt; Always returning false is not a great idea because this is exposed to the web as video.canPlayType(type).

Thanks for the explanation, video tag still not supported but after what you said this also needs to be changed, or just checked against the list returned by getSupportedTypes.

Those things were not implemented mostly as a effort to have only audio tag working and with a minimalist platform API, so here and there things start to show why they exists, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955945</commentid>
    <comment_count>7</comment_count>
      <attachid>218018</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-12-03 09:54:58 -0800</bug_when>
    <thetext>Comment on attachment 218018
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/nix/MediaPlayerPrivateNix.cpp:54
&gt;&gt;&gt;&gt;&gt; +    // MediaPlayer calls load even if the engine says it doesn&apos;t support the format :-/
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; &quot;:-/&quot; ??
&gt;&gt;&gt; 
&gt;&gt;&gt; To be removed :-).
&gt;&gt; 
&gt;&gt; Always returning false is not a great idea because this is exposed to the web as video.canPlayType(type).
&gt; 
&gt; Thanks for the explanation, video tag still not supported but after what you said this also needs to be changed, or just checked against the list returned by getSupportedTypes.
&gt; 
&gt; Those things were not implemented mostly as a effort to have only audio tag working and with a minimalist platform API, so here and there things start to show why they exists, thanks.

FWIW, this is called by HTMLMediaElement::canPlayType so audio.canPlayType(type) will also end up here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218018</attachid>
            <date>2013-11-28 11:00:31 -0800</date>
            <delta_ts>2013-12-03 09:54:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124986-20131128160030.patch</filename>
            <type>text/plain</type>
            <size>12918</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNlZWMwMGZjNDY1NzQ5
YmIzYjZjMWZjZTY0NGMyYmM1ZDI0ODgyMi4uYmIyNmIyNzQ1ZjE5NzkwNGQ5NTQ5MDE1YWY1MDVm
ZTNmYjRiOTQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTExLTI4ICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIE5peCBVcHN0cmVhbTogQWRkaW5nIE5peCBNZWRpYVBsYXllciByZWxhdGVkIGZpbGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ5ODYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgbmVlZGVkLgorCisgICAgICAgICogUGxhdGZvcm1OaXguY21ha2U6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL25peC9NZWRpYVBsYXllclByaXZhdGVOaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9uaXgvTWVkaWFQbGF5ZXJQcml2YXRlTml4Lmg6IEFkZGVkLgorCiAy
MDEzLTExLTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgZmVhdHVyZTogQ1NTIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1OaXguY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU5peC5jbWFrZQppbmRl
eCAxOTRiNDE1MTE4NTJlOTgyNzRhYWZmNmZjMGExZjYyMzk2NzhkNTg5Li5lMDNiZGU0MDYxYTNm
ZGUyYTI5N2JlYjE1MTk4Mjk4NmY5NjMxNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU5peC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU5peC5jbWFrZQpA
QCAtNzcsNiArNzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL25peC9JY29uTml4LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL25peC9J
bWFnZU5peC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaXgvTWVkaWFQbGF5ZXJQcml2YXRl
Tml4LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggMjI2NDMzMzYxOGM4MGY4MmY0NDEzNzY0ZDY3YTkwZmY1
NGYzMDRhMS4uMjZlNjg0OWE0NDA0NWNmZDE1ZjMzMWE3NmEzZTNkZDA3NGVhMzcwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
NzAsNiArNzAsOSBAQAogI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgiCiAjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVD
bGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlCisjZWxpZiBQTEFURk9STShOSVgpCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlTml4LmgiCisjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVD
bGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlTml4CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbml4L01l
ZGlhUGxheWVyUHJpdmF0ZU5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaXgvTWVkaWFQbGF5ZXJQcml2YXRlTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDczMTQ5NDkzYWFj
OTU4YzE1M2M0MmRiNWVkNzIwZjBiODliZjFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbml4L01lZGlhUGxheWVyUHJpdmF0ZU5peC5jcHAKQEAg
LTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU5p
eC5oIgorCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTml4OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJh
cikKK3sKKyAgICBhdXRvIG5peFBsYXllciA9IGFkb3B0UHRyKE5peDo6UGxhdGZvcm06OmN1cnJl
bnQoKS0+Y3JlYXRlTWVkaWFQbGF5ZXIobnVsbHB0cikpOworICAgIGlmIChuaXhQbGF5ZXIpCisg
ICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUs
IDAsIDAsIDApOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4g
TWVkaWFQbGF5ZXJQcml2YXRlTml4OjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZU5peChwbGF5ZXIpKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVOaXg6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nPiYpCit7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQ
cml2YXRlTml4OjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVy
cyYpCit7CisgICAgLy8gTWVkaWFQbGF5ZXIgY2FsbHMgbG9hZCBldmVuIGlmIHRoZSBlbmdpbmUg
c2F5cyBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZvcm1hdCA6LS8KKyAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBN
ZWRpYVBsYXllclByaXZhdGVOaXg6Om1vdmllTG9hZFR5cGUoKSBjb25zdAoreworICAgIGlmICht
X3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICAgICByZXR1cm4g
TWVkaWFQbGF5ZXI6OlVua25vd247CisKKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgICAg
IHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKKworICAgIHJldHVybiBNZWRpYVBsYXll
cjo6RG93bmxvYWQ7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTml4Ojppc0xpdmVTdHJl
YW0oKSBjb25zdAoreworICAgIEFTU0VSVChtX25peFBsYXllcik7CisgICAgcmV0dXJuIG1fbml4
UGxheWVyLT5pc0xpdmVTdHJlYW0oKTsKK30KKworY2xhc3MgTml4TWVkaWFQbGF5ZXJDbGllbnQg
OiBwdWJsaWMgTml4OjpNZWRpYVBsYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgTml4TWVkaWFQ
bGF5ZXJDbGllbnQoTWVkaWFQbGF5ZXJQcml2YXRlTml4KiBwbGF5ZXIpCisgICAgICAgIDogbV9w
bGF5ZXIocGxheWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25D
aGFuZ2VkKCkgY29uc3QgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlv
bkNoYW5nZWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2Vk
KCkgY29uc3QgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fcGxheWVyLT5jdXJyZW50VGltZUNo
YW5nZWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoUmVh
ZHlTdGF0ZSBzdGF0ZSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fcGxheWVyLT5zZXRSZWFk
eVN0YXRlKChNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSlzdGF0ZSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWQoTmV0d29ya1N0YXRlIHN0YXRlKSBPVkVSUklE
RQorICAgIHsKKyAgICAgICAgbV9wbGF5ZXItPnNldE5ldHdvcmtTdGF0ZSgoTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSlzdGF0ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclBy
aXZhdGVOaXgqIG1fcGxheWVyOworfTsKKworTWVkaWFQbGF5ZXJQcml2YXRlTml4OjpNZWRpYVBs
YXllclByaXZhdGVOaXgoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IG1fcGxheWVyKHBsYXll
cikKKyAgICAsIG1fbml4UGxheWVyKGFkb3B0UHRyKE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
Y3JlYXRlTWVkaWFQbGF5ZXIobmV3IE5peE1lZGlhUGxheWVyQ2xpZW50KHRoaXMpKSkpCisgICAg
LCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9uZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6OklkbGUpCisgICAgLCBtX3BhdXNlZCh0cnVlKQoreworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6bG9hZChjb25zdCBXVEY6OlN0cmluZyYgdXJsKQor
eworICAgIFVSTCB1cmxPYmooVVJMKCksIHVybCk7CisgICAgU3RyaW5nIGNsZWFuVXJsKHVybCk7
CisKKyAgICAvLyBDbGVhbiBvdXQgZXZlcnl0aGluZyBhZnRlciBmaWxlOi8vIHVybCBwYXRoLgor
ICAgIGlmICh1cmxPYmouaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgY2xlYW5VcmwgPSBjbGVhblVy
bC5zdWJzdHJpbmcoMCwgdXJsT2JqLnBhdGhFbmQoKSk7CisKKyAgICBzZXROZXR3b3JrU3RhdGUo
TWVkaWFQbGF5ZXI6OkxvYWRpbmcpOworICAgIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nKTsKKyAgICBtX25peFBsYXllci0+bG9hZChjbGVhblVybC51dGY4KCkuZGF0YSgp
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVOaXg6OmNhbmNlbExvYWQoKQoreworICAg
IC8vIFRPRE86IEFkZCBjYW5jZWxMb2FkIHRvIE5peDo6TWVkaWFQbGF5ZXIKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVOaXg6OnByZXBhcmVUb1BsYXkoKQoreworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU5peDo6cGxheSgpCit7CisgICAgbV9uaXhQbGF5ZXItPnBsYXkoKTsKKyAg
ICBtX3BhdXNlZCA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6cGF1
c2UoKQoreworICAgIG1fbml4UGxheWVyLT5wYXVzZSgpOworICAgIG1fcGF1c2VkID0gdHJ1ZTsK
K30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlTml4OjpkdXJhdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbml4UGxheWVyLT5kdXJhdGlvbigpOworfQorCitmbG9hdCBNZWRpYVBsYXll
clByaXZhdGVOaXg6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uaXhQbGF5
ZXItPmN1cnJlbnRUaW1lKCk7Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlTml4Ojpu
YXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVOaXg6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6aGFzQXVkaW8oKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6c2V0Vmlz
aWJsZShib29sKQoreworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6c2Vla2luZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbml4UGxheWVyLT5zZWVraW5nKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTml4OjpzZWVrKGZsb2F0IHRpbWUpCit7CisgICAgcmV0dXJuIG1f
bml4UGxheWVyLT5zZWVrKHRpbWUpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVOaXg6
Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGR1cmF0aW9uKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTml4OjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7CisgICAg
bV9uaXhQbGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVOaXg6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV9uaXhQbGF5ZXIt
PnNldFZvbHVtZSh2b2x1bWUpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6cGF1
c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXVzZWQ7Cit9CisKK01lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTml4OjpuZXR3b3JrU3RhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVOaXg6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQor
eworICAgIG1fbmV0d29ya1N0YXRlID0gc3RhdGU7CisgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2
YXRlTml4OjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSBzdGF0ZSkKK3sKKyAgICBtX3JlYWR5U3RhdGUgPSBzdGF0ZTsKKyAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKK30KKworUGFzc1JlZlB0cjxXZWJDb3JlOjpU
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVOaXg6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAg
ICAvLyBBZGQgdGhpcyB0byBOaXg6Ok1lZGlhUGxheWVyCisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlTml4OjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU5peDo6c2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVOaXg6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU8pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25peC9NZWRpYVBsYXllclByaXZhdGVOaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25peC9NZWRpYVBsYXllclByaXZhdGVOaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODIwNThkMzYz
NzE1YTFiMDlmMTFkMDlkNDk1MTZiZWQwNTE4YTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbml4L01lZGlhUGxheWVyUHJpdmF0ZU5peC5oCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVBs
YXllclByaXZhdGVOaXhfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVOaXhfaAorCisjaWYg
RU5BQkxFKFZJREVPKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVk
ZSA8cHVibGljL01lZGlhUGxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlTml4IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVu
Z2luZVJlZ2lzdHJhcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBXVEY6OlN0cmlu
ZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGxheSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
ZmxvYXQgZHVyYXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdl
ZCgpIGNvbnN0IHsgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOyB9CisgICAgdmlydHVhbCBm
bG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZvaWQgY3VycmVudFRpbWVD
aGFuZ2VkKCkgY29uc3QgeyBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsgfQorCisgICAgdmlydHVh
bCBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGhhc1ZpZGVvKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhc0F1ZGlvKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2Vla2luZygpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZWVrKGZsb2F0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IG1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldFJhdGUo
ZmxvYXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0
ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZvaWQgc2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUpOworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSk7CisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlw
ZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2
YXRlTml4KE1lZGlhUGxheWVyKik7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOworICAgIHN0YXRpYyB2b2lk
IGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRpYyBNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQ
YXJhbWV0ZXJzJik7CisgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdDsKKworICAgIE1lZGlh
UGxheWVyKiBtX3BsYXllcjsKKyAgICBPd25QdHI8Tml4OjpNZWRpYVBsYXllcj4gbV9uaXhQbGF5
ZXI7CisKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKworICAgIGJvb2wgbV9wYXVz
ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCisKKyNlbmRpZiAvLyBNZWRpYVBsYXllck5peF9oCisK
</data>
<flag name="review"
          id="241302"
          type_id="1"
          status="-"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="241303"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>